@fundamental-ngx/platform 0.63.1-rc.13 → 0.63.1-rc.14

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":"fundamental-ngx-platform-table.mjs","sources":["../../../../libs/platform/table/components/no-data-wrapper/no-data-wrapper.component.ts","../../../../libs/platform/table/components/reset-button/reset-button.component.ts","../../../../libs/platform/table/components/table-cell-header-popover/table-cell-header-popover.component.ts","../../../../libs/platform/table/components/table-cell-header-popover/table-cell-header-popover.component.html","../../../../libs/platform/table/components/table-column-resizer/table-column-resizer.component.ts","../../../../libs/platform/table/components/table-column/table-column.component.ts","../../../../libs/platform/table/components/table-header-cell-content/table-header-cell-content.component.ts","../../../../libs/platform/table/components/table-header-cell-content/table-header-cell-content.component.html","../../../../libs/platform/table/components/table-p13-dialog/columns/columns.component.ts","../../../../libs/platform/table/components/table-p13-dialog/columns/columns.component.html","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.model.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filter-rule.component.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filter-rule.component.html","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.component.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.component.html","../../../../libs/platform/table/components/table-p13-dialog/grouping/grouping.component.ts","../../../../libs/platform/table/components/table-p13-dialog/grouping/grouping.component.html","../../../../libs/platform/table/components/table-p13-dialog/table-p13-columns.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-filter.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-group.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-sort.component.ts","../../../../libs/platform/table/components/table-p13-dialog/sorting/sorting.component.ts","../../../../libs/platform/table/components/table-p13-dialog/sorting/sorting.component.html","../../../../libs/platform/table/components/table-p13-dialog/table-p13-dialog.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar-actions.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar-left-actions.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/constants.ts","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings-filter.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-custom.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-custom.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-single-select.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-single-select.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-active-step.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-step.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-step.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-list-step.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-list-step.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings.model.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/grouping/grouping.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/grouping/grouping.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/sorting/sorting.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/sorting/sorting.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/columns/columns.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/columns/columns.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/settings-dialog/settings-dialog.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/settings-dialog/settings-dialog.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings-dialog.component.ts","../../../../libs/platform/table/components/growing-button/table-growing-button.component.ts","../../../../libs/platform/table/components/growing-button/table-growing-button.component.html","../../../../libs/platform/table/components/table-footer-row/table-footer-row.component.ts","../../../../libs/platform/table/components/table-footer-row/table-footer-row.component.html","../../../../libs/platform/table/components/table-group-row/table-group-row.component.ts","../../../../libs/platform/table/components/table-group-row/table-group-row.component.html","../../../../libs/platform/table/components/table-header-row/table-header-row.component.ts","../../../../libs/platform/table/components/table-header-row/table-header-row.component.html","../../../../libs/platform/table/components/table-popping-row/table-popping-row.component.ts","../../../../libs/platform/table/components/table-popping-row/table-popping-row.component.html","../../../../libs/platform/table/components/table-editable-cell/table-editable-cell.component.ts","../../../../libs/platform/table/components/table-editable-cell/table-editable-cell.component.html","../../../../libs/platform/table/components/table-row/table-row.component.ts","../../../../libs/platform/table/components/table-row/table-row.component.html","../../../../libs/platform/table/table.component.ts","../../../../libs/platform/table/table.component.html","../../../../libs/platform/table/table.module.ts","../../../../libs/platform/table/fundamental-ngx-platform-table.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fdp-table-no-data-wrapper',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: `\n fdp-table-no-data-wrapper {\n display: block;\n width: 100%;\n }\n `,\n standalone: true\n})\nexport class NoDataWrapperComponent {}\n","import { ChangeDetectionStrategy, Component, Inject, InjectionToken, Signal, ViewEncapsulation } from '@angular/core';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\n\n/**\n * Reset button.\n *\n * Used to reset resettable state by click.\n *\n */\n\nexport interface Resettable {\n reset: () => void;\n isResetAvailable$: Signal<boolean>;\n}\n\nexport const RESETTABLE_TOKEN = new InjectionToken<Resettable>('Resettable');\n\n@Component({\n selector: `fdp-table-reset-button`,\n template: `<button\n fd-button\n fdType=\"transparent\"\n [label]=\"('platformTable.resetChangesButtonLabel' | fdTranslate)()\"\n (click)=\"resettable.reset()\"\n [disabled]=\"!resettable.isResetAvailable$()\"\n ></button>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class ResetButtonComponent {\n /** @hidden */\n constructor(@Inject(RESETTABLE_TOKEN) public resettable: Resettable) {}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Input,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { FormControlComponent, FormItemComponent, FormLabelComponent } from '@fundamental-ngx/core/form';\nimport { ListIconDirective, ListLinkDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverComponent, TriggerConfig } from '@fundamental-ngx/core/popover';\nimport { Placement, PopoverPlacement } from '@fundamental-ngx/core/shared';\nimport { TablePopoverDirective } from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FreeContentListItemComponent, ListComponent } from '@fundamental-ngx/platform/list';\nimport {\n CollectionStringFilter,\n ColumnAlign,\n ColumnAlignValue,\n FILTER_STRING_STRATEGY,\n FilterableColumnDataType,\n SortDirection,\n Table,\n TableColumn,\n TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'fdp-table-cell-header-popover',\n templateUrl: './table-cell-header-popover.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n PopoverComponent,\n TablePopoverDirective,\n ListComponent,\n FreeContentListItemComponent,\n NgTemplateOutlet,\n TemplateDirective,\n ListLinkDirective,\n ListIconDirective,\n ListTitleDirective,\n FormItemComponent,\n FormLabelComponent,\n FormControlComponent,\n FdTranslatePipe\n ]\n})\nexport class TableCellHeaderPopoverComponent implements AfterViewInit {\n /** Column definition. */\n @Input()\n column: TableColumn;\n\n /** Custom popover template. */\n @Input()\n popoverTemplate: Nullable<TemplateRef<any>>;\n\n /** Whether the popover is disabled. */\n @Input()\n disabled = false;\n\n /** Whether the column is frozen. */\n @Input()\n columnFrozen = false;\n\n /** Whether the filtering from header is disabled. */\n @Input()\n filteringFromHeaderDisabled: Nullable<boolean> = false;\n\n /** Column index */\n @Input()\n columnIndex: number;\n\n /** @hidden */\n @ViewChild(PopoverComponent, { static: false })\n popover: Nullable<PopoverComponent>;\n\n /** @hidden */\n @ViewChildren(TemplateDirective)\n _popoverItems: QueryList<TemplateDirective>;\n\n /** @hidden */\n @ViewChild(ListComponent)\n _listComponent: ListComponent<any>;\n\n /** @hidden */\n _popoverItems$ = signal<TemplateRef<any>[]>([]);\n\n /** @hidden */\n _headerPopoverTriggers: TriggerConfig[] = [\n {\n trigger: 'click',\n openAction: true,\n closeAction: true,\n stopPropagation: true\n },\n {\n trigger: 'keydown.enter',\n openAction: true,\n closeAction: true,\n stopPropagation: true\n },\n {\n trigger: 'keydown.space',\n openAction: true,\n closeAction: true,\n stopPropagation: true\n }\n ];\n\n /** @hidden */\n protected readonly SORT_DIRECTION = SortDirection;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _tableService = inject(TableService);\n\n /** @hidden */\n private readonly _table = inject(Table);\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._popoverItems.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._popoverItems$.set(this._popoverItems.map((t) => t.templateRef));\n });\n }\n\n /** @hidden */\n mapColumnAlignToPlacement(columnAlignValue: Nullable<ColumnAlignValue>): Placement {\n switch (columnAlignValue) {\n case ColumnAlign.START:\n return PopoverPlacement.BOTTOM_START;\n case ColumnAlign.CENTER:\n return PopoverPlacement.BOTTOM;\n case ColumnAlign.END:\n return PopoverPlacement.BOTTOM_END;\n default:\n return PopoverPlacement.AUTO;\n }\n }\n\n /** @hidden */\n _setColumnHeaderSortBy(field: TableColumn['key'], direction: SortDirection): void {\n this._tableService.setSort([{ field, direction }]);\n this._closePopover();\n }\n\n /** @hidden */\n _setColumnHeaderGroupBy(field: TableColumn['key']): void {\n const state = this._tableService.getTableState();\n if (state.groupBy?.length === 1 && state.groupBy[0].field === field) {\n // reset grouping, if already grouped by this field\n this._tableService.setGroups([]);\n } else {\n this._tableService.setGroups([{ field, direction: SortDirection.NONE, showAsColumn: true }]);\n }\n }\n\n /** @hidden */\n _setColumnHeaderFilterBy(field: TableColumn['key'], value: any): void {\n if (!value) {\n this._tableService.removeFilters([field]);\n return;\n }\n const collectionFilter: CollectionStringFilter = {\n field,\n value,\n type: FilterableColumnDataType.STRING,\n strategy: FILTER_STRING_STRATEGY.CONTAINS,\n exclude: false\n };\n\n this._tableService.addFilters([collectionFilter]);\n this._closePopover();\n }\n\n /** @hidden */\n _freeze(): void {\n this._table.freezeToColumn(this.column.name, this.column.endFreezable);\n this._closePopover();\n }\n\n /** @hidden */\n _unFreeze(): void {\n this._table.unfreeze(this.column.name, this.column.endFreezable);\n this._closePopover();\n }\n\n /** @hidden */\n _popoverOpened(isOpen: boolean): void {\n if (isOpen) {\n this._listComponent?._setCurrentActiveItemIndex(0);\n }\n }\n\n /** @hidden */\n _closePopover(): void {\n if (this.popover) {\n this.popover.close();\n const triggerElement = this.popover.trigger();\n if (triggerElement) {\n (triggerElement as ElementRef).nativeElement.focus();\n }\n }\n }\n}\n","@if (!popoverTemplate) {\n <fd-popover\n [placement]=\"mapColumnAlignToPlacement(column?.align)\"\n [disabled]=\"disabled\"\n [noArrow]=\"true\"\n fd-table-popover\n [focusAutoCapture]=\"true\"\n [focusTrapped]=\"true\"\n [triggers]=\"_headerPopoverTriggers\"\n (isOpenChange)=\"_popoverOpened($event)\"\n >\n <fdp-list [noBorder]=\"true\" [navigated]=\"true\" role=\"menu\">\n @for (item of _popoverItems$(); track item) {\n <li fdp-free-content-list-item role=\"menuitem\">\n <ng-template\n [ngTemplateOutlet]=\"item\"\n [ngTemplateOutletContext]=\"{ popover: popover }\"\n ></ng-template>\n </li>\n }\n </fdp-list>\n </fd-popover>\n} @else {\n <ng-template\n [ngTemplateOutlet]=\"popoverTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: _popoverItems$.asReadonly() }\"\n ></ng-template>\n}\n@if (column?.sortable) {\n <ng-template fdkTemplate=\"sortingAscPopoverItem\" let-popover=\"popover\">\n <div\n fd-list-link\n role=\"button\"\n [focusable]=\"true\"\n (click)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.ASC)\"\n (keydown.enter)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.ASC)\"\n >\n <span fd-list-icon glyph=\"sort-ascending\"></span>\n <span fd-list-title>{{ ('platformTable.headerMenuSortAsc' | fdTranslate)() }}</span>\n </div>\n </ng-template>\n <ng-template fdkTemplate=\"sortingDescPopoverItem\" let-popover=\"popover\">\n <div\n fd-list-link\n role=\"button\"\n [focusable]=\"true\"\n (click)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.DESC)\"\n (keydown.enter)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.DESC)\"\n >\n <span fd-list-icon glyph=\"sort-descending\"></span>\n <span fd-list-title>{{ ('platformTable.headerMenuSortDesc' | fdTranslate)() }}</span>\n </div>\n </ng-template>\n}\n@if (column?.groupable) {\n <ng-template fdkTemplate=\"groupPopoverItem\" let-popover=\"popover\">\n <div\n fd-list-link\n role=\"button\"\n [focusable]=\"true\"\n (click)=\"_setColumnHeaderGroupBy(column.key)\"\n (keydown.enter)=\"_setColumnHeaderGroupBy(column.key)\"\n >\n <span fd-list-title>{{ ('platformTable.headerMenuGroup' | fdTranslate)() }}</span>\n </div>\n </ng-template>\n}\n@if (column?.freezable || column?.endFreezable) {\n <ng-template fdkTemplate=\"freezePopoverItem\" let-popover=\"popover\">\n @if (!columnFrozen) {\n <div fd-list-link role=\"button\" [focusable]=\"true\" (click)=\"_freeze()\" (keydown.enter)=\"_freeze()\">\n <span fd-list-title>{{\n (\n (!column?.endFreezable\n ? columnIndex > 0\n ? 'platformTable.headerMenuFreezePlural'\n : 'platformTable.headerMenuFreeze'\n : 'platformTable.headerMenuEndFreeze'\n ) | fdTranslate\n )()\n }}</span>\n </div>\n } @else {\n <div fd-list-link role=\"button\" [focusable]=\"true\" (click)=\"_unFreeze()\" (keydown.enter)=\"_unFreeze()\">\n <span fd-list-title>{{\n (\n (columnIndex > 0\n ? 'platformTable.headerMenuUnfreezePlural'\n : 'platformTable.headerMenuUnfreeze'\n ) | fdTranslate\n )()\n }}</span>\n </div>\n }\n </ng-template>\n}\n@if (column?.filterable && !filteringFromHeaderDisabled) {\n <ng-template fdkTemplate=\"filteringPopoverItem\" let-popover=\"popover\">\n <div fd-list-link [style.cursor]=\"'auto'\" [focusable]=\"true\">\n <i fd-list-icon glyph=\"filter\"></i>\n <div fd-form-item [horizontal]=\"true\" (click)=\"$event.stopPropagation()\">\n <label fd-form-label [for]=\"'fdp-table-column-filtering-' + column.name\">{{\n ('platformTable.headerMenuFilter' | fdTranslate)()\n }}</label>\n <input\n fd-form-control\n [id]=\"'fdp-table-column-filtering-' + column.name\"\n (keydown.enter)=\"_setColumnHeaderFilterBy(column.key, $any($event.target)?.value)\"\n (keydown)=\"$event.stopPropagation()\"\n />\n </div>\n </div>\n </ng-template>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n DOCUMENT,\n ElementRef,\n inject,\n Inject,\n NgZone,\n OnInit,\n Renderer2,\n ViewEncapsulation\n} from '@angular/core';\nimport { TableColumnResizeService } from '@fundamental-ngx/platform/table-helpers';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\n\n/** @dynamic */\n@Component({\n selector: `fdp-table-column-resizer`,\n template: ` <div class=\"fdp-table__resizer-inner\"></div>`,\n styleUrl: './table-column-resizer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-table-column-resizer'\n },\n standalone: true\n})\nexport class PlatformTableColumnResizerComponent implements OnInit {\n /** @hidden */\n private _pointerMoveListener: Subscription;\n\n /** @hidden */\n private _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n constructor(\n private readonly _ngZone: NgZone,\n private readonly _tableColumnResizeService: TableColumnResizeService,\n private readonly _renderer: Renderer2,\n private readonly _elmRef: ElementRef,\n @Inject(DOCUMENT) private readonly _document: Document | null\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this._elmRef.nativeElement, 'mousedown')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((evt) => {\n if (evt.button === 0 && !evt.ctrlKey) {\n this._tableColumnResizeService.startResize(evt);\n\n this._listenForMouseUp();\n }\n });\n\n this._tableColumnResizeService.resizerPosition$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((position) => {\n this._renderer.setStyle(this._elmRef.nativeElement, 'display', position > 0 ? 'block' : 'none');\n if (!position) {\n return;\n }\n this._renderer.setStyle(\n this._elmRef.nativeElement,\n 'left',\n this._isRtl() ? 'auto' : `${position}px`\n );\n this._renderer.setStyle(\n this._elmRef.nativeElement,\n 'right',\n !this._isRtl() ? 'auto' : `${position}px`\n );\n });\n\n this._tableColumnResizeService.resizeInProgress$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((resizeInProgress) => {\n if (resizeInProgress) {\n this._renderer.addClass(this._elmRef.nativeElement, 'fdp-table-column-resizer--active');\n } else {\n this._renderer.removeClass(this._elmRef.nativeElement, 'fdp-table-column-resizer--active');\n }\n });\n });\n }\n\n /** @hidden */\n private _listenForMouseUp(): void {\n this._ngZone.runOutsideAngular(() => {\n this._pointerMoveListener?.unsubscribe();\n\n if (!this._document) {\n return;\n }\n this._pointerMoveListener = fromEvent<MouseEvent>(this._document, 'mouseup')\n .pipe(take(1), takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n this._tableColumnResizeService.finishResize(event);\n // this._cd.markForCheck();\n });\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Host,\n Input,\n OnChanges,\n OnInit,\n Optional,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n input\n} from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n ColumnAlignValue,\n FdpCellDef,\n FdpColumnResponsiveState,\n FdpEditableCellDef,\n FdpHeaderCellDef,\n FilterableColumnDataType,\n TableCellHeaderPopoverDirective,\n TableColumn,\n TableColumnResizeService,\n TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { BehaviorSubject } from 'rxjs';\n\n/**\n * The component that represents a table column.\n * ```html\n * <fdp-column\n * name=\"name\"\n * key=\"name\"\n * label=\"Name\"\n * align=\"start\">\n * </fdp-column>\n *\n * <fdp-column\n * name=\"price\"\n * key=\"price.value\">\n * <fdp-table-header *fdpHeaderCellDef>Price</fdp-table-header>\n * <fdp-table-cell *fdpCellDef=\"let item\">\n * {{item.price.value}} {{item.price.currency}}\n * </fdp-table-cell>\n * </fdp-column>\n * ```\n * */\n@Component({\n selector: 'fdp-column',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: TableColumn, useExisting: TableColumnComponent }],\n standalone: true\n})\nexport class TableColumnComponent extends TableColumn implements OnInit, OnChanges {\n /** Column unique identifier. */\n @Input()\n name: string;\n\n /** Column data accessor. */\n @Input()\n key: string;\n\n /** Column header label. */\n @Input()\n set label(value: string) {\n this.labelValueChanges$.next(value);\n }\n\n get label(): string {\n return this.labelValueChanges$.value;\n }\n\n /** Column footer label, to be used when the footer contains only text. */\n @Input()\n footerLabel: string;\n\n /** Column footer cell template, to be used when the footer cell requires more complex content than only text. */\n @Input()\n footerCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Cell text alignment. */\n @Input() align: ColumnAlignValue = 'start';\n\n /** Toggles sort feature for the column. */\n @Input()\n sortable = false;\n\n /** Toggles filter feature for the column. */\n @Input()\n filterable = false;\n\n /** Initial visibility state of the column. Default `true`. */\n @Input()\n visible = true;\n\n /**\n * Data type the column represents. Default is 'string'\n * @type { 'string' | 'number' | 'date' | 'boolean' }\n */\n @Input()\n dataType: FilterableColumnDataType = FilterableColumnDataType.STRING;\n\n /**\n * Optional array of available filter options.\n * Providing values to this input will cause the filter to change from a text-type input to a select-type input.\n * */\n @Input()\n filterSelectOptions: string[] = [];\n\n /** Toggles grouping feature for the column. */\n @Input()\n groupable = false;\n\n /** Toggles freeze feature for the column. */\n @Input()\n freezable = false;\n\n /** Toggles freeze feature for the column. */\n @Input()\n endFreezable = false;\n\n /** Whether the table cell inside table header should be non-interactive. */\n @Input()\n nonInteractive = false;\n\n /** Width of the column cells. */\n @Input()\n set width(value: string) {\n this._width = value;\n this._tableColumnResizeService.setCustomWidth(this.name, value);\n }\n get width(): string {\n return this._width;\n }\n\n /** Whether the text should wrap, when text is too long for 1 line */\n @Input()\n noWrap = false;\n\n /** Whether to apply fd-table-text (text-shadow) to the cell content, if disabled noWrap has no effect. */\n @Input()\n applyText = true;\n\n /** Column role attribute. */\n @Input()\n role: 'cell' | 'rowheader' | 'gridcell' = 'gridcell';\n\n /** Whether to announce empty cells to screen readers. Default is true. */\n readonly announceEmptyCell = input(true);\n\n /** Column cell template */\n columnCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Label change event */\n labelValueChanges$ = new BehaviorSubject('');\n\n /** Editable column cell template. */\n editableColumnCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header template */\n headerCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header popover template. */\n headerCellPopoverTemplate: Nullable<TemplateRef<any>>;\n\n /** Stores information for the header cell if the ellipsis are visible after the column resize */\n headerOverflows = false;\n\n /** @hidden */\n _freezed = false;\n\n /** @hidden */\n _endFreezed = false;\n\n /** @hidden */\n @ContentChild(FdpCellDef)\n set fdpCellDef(fdpCellDef: Nullable<FdpCellDef>) {\n this.columnCellTemplate = fdpCellDef?.templateRef;\n }\n\n /** Editable column cell template definition. */\n @ContentChild(FdpEditableCellDef)\n set fdpEditableCellDef(fdpEditableCellDef: Nullable<FdpEditableCellDef>) {\n this.editableColumnCellTemplate = fdpEditableCellDef?.templateRef;\n }\n\n /** @hidden */\n @ContentChild(FdpHeaderCellDef)\n set fdpHeaderCellDef(fdpHeaderCellDef: Nullable<FdpHeaderCellDef>) {\n this.headerCellTemplate = fdpHeaderCellDef?.templateRef;\n }\n\n /** @hidden */\n @ContentChild(TableCellHeaderPopoverDirective)\n set fdpHeaderCellPopover(popover: Nullable<TableCellHeaderPopoverDirective>) {\n this.headerCellPopoverTemplate = popover?.templateRef;\n }\n\n /** Responsive state of the column. */\n responsiveState: FdpColumnResponsiveState = 'visible';\n\n /** @hidden */\n private _width: string;\n\n /** @hidden */\n constructor(\n private readonly _tableColumnResizeService: TableColumnResizeService,\n @Optional() @Host() private readonly _tableService?: TableService\n ) {\n super();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._validateNameOption();\n }\n\n /** Table won't know about column properties update so notify about it manually\n * @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._tableService && (changes.sortable || changes.filterable || changes.groupable || changes.freezable)) {\n this._tableService.markForCheck();\n }\n }\n\n /** @hidden */\n private _validateNameOption(): void {\n if (typeof this.name !== 'string') {\n throw Error('fdp-column: \"name\" option is required.');\n }\n }\n}\n","import { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, computed, inject, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { TableIconDirective } from '@fundamental-ngx/core/table';\nimport { SortDirection, TableColumn, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n selector: 'fdp-table-header-cell-content',\n templateUrl: './table-header-cell-content.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n fdp-table-header-cell-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-grow: 0;\n }\n fdp-table-header-cell-content .fd-table__text--no-wrap {\n width: 100%;\n }\n `\n ],\n imports: [NgTemplateOutlet, IconComponent, TableIconDirective, AsyncPipe, NgStyle]\n})\nexport class TableHeaderCellContentComponent {\n /** Table Id */\n @Input()\n id: string;\n\n /** Column reference. */\n @Input()\n set column(value: Nullable<TableColumn>) {\n this._column$.set(value);\n }\n\n get column(): Nullable<TableColumn> {\n return this._column$();\n }\n\n /** Whether column has applied sorting. */\n readonly hasSorting$ = computed(() => {\n const column = this._column$();\n return column && this._fdpTableService.sortRules$().has(column.key);\n });\n\n /** Whether column has applied filtering. */\n readonly hasFilter$ = computed(() => {\n const column = this._column$();\n return column && this._fdpTableService.filterRules$().has(column.key);\n });\n\n /** Applied sorting. */\n readonly sorting$ = computed(() => {\n const column = this._column$();\n return column && this._fdpTableService.sortRules$().get(column.key);\n });\n\n /** @hidden */\n readonly SORT_DIRECTION = SortDirection;\n\n /** @hidden */\n private readonly _column$ = signal<Nullable<TableColumn>>(null);\n\n /** @hidden */\n private readonly _fdpTableService = inject(TableService);\n}\n","<div\n class=\"fd-table__text--no-wrap\"\n [class]=\"{ 'fd-table__inner': hasSorting$() || hasFilter$() }\"\n [ngStyle]=\"{ 'justify-content': column?.align, gap: column?.align ? '0.5rem' : '' }\"\n>\n <ng-template\n [ngTemplateOutlet]=\"tableHeaderCellContentTemplate\"\n [ngTemplateOutletContext]=\"{ column: column }\"\n ></ng-template>\n @if (hasSorting$() || hasFilter$()) {\n <div class=\"fd-table__column-header-icons\">\n @if (hasFilter$()) {\n <fd-icon fd-table-icon glyph=\"filter\"></fd-icon>\n }\n @if (hasSorting$()) {\n <fd-icon\n fd-table-icon\n [ariaHidden]=\"true\"\n [glyph]=\"sorting$()?.direction === SORT_DIRECTION.ASC ? 'sort-ascending' : 'sort-descending'\"\n ></fd-icon>\n }\n </div>\n }\n</div>\n<ng-content></ng-content>\n<ng-template #tableHeaderCellContentTemplate let-column=\"column\">\n @if (column?.headerCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"column.headerCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: column }\"\n ></ng-template>\n } @else {\n <span [id]=\"id + '-header-cell-' + column?.name\" class=\"fd-table__cell--truncate-txt\">\n {{ column?.labelValueChanges$ | async }}\n </span>\n }\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n signal\n} from '@angular/core';\nimport { TableDialogCommonData } from '@fundamental-ngx/platform/table-helpers';\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { ToolbarComponent, ToolbarItemDirective, ToolbarSpacerDirective } from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nexport interface DialogTableColumn {\n label: string;\n key: string;\n}\n\nexport type VisibleColumnType = string; // ColumnKey\n\nexport interface ColumnsDialogData extends TableDialogCommonData {\n availableColumns: DialogTableColumn[];\n visibleColumns: VisibleColumnType[];\n}\n\nexport interface ColumnsDialogResultData {\n visibleColumns: VisibleColumnType[];\n columnOrder?: VisibleColumnType[];\n}\n\nclass SelectableColumn {\n constructor(\n /** Selected */\n public selected: boolean,\n /** Active */\n public active: boolean,\n /** Table Column it belongs to */\n public column: DialogTableColumn\n ) {}\n}\n\nconst INITIAL_SEARCH_TEXT = '';\nconst INITIAL_SHOW_ALL_ITEMS = true;\n\n@Component({\n templateUrl: './columns.component.html',\n styleUrl: './columns.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13ColumnsDialogComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n BarLeftDirective,\n BarElementDirective,\n TitleComponent,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n ToolbarComponent,\n SearchFieldComponent,\n ToolbarSpacerDirective,\n ButtonComponent,\n ToolbarItemDirective,\n ListComponent,\n ListItemComponent,\n CheckboxComponent,\n FormsModule,\n ListTitleDirective,\n DialogFooterComponent,\n ButtonBarComponent,\n AsyncPipe,\n FdTranslatePipe,\n InitialFocusDirective\n ]\n})\nexport class P13ColumnsDialogComponent implements Resettable, OnInit, OnDestroy {\n /** Indicates when reset command is available */\n readonly isResetAvailable$ = signal(false);\n\n /** Table columns available for grouping */\n readonly availableColumns: DialogTableColumn[] = [];\n\n /** All available columns for interacting */\n _selectableColumns: SelectableColumn[] = [];\n\n /** filtered columns that are rendered in the list */\n _filteredColumns: SelectableColumn[] = [];\n\n /** Search Query subject */\n _searchQuerySubject = new BehaviorSubject<string>(INITIAL_SEARCH_TEXT);\n /** Show All flag subject */\n _showAllItemsSubject = new BehaviorSubject<boolean>(INITIAL_SHOW_ALL_ITEMS);\n\n /** Selected columns count */\n _selectedColumnsCount = 0;\n\n /** Flag to track disabled state for move-down move-up buttons */\n _moveUpDisabled = true;\n /** Flag to track disabled state for move-down move-up buttons */\n _moveDownDisabled = true;\n\n /** @hidden */\n get _isShownAllItems(): boolean {\n return this._showAllItemsSubject.getValue();\n }\n\n /** @hidden */\n get _selectAllDisabled(): boolean {\n return !this._isShownAllItems || this._filteredColumns.length === 0;\n }\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(\n public dialogRef: DialogRef<ColumnsDialogData>,\n private cdr: ChangeDetectorRef\n ) {\n const { availableColumns, visibleColumns } = this.dialogRef.data;\n\n this.availableColumns = availableColumns?.map(({ label, key }) => ({ label, key })) || [];\n\n this._initiateColumns(visibleColumns);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenToFilterOptions();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** Reset to the initial state */\n reset(): void {\n this._initiateColumns(this.availableColumns.map((c) => c.key));\n this.isResetAvailable$.set(false);\n }\n\n /** Close dialog */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /** Confirm changes and close dialog */\n confirm(): void {\n const visibleColumns = this._getVisibleColumnsFromSelectedColumns(this._selectableColumns);\n const columnOrder = this._getColumnOrder(this._selectableColumns);\n const result: ColumnsDialogResultData = { visibleColumns, columnOrder };\n this.dialogRef.close(result);\n }\n\n /** @hidden */\n _toggleSelectAll(selectAll: boolean): void {\n this._selectableColumns.forEach((column) => (column.selected = selectAll));\n this._onToggleColumn();\n }\n\n /** @hidden */\n _onToggleColumn(): void {\n this._countSelectedColumns();\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _recalculateResetAvailability(): void {\n let resettable = false;\n if (this._selectedColumnsCount !== this.availableColumns.length) {\n // Initially all columns are selected. If not, reset should be active\n resettable = true;\n } else {\n // if all are selected, check for columns order to match the initial one\n for (let index = 0; index < this.availableColumns.length; index++) {\n if (this._selectableColumns[index].column.key !== this.availableColumns[index].key) {\n resettable = true;\n break;\n }\n }\n }\n this.isResetAvailable$.set(resettable);\n }\n\n /** @hidden */\n _searchInputChange({ text }: SearchInput): void {\n this._searchQuerySubject.next(text || '');\n }\n\n /** @hidden */\n _toggleShowAll(): void {\n const showAllItems = this._showAllItemsSubject.getValue();\n this._showAllItemsSubject.next(!showAllItems);\n }\n\n /** @hidden */\n _setActiveColumn(column: SelectableColumn | null): void {\n this._selectableColumns.map((_column) => {\n _column.active = _column === column;\n });\n\n this._calculateMovementButtonsState();\n }\n\n /** @hidden */\n _moveActiveToTop(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this._moveColumnInFilteredListByIndex(this._getActiveColumnIndexInFilteredList(), 0);\n }\n\n /** @hidden */\n _moveActiveToBottom(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this._moveColumnInFilteredListByIndex(\n this._getActiveColumnIndexInFilteredList(),\n this._filteredColumns.length - 1\n );\n }\n\n /** @hidden */\n _moveActiveUp(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n const activeColumnIndex = this._getActiveColumnIndexInFilteredList();\n this._moveColumnInFilteredListByIndex(activeColumnIndex, activeColumnIndex - 1);\n\n // keep the focus back to the move up button as it gets lost on click\n setTimeout(() => {\n const moveUpBtn = event.target as HTMLElement;\n moveUpBtn.focus();\n }, 0);\n }\n\n /** @hidden */\n _moveActiveDown(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n const activeColumnIndex = this._getActiveColumnIndexInFilteredList();\n this._moveColumnInFilteredListByIndex(activeColumnIndex, activeColumnIndex + 1);\n }\n\n /** @hidden */\n _isReorderColumnButtonShowable(item: SelectableColumn): boolean {\n return item.active && item.selected;\n }\n\n /** @hidden */\n _filterByColumnKy(index: number, item: SelectableColumn): string {\n return item?.column.key;\n }\n\n /**\n * @hidden\n * @param visibleColumnKeys keys of columns that should be displayed as selected.\n * Also, their order matters: it will be used\n */\n private _initiateColumns(visibleColumnKeys: string[]): void {\n const visibleColumnIndexMap = new Map(visibleColumnKeys.map((key, index) => [key, index]));\n this._selectableColumns = this.availableColumns.slice().map(\n (column, index: number): SelectableColumn => ({\n column,\n selected: visibleColumnKeys.includes(column.key),\n active: index === 0\n })\n );\n\n // keep count of selected\n this._countSelectedColumns();\n\n this._recalculateResetAvailability();\n\n // reset filter settings settings\n this._searchQuerySubject.next(INITIAL_SEARCH_TEXT);\n this._showAllItemsSubject.next(INITIAL_SHOW_ALL_ITEMS);\n }\n\n /** @hidden */\n private _listenToFilterOptions(): void {\n this._subscriptions.add(\n combineLatest([this._showAllItemsSubject, this._searchQuerySubject])\n .pipe(debounceTime(20))\n .subscribe(([showAll, searchQuery]) => {\n this._filteredColumns = this._selectableColumns.filter((item) => {\n const matchesSearchQuery = item.column.label\n .toLocaleLowerCase()\n .includes(searchQuery.toLocaleLowerCase());\n const matchesShowAll = showAll || item.selected;\n return matchesSearchQuery && matchesShowAll;\n });\n this._onChangeFilteredColumnsList();\n\n this.cdr.markForCheck();\n })\n );\n }\n\n /** @hidden */\n private _onChangeFilteredColumnsList(): void {\n this._calculateMovementButtonsState();\n }\n\n /** @hidden */\n private _getVisibleColumnsFromSelectedColumns(columns = this._selectableColumns): VisibleColumnType[] {\n return columns.filter(({ selected }) => selected).map(({ column }): VisibleColumnType => column.key);\n }\n\n /** @hidden */\n private _getColumnOrder(columns: SelectableColumn[]): VisibleColumnType[] {\n return columns.map((column) => column.column.key);\n }\n\n /** @hidden */\n private _getActiveColumnIndexInFilteredList(): number {\n return this._filteredColumns.findIndex(({ active }) => active);\n }\n\n /** @hidden */\n private _moveColumnInFilteredListByIndex(from: number, to: number): void {\n const { movedItem, replacedItem } = this._moveElementInTheListByIndex(this._filteredColumns, from, to);\n /**\n * need to reflect analogical movement in the original list\n * with respect to the original list order\n */\n this._moveColumnInSelectableList(movedItem, replacedItem);\n\n this._calculateMovementButtonsState();\n this._recalculateResetAvailability();\n }\n\n /**\n * @hidden\n * Move column in selectable list.\n */\n private _moveColumnInSelectableList(itemToMove: SelectableColumn, targetItem: SelectableColumn): void {\n const list = this._selectableColumns;\n this._moveElementInTheListByIndex(list, list.indexOf(itemToMove), list.indexOf(targetItem));\n }\n\n /**\n * @hidden\n * Move element in the list\n * @return moved item and replaced item.\n */\n private _moveElementInTheListByIndex<T>(\n list: T[],\n fromIndex: number,\n toIndex: number\n ): { movedItem: T; replacedItem: T } {\n const listLength = list.length;\n\n fromIndex = Math.min(Math.max(fromIndex, 0), listLength - 1);\n toIndex = Math.min(Math.max(toIndex, 0), listLength - 1);\n\n const replacedItem = list[toIndex];\n const movedItem = list.splice(fromIndex, 1)[0];\n\n list.splice(toIndex, 0, movedItem);\n\n return { movedItem, replacedItem };\n }\n\n /** @hidden */\n private _countSelectedColumns(): void {\n this._selectedColumnsCount = this._selectableColumns.filter(({ selected }) => selected).length;\n }\n\n /** @hidden */\n private _calculateMovementButtonsState(): void {\n const activeIndex = this._getActiveColumnIndexInFilteredList();\n this._moveUpDisabled = activeIndex < 1;\n this._moveDownDisabled = activeIndex < 0 || activeIndex >= this._filteredColumns.length - 1;\n }\n}\n","<fd-dialog class=\"fdp-table-p13-columns-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 fd-title [headerSize]=\"4\">\n {{ ('platformTable.P13ColumnsDialogHeader' | fdTranslate)() }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <fd-toolbar>\n <fdp-search-field\n [placeholder]=\"('platformTable.P13ColumnsDialogSearchPlaceholder' | fdTranslate)()\"\n [inputText]=\"(_searchQuerySubject | async) || ''\"\n [suggestions]=\"[]\"\n (inputChange)=\"_searchInputChange($event)\"\n fdkInitialFocus\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <!-- Show Selected/All -->\n <button fd-toolbar-item fd-button fdType=\"transparent\" (click)=\"_toggleShowAll()\">\n @if ((_showAllItemsSubject | async) === true) {\n {{ ('platformTable.P13ColumnsDialogsShowSelected' | fdTranslate)() }}\n } @else {\n {{ ('platformTable.P13ColumnsDialogShowAll' | fdTranslate)() }}\n }\n </button>\n </fd-toolbar>\n <ul fd-list [selection]=\"true\" aria-multiselectable=\"true\">\n <li\n fd-list-item\n (focus)=\"_setActiveColumn(null)\"\n [selected]=\"_selectedColumnsCount === _selectableColumns.length\"\n >\n <fd-checkbox\n [ngModel]=\"_selectedColumnsCount === _selectableColumns.length\"\n (ngModelChange)=\"_toggleSelectAll($event)\"\n [disabled]=\"_selectAllDisabled\"\n ></fd-checkbox>\n <span fd-list-title>\n {{\n (\n 'platformTable.P13ColumnsDialogSelectAll'\n | fdTranslate\n : {\n selectedColumnsCount: _selectedColumnsCount,\n selectableColumnsCount: _selectableColumns.length\n }\n )()\n }}\n </span>\n </li>\n @for (item of _filteredColumns; track _filterByColumnKy($index, item)) {\n <li\n fd-list-item\n [preventClick]=\"true\"\n [class.fd-select-item--selected]=\"item.selected\"\n [selected]=\"item.selected\"\n [class.fd-select-item--active]=\"item.active\"\n (focus)=\"_setActiveColumn(item)\"\n >\n <fd-checkbox [(ngModel)]=\"item.selected\" (ngModelChange)=\"_onToggleColumn()\"></fd-checkbox>\n <span fd-list-title>\n {{ item.column.label }}\n </span>\n\n <!-- Active Button Movement -->\n @if (_isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"collapse-group\"\n [disabled]=\"_moveUpDisabled\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n (click)=\"_moveActiveToTop($event)\"\n (keydown.enter)=\"_moveActiveToTop($event)\"\n ></button>\n }\n @if (_isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-up\"\n [disabled]=\"_moveUpDisabled\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n (click)=\"_moveActiveUp($event)\"\n (keydown.enter)=\"_moveActiveUp($event)\"\n ></button>\n }\n @if (_isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-down\"\n [disabled]=\"_moveDownDisabled\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n (click)=\"_moveActiveDown($event)\"\n (keydown.enter)=\"_moveActiveDown($event)\"\n ></button>\n }\n @if (_isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"expand-group\"\n [disabled]=\"_moveDownDisabled\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n (click)=\"_moveActiveToBottom($event)\"\n (keydown.enter)=\"_moveActiveToBottom($event)\"\n ></button>\n }\n </li>\n }\n </ul>\n </fd-dialog-body>\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.P13ColumnsDialogConfirmationBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n <fd-button-bar\n fdType=\"transparent\"\n [label]=\"('platformTable.P13ColumnsDialogCancelBtnLabel' | fdTranslate)()\"\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import {\n CollectionFilter,\n FilterableColumnDataType,\n FilterStrategy,\n getFilterStrategiesBasedOnDataType,\n TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\n\nexport interface FilterableColumn {\n label: string;\n key: string;\n dataType: FilterableColumnDataType;\n filterable?: boolean;\n filterSelectOptions?: string[]; // add optional filterSelectOptions\n}\n\nexport interface FilterDialogData extends TableDialogCommonData {\n collectionFilter: CollectionFilter[];\n columns: FilterableColumn[];\n validator?: ((rules: CollectionFilter[]) => boolean) | undefined;\n}\n\nexport interface FilterDialogResultData {\n collectionFilter: CollectionFilter[];\n}\n\n/**\n * Filter Rule\n *\n * represents one rule per row\n */\n\nexport class FilterRule<T = any> {\n /** Validation flg */\n isValid = false;\n\n /** Available strategies options */\n strategies: ReadonlyArray<FilterStrategy> = [];\n\n /** Data type */\n dataType?: FilterableColumnDataType;\n\n /**\n * Optional array of available filter options.\n * Providing values to this input will cause the filter to change from a text-type input to a select-type input.\n * */\n filterSelectOptions: string[] = [];\n\n /** returns whether filter rule has value */\n get hasValue(): boolean {\n return this.valueExists(this.value) || this.valueExists(this.value2);\n }\n\n /** @hidden */\n constructor(\n readonly columns: ReadonlyArray<FilterableColumn>,\n /** Column key the rule belongs to */\n public columnKey?: string,\n /** Data type */\n public strategy?: FilterStrategy,\n /** Main filter value */\n public value?: T | null,\n /** Additional filter value */\n public value2?: T | null\n ) {\n if (!this.columnKey) {\n this.setColumnKey(columns[0]?.key);\n }\n if (!this.dataType) {\n this.setDataTypeByColumnKey(this.columnKey);\n }\n if (this.strategies.length === 0) {\n this.setStrategiesByColumnKey(this.columnKey);\n }\n if (this.filterSelectOptions.length === 0) {\n this.setFilterSelectOptionsByColumnKey(this.columnKey);\n }\n }\n\n /** @hidden */\n setValid(isValid: boolean): void {\n this.isValid = isValid;\n }\n\n /** @hidden */\n setValue(value: T | null): void {\n this.value = value;\n }\n\n /** @hidden */\n setValue2(value: T | null): void {\n this.value2 = value;\n }\n\n /** @hidden */\n setStrategy(strategy: FilterStrategy): void {\n this.strategy = strategy;\n }\n\n /** @hidden */\n setStrategiesByColumnKey(columnKey?: string): void {\n const dataType = this.columns.find((column) => column.key === columnKey)?.dataType;\n if (!dataType) {\n return;\n }\n\n const strategies = getFilterStrategiesBasedOnDataType(dataType);\n\n if (this.strategies === strategies) {\n return;\n }\n\n this.strategies = strategies;\n\n if (!this.strategies.includes(this.strategy!)) {\n this.setStrategy(strategies[0]);\n }\n }\n\n /** @hidden */\n setColumnKey(columnKey: string): void {\n if (columnKey === this.columnKey) {\n return;\n }\n this.columnKey = columnKey;\n\n // reset values\n this.setValue(null);\n this.setValue2(null);\n\n // update data type\n this.setDataTypeByColumnKey(columnKey);\n\n // update available Filter options\n this.setFilterSelectOptionsByColumnKey(columnKey);\n\n // update available strategies list\n this.setStrategiesByColumnKey(columnKey);\n }\n\n /** @hidden */\n setDataTypeByColumnKey(columnKey?: string): void {\n const dataType = this.columns.find((column) => column.key === columnKey)?.dataType;\n this.dataType = dataType;\n }\n\n /** @hidden */\n setFilterSelectOptionsByColumnKey(columnKey?: string): void {\n const filterSelectOptions = this.columns.find((column) => column.key === columnKey)?.filterSelectOptions;\n this.filterSelectOptions = filterSelectOptions ? filterSelectOptions : [];\n }\n\n /** @hidden */\n private valueExists(value: any): boolean {\n return !!value || value === 0 || typeof value === 'boolean';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport {\n FILTER_STRATEGY,\n FILTER_STRATEGY_LABEL,\n FilterableColumnDataType\n} from '@fundamental-ngx/platform/table-helpers';\nimport { Subscription } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { LayoutGridColDirective, LayoutGridRowDirective } from '@fundamental-ngx/core/layout-grid';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FilterRule } from './filtering.model';\n\n@Component({\n selector: 'fdp-table-filter-rule',\n templateUrl: './filter-rule.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n LayoutGridRowDirective,\n LayoutGridColDirective,\n SelectComponent,\n FormsModule,\n OptionComponent,\n NgTemplateOutlet,\n DatePickerComponent,\n FormControlComponent,\n FdTranslatePipe\n ]\n})\nexport class FilterRuleComponent implements OnDestroy {\n /** Rule to be displayed **/\n @Input() rule: FilterRule;\n\n /** Emits when rule is changed */\n @Output() ruleChange: EventEmitter<void> = new EventEmitter();\n\n /** Emits when rule state is changed */\n @Output() ruleStateChange: EventEmitter<boolean> = new EventEmitter();\n\n /** @hidden */\n readonly FILTER_STRATEGY = FILTER_STRATEGY;\n\n /** @hidden */\n readonly DATA_TYPE = FilterableColumnDataType;\n\n /** @hidden */\n readonly strategyLabels = FILTER_STRATEGY_LABEL;\n\n /** @hidden */\n @ViewChild(NgForm)\n set ngForm(ngForm: NgForm) {\n if (!ngForm) {\n return;\n }\n this._subscriptions.add(\n ngForm.statusChanges\n ?.pipe(\n // Skip first that triggers on initial phase\n skip(1)\n )\n .subscribe(() => {\n const isValid = !!ngForm.valid;\n this.rule.setValid(isValid);\n this.ruleStateChange.emit(isValid);\n })\n );\n }\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _onModelChange(): void {\n this.ruleChange.emit();\n }\n}\n","<div fdLayoutGridRow>\n <div fdLayoutGridCol colGrow>\n <div fdLayoutGridRow>\n <div fdLayoutGridCol colGrow>\n <!-- Column -->\n <fd-select\n class=\"filter-row__select\"\n [ngModel]=\"rule.columnKey\"\n (ngModelChange)=\"rule.setColumnKey($event); _onModelChange()\"\n >\n @for (column of rule.columns; track column) {\n <li fd-option [value]=\"column.key\">{{ column.label }}</li>\n }\n </fd-select>\n </div>\n <div fdLayoutGridCol colGrow>\n <!-- Strategy -->\n <fd-select\n class=\"filter-row__select\"\n [ngModel]=\"rule.strategy\"\n (ngModelChange)=\"rule.setStrategy($event); _onModelChange()\"\n >\n @for (strategy of rule.strategies; track strategy) {\n <li fd-option [value]=\"strategy\">\n {{\n (\n strategyLabels[strategy] || 'platformTable.P13FilterStrategyLabelNotDefined'\n | fdTranslate\n )()\n }}\n </li>\n }\n </fd-select>\n </div>\n </div>\n </div>\n <div fdLayoutGridCol colGrow>\n <div fdLayoutGridRow ngForm>\n @if (rule.strategy === FILTER_STRATEGY.BETWEEN) {\n <div fdLayoutGridCol colGrow>\n <ng-template\n [ngTemplateOutlet]=\"ruleInputTemplate\"\n [ngTemplateOutletContext]=\"{ valueKey: 'value' }\"\n ></ng-template>\n </div>\n <div fdLayoutGridCol colGrow>\n <ng-template\n [ngTemplateOutlet]=\"ruleInputTemplate\"\n [ngTemplateOutletContext]=\"{ valueKey: 'value2' }\"\n ></ng-template>\n </div>\n } @else {\n <div fdLayoutGridCol colGrow>\n <ng-template\n [ngTemplateOutlet]=\"ruleInputTemplate\"\n [ngTemplateOutletContext]=\"{ valueKey: 'value' }\"\n ></ng-template>\n </div>\n }\n\n <!-- Rule Control Based on Data Type -->\n <ng-template #ruleInputTemplate let-valueKey=\"valueKey\">\n @if (rule.dataType === DATA_TYPE.DATE) {\n <fd-date-picker\n class=\"filter-row__input\"\n type=\"single\"\n [required]=\"true\"\n [name]=\"valueKey\"\n [(ngModel)]=\"rule[valueKey]\"\n (ngModelChange)=\"_onModelChange()\"\n ></fd-date-picker>\n } @else if (rule.dataType === DATA_TYPE.BOOLEAN) {\n <fd-select\n class=\"filter-row__select\"\n [name]=\"valueKey\"\n [(ngModel)]=\"rule[valueKey]\"\n (ngModelChange)=\"_onModelChange()\"\n [required]=\"true\"\n >\n <li fd-option [value]=\"undefined\">\n {{ ('platformTable.P13FilterBooleanOptionNotDefined' | fdTranslate)() }}\n </li>\n <li fd-option [value]=\"true\">\n {{ ('platformTable.P13FilterBooleanOptionTrue' | fdTranslate)() }}\n </li>\n <li fd-option [value]=\"false\">\n {{ ('platformTable.P13FilterBooleanOptionFalse' | fdTranslate)() }}\n </li>\n </fd-select>\n } @else if (rule.filterSelectOptions.length) {\n <!-- Filter options dropdown menu -->\n <fd-select\n [ngModel]=\"rule[valueKey]\"\n (ngModelChange)=\"rule.setValue($event); _onModelChange()\"\n [required]=\"true\"\n [name]=\"valueKey\"\n class=\"filter-row__select\"\n >\n @for (option of rule.filterSelectOptions; track $index) {\n <li fd-option [value]=\"option\">{{ option }}</li>\n }\n </fd-select>\n } @else {\n <input\n type=\"text\"\n class=\"filter-row__input\"\n fd-form-control\n required\n [name]=\"valueKey\"\n [(ngModel)]=\"rule[valueKey]\"\n (ngModelChange)=\"_onModelChange()\"\n />\n }\n </ng-template>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, signal } from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { LayoutGridColDirective, LayoutGridComponent, LayoutGridRowDirective } from '@fundamental-ngx/core/layout-grid';\nimport { PanelComponent, PanelContentDirective, PanelTitleDirective } from '@fundamental-ngx/core/panel';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FilterRuleComponent } from './filter-rule.component';\nimport { FilterDialogData, FilterDialogResultData, FilterRule, FilterableColumn } from './filtering.model';\n\nexport { FilterDialogData, FilterDialogResultData };\n\n@Component({\n templateUrl: './filtering.component.html',\n styleUrl: './filtering.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13FilteringDialogComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n BarLeftDirective,\n BarElementDirective,\n TitleComponent,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n PanelComponent,\n PanelTitleDirective,\n PanelContentDirective,\n LayoutGridComponent,\n LayoutGridRowDirective,\n FilterRuleComponent,\n LayoutGridColDirective,\n ButtonComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe\n ]\n})\nexport class P13FilteringDialogComponent implements Resettable {\n /** Indicates when reset command is available */\n readonly isResetAvailable$ = signal(false);\n\n /** Table columns available for filtering */\n readonly columns: FilterableColumn[] = [];\n\n /**\n * @hidden\n * Include Rules\n */\n _includeRules: FilterRule[] = [];\n\n /**\n * @hidden\n * Exclude Rules\n */\n _excludeRules: FilterRule[] = [];\n\n /**\n * @hidden\n * Count of valid included rules\n */\n _validIncludeRulesCount = 0;\n\n /**\n * @hidden\n * Count of valid excluded rules\n */\n _validExcludeRulesCount = 0;\n\n /**\n * @hidden\n * Panel opened/closed flag\n */\n _includePanelExpanded = true;\n\n /**\n * @hidden\n * Panel opened/closed flag\n */\n _excludePanelExpanded = false;\n\n /** @hidden */\n constructor(public dialogRef: DialogRef<FilterDialogData>) {\n const { columns, collectionFilter } = this.dialogRef.data;\n\n this.columns = columns.filter((column) => column.filterable) || [];\n\n this._initiateRules(collectionFilter);\n\n this._calculateValidRulesCount();\n\n this._excludePanelExpanded = this._validExcludeRulesCount > 0;\n\n this._recalculateResetAvailability();\n }\n\n /** Reset changes to the initial state */\n reset(): void {\n this._initiateRules();\n this.isResetAvailable$.set(false);\n this._validIncludeRulesCount = 0;\n this._validExcludeRulesCount = 0;\n }\n\n /** Close dialog */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /** Confirm changes and close dialog */\n confirm(): void {\n const includeFilters = this._getCollectionFiltersFromIncludeRules();\n const excludeFilters = this._getCollectionFiltersFromExcludeRules();\n const validator = this.dialogRef.data.validator;\n const combinedFilters = [...includeFilters, ...excludeFilters];\n\n if (!validator || validator(combinedFilters)) {\n const result: FilterDialogResultData = { collectionFilter: combinedFilters };\n\n this.dialogRef.close(result);\n }\n }\n\n /** @hidden */\n _removeRule(rule: FilterRule, rules: FilterRule[]): void {\n const index = rules.indexOf(rule);\n\n if (index === -1) {\n return;\n }\n\n rules.splice(index, 1);\n\n // Keep at least one item in the list\n if (rules.length === 0) {\n rules.push(new FilterRule(this.columns));\n }\n\n this._recalculateResetAvailability();\n\n this._calculateValidRulesCount();\n }\n\n /** @hidden */\n _addNewRule(rules: FilterRule[]): void {\n const lastRule = rules.slice(-1)[0];\n rules.push(new FilterRule(this.columns, lastRule?.columnKey, lastRule?.strategy));\n }\n\n /** @hidden */\n _recalculateResetAvailability(): void {\n const hasOnlyOneEmptyIncludeRule = this._includeRules.length === 1 && !this._includeRules[0].hasValue;\n const hasOnlyOneEmptyExcludeRule = this._excludeRules.length === 1 && !this._excludeRules[0].hasValue;\n this.isResetAvailable$.set(!hasOnlyOneEmptyIncludeRule || !hasOnlyOneEmptyExcludeRule);\n }\n\n /** @hidden */\n _onRuleStateChange(): void {\n this._calculateValidRulesCount();\n }\n\n /** @hidden */\n private _initiateRules(initialRules?: CollectionFilter[]): void {\n this._includeRules = this._createRules(initialRules?.filter(({ exclude }) => !exclude));\n this._excludeRules = this._createRules(initialRules?.filter(({ exclude }) => exclude));\n\n [this._includeRules, this._excludeRules].forEach((rules) => {\n // Rules on initial phase are considered as valid\n rules.forEach((rule) => rule.setValid(true));\n // Keep at least one item in the list\n if (rules.length === 0) {\n rules.push(new FilterRule(this.columns));\n }\n });\n }\n\n /** @hidden */\n private _createRules(collectionFilter: CollectionFilter[] = []): FilterRule[] {\n return collectionFilter.map(\n ({ field, value, value2, strategy }): FilterRule =>\n new FilterRule(this.columns, field, strategy, value, value2)\n );\n }\n\n /** @hidden */\n private _getCollectionFiltersFromRules(rules: FilterRule[]): CollectionFilter[] {\n return rules.filter(this._isRuleValid).map(\n ({ columnKey, strategy, value, value2 }): CollectionFilter => ({\n field: columnKey!,\n value,\n value2,\n strategy: strategy!\n })\n );\n }\n\n /** @hidden */\n private _getCollectionFiltersFromIncludeRules(): CollectionFilter[] {\n return this._getCollectionFiltersFromRules(this._includeRules).map(\n (collectionFilter): CollectionFilter => ({\n ...collectionFilter,\n exclude: false\n })\n );\n }\n\n /** @hidden */\n private _getCollectionFiltersFromExcludeRules(): CollectionFilter[] {\n return this._getCollectionFiltersFromRules(this._excludeRules).map(\n (collectionFilter): CollectionFilter => ({\n ...collectionFilter,\n exclude: true\n })\n );\n }\n\n /** @hidden */\n private _calculateValidRulesCount = (): void => {\n this._validIncludeRulesCount = this._includeRules.filter(this._isRuleValid).length;\n this._validExcludeRulesCount = this._excludeRules.filter(this._isRuleValid).length;\n };\n\n /** @hidden */\n private _isRuleValid = (rule: FilterRule): boolean => rule?.isValid;\n}\n","<fd-dialog class=\"fdp-table-p13-filtering-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 fd-title [headerSize]=\"4\">{{ ('platformTable.P13FilterDialogHeader' | fdTranslate)() }}</h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <!-- Include Rules -->\n <fd-panel [expanded]=\"_includePanelExpanded\">\n <div fd-panel-title>\n {{\n (\n (_validIncludeRulesCount > 0\n ? 'platformTable.P13FilterDialogIncludePanelTitleWithCount'\n : 'platformTable.P13FilterDialogIncludePanelTitleWithoutCount'\n ) | fdTranslate: { count: _validIncludeRulesCount }\n )()\n }}\n </div>\n <div fd-panel-content>\n @for (rule of _includeRules; track rule) {\n <fd-layout-grid>\n <div fdLayoutGridRow>\n <fdp-table-filter-rule\n [fdLayoutGridCol]=\"10\"\n [rule]=\"rule\"\n (ruleChange)=\"_recalculateResetAvailability()\"\n (ruleStateChange)=\"_onRuleStateChange()\"\n ></fdp-table-filter-rule>\n <!-- Actions buttons -->\n <div [fdLayoutGridCol]=\"2\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"sys-cancel\"\n [attr.aria-label]=\"\n ('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\n \"\n [title]=\"('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\"\n (click)=\"_removeRule(rule, _includeRules)\"\n ></button>\n @if (_includeRules.length - 1 === $index) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"add\"\n [attr.aria-label]=\"\n ('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\n \"\n [title]=\"('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\"\n (click)=\"_addNewRule(_includeRules)\"\n ></button>\n }\n </div>\n </div>\n </fd-layout-grid>\n }\n </div>\n </fd-panel>\n <!-- Exclude Rules -->\n <fd-panel [expanded]=\"_excludePanelExpanded\">\n <div fd-panel-title>\n {{\n (\n (_validExcludeRulesCount > 0\n ? 'platformTable.P13FilterDialogExcludePanelTitleWithCount'\n : 'platformTable.P13FilterDialogExcludePanelTitleWithoutCount'\n ) | fdTranslate: { count: _validExcludeRulesCount }\n )()\n }}\n </div>\n <div fd-panel-content>\n @for (rule of _excludeRules; track rule) {\n <fd-layout-grid>\n <div fdLayoutGridRow>\n <fdp-table-filter-rule\n [fdLayoutGridCol]=\"10\"\n [rule]=\"rule\"\n (ruleChange)=\"_recalculateResetAvailability()\"\n (ruleStateChange)=\"_onRuleStateChange()\"\n ></fdp-table-filter-rule>\n <!-- Actions buttons -->\n <div [fdLayoutGridCol]=\"2\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"sys-cancel\"\n [attr.aria-label]=\"\n ('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\n \"\n [title]=\"('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\"\n (click)=\"_removeRule(rule, _excludeRules)\"\n ></button>\n @if (_excludeRules.length - 1 === $index) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"add\"\n [attr.aria-label]=\"\n ('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\n \"\n [title]=\"('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\"\n (click)=\"_addNewRule(_excludeRules)\"\n ></button>\n }\n </div>\n </div>\n </fd-layout-grid>\n }\n </div>\n </fd-panel>\n </fd-dialog-body>\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.P13FilterDialogConfirmationBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n <fd-button-bar\n fdType=\"transparent\"\n [label]=\"('platformTable.P13FilterDialogCancelBtnLabel' | fdTranslate)()\"\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, signal, ViewEncapsulation } from '@angular/core';\nimport {\n CollectionGroup,\n getUniqueListValuesByKey,\n SortDirection,\n TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n DialogRef\n} from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ResetButtonComponent, Resettable, RESETTABLE_TOKEN } from '../../reset-button/reset-button.component';\n\nexport interface GroupDialogColumn {\n label: string;\n key: string;\n}\n\nexport interface GroupDialogData extends TableDialogCommonData {\n collectionGroup: CollectionGroup[];\n columns: GroupDialogColumn[];\n}\n\nexport interface GroupDialogResultData {\n collectionGroup: CollectionGroup[];\n}\n\nconst NOT_SELECTED_OPTION_VALUE = null;\n\nclass GroupRule {\n get isValid(): boolean {\n return this.columnKey !== NOT_SELECTED_OPTION_VALUE;\n }\n\n constructor(\n /** Column key the rule belongs to */\n public columnKey: string | null = NOT_SELECTED_OPTION_VALUE,\n /** Show Field as Column */\n public showAsColumn = true\n ) {}\n}\n\n@Component({\n templateUrl: './grouping.component.html',\n styleUrl: './grouping.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13GroupingDialogComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n BarLeftDirective,\n BarElementDirective,\n TitleComponent,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n SelectComponent,\n OptionComponent,\n CheckboxComponent,\n FormsModule,\n ButtonComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe\n ]\n})\nexport class P13GroupingDialogComponent implements Resettable {\n /** Table columns available for grouping */\n readonly columns: GroupDialogColumn[] = [];\n /** Indicates when reset command is available */\n readonly isResetAvailable$ = signal(false);\n\n /** Group rules to render */\n rules: GroupRule[] = [];\n\n /** @hidden */\n constructor(public dialogRef: DialogRef<GroupDialogData>) {\n const { columns, collectionGroup } = this.dialogRef.data;\n\n this.columns = columns || [];\n\n this._initiateRules(collectionGroup);\n }\n\n /** Reset changes to the initial state */\n reset(): void {\n this._initiateRules();\n this.isResetAvailable$.set(false);\n }\n\n /** Close dialog */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /** Confirm changes and close dialog */\n confirm(): void {\n const collectionGroup = this._getCollectionGroupFromGroupRules(this._getUniqueRules(this.rules));\n const result: GroupDialogResultData = { collectionGroup };\n this.dialogRef.close(result);\n }\n\n /** @hidden */\n _recalculateResetAvailability(): void {\n const hasOnlyOneEmptyRule = this.rules.length === 1 && !this.rules[0].isValid;\n this.isResetAvailable$.set(!hasOnlyOneEmptyRule);\n }\n\n /** @hidden */\n _removeRule(rule: GroupRule): void {\n this.rules = this.rules.filter((_rule) => _rule !== rule);\n\n // Keep at least one item in the list\n if (this.rules.length === 0) {\n this.rules.push(new GroupRule());\n }\n\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _addNew(index: number): void {\n this.rules.splice(index + 1, 0, new GroupRule());\n }\n\n /** @hidden */\n _onRuleColumnKeyChange(rule: GroupRule, columnKey: string): void {\n rule.columnKey = columnKey;\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _onRuleShowAsColumnChange(rule: GroupRule, value: boolean): void {\n rule.showAsColumn = value;\n this._recalculateResetAvailability();\n }\n\n /** Get available columns for a rule */\n getAvailableColumns(rule: GroupRule): GroupDialogColumn[] {\n const selectedKeys = this.rules.map((r) => r.columnKey).filter((key) => key !== NOT_SELECTED_OPTION_VALUE);\n return this.columns.filter((column) => !selectedKeys.includes(column.key) || column.key === rule.columnKey);\n }\n\n /** @hidden */\n private _initiateRules(collectionGroup?: CollectionGroup[]): void {\n this.rules = this._createGroupRules(collectionGroup);\n\n // Keep at least one item in the list\n if (this.rules.length === 0) {\n this.rules.push(new GroupRule());\n }\n\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n private _createGroupRules(collectionGroup: CollectionGroup[] = []): GroupRule[] {\n return collectionGroup.map(({ field, showAsColumn }): GroupRule => new GroupRule(field, showAsColumn));\n }\n\n /** @hidden */\n private _getCollectionGroupFromGroupRules(rules = this.rules): CollectionGroup[] {\n return rules.filter(this._isRuleValid).map(\n ({ columnKey, showAsColumn }): CollectionGroup => ({\n field: columnKey!,\n showAsColumn,\n direction: SortDirection.NONE\n })\n );\n }\n\n /** @hidden */\n private _getUniqueRules(rules: GroupRule[]): GroupRule[] {\n return getUniqueListValuesByKey(rules, 'columnKey');\n }\n\n /** @hidden */\n private _isRuleValid = (rule: GroupRule): boolean => rule?.isValid;\n}\n","<fd-dialog class=\"fdp-table-p13-grouping-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 fd-title [headerSize]=\"4\">{{ ('platformTable.P13GroupDialogHeader' | fdTranslate)() }}</h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n @for (rule of rules; track rule; let i = $index) {\n <div class=\"group-row\">\n <fd-select\n class=\"group-row__select\"\n [value]=\"rule.columnKey\"\n (valueChange)=\"_onRuleColumnKeyChange(rule, $event)\"\n [placeholder]=\"('platformTable.P13GroupDialogNoneSelectedColumnSelectPlaceholder' | fdTranslate)()\"\n >\n @for (column of getAvailableColumns(rule); track column) {\n <li fd-option [value]=\"column.key\">\n {{ column.label }}\n </li>\n }\n </fd-select>\n\n <fd-checkbox\n class=\"group-row__checkbox\"\n [ngModel]=\"rule.showAsColumn\"\n (ngModelChange)=\"_onRuleShowAsColumnChange(rule, $event)\"\n [label]=\"('platformTable.P13GroupDialogShowFieldAsColumnCheckboxLabel' | fdTranslate)()\"\n ></fd-checkbox>\n\n <div class=\"group-row__actions\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"sys-cancel\"\n [attr.aria-label]=\"('platformTable.P13GroupDialogRemoveGroupBtnTitle' | fdTranslate)()\"\n [title]=\"('platformTable.P13GroupDialogRemoveGroupBtnTitle' | fdTranslate)()\"\n (click)=\"_removeRule(rule)\"\n [disabled]=\"!rule.columnKey\"\n ></button>\n\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"add\"\n [attr.aria-label]=\"('platformTable.P13GroupDialogAddNewGroupBtnTitle' | fdTranslate)()\"\n [title]=\"('platformTable.P13GroupDialogAddNewGroupBtnTitle' | fdTranslate)()\"\n (click)=\"_addNew(i)\"\n [disabled]=\"rules.length >= columns.length || !rule.columnKey\"\n ></button>\n </div>\n </div>\n }\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.P13GroupDialogConfirmationBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n\n <fd-button-bar\n fdType=\"transparent\"\n [label]=\"('platformTable.P13GroupDialogCancelBtnLabel' | fdTranslate)()\"\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Columns Settings.\n *\n */\n@Component({\n selector: 'fdp-table-p13-columns',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableP13ColumnsComponent {}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * Personalization Dialog Filter Settings.\n */\n@Component({\n selector: 'fdp-table-p13-filter',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableP13FilterComponent {\n /**\n * Function for handling validation of the filter rules in the table personalization dialog.\n */\n @Input()\n validator: ((rules: CollectionFilter[]) => boolean) | undefined;\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Group Settings.\n *\n */\n@Component({\n selector: 'fdp-table-p13-group',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableP13GroupComponent {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Sort Settings.\n *\n */\n@Component({\n selector: 'fdp-table-p13-sort',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableP13SortComponent {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Pipe,\n PipeTransform,\n ViewEncapsulation,\n forwardRef,\n signal\n} from '@angular/core';\nimport {\n CollectionSort,\n SortDirection,\n TableDialogCommonData,\n getUniqueListValuesByKey\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { DisabledBehaviorDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nexport interface SortDialogColumn {\n label: string;\n key: string;\n}\n\nexport interface SortDialogData extends TableDialogCommonData {\n collectionSort: CollectionSort[];\n columns: SortDialogColumn[];\n}\n\nexport interface SortDialogResultData {\n collectionSort: CollectionSort[];\n}\n\nexport interface SortRule {\n columnKey: string | null;\n direction: SortDirection;\n}\n\nconst NOT_SELECTED_OPTION_VALUE = null;\n\nclass ValidatedSortRule implements SortRule {\n get isValid(): boolean {\n return this.columnKey !== NOT_SELECTED_OPTION_VALUE && this.direction !== NOT_SELECTED_OPTION_VALUE;\n }\n\n constructor(\n /** Column key the rule belongs to */\n public columnKey: string | null = NOT_SELECTED_OPTION_VALUE,\n /** Sort direction */\n public direction: SortDirection = SortDirection.ASC\n ) {}\n}\n\n@Component({\n templateUrl: './sorting.component.html',\n styleUrl: './sorting.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13SortingDialogComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n BarLeftDirective,\n BarElementDirective,\n TitleComponent,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n SelectComponent,\n OptionComponent,\n ButtonComponent,\n DisabledBehaviorDirective,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe,\n forwardRef(() => GetAvailableSortColumnsPipe)\n ]\n})\nexport class P13SortingDialogComponent implements Resettable {\n /** Table columns available for sorting */\n readonly columns: SortDialogColumn[] = [];\n\n /** Indicates when reset command is available */\n readonly isResetAvailable$ = signal(false);\n\n /** @hidden */\n readonly SORT_DIRECTION = SortDirection;\n\n /** Sort rules to render */\n rules: ValidatedSortRule[] = [];\n\n /** @hidden */\n constructor(\n public dialogRef: DialogRef<SortDialogData>,\n private cdr: ChangeDetectorRef\n ) {\n const { columns, collectionSort } = this.dialogRef.data;\n\n this.columns = columns || [];\n\n this._initiateRules(collectionSort);\n }\n\n /** Reset changes to the initial state */\n reset(): void {\n this._initiateRules();\n this.isResetAvailable$.set(false);\n }\n\n /** Close dialog */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /** Confirm changes and close dialog */\n confirm(): void {\n const collectionSort = this._getCollectionSortFromSortRules(this._getUniqueRules(this.rules));\n const result: SortDialogResultData = { collectionSort };\n this.dialogRef.close(result);\n }\n\n /** @hidden */\n _removeRule(rule: ValidatedSortRule): void {\n this.rules = this.rules.filter((_rule) => _rule !== rule);\n\n // Keep at least one item in the list\n if (this.rules.length === 0) {\n this.rules.push(new ValidatedSortRule());\n }\n\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _addNew(index: number): void {\n this.rules.splice(index + 1, 0, new ValidatedSortRule());\n }\n\n /** @hidden */\n _onRuleColumnKeyChange(rule: ValidatedSortRule, columnKey: string): void {\n rule.columnKey = columnKey;\n this._recalculateResetAvailability();\n this.cdr.detectChanges();\n }\n\n /** @hidden */\n _onRuleDirectionChange(rule: ValidatedSortRule, direction: SortDirection): void {\n rule.direction = direction;\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _recalculateResetAvailability(): void {\n const hasOnlyOneEmptyRule = this.rules.length === 1 && !this.rules[0].isValid;\n this.isResetAvailable$.set(!hasOnlyOneEmptyRule);\n }\n\n /** @hidden */\n _trackByColumnKey(index: number, rule: ValidatedSortRule): string | null {\n return rule.columnKey;\n }\n\n /** @hidden */\n private _initiateRules(collectionSort?: CollectionSort[]): void {\n this.rules = this._createRules(collectionSort);\n\n // Keep at least one item in the list\n if (this.rules.length === 0) {\n this.rules.push(new ValidatedSortRule());\n }\n\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n private _createRules(collectionSort: CollectionSort[] = []): ValidatedSortRule[] {\n return collectionSort.map(({ field, direction }): ValidatedSortRule => new ValidatedSortRule(field, direction));\n }\n\n /** @hidden */\n private _getCollectionSortFromSortRules(rules = this.rules): CollectionSort[] {\n return rules.filter(this._isRuleValid).map(\n ({ columnKey, direction }): CollectionSort => ({\n field: columnKey,\n direction\n })\n );\n }\n\n /** @hidden */\n private _getUniqueRules(rules: ValidatedSortRule[]): ValidatedSortRule[] {\n return getUniqueListValuesByKey(rules, 'columnKey');\n }\n\n /** @hidden */\n private _isRuleValid = (rule: ValidatedSortRule): boolean => rule?.isValid;\n}\n\n@Pipe({\n name: 'getAvailableSortColumns',\n pure: false,\n standalone: true\n})\nexport class GetAvailableSortColumnsPipe implements PipeTransform {\n /** @hidden */\n transform(columns: SortDialogColumn[], rules: SortRule[], currentKey: string | null): SortDialogColumn[] {\n const usedKeys = new Set(rules.map((r) => r.columnKey));\n return columns.filter((c) => !usedKeys.has(c.key) || currentKey === c.key);\n }\n}\n","<fd-dialog class=\"fdp-table-p13-sorting-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 fd-title [headerSize]=\"4\">\n {{ ('platformTable.P13SortDialogHeader' | fdTranslate)() }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @for (rule of rules; track _trackByColumnKey(i, rule); let i = $index) {\n <div class=\"sort-row\">\n <fd-select\n class=\"sort-row__select\"\n [value]=\"rule.columnKey\"\n (valueChange)=\"_onRuleColumnKeyChange(rule, $event)\"\n [placeholder]=\"('platformTable.P13SortDialogNoneSelectedColumn' | fdTranslate)()\"\n >\n @for (column of columns | getAvailableSortColumns: rules : rule.columnKey; track column) {\n <li fd-option [value]=\"column.key\">\n {{ column.label }}\n </li>\n }\n </fd-select>\n <fd-select\n class=\"sort-row__select\"\n [value]=\"rule.direction\"\n (valueChange)=\"_onRuleDirectionChange(rule, $event)\"\n [placeholder]=\"('platformTable.P13SortDialogNoneSelectedSorting' | fdTranslate)()\"\n >\n <li fd-option [value]=\"SORT_DIRECTION.ASC\">\n {{ ('platformTable.P13SortDialogSortOrderSelectOptionAsc' | fdTranslate)() }}\n </li>\n <li fd-option [value]=\"SORT_DIRECTION.DESC\">\n {{ ('platformTable.P13SortDialogSortOrderSelectOptionDesc' | fdTranslate)() }}\n </li>\n </fd-select>\n <div class=\"sort-row__actions\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"sys-cancel\"\n [attr.aria-label]=\"('platformTable.P13SortDialogRemoveSortBtnTitle' | fdTranslate)()\"\n [title]=\"('platformTable.P13SortDialogRemoveSortBtnTitle' | fdTranslate)()\"\n (click)=\"_removeRule(rule)\"\n ></button>\n <button\n fd-button\n [fdkDisabled]=\"rules.length === columns.length\"\n fdType=\"transparent\"\n glyph=\"add\"\n [attr.aria-label]=\"('platformTable.P13SortDialogAddNewSortBtnTitle' | fdTranslate)()\"\n [title]=\"('platformTable.P13SortDialogAddNewSortBtnTitle' | fdTranslate)()\"\n (click)=\"_addNew(i)\"\n ></button>\n </div>\n </div>\n }\n </fd-dialog-body>\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.P13SortDialogConfirmationBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n <fd-button-bar\n fdType=\"transparent\"\n [label]=\"('platformTable.P13SortDialogCancelBtnLabel' | fdTranslate)()\"\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnDestroy,\n Output\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';\n\nimport {\n CollectionFilter,\n CollectionGroup,\n CollectionSort,\n Table,\n TableColumn,\n TableDialogCommonData,\n TableState\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport { TableP13ColumnsComponent } from './table-p13-columns.component';\nimport { TableP13FilterComponent } from './table-p13-filter.component';\nimport { TableP13GroupComponent } from './table-p13-group.component';\nimport { TableP13SortComponent } from './table-p13-sort.component';\n\nimport { VisibleColumnType } from './columns/columns.component';\n\nimport { ColumnsDialogData, ColumnsDialogResultData, P13ColumnsDialogComponent } from './columns/columns.component';\nimport { FilterDialogData, FilterDialogResultData, P13FilteringDialogComponent } from './filtering/filtering.component';\nimport { GroupDialogData, GroupDialogResultData, P13GroupingDialogComponent } from './grouping/grouping.component';\nimport { P13SortingDialogComponent, SortDialogData, SortDialogResultData } from './sorting/sorting.component';\n\nconst dialogConfig: DialogConfig = {\n responsivePadding: true,\n verticalPadding: true,\n minWidth: '30rem',\n /** 88px it's the header + footer height */\n bodyMinHeight: 'calc(50vh - 88px)'\n};\n\n/**\n * View settings dialog component.\n *\n * Used to link view settings filters options to the grid table.\n *\n * ```html\n * <fdp-table #myTable></fdp-table>\n * ...\n * <fdp-table-p13-dialog [table]=\"myTable\">\n * <!-- Sort Panel -->\n * <fdp-table-p13-sort></fdp-table-p13-sort>\n *\n * <!-- Filter Panel -->\n * <fdp-table-p13-filter></fdp-table-p13-filter>\n *\n * <!-- Group Panel -->\n * <fdp-table-p13-group></fdp-table-p13-group>\n *\n * <!-- Columns Panel -->\n * <fdp-table-p13-columns></fdp-table-p13-columns>\n * </fdp-table-p13-dialog>\n * ```\n * */\n@Component({\n selector: 'fdp-table-p13-dialog',\n template: '',\n styles: [\n `\n :host {\n z-index: 999;\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class TableP13DialogComponent implements OnDestroy {\n /** Reference to table component. */\n @Input()\n set table(table: Table) {\n this._setTable(table);\n }\n get table(): Table {\n return this._table;\n }\n\n /** Event emitted when dialog is closed. */\n @Output()\n dialogClosed = new EventEmitter<string[]>();\n\n /** @hidden */\n @ContentChild(TableP13SortComponent)\n sort: TableP13SortComponent;\n\n /** @hidden */\n @ContentChild(TableP13FilterComponent)\n filter: TableP13FilterComponent;\n\n /** @hidden */\n @ContentChild(TableP13GroupComponent)\n group: TableP13GroupComponent;\n\n /** @hidden */\n @ContentChild(TableP13ColumnsComponent)\n columns: TableP13ColumnsComponent;\n\n /** @hidden */\n _table: Table;\n\n /** @hidden */\n _dialogRef: DialogRef<TableDialogCommonData, any>;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _tableSubscriptions = new Subscription();\n\n /** @hidden */\n private _columnOrder: VisibleColumnType[];\n\n /** @hidden */\n constructor(private readonly _dialogService: DialogService) {}\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._unsubscribeFromTable();\n }\n\n /** Open Sort Settings Dialog */\n showSortingSettings(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns().filter(({ sortable }) => sortable);\n const sortBy = state.sortBy;\n const dialogData: SortDialogData = {\n columns: columns.map(({ label, key }) => ({ label, key })),\n collectionSort: sortBy\n };\n\n // dismiss any open dialog, before opening a new one\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n P13SortingDialogComponent,\n {\n ...dialogConfig,\n data: dialogData\n },\n this.table.injector\n );\n\n this._subscriptions.add(\n this._dialogRef.afterClosed\n .pipe(filter((result) => !!result))\n .subscribe(({ collectionSort }: SortDialogResultData) => {\n this._applySorting(collectionSort);\n })\n );\n }\n\n /** Open Filtering Settings Dialog */\n showFilteringSettings(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns();\n const filterBy = state?.filterBy;\n const dialogData: FilterDialogData = {\n // add filterSelectOptions to be sent with the data\n columns: columns.map(({ label, key, dataType, filterable, filterSelectOptions }) => ({\n label,\n key,\n dataType,\n filterable,\n filterSelectOptions\n })),\n collectionFilter: filterBy\n };\n\n if (this.filter && this.filter.validator) {\n dialogData.validator = this.filter.validator;\n }\n\n // dismiss any open dialog, before opening a new one\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n P13FilteringDialogComponent,\n {\n ...dialogConfig,\n disablePaddings: true,\n width: '50rem',\n data: dialogData\n },\n this.table.injector\n );\n\n this._subscriptions.add(\n this._dialogRef.afterClosed\n .pipe(filter((result) => !!result))\n .subscribe(({ collectionFilter }: FilterDialogResultData) => {\n this._applyFiltering(collectionFilter);\n })\n );\n }\n\n /** Open Grouping Settings Dialog */\n showGroupingSettings(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns();\n const visibleColumns = state.columns;\n const groupBy = state.groupBy;\n const dialogData: GroupDialogData = {\n columns: columns\n // We can group by visible columns only\n .filter(({ name }) => visibleColumns.includes(name))\n .filter(({ groupable }) => groupable)\n .map(({ label, key }) => ({ label, key })),\n collectionGroup: groupBy\n };\n\n // dismiss any open dialog, before opening a new one\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n P13GroupingDialogComponent,\n {\n ...dialogConfig,\n data: dialogData\n },\n this.table.injector\n );\n\n this._subscriptions.add(\n this._dialogRef.afterClosed\n .pipe(filter((result) => !!result))\n .subscribe(({ collectionGroup }: GroupDialogResultData) => {\n this._applyGrouping(collectionGroup);\n })\n );\n }\n\n /** Open Columns Settings Dialog */\n showColumnsSettings(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns();\n const visibleColumns = state.columns;\n const dialogData: ColumnsDialogData = {\n availableColumns: columns.map(({ label, name }) => ({ label, key: name })),\n visibleColumns\n };\n\n if (this._columnOrder && this._columnOrder.length) {\n dialogData.availableColumns.sort(\n (a, b) => this._columnOrder.indexOf(a.key) - this._columnOrder.indexOf(b.key)\n );\n }\n\n // dismiss any open dialog, before opening a new one\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n P13ColumnsDialogComponent,\n {\n ...dialogConfig,\n disablePaddings: true,\n minWidth: '35rem',\n data: dialogData\n },\n this.table.injector\n );\n\n this._subscriptions.add(\n this._dialogRef.afterClosed\n .pipe(filter((result) => !!result))\n .subscribe(({ visibleColumns: result, columnOrder }: ColumnsDialogResultData) => {\n if (columnOrder) {\n this._columnOrder = columnOrder;\n }\n this.dialogClosed.emit(result);\n this._applyColumns(result);\n })\n );\n }\n\n /** @hidden */\n private _setTable(table: Table): void {\n this._table = table;\n\n this._unsubscribeFromTable();\n\n if (this._table) {\n this._subscribeToTable();\n }\n }\n\n /** @hidden */\n private _subscribeToTable(): void {\n this._listenToTableTriggersToOpenDialogs();\n this._listenToTableColumns();\n }\n\n /** @hidden */\n private _listenToTableTriggersToOpenDialogs(): void {\n this._tableSubscriptions.add(this._table.openTableSortSettings.subscribe(() => this.showSortingSettings()));\n this._tableSubscriptions.add(this._table.openTableFilterSettings.subscribe(() => this.showFilteringSettings()));\n this._tableSubscriptions.add(this._table.openTableGroupSettings.subscribe(() => this.showGroupingSettings()));\n this._tableSubscriptions.add(this._table.openTableColumnSettings.subscribe(() => this.showColumnsSettings()));\n }\n\n /** @hidden */\n private _listenToTableColumns(): void {\n this._tableSubscriptions.add(\n this._table.tableColumnsStream.subscribe((columns: TableColumn[]) => {\n this._table?.showSortSettingsInToolbar(columns.some(({ sortable }) => sortable));\n\n this._table?.showGroupSettingsInToolbar(columns.some(({ groupable }) => groupable));\n\n this._table?.showColumnSettingsInToolbar(columns.length > 0);\n\n this._table?.showFilterSettingsInToolbar(columns.some(({ filterable }) => filterable));\n\n this._table?.setHeaderColumnFilteringDisabled(columns.some(({ filterable }) => filterable));\n })\n );\n }\n\n /** @hidden */\n private _getTableState(): TableState {\n return this._table?.getTableState();\n }\n\n /** @hidden */\n private _getTableColumns(): TableColumn[] {\n return this._table?.getTableColumns() || [];\n }\n\n /** @hidden */\n private _applySorting(collectionSort: CollectionSort[]): void {\n this._table?.sort(collectionSort);\n }\n\n /** @hidden */\n private _applyFiltering(filters: CollectionFilter[]): void {\n this._table?.filter(filters);\n }\n\n /** @hidden */\n private _applyGrouping(collectionGroup: CollectionGroup[]): void {\n this._table?.group(collectionGroup);\n }\n\n /** @hidden */\n private _applyColumns(columns: string[]): void {\n this._table?.setColumns(columns);\n }\n\n /** @hidden */\n private _unsubscribeFromTable(): void {\n this._tableSubscriptions.unsubscribe();\n this._tableSubscriptions = new Subscription();\n }\n}\n","import { InjectionToken, TemplateRef } from '@angular/core';\n\nexport interface TableToolbarInterface {\n tableToolbarTitleId: string;\n contentTemplateRef: TemplateRef<any>;\n}\n\n/** @deprecated Use TableToolbarInterface instead */\nexport type TableToolbarWithTemplate = TableToolbarInterface;\n\n/**\n * Used to provide a table-toolbar to the table component without causing a circular dependency.\n */\nexport const TABLE_TOOLBAR = new InjectionToken<any>('PLATFORM_TABLE_TOOLBAR');\n","import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\n\n/**\n * The component that represents a table toolbar actions.\n * ```html\n * <fdp-table-toolbar-actions>\n * <fdp-button label=\"Action One\"></fdp-button>\n * <fdp-button label=\"Action Two\"></fdp-button>\n * </fdp-table-toolbar-actions>\n * ```\n * */\n@Component({\n selector: 'fdp-table-toolbar-actions',\n template: `\n <ng-template>\n <ng-content></ng-content>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableToolbarActionsComponent {\n /** @hidden */\n @ViewChild(TemplateRef)\n contentTemplateRef: TemplateRef<any>;\n}\n","import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fdp-table-toolbar-left-actions',\n template: `\n <ng-template>\n <ng-content></ng-content>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableToolbarLeftActionsComponent {\n /** @hidden */\n @ViewChild(TemplateRef)\n _contentTemplateRef: TemplateRef<any>;\n}\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n DestroyRef,\n Directive,\n EventEmitter,\n Input,\n Output,\n Signal,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n computed,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { HeadingLevel } from '@fundamental-ngx/core/shared';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport {\n ToolbarComponent,\n ToolbarItemDirective,\n ToolbarLabelDirective,\n ToolbarSeparatorComponent,\n ToolbarSpacerDirective\n} from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent, SearchInput, SuggestionItem } from '@fundamental-ngx/platform/search-field';\nimport { Table, TableService } from '@fundamental-ngx/platform/table-helpers';\nimport { TABLE_TOOLBAR, TableToolbarInterface } from './table-toolbar';\nimport { TableToolbarActionsComponent } from './table-toolbar-actions.component';\nimport { TableToolbarLeftActionsComponent } from './table-toolbar-left-actions.component';\n\nexport interface TableAppliedFilter {\n columnName: string;\n params: string;\n}\n\nexport interface ToolbarContext {\n counter: Signal<number>;\n sortable: Signal<boolean>;\n filterable: Signal<boolean>;\n groupable: Signal<boolean>;\n columns: Signal<boolean>;\n settings: Signal<boolean>;\n hasAnyActions: Signal<boolean>;\n appliedFilters: Signal<TableAppliedFilter[]>;\n}\n\n/** Context provided to the titleTemplate. */\nexport interface TableToolbarTitleTemplateContext {\n /** Item count signal. */\n counter: Signal<number>;\n}\n\nexport type EditMode = 'none' | 'inline';\n\nlet tableToolbarTitleUniqueId = 0;\nlet tableToolbarUniqueId = 0;\n\n@Directive({\n selector: '[fdpTableToolbarTemplate]',\n standalone: true\n})\nexport class TableToolbarTemplateDirective {\n /** @hidden */\n readonly templateRef = inject<TemplateRef<ToolbarContext>>(TemplateRef);\n\n /** @hidden */\n static ngTemplateContextGuard(\n _directive: TableToolbarTemplateDirective,\n context: unknown\n ): context is ToolbarContext {\n return true;\n }\n}\n\n/**\n * The component that represents a table toolbar.\n *\n * ```html\n * <fdp-table-toolbar\n * title=\"Order Line Items\"\n * [hideItemCount]=\"false\">\n * </fdp-table-toolbar>\n * ```\n * */\n\n@Component({\n selector: 'fdp-table-toolbar',\n templateUrl: './table-toolbar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }],\n imports: [\n ToolbarComponent,\n ToolbarItemDirective,\n ToolbarSeparatorComponent,\n NgTemplateOutlet,\n ToolbarSpacerDirective,\n SearchFieldComponent,\n ButtonComponent,\n AsyncPipe,\n FdTranslatePipe,\n TableToolbarTemplateDirective,\n ToolbarLabelDirective,\n ContentDensityDirective,\n TitleComponent\n ]\n})\nexport class TableToolbarComponent implements TableToolbarInterface, AfterViewChecked {\n /**\n * Whether the toolbar should hide elements in popover when they overflow.\n * */\n @Input()\n shouldOverflow = true;\n\n /** Table title. */\n @Input()\n title: string;\n\n /** Aria label for the search field. */\n @Input()\n searchFieldAriaLabel: Nullable<string>;\n\n /** Toggle to show table item count. */\n @Input()\n hideItemCount = false;\n\n /** Toggle to show search input. */\n @Input()\n hideSearchInput = false;\n\n /** Set a customized placeholder */\n @Input()\n searchFieldPlaceholder: string;\n\n /** Toggle to expand and collapse all feature */\n @Input()\n showExpandCollapseButtons = false;\n /** Suggestions for search field. */\n @Input()\n searchSuggestions: SuggestionItem[] = [];\n\n /** Table rows edit/add mode. */\n @Input()\n editMode: EditMode = 'none';\n\n /** Whether display Refresh button in the search field */\n @Input()\n disableRefresh = false;\n\n /** Whether display search button in the search field */\n @Input()\n disableSearch = false;\n\n /** Toolbar Aria-label attribute. */\n @Input()\n ariaLabel: string;\n\n /** Toolbar Aria-labelledby attribute. */\n @Input()\n ariaLabelledBy: string;\n\n /** Toolbar Aria-describedby attribute. */\n @Input()\n ariaDescribedBy: string;\n\n /** Toolbar Aria-orientation attribute. */\n @Input()\n ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * The ID of the toolbar\n * */\n @Input()\n id = `fd-table-toolbar-${tableToolbarUniqueId++}`;\n\n /** Search field input text. */\n @Input()\n set searchFieldInputText(text: string) {\n this._searchInputText = text;\n this.submitSearch({ text, category: null });\n }\n get searchFieldInputText(): string {\n return this._searchInputText;\n }\n\n /** Event emitted when the search field input is changed. */\n @Output()\n searchFieldInputChange = new EventEmitter<string>();\n\n /** @hidden */\n @ContentChild(TableToolbarActionsComponent)\n tableToolbarActionsComponent: TableToolbarActionsComponent;\n\n /** @hidden */\n @ContentChild(TableToolbarLeftActionsComponent)\n _tableToolbarLeftActionsComponent: TableToolbarLeftActionsComponent;\n\n /** @hidden */\n @ViewChild(TemplateRef)\n contentTemplateRef: TemplateRef<any>;\n\n /** @hidden */\n tableToolbarTitleId: string = 'fd-table-toolbar-title-' + tableToolbarTitleUniqueId++;\n\n /** @hidden */\n _showSaveButton = false;\n\n /** @hidden */\n _searchInputText = '';\n\n /**\n * Custom title template. When provided, it replaces the default string title.\n * The template context provides a `counter` signal with the current item count.\n *\n * ```html\n * <fdp-table-toolbar [titleTemplate]=\"customTitleTpl\">\n * <ng-template #customTitleTpl let-counter=\"counter\">\n * <fd-icon glyph=\"product\"></fd-icon> Products ({{ counter() }})\n * </ng-template>\n * </fdp-table-toolbar>\n * ```\n */\n titleTemplate = input<TemplateRef<TableToolbarTitleTemplateContext> | null>(null);\n\n /**\n * Heading level of the table toolbar title.\n */\n headingLevel = input<HeadingLevel>(2);\n\n /** @hidden */\n readonly headingLevelParsed = computed(() => {\n const level = this.headingLevel();\n if (typeof level === 'number') {\n return level;\n } else if (typeof level === 'string') {\n return Number.parseInt(level.replace(/\\D/g, ''), 10);\n }\n return 2;\n });\n\n /** @hidden */\n readonly tableLoading$: Observable<boolean> = inject(TableService).tableLoading$;\n\n /** @hidden Title text extracted from titleTemplate for accessibility. */\n protected readonly titleText = signal<string>('');\n\n /** @hidden */\n private _titleObserver: MutationObserver | undefined;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(\n private _tableService: TableService,\n private readonly _table: Table\n ) {\n this._listenToTableEvents();\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n // Set up observer once the element exists in the DOM\n if (!this._titleObserver) {\n this._setupTitleObserver();\n }\n }\n\n /** @hidden */\n submitSearch(search: SearchInput): void {\n this._table.search(search);\n }\n\n /** @hidden */\n searchInputChanged(event: SearchInput): void {\n this.searchFieldInputChange.emit(event.text);\n }\n\n /** @hidden */\n openSorting(): void {\n this._table.openTableSortSettings.emit();\n }\n\n /** @hidden */\n openFiltering(): void {\n this._table.openTableFilterSettings.emit();\n }\n\n /** @hidden */\n openGrouping(): void {\n this._table.openTableGroupSettings.emit();\n }\n\n /** @hidden */\n openColumns(): void {\n this._table.openTableColumnSettings.emit();\n }\n\n /** @hidden */\n _addRow(): void {\n this._table.addRow();\n }\n\n /** @hidden */\n _saveRows(): void {\n this._table.saveRows();\n }\n\n /** @hidden */\n _cancelEditing(): void {\n this._table.cancelEditing();\n }\n\n /** @hidden */\n _expandAll(): void {\n this._table.expandAll();\n }\n\n /** @hidden */\n _formatAppliedFilters(appliedFilters: { columnName: string; params: string }[]): string {\n return appliedFilters\n .map((filter, index) => {\n const separator = index < appliedFilters.length - 1 ? ', ' : '';\n return `${filter.columnName} (${filter.params})${separator}`;\n })\n .join('');\n }\n\n /** @hidden */\n _closeFilterToolbar(): void {\n this._tableService.resetFilters();\n }\n\n /** @hidden */\n _collapseAll(): void {\n this._table.collapseAll();\n }\n\n /** @hidden */\n private _listenToTableEvents(): void {\n this._table.emptyRowAdded.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._showSaveButton = true;\n });\n\n this._table.save.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._showSaveButton = false;\n });\n\n this._table.cancel.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._showSaveButton = false;\n });\n\n this._table.presetChanged.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((state) => {\n this._searchInputText = state.searchInput?.text ?? '';\n });\n }\n\n /** @hidden Sets up a MutationObserver to watch for title content changes. */\n private _setupTitleObserver(): void {\n const titleElement = document.getElementById(this.tableToolbarTitleId);\n if (titleElement) {\n this._updateTitleText(titleElement);\n this._titleObserver = new MutationObserver(() => this._updateTitleText(titleElement));\n this._titleObserver.observe(titleElement, {\n childList: true,\n subtree: true,\n characterData: true\n });\n this._destroyRef.onDestroy(() => this._titleObserver?.disconnect());\n }\n }\n\n /** @hidden Updates the title text from the rendered title element. */\n private _updateTitleText(titleElement: HTMLElement): void {\n const text = titleElement.textContent?.trim() || '';\n if (text !== this.titleText()) {\n this.titleText.set(text);\n }\n }\n}\n","<ng-template\n fdpTableToolbarTemplate\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n let-settings=\"settings\"\n let-hasAnyActions=\"hasAnyActions\"\n let-appliedFilters=\"appliedFilters\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"titleTemplate() ? '' : title && !hideItemCount ? title + ' (' + counter() + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n [headingLevel]=\"headingLevel()\"\n [ariaLabel]=\"ariaLabel\"\n [id]=\"id\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ariaOrientation]=\"ariaOrientation\"\n >\n @if (titleTemplate()) {\n <span\n fd-title\n role=\"heading\"\n [headerSize]=\"4\"\n [attr.aria-level]=\"headingLevelParsed()\"\n [attr.title]=\"titleText()\"\n [attr.aria-label]=\"titleText()\"\n class=\"fd-toolbar__title fd-toolbar__title--truncate\"\n [id]=\"tableToolbarTitleId\"\n >\n <ng-template\n [ngTemplateOutlet]=\"titleTemplate()\"\n [ngTemplateOutletContext]=\"{ counter: counter }\"\n ></ng-template>\n </span>\n }\n @if (_tableToolbarLeftActionsComponent) {\n <div fd-toolbar-item class=\"fd-toolbar__group\">\n @if (!!title || !!titleTemplate() || !hideItemCount) {\n <fd-toolbar-separator></fd-toolbar-separator>\n }\n <ng-template [ngTemplateOutlet]=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-template>\n </div>\n }\n <fd-toolbar-spacer></fd-toolbar-spacer>\n @if (!hideSearchInput) {\n <fdp-search-field\n fd-toolbar-item\n [style.min-width.rem]=\"15.5\"\n [placeholder]=\"\n searchFieldPlaceholder\n ? searchFieldPlaceholder\n : ('platformTable.toolbarSearchPlaceholder' | fdTranslate)()\n \"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [disableRefresh]=\"disableRefresh\"\n [disableSearch]=\"disableSearch\"\n [ariaLabel]=\"searchFieldAriaLabel\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n (inputChange)=\"searchInputChanged($event)\"\n ></fdp-search-field>\n }\n @if (editMode !== 'none') {\n <button\n fd-button\n fd-toolbar-item\n [label]=\"('platformTable.toolbarActionCreateButtonLabel' | fdTranslate)()\"\n (click)=\"_addRow()\"\n ></button>\n @if (_showSaveButton) {\n @if (_showSaveButton) {\n <button\n fd-button\n fd-toolbar-item\n [label]=\"('platformTable.toolbarActionSaveButtonLabel' | fdTranslate)()\"\n (click)=\"_saveRows()\"\n ></button>\n }\n <fd-toolbar-separator></fd-toolbar-separator>\n <button\n fd-button\n fd-toolbar-item\n [label]=\"('platformTable.toolbarActionCancelButtonLabel' | fdTranslate)()\"\n (click)=\"_cancelEditing()\"\n fdType=\"transparent\"\n ></button>\n }\n @if (tableToolbarActionsComponent || hasAnyActions()) {\n <fd-toolbar-separator fd-toolbar-item></fd-toolbar-separator>\n }\n }\n @if (tableToolbarActionsComponent) {\n <span fd-toolbar-item class=\"fdp-table-toolbar-actions\">\n <ng-template [ngTemplateOutlet]=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-template>\n </span>\n }\n @if (showExpandCollapseButtons || hasAnyActions()) {\n @if (tableToolbarActionsComponent) {\n <fd-toolbar-separator fd-toolbar-item></fd-toolbar-separator>\n }\n @if (showExpandCollapseButtons) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"('platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n ></button>\n <button\n fd-button\n fd-toolbar-item\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"('platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n ></button>\n }\n @if (settings()) {\n <button\n fd-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"action-settings\"\n [title]=\"('platformTable.toolbarActionButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openSorting()\"\n ></button>\n }\n @if (sortable()) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"sort\"\n [title]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openSorting()\"\n ></button>\n }\n @if (filterable()) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"filter\"\n [title]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openFiltering()\"\n ></button>\n }\n @if (groupable()) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"group-2\"\n [title]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openGrouping()\"\n ></button>\n }\n @if (columns()) {\n <button\n fd-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"action-settings\"\n [title]=\"('platformTable.toolbarActionColumnsButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionColumnsButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openColumns()\"\n ></button>\n }\n }\n </fd-toolbar>\n @if (appliedFilters().length) {\n <fd-toolbar\n fdType=\"info\"\n class=\"fdp-table__applied-filters-toolbar\"\n [active]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [shouldOverflow]=\"shouldOverflow\"\n [headingLevel]=\"headingLevel()\"\n >\n <label fd-toolbar-label>\n {{ ('platformTable.filteredBy' | fdTranslate)() }}:\n {{ _formatAppliedFilters(appliedFilters()) }}\n </label>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <button\n fdCompact\n (click)=\"_closeFilterToolbar()\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n [title]=\"('platformTable.clearFilters' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.clearFilters' | fdTranslate)()\"\n ></button>\n </fd-toolbar>\n }\n</ng-template>\n","export const NOT_FILTERED_OPTION_VALUE = `table-filters-not-filtered-option-value-${Math.random()\n .toString()\n .slice(2, 5)}`;\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport {\n FdpViewSettingsFilterCustomDef,\n FilterType,\n TableFilterSelectOption\n} from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * View settings dialog filter component.\n *\n * ```html\n * <!-- With custom form -->\n * <fdp-table-view-settings-filter\n * column=\"name\"\n * label=\"Name\"\n * type=\"custom\">\n * <ng-container *fdpViewSettingsFilterCustomDef=\"let model\">\n * <label>Enter name:</label>\n * <fdp-input type=\"text\" name=\"name\" [(ngModel)]=\"model.name\"></fdp-input>\n * </ng-container>\n * </fdp-table-view-settings-filter>\n *\n * <!-- Single select -->\n * <fdp-table-view-settings-filter\n * column=\"status\"\n * label=\"Status\"\n * type=\"single-select\"\n * values=\"[{value: 'OUT_OF_STOCK', label: 'Out of stock'}, { value: 'AVAILABLE', label: 'Available'}]\">\n * </fdp-table-view-settings-filter>\n * ```\n *\n * */\n@Component({\n selector: 'fdp-table-view-settings-filter',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableViewSettingsFilterComponent {\n /** Table column name on which to filter. */\n @Input()\n column: string;\n\n /** Label for the column. */\n @Input()\n label: string;\n\n /**\n * Type of filter interface.\n * @type {'single-select' | 'multi-select' | 'custom' 'category'}\n */\n @Input()\n type: FilterType;\n\n /** Selection values for 'single-select' or 'multi-select' filter types. */\n @Input()\n values: TableFilterSelectOption[];\n\n /** Custom filter template directive reference */\n customFilterTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ContentChild(FdpViewSettingsFilterCustomDef)\n set _filterCustomDef(filterCustomDef: FdpViewSettingsFilterCustomDef) {\n this.customFilterTemplate = filterCustomDef?.templateRef;\n }\n}\n","import {\n afterEveryRender,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Input,\n Output\n} from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ContentDensityMode,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\n\n/**\n * Custom Select filter type.\n *\n * Used to render user's custom filter template\n *\n */\n\n@Component({\n selector: 'fdp-filter-custom',\n templateUrl: './filter-custom.component.html',\n // afterEveryRender is used to detect mutations on the _value object after each render cycle.\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [contentDensityObserverProviders()],\n imports: [NgTemplateOutlet]\n})\nexport class FilterCustomComponent {\n /** ViewSettingsFilter options the filter is created from */\n @Input()\n filter: TableViewSettingsFilterComponent;\n\n /** The filter model */\n @Input()\n set filterBy(filterBy: CollectionFilter | undefined) {\n if (!filterBy?.value || Object.prototype.toString.call(filterBy?.value) !== '[object Object]') {\n // force value to be an object\n this._value = {};\n } else {\n this._value = { ...filterBy.value };\n }\n\n this._valueLastEmitted = { ...this._value };\n }\n\n /** Filter model change event */\n @Output()\n valueChange: EventEmitter<unknown> = new EventEmitter<unknown>();\n\n /** Content Density, comes from table injector */\n get contentDensity(): ContentDensityMode {\n return this.contentDensityObserver.value;\n }\n /**\n * @hidden\n * Currently selected value\n */\n _value: Record<string, any>;\n\n /**\n * @hidden\n * Last emitted value\n */\n _valueLastEmitted: Record<string, any>;\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef);\n\n /** @hidden */\n constructor(private contentDensityObserver: ContentDensityObserver) {\n afterEveryRender(() => this._checkValueChanges());\n }\n\n /** @hidden */\n _checkValueChanges(): void {\n try {\n if (JSON.stringify(this._value) === JSON.stringify(this._valueLastEmitted)) {\n return;\n }\n\n this._valueLastEmitted = { ...this._value };\n\n this.valueChange.emit(this._value);\n this._cdr.markForCheck();\n } catch {}\n }\n}\n","<ng-template\n [ngTemplateOutlet]=\"filter.customFilterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: _value, valueChangeEmitter: valueChange, contentDensity: contentDensity }\"\n>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { CollectionFilter, TableFilterSelectOption } from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * Multi Select filter type.\n *\n */\n\ntype SelectableOption = TableFilterSelectOption & { selected: boolean };\n\n@Component({\n selector: 'fdp-filter-multi-select',\n templateUrl: './filter-multi-select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ListComponent, ListItemComponent, CheckboxComponent, FormsModule, ListTitleDirective]\n})\nexport class FilterMultiSelectComponent {\n /** Selectable filter options */\n @Input()\n options: TableFilterSelectOption[] = [];\n\n /** The filter model */\n @Input()\n set filterBy(filterBy: CollectionFilter | undefined) {\n const filterByValue = filterBy?.value || [];\n this._selectableOptions = this.options.map(\n (option): SelectableOption => ({\n ...option,\n selected: filterByValue.includes(option.value)\n })\n );\n this._updateValueBasedOnOptions();\n }\n\n /** Filter model change event */\n @Output()\n valueChange: EventEmitter<any[]> = new EventEmitter();\n\n /**\n * @hidden\n * Currently selected values\n */\n _value: any[];\n\n /** @hidden */\n _selectableOptions: SelectableOption[];\n\n /** @hidden */\n _onSelectChange(option: SelectableOption, selected: boolean): void {\n option.selected = selected;\n this._updateValueBasedOnOptions();\n this.valueChange.emit(this._value);\n }\n\n /** @hidden */\n _updateValueBasedOnOptions(): void {\n this._value = this._selectableOptions.filter(({ selected }) => selected).map(({ value }) => value);\n }\n}\n","<ul fd-list [selection]=\"true\">\n @for (option of _selectableOptions; track option) {\n <li fd-list-item [selected]=\"option.selected\">\n <fd-checkbox [ngModel]=\"option.selected\" (ngModelChange)=\"_onSelectChange(option, $event)\"></fd-checkbox>\n <span fd-list-title>{{ option.label }}</span>\n </li>\n }\n</ul>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { CollectionFilter, TableFilterSelectOption } from '@fundamental-ngx/platform/table-helpers';\n\nimport { FormsModule } from '@angular/forms';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { NOT_FILTERED_OPTION_VALUE } from './constants';\n\n/**\n * Single Select filter type.\n *\n */\n\n@Component({\n selector: 'fdp-filter-single-select',\n templateUrl: './filter-single-select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ListComponent, ListItemComponent, RadioButtonComponent, FormsModule, ListTitleDirective, FdTranslatePipe]\n})\nexport class FilterSingleSelectComponent {\n /** Selectable filter options */\n @Input()\n options: TableFilterSelectOption[] = [];\n\n /** The filter model */\n @Input()\n set filterBy(filterBy: CollectionFilter | undefined) {\n const value = filterBy?.value?.[0];\n this._value = value === undefined ? NOT_FILTERED_OPTION_VALUE : value;\n }\n\n /** Filter model change event */\n @Output()\n valueChange: EventEmitter<any[]> = new EventEmitter();\n\n /** @hidden */\n readonly NOT_FILTERED_OPTION_VALUE = NOT_FILTERED_OPTION_VALUE;\n\n /**\n * @hidden\n * Currently selected value\n */\n _value: any;\n\n /** @hidden */\n _onValueChange(value: unknown): void {\n if (value === this._value) {\n return;\n }\n\n this._value = value;\n\n if (value === NOT_FILTERED_OPTION_VALUE) {\n this.valueChange.emit([]);\n } else {\n this.valueChange.emit([value]);\n }\n }\n}\n","<ul fd-list [selection]=\"true\">\n <li fd-list-item [selected]=\"_value === NOT_FILTERED_OPTION_VALUE\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"NOT_FILTERED_OPTION_VALUE\"\n state=\"default\"\n [ngModel]=\"_value\"\n (ngModelChange)=\"_onValueChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.filterDialogNotFilteredLabel' | fdTranslate)() }}</span>\n </li>\n @for (option of options; track option) {\n <li fd-list-item [selected]=\"option.value === _value\">\n <fd-radio-button\n [ngModel]=\"_value\"\n (ngModelChange)=\"_onValueChange($event)\"\n [value]=\"option.value\"\n name=\"filtering-settings-single-select\"\n ></fd-radio-button>\n <span fd-list-title>{{ option.label }}</span>\n </li>\n }\n</ul>\n","import { InjectionToken, TemplateRef } from '@angular/core';\n\nexport interface FiltersViewStep {\n titleTemplateRef: TemplateRef<any>;\n bodyTemplateRef: TemplateRef<any>;\n}\n\nexport const FILTERS_VIEW_STEP_TOKEN = new InjectionToken<FiltersViewStep>('FiltersViewStep');\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { CollectionFilter, FILTER_STRATEGY, FilterType } from '@fundamental-ngx/platform/table-helpers';\n\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\nimport { FilterCustomComponent } from './filter-custom.component';\nimport { FilterMultiSelectComponent } from './filter-multi-select.component';\nimport { FilterSingleSelectComponent } from './filter-single-select.component';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\n\n/**\n * Filter dialog step.\n *\n * Used to render selected filter options.\n *\n */\n\n@Component({\n selector: 'fdp-filter-step',\n templateUrl: './filter-step.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n /** Each filters dialog step must provide FILTERS_VIEW_STEP_TOKEN to be accessible */\n providers: [{ provide: FILTERS_VIEW_STEP_TOKEN, useExisting: forwardRef(() => FilterStepComponent) }],\n imports: [\n ButtonComponent,\n TitleComponent,\n FilterSingleSelectComponent,\n FilterMultiSelectComponent,\n FilterCustomComponent,\n FdTranslatePipe\n ]\n})\nexport class FilterStepComponent implements FiltersViewStep {\n /** ViewSettingsFilter options the filter is created from */\n @Input()\n filter: TableViewSettingsFilterComponent;\n\n /** Column key to apply this filter to */\n @Input()\n columnKey: string;\n\n /** Table's content density to be used */\n @Input()\n contentDensity: ContentDensity;\n\n /** The current filter model */\n @Input()\n set filterBy(filterByList: CollectionFilter[]) {\n this._filterBy = filterByList.find(({ field }) => field === this.columnKey);\n }\n\n /** Column name to display in the filter */\n @Input()\n columnName: string;\n\n /** Heading level of the dialog. */\n @Input()\n headingLevel = 2;\n\n /** Go back event */\n @Output()\n back: EventEmitter<void> = new EventEmitter<void>();\n\n /** Filter model change event */\n @Output()\n valueChange: EventEmitter<CollectionFilter> = new EventEmitter<CollectionFilter>();\n\n /** Template ref to the filter title */\n @ViewChild('titleTemplate')\n titleTemplateRef: TemplateRef<any>;\n\n /** Template ref to the filter body */\n @ViewChild('bodyTemplate')\n bodyTemplateRef: TemplateRef<any>;\n\n /** @hidden */\n readonly FILTER_TYPE = FilterType;\n\n /** @hidden */\n _filterBy?: CollectionFilter;\n\n /** @hidden */\n _onFilterValueChange(filterValue: any): void {\n const filterBy: CollectionFilter = this._filterBy || {\n field: this.columnKey,\n value: null,\n fieldName: this.columnName,\n strategy: FILTER_STRATEGY.EQ,\n exclude: false\n };\n\n const newFilterBy = { ...filterBy, value: filterValue };\n\n this.valueChange.emit(newFilterBy);\n }\n}\n","<ng-template #titleTemplate>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [title]=\"('platformTable.filterDialogBackToColumns' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.filterDialogBackToColumns' | fdTranslate)()\"\n (click)=\"back.emit()\"\n ></button>\n <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">\n {{ ('platformTable.filterDialogFilterByLabel' | fdTranslate: { filterLabel: filter.label })() }}\n </span>\n</ng-template>\n\n<ng-template #bodyTemplate>\n @switch (filter.type) {\n @case (FILTER_TYPE.SINGLE) {\n <fdp-filter-single-select\n [options]=\"filter.values\"\n [filterBy]=\"_filterBy\"\n (valueChange)=\"_onFilterValueChange($event)\"\n ></fdp-filter-single-select>\n }\n @case (FILTER_TYPE.MULTI) {\n <fdp-filter-multi-select\n [options]=\"filter.values\"\n [filterBy]=\"_filterBy\"\n (valueChange)=\"_onFilterValueChange($event)\"\n ></fdp-filter-multi-select>\n }\n @case (FILTER_TYPE.CUSTOM) {\n <fdp-filter-custom\n [filter]=\"filter\"\n [filterBy]=\"_filterBy\"\n (valueChange)=\"_onFilterValueChange($event)\"\n ></fdp-filter-custom>\n }\n @case (FILTER_TYPE.CATEGORY) {\n Categories list is not implemented\n }\n }\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListLinkDirective,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\n\n/**\n * Filters list dialog step.\n *\n * Used to render available filters to drill down.\n *\n */\n\nexport interface SelectableFilter {\n label: string;\n}\n@Component({\n selector: 'fdp-filters-list-step',\n templateUrl: './filters-list-step.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n /** Each filters dialog step must provide FILTERS_VIEW_STEP_TOKEN to be accessible */\n providers: [{ provide: FILTERS_VIEW_STEP_TOKEN, useExisting: forwardRef(() => FiltersListStepComponent) }],\n imports: [\n TitleComponent,\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListLinkDirective,\n ListTitleDirective,\n FdTranslatePipe\n ]\n})\nexport class FiltersListStepComponent implements FiltersViewStep {\n /** Selectable filters list */\n @Input()\n filters: SelectableFilter[] = [];\n\n /** Heading level of the dialog. */\n @Input()\n headingLevel: number;\n\n /** Select event is fired once some filter is selected */\n @Output()\n selectFilter: EventEmitter<SelectableFilter> = new EventEmitter<SelectableFilter>();\n\n /** Template ref to the filter title */\n @ViewChild('titleTemplate')\n titleTemplateRef: TemplateRef<any>;\n\n /** Template ref to the filter body */\n @ViewChild('bodyTemplate')\n bodyTemplateRef: TemplateRef<any>;\n}\n","<ng-template #titleTemplate>\n <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">{{\n ('platformTable.filterDialogFilterTitle' | fdTranslate)()\n }}</span>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div fd-list-group-header>\n <span fd-list-title id=\"platformTableInternalFilterListGroupHeader\">\n {{ ('platformTable.filterDialogFilterBy' | fdTranslate)() }}\n </span>\n </div>\n <ul fd-list aria-labelledby=\"platformTableInternalFilterListGroupHeader\" [navigationIndicator]=\"true\">\n @for (filter of filters; track filter) {\n <li\n fd-list-item\n [interactive]=\"true\"\n (click)=\"selectFilter.emit(filter)\"\n (keydown.space)=\"selectFilter.emit(filter)\"\n (keydown.enter)=\"selectFilter.emit(filter)\"\n >\n <a fd-list-link [navigationIndicator]=\"true\">\n <span fd-list-title>{{ filter.label }}</span>\n </a>\n </li>\n }\n </ul>\n</ng-template>\n","import {\n CollectionFilter,\n SortDirection,\n TableColumn,\n TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\nimport { TableViewSettingsFilterComponent } from './table-view-settings-filter.component';\n\nexport interface SettingsSortDialogColumn {\n label: string;\n key: string;\n}\n\nexport interface SettingsSortDialogData extends TableDialogCommonData {\n direction: SortDirection;\n field: string | null;\n columns: SettingsSortDialogColumn[];\n allowDisablingSorting: boolean;\n}\n\nexport interface SettingsSortDialogResultData {\n field: string | null;\n direction: SortDirection;\n}\n\nexport const NOT_SORTED_OPTION_VALUE = null;\nexport const INITIAL_DIRECTION = SortDirection.ASC;\n\nexport interface SettingsGroupDialogColumn {\n label: string;\n key: string;\n}\n\nexport interface SettingsGroupDialogData extends TableDialogCommonData {\n direction: SortDirection;\n field: string | null;\n columns: SettingsGroupDialogColumn[];\n}\n\nexport interface SettingsGroupDialogResultData {\n field: string | null;\n direction: SortDirection;\n}\n\nexport const NOT_GROUPED_OPTION_VALUE = null;\n\nexport interface FiltersDialogData extends TableDialogCommonData {\n filterBy: CollectionFilter[];\n columns: TableColumn[];\n viewSettingsFilters: TableViewSettingsFilterComponent[];\n}\n\nexport interface FiltersDialogResultData {\n filterBy: CollectionFilter[];\n}\n\nexport enum ACTIVE_STEP {\n SELECT_FILTER = 'SELECT_FILTER',\n FILTER = 'FILTER'\n}\n\nexport enum ActiveTab {\n SORT = 'sort',\n FILTER = 'filter',\n GROUP = 'group',\n COLUMNS = 'columns'\n}\n\nexport interface SettingsColumnsDialogColumn {\n label: string;\n key: string;\n name: string;\n visible: boolean;\n}\n\nexport interface SettingsColumnsDialogData extends TableDialogCommonData {\n columns: SettingsColumnsDialogColumn[];\n}\n\nexport interface SettingsColumnsDialogResultData {\n visibleColumns: string[];\n columnOrder: string[];\n columns: SettingsColumnsDialogColumn[];\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n input,\n Input,\n OnInit,\n output,\n signal,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { CollectionFilter, FilterType, TableColumn } from '@fundamental-ngx/platform/table-helpers';\nimport { shallowEqual } from 'fast-equals';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\nimport { ACTIVE_STEP, FiltersDialogData, FiltersDialogResultData } from '../table-view-settings.model';\nimport { FilterStepComponent } from './filter-step.component';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\nimport { FiltersListStepComponent, SelectableFilter } from './filters-list-step.component';\n\n@Component({\n selector: 'fdp-filters',\n templateUrl: './filters.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgTemplateOutlet, FiltersListStepComponent, FilterStepComponent]\n})\nexport class FiltersComponent implements AfterViewInit, OnInit {\n /** Data for the filtering dialog */\n @Input() set filteringData(value: FiltersDialogData) {\n this._initializeFilterData(value);\n }\n\n /** @hidden Heading level */\n headingLevel = input<number>(2);\n\n /** Initial set of filters applied */\n initialFilters = input<CollectionFilter[]>([]);\n\n /** Emits when the active filter step view changes */\n activeFilterStepViewChange = output<FiltersViewStep>();\n\n /** Emits the final result of filter changes */\n filterChange = output<FiltersDialogResultData>();\n\n /** Emits whether the reset button should be enabled */\n resetAvailabilityChange = output<boolean>();\n\n /** Signal to hold currently applied filter rules */\n filterBy = signal<CollectionFilter[]>([]);\n\n /** Signal for table columns, used to retrieve the column key */\n columns = signal<TableColumn[]>([]);\n\n /** Signal for declared filter options */\n viewSettingsFilters = signal<TableViewSettingsFilterComponent[]>([]);\n\n /** Signal to track the currently selected filter step */\n activeStep = signal<ACTIVE_STEP>(ACTIVE_STEP.SELECT_FILTER);\n\n /** Signal to track the currently selected filter */\n activeFilter = signal<Nullable<TableViewSettingsFilterComponent>>(null);\n\n /** Signal to track the column key associated with the active filter */\n activeFilterColumnKey = signal<Nullable<string>>(null);\n\n /** Signal for the currently active filter step view */\n activeFilterStepView = signal<Nullable<FiltersViewStep>>(null);\n\n /** Reference to the available steps */\n readonly ACTIVE_STEP = ACTIVE_STEP;\n\n /** hidden */\n constructor(private readonly _cd: ChangeDetectorRef) {}\n\n /** hidden */\n ngOnInit(): void {\n this._compareSelectedFilters();\n }\n\n /** hidden */\n ngAfterViewInit(): void {\n this._cd.detectChanges();\n }\n\n /** Setter for the active filter step view to trigger updates */\n @ViewChild(FILTERS_VIEW_STEP_TOKEN)\n set setActiveFilterStepView(view: FiltersViewStep) {\n this.activeFilterStepView.set(view);\n this.activeFilterStepViewChange.emit(view);\n this._cd.detectChanges();\n }\n\n /**\n * Select a filter to drill down and update the active filter step.\n * @param filter The filter to be selected and applied.\n */\n selectFilter(filter: SelectableFilter): void {\n this.activeStep.set(ACTIVE_STEP.FILTER);\n const selectedFilter = filter as TableViewSettingsFilterComponent;\n this.activeFilter.set(selectedFilter);\n const columnKey = this.columns().find(({ name }) => name === selectedFilter.column)?.key || null;\n this.activeFilterColumnKey.set(columnKey);\n this._cd.detectChanges();\n }\n\n /** Navigate back to the top-level filters list */\n goToFilters(): void {\n this.activeStep.set(ACTIVE_STEP.SELECT_FILTER);\n this.activeFilter.set(null);\n }\n\n /**\n * Apply changes to the selected filter and emit the filter change event.\n * @param filter The filter to apply\n * @param filterComponent The component for the filter (provides type info)\n */\n applyFilter(filter: CollectionFilter, filterComponent: Nullable<TableViewSettingsFilterComponent>): void {\n if (!filter) {\n return;\n }\n\n // Update the filter by removing the previous filter for the field\n this.filterBy.set(this.filterBy().filter(({ field }) => field !== filter.field));\n\n if (!filterComponent) {\n return;\n }\n const filterIsNotEmpty =\n filterComponent.type === FilterType.CUSTOM ||\n (filterComponent.type === FilterType.MULTI && filter.value?.length) ||\n (filterComponent.type === FilterType.SINGLE && filter.value?.length);\n\n // Add the new filter if it has a value\n if (filterIsNotEmpty) {\n this.filterBy.set([...this.filterBy(), filter]);\n }\n\n this._compareSelectedFilters();\n this.filterChange.emit({ filterBy: this.filterBy() });\n this._cd.detectChanges();\n }\n\n /**\n * Private method to initialize filter data on component initialization.\n * Extracts the initial filter values and table column data.\n */\n private _initializeFilterData(filteringData: FiltersDialogData): void {\n if (filteringData) {\n this.filterBy.set([...filteringData.filterBy]);\n this.viewSettingsFilters.set(filteringData.viewSettingsFilters);\n this.columns.set(filteringData.columns);\n }\n }\n\n /**\n * Private method to compare the current selected filters against the initial state.\n * Enables or disables the reset button based on filter state comparison.\n */\n private _compareSelectedFilters(): void {\n if (!shallowEqual(this.initialFilters(), this.filterBy())) {\n this.resetAvailabilityChange.emit(true);\n } else {\n this.resetAvailabilityChange.emit(false);\n }\n }\n}\n","@if (activeFilterStepView()?.bodyTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"activeFilterStepView()?.bodyTemplateRef ?? null\"></ng-container>\n}\n<!-- Keep active step component -->\n@if (activeStep() === ACTIVE_STEP.SELECT_FILTER) {\n <fdp-filters-list-step\n [headingLevel]=\"headingLevel()\"\n [filters]=\"viewSettingsFilters()\"\n (selectFilter)=\"selectFilter($event)\"\n ></fdp-filters-list-step>\n} @else if (activeStep() === ACTIVE_STEP.FILTER) {\n <fdp-filter-step\n [headingLevel]=\"headingLevel()\"\n [columnKey]=\"activeFilterColumnKey()!\"\n [columnName]=\"activeFilter()!.label\"\n [filter]=\"activeFilter()!\"\n [filterBy]=\"filterBy()\"\n (back)=\"goToFilters()\"\n (valueChange)=\"applyFilter($event, activeFilter())\"\n ></fdp-filter-step>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n linkedSignal,\n output,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SortDirection } from '@fundamental-ngx/platform/table-helpers';\nimport { distinctUntilChanged } from 'rxjs';\nimport {\n INITIAL_DIRECTION,\n NOT_GROUPED_OPTION_VALUE,\n SettingsGroupDialogData,\n SettingsGroupDialogResultData\n} from '../table-view-settings.model';\n\nlet groupOrderHeaderUniqueId = 0;\n\n@Component({\n selector: 'fdp-grouping',\n templateUrl: './grouping.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n ListComponent,\n ListGroupHeaderDirective,\n ListTitleDirective,\n ListItemComponent,\n RadioButtonComponent,\n FormsModule,\n FdTranslatePipe\n ]\n})\nexport class GroupingComponent {\n /** Input data for grouping */\n groupingData = input<SettingsGroupDialogData>();\n\n /** @hidden Initial grouping settings */\n initialGrouping = input<Nullable<SettingsGroupDialogResultData>>();\n\n /** Event emitter for group changes */\n groupChange = output<SettingsGroupDialogResultData>();\n\n /** Current selected grouping direction - resets when groupingData changes */\n direction = linkedSignal(() => this.groupingData()?.direction ?? INITIAL_DIRECTION);\n\n /** Current selected grouping field - resets when groupingData changes */\n field = linkedSignal(() => this.groupingData()?.field ?? NOT_GROUPED_OPTION_VALUE);\n\n /** @hidden */\n groupOrderHeaderId = `fdp-table-group-dialog-group-order-header-${groupOrderHeaderUniqueId++}`;\n\n /** @hidden */\n groupByHeaderId = `fdp-table-group-dialog-group-by-header-${groupOrderHeaderUniqueId++}`;\n\n /** Constants for grouping directions */\n readonly SORT_DIRECTION = SortDirection;\n\n /** Constant for 'Not grouped' option */\n readonly NOT_GROUPED_OPTION_VALUE = NOT_GROUPED_OPTION_VALUE;\n\n /** Table columns available for grouping */\n columns = computed(() => this.groupingData()?.columns ?? []);\n\n /** Event emitter for reset availability changes */\n resetAvailabilityChange = outputFromObservable(\n toObservable(\n computed(() => {\n const initial = this.initialGrouping();\n if (!initial) {\n return false;\n }\n return this.direction() !== initial.direction || this.field() !== initial.field;\n })\n ).pipe(distinctUntilChanged())\n );\n\n /**\n * Handle changes to grouping direction.\n * @param direction New grouping direction.\n */\n _groupOrderChange(direction: SortDirection): void {\n this.direction.set(direction);\n this._onModelChange();\n }\n\n /**\n * Handle changes to the grouping field.\n * @param field New grouping field.\n */\n _groupFieldChange(field: string): void {\n this.field.set(field);\n this._onModelChange();\n }\n\n /**\n * Emit group change event.\n * @hidden\n */\n private _onModelChange(): void {\n const result: SettingsGroupDialogResultData = { field: this.field(), direction: this.direction() };\n this.groupChange.emit(result);\n }\n}\n","<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"groupOrderHeaderId\">\n {{ ('platformTable.groupDialogGroupOrderHeader' | fdTranslate)() }}\n </span>\n </legend>\n <ul fd-list [selection]=\"true\" [attr.aria-labelledby]=\"groupOrderHeaderId\">\n <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.ASC\">\n <fd-radio-button\n name=\"sort-order\"\n value=\"asc\"\n state=\"default\"\n [ngModel]=\"direction()\"\n (ngModelChange)=\"_groupOrderChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.groupDialogGroupOrderAsc' | fdTranslate)() }}</span>\n </li>\n <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.DESC\">\n <fd-radio-button\n name=\"sort-order\"\n value=\"desc\"\n state=\"default\"\n [ngModel]=\"direction()\"\n (ngModelChange)=\"_groupOrderChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.groupDialogGroupOrderDesc' | fdTranslate)() }}</span>\n </li>\n </ul>\n</fieldset>\n\n<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"groupByHeaderId\">\n {{ ('platformTable.groupDialogGroupByHeader' | fdTranslate)() }}\n </span>\n </legend>\n <ul fd-list [selection]=\"true\" [attr.aria-labelledby]=\"groupByHeaderId\">\n <li fd-list-item [selected]=\"NOT_GROUPED_OPTION_VALUE === field()\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"NOT_GROUPED_OPTION_VALUE\"\n state=\"default\"\n [ngModel]=\"field()\"\n (ngModelChange)=\"_groupFieldChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.groupDialogNotGroupedLabel' | fdTranslate)() }}</span>\n </li>\n @for (column of columns(); track column) {\n <li fd-list-item [selected]=\"column.key === field()\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"column.key\"\n state=\"default\"\n [ngModel]=\"field()\"\n (ngModelChange)=\"_groupFieldChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ column.label }}</span>\n </li>\n }\n </ul>\n</fieldset>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n linkedSignal,\n output,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CollectionSort, SortDirection } from '@fundamental-ngx/platform/table-helpers';\nimport { distinctUntilChanged } from 'rxjs';\nimport {\n INITIAL_DIRECTION,\n NOT_SORTED_OPTION_VALUE,\n SettingsSortDialogData,\n SettingsSortDialogResultData\n} from '../table-view-settings.model';\n\nlet sortOrderHeaderUniqueId = 0;\nlet sortDialogSortByHeaderUniqueId = 0;\n\n@Component({\n selector: 'fdp-sorting',\n templateUrl: './sorting.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n ListComponent,\n ListGroupHeaderDirective,\n ListTitleDirective,\n ListItemComponent,\n RadioButtonComponent,\n FormsModule,\n FdTranslatePipe\n ]\n})\nexport class SortingComponent {\n /** Input data for sorting */\n sortingData = input<SettingsSortDialogData>();\n\n /** @hidden Initial sorting state */\n initialSorting = input<Nullable<CollectionSort>>();\n\n /** Event emitter for sort changes */\n sortChange = output<SettingsSortDialogResultData>();\n\n /** Current selected sorting direction - resets when sortingData changes */\n direction = linkedSignal(() => this.sortingData()?.direction ?? INITIAL_DIRECTION);\n\n /** Current selected sorting field - resets when sortingData changes */\n field = linkedSignal(() => this.sortingData()?.field ?? NOT_SORTED_OPTION_VALUE);\n\n /** @hidden */\n sortOrderHeaderId = `fdp-table-sort-order-header-${sortOrderHeaderUniqueId++}`;\n\n /** @hidden */\n sortDialogSortByHeaderId = `fdp-table-sort-dialog-sort-by-header-${sortDialogSortByHeaderUniqueId++}`;\n\n /** @hidden Constants for sort direction */\n readonly SORT_DIRECTION = SortDirection;\n\n /** @hidden Constant for 'Not sorted' option value */\n readonly NOT_SORTED_OPTION_VALUE = NOT_SORTED_OPTION_VALUE;\n\n /** Whether disabling sorting is allowed */\n allowDisablingSorting = computed(() => this.sortingData()?.allowDisablingSorting ?? false);\n\n /** Available table columns for sorting */\n columns = computed(() => this.sortingData()?.columns ?? []);\n\n /** Event emitter for reset availability changes */\n resetAvailabilityChange = outputFromObservable(\n toObservable(\n computed(() => {\n const initial = this.initialSorting();\n if (!initial) {\n return false;\n }\n return this.direction() !== initial.direction || this.field() !== initial.field;\n })\n ).pipe(distinctUntilChanged())\n );\n\n /**\n * Handle sort direction changes.\n * @param direction New sorting direction.\n */\n _sortDirectionChange(direction: SortDirection): void {\n this.direction.set(direction);\n this._onModelChange();\n }\n\n /**\n * Handle sort field changes.\n * @param field New sorting field.\n */\n _sortFieldChange(field: string): void {\n this.field.set(field);\n this._onModelChange();\n }\n\n /**\n * Emit changes to the model.\n * @hidden\n */\n private _onModelChange(): void {\n this.sortChange.emit({ direction: this.direction(), field: this.field() });\n }\n}\n","<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"sortOrderHeaderId\">\n {{ ('platformTable.sortDialogSortOrderHeader' | fdTranslate)() }}\n </span>\n </legend>\n <ul fd-list [selection]=\"true\" [attr.aria-labelledby]=\"sortOrderHeaderId\">\n <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.ASC\">\n <fd-radio-button\n name=\"sort-order\"\n value=\"asc\"\n state=\"default\"\n [ngModel]=\"direction()\"\n (ngModelChange)=\"_sortDirectionChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.sortDialogSortOrderAsc' | fdTranslate)() }}</span>\n </li>\n <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.DESC\">\n <fd-radio-button\n name=\"sort-order\"\n value=\"desc\"\n state=\"default\"\n [ngModel]=\"direction()\"\n (ngModelChange)=\"_sortDirectionChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.sortDialogSortOrderDesc' | fdTranslate)() }}</span>\n </li>\n </ul>\n</fieldset>\n\n<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"sortDialogSortByHeaderId\">\n {{ ('platformTable.sortDialogSortByHeader' | fdTranslate)() }}\n </span>\n </legend>\n <ul fd-list [selection]=\"true\" [attr.aria-labelledby]=\"sortDialogSortByHeaderId\">\n @if (allowDisablingSorting()) {\n <li fd-list-item [selected]=\"field() === NOT_SORTED_OPTION_VALUE\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"NOT_SORTED_OPTION_VALUE\"\n state=\"default\"\n [ngModel]=\"field()\"\n (ngModelChange)=\"_sortFieldChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.sortDialogNotSortedLabel' | fdTranslate)() }}</span>\n </li>\n }\n @for (column of columns(); track column) {\n <li fd-list-item [selected]=\"column.key === field()\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"column.key\"\n state=\"default\"\n [ngModel]=\"field()\"\n (ngModelChange)=\"_sortFieldChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ column.label }}</span>\n </li>\n }\n </ul>\n</fieldset>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n linkedSignal,\n output,\n signal,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport {\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { ToolbarComponent, ToolbarItemDirective, ToolbarSpacerDirective } from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent, SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { shallowEqual } from 'fast-equals';\nimport {\n SettingsColumnsDialogColumn,\n SettingsColumnsDialogData,\n SettingsColumnsDialogResultData\n} from '../table-view-settings.model';\n\nexport interface SelectableColumn {\n /** Selected */\n selected: boolean;\n /** Active */\n active: boolean;\n /** Table Column it belongs to */\n column: SettingsColumnsDialogColumn;\n}\n\nconst INITIAL_SEARCH_TEXT = '';\nconst INITIAL_SHOW_ALL_ITEMS = true;\n\nlet columnsHeaderUniqueId = 0;\n\n@Component({\n selector: 'fdp-columns',\n templateUrl: './columns.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n ToolbarComponent,\n SearchFieldComponent,\n ToolbarSpacerDirective,\n ButtonComponent,\n ToolbarItemDirective,\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n CheckboxComponent,\n FormsModule,\n ListTitleDirective,\n FdTranslatePipe\n ]\n})\nexport class ColumnsComponent {\n /** Input data for columns configuration */\n columnsData = input<SettingsColumnsDialogData>();\n\n /** @hidden Initial columns state */\n initialColumns = input<Nullable<SettingsColumnsDialogResultData>>();\n\n /** Event emitter for columns changes */\n columnsChange = output<SettingsColumnsDialogResultData>();\n\n /** Event emitter for reset availability changes */\n resetAvailabilityChange = output<boolean>();\n\n /** @hidden All available columns for interacting - resets when columnsData changes */\n protected selectableColumns = linkedSignal<SelectableColumn[]>(() => {\n const data = this.columnsData();\n const allColumns = data?.columns || [];\n const initialCols = allColumns.map(\n (column, index): SelectableColumn => ({\n column,\n selected: column.visible,\n active: index === 0\n })\n );\n // Trigger reset availability check when columnsData changes\n if (initialCols.length > 0) {\n this._compareInitialColumnsNextTick();\n }\n return initialCols;\n });\n\n /** @hidden Search Query */\n protected searchQuery = signal<string>(INITIAL_SEARCH_TEXT);\n\n /** @hidden Show All flag */\n protected showAllItems = signal<boolean>(INITIAL_SHOW_ALL_ITEMS);\n\n /** @hidden filtered columns that are rendered in the list */\n protected filteredColumns = computed(() => {\n const searchQuery = this.searchQuery();\n const showAll = this.showAllItems();\n return this.selectableColumns().filter((item) => {\n const matchesSearchQuery = item.column.label.toLocaleLowerCase().includes(searchQuery.toLocaleLowerCase());\n const matchesShowAll = showAll || item.selected;\n return matchesSearchQuery && matchesShowAll;\n });\n });\n\n /** @hidden Selected columns count */\n protected selectedColumnsCount = computed(() => this.selectableColumns().filter(({ selected }) => selected).length);\n\n /** @hidden Flag to track disabled state for move-up button */\n protected moveUpDisabled = computed(() => this._activeColumnIndexInFilteredList() < 1);\n\n /** @hidden Flag to track disabled state for move-down button */\n protected moveDownDisabled = computed(() => {\n const activeIndex = this._activeColumnIndexInFilteredList();\n const filteredLength = this.filteredColumns().length;\n return activeIndex < 0 || activeIndex >= filteredLength - 1;\n });\n\n /** @hidden */\n protected columnsHeaderId = `fdp-table-columns-header-${columnsHeaderUniqueId++}`;\n\n /** @hidden */\n protected get selectAllDisabled(): boolean {\n return !this.showAllItems() || this.filteredColumns().length === 0;\n }\n\n /** @hidden Index of active column in filtered list */\n private _activeColumnIndexInFilteredList = computed(() => this.filteredColumns().findIndex(({ active }) => active));\n\n /** @hidden */\n protected toggleSelectAll(selectAll: boolean): void {\n this.selectableColumns.update((columns) =>\n columns.map((column) => ({\n ...column,\n selected: selectAll\n }))\n );\n this.onToggleColumn();\n }\n\n /** @hidden */\n protected onToggleColumn(): void {\n this._onModelChange();\n }\n\n /** @hidden */\n protected searchInputChange({ text }: SearchInput): void {\n this.searchQuery.set(text || '');\n }\n\n /** @hidden */\n protected toggleShowAll(): void {\n this.showAllItems.update((val) => !val);\n }\n\n /** @hidden */\n protected setActiveColumn(column: SelectableColumn | null): void {\n this.selectableColumns.update((columns) =>\n columns.map((col) => ({\n ...col,\n active: col === column\n }))\n );\n }\n\n /** @hidden */\n protected moveActiveToTop(event: Event): void {\n this._moveActiveColumn(event, 0);\n }\n\n /** @hidden */\n protected moveActiveToBottom(event: Event): void {\n this._moveActiveColumn(event, this.filteredColumns().length - 1);\n }\n\n /** @hidden */\n protected moveActiveUp(event: Event): void {\n const activeIndex = this._activeColumnIndexInFilteredList();\n this._moveActiveColumn(event, activeIndex - 1, true);\n }\n\n /** @hidden */\n protected moveActiveDown(event: Event): void {\n const activeIndex = this._activeColumnIndexInFilteredList();\n this._moveActiveColumn(event, activeIndex + 1);\n }\n\n /** @hidden */\n protected isReorderColumnButtonShowable(item: SelectableColumn): boolean {\n return item.active && item.selected;\n }\n\n /** @hidden */\n protected filterByColumnKey(index: number, item: SelectableColumn): string {\n return item?.column.key;\n }\n\n /** @hidden Move active column to target index */\n private _moveActiveColumn(event: Event, targetIndex: number, refocusButton = false): void {\n event.stopPropagation();\n event.preventDefault();\n this._moveColumnInFilteredListByIndex(this._activeColumnIndexInFilteredList(), targetIndex);\n\n if (refocusButton) {\n // setTimeout is needed to allow the new button to render for focusing\n setTimeout(() => (event.target as HTMLElement | null)?.focus(), 0);\n }\n }\n\n /** @hidden Build result data from current selectable columns */\n private _buildResultData(columns: SelectableColumn[]): SettingsColumnsDialogResultData {\n return {\n visibleColumns: columns.filter(({ selected }) => selected).map(({ column }) => column.name),\n columnOrder: columns.map(({ column }) => column.name),\n columns: columns.map((selectable) => ({ ...selectable.column, visible: selectable.selected }))\n };\n }\n\n /** @hidden */\n private _moveColumnInFilteredListByIndex(from: number, to: number): void {\n const filteredColumns = this.filteredColumns();\n const { movedItem, replacedItem } = this._moveElementInTheListByIndex(filteredColumns, from, to);\n /**\n * need to reflect analogical movement in the original list\n * with respect to the original list order\n */\n this._moveColumnInSelectableList(movedItem, replacedItem);\n\n this._onModelChange();\n }\n\n /**\n * @hidden\n * Move column in selectable list.\n */\n private _moveColumnInSelectableList(itemToMove: SelectableColumn, targetItem: SelectableColumn): void {\n this.selectableColumns.update((columns) => {\n this._moveElementInTheListByIndex(columns, columns.indexOf(itemToMove), columns.indexOf(targetItem));\n return [...columns];\n });\n }\n\n /**\n * @hidden\n * Move element in the list\n * @return moved item and replaced item.\n */\n private _moveElementInTheListByIndex<T>(\n list: T[],\n fromIndex: number,\n toIndex: number\n ): { movedItem: T; replacedItem: T } {\n const listLength = list.length;\n\n fromIndex = Math.min(Math.max(fromIndex, 0), listLength - 1);\n toIndex = Math.min(Math.max(toIndex, 0), listLength - 1);\n\n const replacedItem = list[toIndex];\n const movedItem = list.splice(fromIndex, 1)[0];\n\n list.splice(toIndex, 0, movedItem);\n\n return { movedItem, replacedItem };\n }\n\n /**\n * Emit changes to the model and compare with initial columns.\n * @hidden\n */\n private _onModelChange(): void {\n const result = this._buildResultData(this.selectableColumns());\n this.columnsChange.emit(result);\n\n const initialColumns = this.initialColumns();\n if (initialColumns) {\n const isChanged =\n !shallowEqual(result.visibleColumns, initialColumns.visibleColumns) ||\n !shallowEqual(result.columnOrder, initialColumns.columnOrder);\n this.resetAvailabilityChange.emit(isChanged);\n }\n }\n\n /**\n * Compare initial columns with current state on next tick.\n * Scheduled via setTimeout to avoid triggering during signal computation.\n * @hidden\n */\n private _compareInitialColumnsNextTick(): void {\n setTimeout(() => {\n const initialColumns = this.initialColumns();\n if (!initialColumns) {\n return;\n }\n\n const current = this._buildResultData(this.selectableColumns());\n const isChanged =\n !shallowEqual(current.visibleColumns, initialColumns.visibleColumns) ||\n !shallowEqual(current.columnOrder, initialColumns.columnOrder);\n\n if (isChanged) {\n this.resetAvailabilityChange.emit(true);\n }\n }, 0);\n }\n}\n","<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"columnsHeaderId\">\n {{ ('platformTable.P13ColumnsDialogHeader' | fdTranslate)() }}\n </span>\n </legend>\n <fd-toolbar>\n <fdp-search-field\n [placeholder]=\"('platformTable.P13ColumnsDialogSearchPlaceholder' | fdTranslate)()\"\n [inputText]=\"searchQuery()\"\n [suggestions]=\"[]\"\n (inputChange)=\"searchInputChange($event)\"\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <button fd-toolbar-item fd-button fdType=\"transparent\" (click)=\"toggleShowAll()\">\n @if (showAllItems() === true) {\n {{ ('platformTable.P13ColumnsDialogsShowSelected' | fdTranslate)() }}\n } @else {\n {{ ('platformTable.P13ColumnsDialogShowAll' | fdTranslate)() }}\n }\n </button>\n </fd-toolbar>\n <ul fd-list [selection]=\"true\" aria-multiselectable=\"true\" [attr.aria-labelledby]=\"columnsHeaderId\">\n <li\n fd-list-item\n (focus)=\"setActiveColumn(null)\"\n [selected]=\"selectedColumnsCount() === selectableColumns().length\"\n >\n <fd-checkbox\n [ngModel]=\"selectedColumnsCount() === selectableColumns().length\"\n (ngModelChange)=\"toggleSelectAll($event)\"\n [disabled]=\"selectAllDisabled\"\n ></fd-checkbox>\n <span fd-list-title>\n {{\n (\n 'platformTable.P13ColumnsDialogSelectAll'\n | fdTranslate\n : {\n selectedColumnsCount: selectedColumnsCount(),\n selectableColumnsCount: selectableColumns().length\n }\n )()\n }}\n </span>\n </li>\n @for (item of filteredColumns(); track filterByColumnKey($index, item)) {\n <li\n fd-list-item\n [preventClick]=\"true\"\n [class.fd-select-item--selected]=\"item.selected\"\n [selected]=\"item.selected\"\n [class.fd-select-item--active]=\"item.active\"\n (focus)=\"setActiveColumn(item)\"\n >\n <fd-checkbox [(ngModel)]=\"item.selected\" (ngModelChange)=\"onToggleColumn()\"></fd-checkbox>\n <span fd-list-title>\n {{ item.column.label }}\n </span>\n\n <!-- Active Button Movement -->\n @if (isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"collapse-group\"\n [disabled]=\"moveUpDisabled()\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n (click)=\"moveActiveToTop($event)\"\n (keydown.enter)=\"moveActiveToTop($event)\"\n ></button>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-up\"\n [disabled]=\"moveUpDisabled()\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n (click)=\"moveActiveUp($event)\"\n (keydown.enter)=\"moveActiveUp($event)\"\n ></button>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-down\"\n [disabled]=\"moveDownDisabled()\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n (click)=\"moveActiveDown($event)\"\n (keydown.enter)=\"moveActiveDown($event)\"\n ></button>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"expand-group\"\n [disabled]=\"moveDownDisabled()\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n (click)=\"moveActiveToBottom($event)\"\n (keydown.enter)=\"moveActiveToBottom($event)\"\n ></button>\n }\n </li>\n }\n </ul>\n</fieldset>\n","import { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, signal } from '@angular/core';\nimport { InitialFocusDirective, Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n DialogRef\n} from '@fundamental-ngx/core/dialog';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { IconTabBarComponent, IconTabBarItem, IconTabBarTabComponent } from '@fundamental-ngx/platform/icon-tab-bar';\nimport { CollectionFilter, CollectionSort, Table } from '@fundamental-ngx/platform/table-helpers';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\nimport { ColumnsComponent } from '../columns/columns.component';\nimport { FiltersViewStep } from '../filtering/filters-active-step';\nimport { FiltersComponent } from '../filtering/filters.component';\nimport { GroupingComponent } from '../grouping/grouping.component';\nimport { SortingComponent } from '../sorting/sorting.component';\nimport {\n ActiveTab,\n FiltersDialogData,\n FiltersDialogResultData,\n INITIAL_DIRECTION,\n NOT_GROUPED_OPTION_VALUE,\n NOT_SORTED_OPTION_VALUE,\n SettingsColumnsDialogData,\n SettingsColumnsDialogResultData,\n SettingsGroupDialogData,\n SettingsGroupDialogResultData,\n SettingsSortDialogData,\n SettingsSortDialogResultData\n} from '../table-view-settings.model';\n\n@Component({\n selector: 'fdp-settings-dialog-settings',\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: forwardRef(() => SettingsDialogComponent) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n BarLeftDirective,\n BarElementDirective,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n DialogBodyComponent,\n DialogFooterComponent,\n FdTranslatePipe,\n SortingComponent,\n FiltersComponent,\n GroupingComponent,\n ColumnsComponent,\n NgTemplateOutlet,\n TemplateDirective,\n TitleComponent,\n ButtonBarComponent,\n InitialFocusDirective,\n IconTabBarComponent,\n IconTabBarTabComponent\n ],\n templateUrl: './settings-dialog.component.html'\n})\nexport class SettingsDialogComponent implements Resettable {\n /** Data for sorting */\n sortingData = signal<Nullable<SettingsSortDialogData>>(null);\n\n /** Data for filtering */\n filteringData = signal<Nullable<FiltersDialogData>>(null);\n\n /** Data for grouping */\n groupingData = signal<Nullable<SettingsGroupDialogData>>(null);\n\n /** Data for columns */\n columnsData = signal<Nullable<SettingsColumnsDialogData>>(null);\n\n /** The active tab to display ('sort', 'filter', 'group', or 'columns') */\n activeTab = signal<Nullable<ActiveTab>>(null);\n\n /** Flag indicating whether the subheader should be shown */\n showSubheader = signal<boolean>(false);\n\n /** Heading level of the dialog header. */\n headingLevel: number;\n\n /** Current step component to render for filtering */\n activeFilterStepView = signal<Nullable<FiltersViewStep>>(null);\n\n /** Signal to track reset availability */\n readonly isResetAvailable$ = signal(false);\n\n /** @hidden Initial sorting configuration */\n _initialSorting = signal<Nullable<CollectionSort>>(null);\n\n /** @hidden Initial filter configurations */\n _initialFilters = signal<CollectionFilter[]>([]);\n\n /** @hidden Initial grouping configurations */\n _initialGrouping = signal<Nullable<SettingsGroupDialogResultData>>(null);\n\n /** @hidden Initial columns configurations */\n _initialColumns = signal<Nullable<SettingsColumnsDialogResultData>>(null);\n\n /** @hidden */\n protected showColumns = false;\n\n /** @hidden Expose ActiveTab enum to template */\n protected readonly ActiveTab = ActiveTab;\n\n /** @hidden Pending columns changes (not applied to signal to avoid triggering child effects) */\n private _pendingColumnsChanges: Nullable<SettingsColumnsDialogResultData> = null;\n\n /** @hidden Tracks reset availability per tab */\n private _resetAvailabilityByTab = signal<Record<string, boolean>>({});\n\n /**\n * Constructor that initializes dialog data and sets initial values for sorting, filtering, grouping, and columns.\n */\n constructor(\n private readonly dialogRef: DialogRef<{\n sortingData: Nullable<SettingsSortDialogData>;\n filteringData: Nullable<FiltersDialogData>;\n groupingData: Nullable<SettingsGroupDialogData>;\n columnsData: Nullable<SettingsColumnsDialogData>;\n headingLevel: 1 | 2 | 3 | 4 | 5 | 6;\n allowColumnConfiguration: boolean;\n }>,\n private readonly _table: Table\n ) {\n const data = this.dialogRef.data;\n this.sortingData.set(data.sortingData);\n this.filteringData.set(data.filteringData);\n this.groupingData.set(data.groupingData);\n this.showColumns = data.allowColumnConfiguration;\n if (this.showColumns) {\n this.columnsData.set(data.columnsData);\n this._setInitialColumns();\n }\n this.headingLevel = data.headingLevel;\n this.activeTab.set(this._getInitialActiveTab());\n this._shouldRenderSubheader();\n this._setInitialSorting();\n this._setInitialFilters();\n this._setInitialGrouping();\n }\n\n /**\n * Confirm the dialog action and close the dialog, returning updated settings data.\n */\n confirm(): void {\n const columnsData = this._pendingColumnsChanges\n ? { columns: this._pendingColumnsChanges.columns }\n : this.columnsData();\n\n this.dialogRef.close({\n sortingData: this.sortingData(),\n filteringData: this.filteringData(),\n groupingData: this.groupingData(),\n columnsData\n });\n }\n\n /**\n * Cancel the dialog and close it without saving any changes.\n */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /**\n * Reset the settings based on the currently active tab (sort, filter, group, columns).\n */\n reset(): void {\n if (this.activeTab() === ActiveTab.SORT && this.sortingData()) {\n this.sortingData.set({\n ...this.sortingData()!,\n field: this._initialSorting()!.field,\n direction: this._initialSorting()!.direction\n });\n }\n if (this.activeTab() === ActiveTab.FILTER && this.filteringData()) {\n this.filteringData.set({\n ...this.filteringData()!,\n filterBy: this._initialFilters()\n });\n }\n if (this.activeTab() === ActiveTab.GROUP && this.groupingData()) {\n this.groupingData.set({\n ...this.groupingData()!,\n field: this._initialGrouping()!.field,\n direction: this._initialGrouping()!.direction\n });\n }\n if (this.activeTab() === ActiveTab.COLUMNS && this.columnsData()) {\n const initialColumns = this._initialColumns();\n if (initialColumns) {\n // Reset columns to initial state (both order and visibility)\n this.columnsData.set({\n ...this.columnsData()!,\n columns: initialColumns.columns\n });\n }\n this._pendingColumnsChanges = initialColumns;\n }\n this.updateResetAvailability(this.activeTab()!, false);\n }\n\n /**\n * Handle sort change event and update sorting data.\n * @param event Updated sorting data.\n */\n onSortChange(event: SettingsSortDialogResultData): void {\n this.sortingData.set({\n ...this.sortingData()!,\n field: event.field,\n direction: event.direction\n });\n }\n\n /**\n * Handle filter change event and update filtering data.\n * @param event Updated filtering data.\n */\n onFilterChange(event: FiltersDialogResultData): void {\n this.filteringData.set({\n ...this.filteringData()!,\n filterBy: event.filterBy\n });\n }\n\n /**\n * Handle group change event and update grouping data.\n * @param event Updated grouping data.\n */\n onGroupChange(event: SettingsGroupDialogResultData): void {\n this.groupingData.set({\n ...this.groupingData()!,\n field: event.field,\n direction: event.direction\n });\n }\n\n /**\n * Handle columns change event and update columns data.\n * Store pending changes without updating the signal to avoid triggering child effects.\n * @param event Updated columns data.\n */\n onColumnsChange(event: SettingsColumnsDialogResultData): void {\n this._pendingColumnsChanges = event;\n }\n\n /**\n * Update the active filter step view when a change occurs.\n * @param event The new active filter step view.\n */\n onActiveFilterStepViewChange(event: FiltersViewStep): void {\n this.activeFilterStepView.set(event);\n }\n\n /**\n * Handle tab selection changes from the icon tab bar.\n * @param event The selected tab item.\n */\n protected onTabSelected(event: IconTabBarItem): void {\n // Map tab index to ActiveTab enum based on which tabs are rendered\n // The order is: columns (if showColumns), sort, filter, group\n const tabOrder: ActiveTab[] = [];\n if (this.columnsData() && this.showColumns) {\n tabOrder.push(ActiveTab.COLUMNS);\n }\n if (this.sortingData()) {\n tabOrder.push(ActiveTab.SORT);\n }\n if (this.filteringData()) {\n tabOrder.push(ActiveTab.FILTER);\n }\n if (this.groupingData()) {\n tabOrder.push(ActiveTab.GROUP);\n }\n\n const selectedTab = tabOrder[event.index];\n if (selectedTab) {\n this.activeTab.set(selectedTab);\n this.updateResetAvailability();\n }\n }\n\n /**\n * Update reset availability for a specific tab or the currently active tab.\n * @param tab Optional tab to update. If provided, updates that specific tab and the global state if it's active.\n * If not provided, updates the global state based on the currently active tab.\n * @param available Whether reset is available (only used when tab is provided).\n */\n protected updateResetAvailability(tab?: ActiveTab, available?: boolean): void {\n if (tab !== undefined && available !== undefined) {\n // Update tracking for the specific tab\n this._resetAvailabilityByTab.update((state) => ({ ...state, [tab]: available }));\n\n // If this is the active tab, update the global reset availability\n if (this.activeTab() === tab) {\n this.isResetAvailable$.set(available);\n }\n } else {\n // Update global reset availability based on the currently active tab\n const currentTab = this.activeTab();\n if (currentTab) {\n const tabAvailable = this._resetAvailabilityByTab()[currentTab] ?? false;\n this.isResetAvailable$.set(tabAvailable);\n }\n }\n }\n\n /**\n * Determine the initial active tab based on available data.\n * @returns The name of the active tab to display.\n */\n private _getInitialActiveTab(): Nullable<ActiveTab> {\n if (this.columnsData()) {\n return ActiveTab.COLUMNS;\n } else if (this.sortingData()) {\n return ActiveTab.SORT;\n } else if (this.filteringData()) {\n return ActiveTab.FILTER;\n } else if (this.groupingData()) {\n return ActiveTab.GROUP;\n }\n return null;\n }\n\n /**\n * Determine if the subheader should be shown based on the availability of sorting, filtering, grouping, and columns data.\n */\n private _shouldRenderSubheader(): void {\n const validDataCount = [\n this.sortingData(),\n this.filteringData(),\n this.groupingData(),\n this.columnsData()\n ].filter((data) => data !== null).length;\n this.showSubheader.set(validDataCount >= 2);\n }\n\n /**\n * Set initial sorting configuration from the table's state.\n */\n private _setInitialSorting(): void {\n const initialSorting = (this._table.initialState?.initialSortBy || [])[0];\n this._initialSorting.set({\n field: initialSorting?.field ?? NOT_SORTED_OPTION_VALUE,\n direction: initialSorting?.direction ?? INITIAL_DIRECTION\n });\n }\n\n /**\n * Set initial filter configuration from the table's state.\n */\n private _setInitialFilters(): void {\n this._initialFilters.set(this._table.initialState?.initialFilterBy ?? []);\n }\n\n /**\n * Set initial grouping configuration from the table's state.\n */\n private _setInitialGrouping(): void {\n const initialGrouping = (this._table.initialState?.initialGroupBy || [])[0];\n this._initialGrouping.set({\n field: initialGrouping?.field ?? NOT_GROUPED_OPTION_VALUE,\n direction: initialGrouping?.direction ?? INITIAL_DIRECTION\n });\n }\n\n /**\n * Set initial columns configuration from the table's state.\n */\n private _setInitialColumns(): void {\n const allColumns = this._table.getTableColumns();\n const initialVisibleColumns = allColumns.filter((col) => col.visible).map((col) => col.name);\n const columnOrder = allColumns.map((col) => col.name);\n\n // Build initial columns array\n const initialColumnsArray = allColumns.map((col) => ({\n label: col.label,\n key: col.key,\n name: col.name,\n visible: col.visible\n }));\n\n this._initialColumns.set({\n visibleColumns: initialVisibleColumns,\n columnOrder,\n columns: initialColumnsArray\n });\n }\n}\n","<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n @if (activeTab() !== 'filter') {\n <fd-bar-element>\n <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">{{\n ('platformTable.settingsDialogHeader' | fdTranslate)()\n }}</span>\n </fd-bar-element>\n } @else {\n <fd-bar-element>\n @if (activeFilterStepView()?.titleTemplateRef) {\n <ng-container\n [ngTemplateOutlet]=\"activeFilterStepView()?.titleTemplateRef ?? null\"\n ></ng-container>\n }\n </fd-bar-element>\n }\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body disablePaddings>\n @if (showSubheader()) {\n <fdp-icon-tab-bar layoutMode=\"row\" iconTabSize=\"sm\" (iconTabSelected)=\"onTabSelected($event)\">\n @if (columnsData() && showColumns) {\n <fdp-icon-tab-bar-tab [label]=\"('platformTable.toolbarActionColumnsButtonTitle' | fdTranslate)()\">\n <fdp-columns\n [columnsData]=\"columnsData()!\"\n [initialColumns]=\"_initialColumns()\"\n (columnsChange)=\"onColumnsChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.COLUMNS, $event)\"\n ></fdp-columns>\n </fdp-icon-tab-bar-tab>\n }\n @if (sortingData()) {\n <fdp-icon-tab-bar-tab [label]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\">\n <fdp-sorting\n [sortingData]=\"sortingData()!\"\n [initialSorting]=\"_initialSorting()\"\n (sortChange)=\"onSortChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.SORT, $event)\"\n ></fdp-sorting>\n </fdp-icon-tab-bar-tab>\n }\n @if (filteringData()) {\n <fdp-icon-tab-bar-tab [label]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\">\n <fdp-filters\n [headingLevel]=\"headingLevel\"\n [filteringData]=\"filteringData()!\"\n [initialFilters]=\"_initialFilters()\"\n (activeFilterStepViewChange)=\"onActiveFilterStepViewChange($event)\"\n (filterChange)=\"onFilterChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.FILTER, $event)\"\n ></fdp-filters>\n </fdp-icon-tab-bar-tab>\n }\n @if (groupingData()) {\n <fdp-icon-tab-bar-tab [label]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\">\n <fdp-grouping\n [groupingData]=\"groupingData()!\"\n [initialGrouping]=\"_initialGrouping()\"\n (groupChange)=\"onGroupChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.GROUP, $event)\"\n ></fdp-grouping>\n </fdp-icon-tab-bar-tab>\n }\n </fdp-icon-tab-bar>\n } @else {\n @if (columnsData() && showColumns) {\n <fdp-columns\n [columnsData]=\"columnsData()!\"\n [initialColumns]=\"_initialColumns()\"\n (columnsChange)=\"onColumnsChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.COLUMNS, $event)\"\n ></fdp-columns>\n }\n @if (sortingData()) {\n <fdp-sorting\n [sortingData]=\"sortingData()!\"\n [initialSorting]=\"_initialSorting()\"\n (sortChange)=\"onSortChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.SORT, $event)\"\n ></fdp-sorting>\n }\n @if (filteringData()) {\n <fdp-filters\n [headingLevel]=\"headingLevel\"\n [filteringData]=\"filteringData()!\"\n [initialFilters]=\"_initialFilters()\"\n (activeFilterStepViewChange)=\"onActiveFilterStepViewChange($event)\"\n (filterChange)=\"onFilterChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.FILTER, $event)\"\n ></fdp-filters>\n }\n @if (groupingData()) {\n <fdp-grouping\n [groupingData]=\"groupingData()!\"\n [initialGrouping]=\"_initialGrouping()\"\n (groupChange)=\"onGroupChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.GROUP, $event)\"\n ></fdp-grouping>\n }\n }\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.confirmBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n <fd-button-bar\n [label]=\"('platformTable.cancelBtnLabel' | fdTranslate)()\"\n fdkInitialFocus\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n forwardRef,\n inject,\n Input,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { filter, startWith } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';\nimport {\n CollectionFilter,\n SortDirection,\n Table,\n TableColumn,\n TableDialogCommonData,\n TableState\n} from '@fundamental-ngx/platform/table-helpers';\nimport { SettingsDialogComponent } from './settings-dialog/settings-dialog.component';\nimport { TableViewSettingsFilterComponent } from './table-view-settings-filter.component';\nimport {\n FiltersDialogData,\n SettingsColumnsDialogColumn,\n SettingsColumnsDialogData,\n SettingsGroupDialogData,\n SettingsSortDialogData\n} from './table-view-settings.model';\n\nexport const dialogConfig: DialogConfig = {\n responsivePadding: false,\n verticalPadding: false,\n width: 'auto'\n};\n\nexport interface CombinedTableDialogData {\n sortingData: SettingsSortDialogData | null;\n filteringData: FiltersDialogData | null;\n groupingData: SettingsGroupDialogData | null;\n columnsData: SettingsColumnsDialogData | null;\n}\n\n/**\n * View settings dialog component.\n *\n * Used to link view settings filters options to the grid table.\n *\n * ```html\n * <fdp-table #myTable></fdp-table>\n * ...\n * <fdp-table-view-settings-dialog [table]=\"myTable\">\n * <fdp-table-view-settings-filter\n * column=\"status\"\n * label=\"Status\"\n * type=\"single-select\"\n * values=\"[{value: 'filterValue', label: 'Filter label'}]\">\n * </fdp-table-view-settings-filter>\n * </fdp-table-view-settings-dialog>\n * ```\n * */\n@Component({\n selector: 'fdp-table-view-settings-dialog',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableViewSettingsDialogComponent implements AfterViewInit {\n /** Reference to table component. */\n @Input()\n set table(table: Table) {\n this._setTable(table);\n }\n\n get table(): Table {\n return this._table;\n }\n\n /** Whether to allow selecting '(Not sorted)' option in sorting dialog. */\n @Input()\n allowDisablingSorting = true;\n\n /** Heading level of the dialog. */\n @Input()\n headingLevel: 1 | 2 | 3 | 4 | 5 | 6 = 2;\n\n /** Whether to allow the user to configure column show/hide, as well as column order. */\n @Input()\n allowColumnConfiguration = false;\n\n /** @hidden */\n @ContentChildren(forwardRef(() => TableViewSettingsFilterComponent))\n filters: QueryList<TableViewSettingsFilterComponent>;\n\n /** @hidden */\n _table: Table;\n\n /** @hidden */\n _dialogRef: DialogRef<TableDialogCommonData | CombinedTableDialogData, any>;\n\n /** @hidden Stores the last known full column order (visible + hidden) */\n private _lastColumnOrder: SettingsColumnsDialogColumn[] | null = null;\n\n private readonly destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(private readonly _dialogService: DialogService) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._listenToFilters();\n }\n\n /** Open Sort Settings Dialog */\n showViewSettingsDialog(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns();\n\n const sortData: SettingsSortDialogData = {\n columns: columns.filter(({ sortable }) => sortable),\n direction: state.sortBy?.[0]?.direction,\n field: state.sortBy?.[0]?.field,\n allowDisablingSorting: this.allowDisablingSorting\n };\n\n const filterData: FiltersDialogData = {\n columns,\n viewSettingsFilters: this.filters.toArray(),\n filterBy: state?.filterBy\n };\n\n const groupData: SettingsGroupDialogData = {\n columns: columns.filter(({ groupable }) => groupable),\n direction: state.groupBy?.[0]?.direction,\n field: state.groupBy?.[0]?.field\n };\n\n // Get visible columns from table state\n const visibleColumnNames = state.columns || [];\n\n // Use last known column order if available, otherwise use table's natural order\n let allColumns: SettingsColumnsDialogColumn[];\n\n if (this._lastColumnOrder && this._lastColumnOrder.length > 0) {\n // Filter cached columns to only include those that still exist in live column definitions\n const validCachedColumns = this._lastColumnOrder.filter((cachedCol) =>\n columns.some((liveCol) => liveCol.name === cachedCol.name)\n );\n\n // Check if any new columns were added that aren't in the cache\n const newColumns = columns.filter(\n (liveCol) => !validCachedColumns.some((cachedCol) => cachedCol.name === liveCol.name)\n );\n\n // Combine valid cached columns (preserving order) with new columns (appended at end)\n const combinedColumns = [\n ...validCachedColumns.map((col) => ({\n ...col,\n visible: visibleColumnNames.includes(col.name)\n })),\n ...newColumns.map((col) => ({\n label: col.label,\n key: col.key,\n name: col.name,\n visible: visibleColumnNames.includes(col.name)\n }))\n ];\n\n allColumns = combinedColumns;\n } else {\n // First time opening - use table's natural column order\n // Get all columns and determine their current order and visibility\n const allColumnNames = [...visibleColumnNames];\n\n // Add any columns that aren't in the visible list (hidden columns)\n columns.forEach((col) => {\n if (!allColumnNames.includes(col.name)) {\n allColumnNames.push(col.name);\n }\n });\n\n allColumns = allColumnNames\n .map((name) => {\n const col = columns.find((c) => c.name === name);\n if (!col) {\n return null;\n }\n return {\n label: col.label,\n key: col.key,\n name: col.name,\n visible: visibleColumnNames.includes(col.name)\n };\n })\n .filter((col): col is NonNullable<typeof col> => col !== null);\n }\n\n const currentColumnsData: SettingsColumnsDialogData = {\n columns: allColumns\n };\n\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n SettingsDialogComponent,\n {\n ...dialogConfig,\n data: {\n sortingData: sortData.columns.length > 0 ? sortData : null,\n filteringData: filterData.viewSettingsFilters.length > 0 ? filterData : null,\n groupingData: groupData.columns.length > 0 ? groupData : null,\n columnsData: currentColumnsData.columns.length > 0 ? currentColumnsData : null,\n headingLevel: this.headingLevel,\n allowColumnConfiguration: this.allowColumnConfiguration\n }\n },\n this.table.injector\n );\n\n this._dialogRef.afterClosed\n .pipe(\n filter((result) => !!result),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(({ sortingData, filteringData, groupingData, columnsData }) => {\n if (sortingData) {\n this._applySorting(sortingData.field, sortingData.direction);\n }\n if (filteringData) {\n this._applyFiltering(filteringData.filterBy);\n }\n if (groupingData) {\n this._applyGrouping(groupingData.field, groupingData.direction);\n }\n if (columnsData) {\n this._applyColumns(columnsData);\n }\n });\n }\n\n /** @hidden */\n private _listenToFilters(): void {\n this.filters.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.filters.toArray().length > 0) {\n this._table?.showSettingsInToolbar(true);\n }\n });\n }\n\n /** @hidden */\n private _setTable(table: Table): void {\n this._table = table;\n this._subscribeToTable();\n }\n\n /** @hidden */\n private _subscribeToTable(): void {\n if (!this._table) {\n return;\n }\n\n this._table.openTableSortSettings\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.showViewSettingsDialog());\n\n this._table.openTableFilterSettings\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.showViewSettingsDialog());\n\n this._table.openTableGroupSettings\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.showViewSettingsDialog());\n\n this._table.tableColumnsStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((columns: TableColumn[]) => {\n const show =\n columns.some(({ sortable }) => sortable) ||\n columns.some(({ groupable }) => groupable) ||\n this.allowColumnConfiguration;\n this._table?.showSettingsInToolbar(show);\n });\n }\n\n /** @hidden */\n private _getTableState(): TableState {\n return this._table?.getTableState();\n }\n\n /** @hidden */\n private _getTableColumns(): TableColumn[] {\n return this._table?.getTableColumns() || [];\n }\n\n /** @hidden */\n private _applySorting(field: string | null, direction: SortDirection): void {\n this._table?.sort(field ? [{ field, direction }] : []);\n }\n\n /** @hidden */\n private _applyFiltering(filters: CollectionFilter[]): void {\n this._table?.filter(filters);\n }\n\n /** @hidden */\n private _applyGrouping(field: string | null, direction: SortDirection): void {\n this._table?.group(field ? [{ field, direction, showAsColumn: true }] : []);\n }\n\n /** @hidden */\n private _applyColumns(columnsData: SettingsColumnsDialogData): void {\n // Store the full column order (including hidden) so we can restore it on next open\n this._lastColumnOrder = columnsData.columns;\n\n // Get the visible columns in the order specified by the user\n const visibleColumnNames = columnsData.columns.filter((col) => col.visible).map((col) => col.name);\n\n // Use the table's setColumns method which handles both visibility and ordering\n this._table?.setColumns(visibleColumnNames);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { ListComponent, ListItemComponent, ListLinkDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Table, TableDataSourceDirective, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n selector: 'fdp-table-growing-button',\n imports: [ListComponent, ListItemComponent, ListTitleDirective, ListLinkDirective, FdTranslatePipe],\n templateUrl: './table-growing-button.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableGrowingButtonComponent {\n /** Whether to show items count. */\n @Input()\n showItemsCount = false;\n\n /** @hidden */\n readonly _tableService = inject(TableService);\n\n /** @hidden */\n readonly _dataSourceDirective = inject(TableDataSourceDirective);\n\n /** @hidden */\n readonly _table = inject(Table);\n\n /** @hidden */\n _loadMore(): void {\n (this._table as any)._onSpyIntersect(true);\n }\n}\n","<div fd-list role=\"none\">\n @if (_table.loadedRows$() < _dataSourceDirective.totalItems$()) {\n <div\n fd-list-item\n ariaRole=\"none\"\n class=\"fdp-table__growing-button\"\n [growing]=\"true\"\n [style.height]=\"'auto'\"\n [action]=\"true\"\n >\n <a fd-list-link (click)=\"_loadMore()\">\n <div fd-list-title>\n <div\n class=\"fdp-table__growing-button-content\"\n [class.fdp-table__growing-button-content--byline]=\"showItemsCount\"\n >\n @if (!showItemsCount) {\n {{ ('platformTable.loadMore' | fdTranslate)() }}\n } @else {\n <div class=\"fdp-table__growing-button__title\">\n {{ ('platformTable.loadMore' | fdTranslate)() }}\n </div>\n <div class=\"fdp-table__growing-button__subtitle\">\n [ {{ _table.loadedRows$() }} / {{ _dataSourceDirective.totalItems$() }} ]\n </div>\n }\n </div>\n </div>\n </a>\n </div>\n } @else if (_table.loadedRows$() === _dataSourceDirective.totalItems$() && showItemsCount) {\n <li\n fd-list-item\n [style.height]=\"'auto'\"\n ariaRole=\"none\"\n class=\"fdp-table__growing-button-content fdp-table__growing-button-total\"\n >\n <span fd-list-title>\n {{\n (\n 'platformTable.showingBlankOfBlank'\n | fdTranslate: { totalGrowingItemsCount: _table.loadedRows$() }\n )()\n }}\n </span>\n </li>\n }\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { TableCellDirective, TableRowDirective } from '@fundamental-ngx/core/table';\nimport { TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-footer-row]',\n templateUrl: './table-footer-row.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TableCellDirective, NgTemplateOutlet]\n})\nexport class TableFooterRowComponent extends TableRowDirective {\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n}\n","@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n <td class=\"fd-table__cell\" tabindex=\"-1\">\n @if (column?.footerLabel) {\n <span class=\"fd-table__cell--truncate-txt\">\n {{ column.footerLabel }}\n </span>\n } @else if (column?.footerCellTemplate && column.footerCellTemplate !== undefined) {\n <ng-template\n [ngTemplateOutlet]=\"column.footerCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: column }\"\n ></ng-template>\n }\n </td>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n Output,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport {\n FDK_FOCUSABLE_ITEM_DIRECTIVE,\n FDK_FOCUSABLE_LIST_DIRECTIVE,\n FocusableItemDirective,\n Nullable\n} from '@fundamental-ngx/cdk/utils';\nimport { TableCellDirective, TableRowDirective } from '@fundamental-ngx/core/table';\nimport { TableColumn, TableRow, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-group-row]',\n templateUrl: './table-group-row.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n useExisting: TableGroupRowComponent\n }\n ],\n host: {\n role: 'row',\n '[attr.aria-expanded]': 'row.expanded'\n },\n imports: [TableCellDirective, NgTemplateOutlet]\n})\nexport class TableGroupRowComponent<T> extends TableRowDirective implements OnChanges {\n /** Table ID. */\n @Input()\n rowId: string;\n /** Row index. */\n @HostBinding('attr.aria-rowindex')\n @Input()\n index: number;\n\n /** Row height. */\n @HostBinding('style.height.px')\n @Input()\n height: number;\n\n /** Whether the row is draggable. */\n @HostBinding('class.fd-table__row--draggable')\n @Input()\n draggable = false;\n\n /** Table Row. */\n @Input()\n row: TableRow<T>;\n\n /** Key to column mapping. */\n @Input()\n keyToColumnMap: Map<string, TableColumn>;\n\n /** Event emitted when group row expansion state needs to be toggled. */\n @Output()\n toggleGroupRow = new EventEmitter<TableRow<T>>();\n\n /** @hidden */\n _column: Nullable<TableColumn>;\n\n /** @hidden */\n @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n private set _focusableViewCellItems(items: QueryList<FocusableItemDirective>) {\n this.setItems(items.toArray());\n }\n\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('row' in changes || 'keyToColumnMap' in changes) {\n this._column = this.keyToColumnMap.get(this.row.value?.['field']);\n }\n }\n}\n","<td\n fd-table-cell\n class=\"fd-table__cell--group fd-table__cell--expand\"\n tabindex=\"0\"\n role=\"gridcell\"\n [focusable]=\"true\"\n colspan=\"100%\"\n [attr.aria-expanded]=\"row.expanded\"\n [attr.data-nesting-level]=\"row.level + 1\"\n (keydown.enter)=\"toggleGroupRow.emit(row)\"\n (keydown.space)=\"toggleGroupRow.emit(row)\"\n (click)=\"toggleGroupRow.emit(row)\"\n>\n <ng-template [ngTemplateOutlet]=\"tableCellExpandTemplate\"></ng-template>\n</td>\n<!-- Table Cell Expand Template -->\n<ng-template #tableCellExpandTemplate>\n <div class=\"fd-table__expand-wrapper\">\n <span class=\"fd-table__expand\" [class.fd-table__expand--open]=\"row.expanded\" aria-hidden=\"true\"></span>\n @if (_fdpTableService.groupRules$(); as groupRules) {\n <!-- Group row template when no nested groups -->\n @if (groupRules.size === 1) {\n <div class=\"fd-table__text fd-table__text--no-wrap\">\n {{ row.value?.['value'] }} - {{ row.value?.['count'] }}\n </div>\n }\n <!-- Group row template when there are nested groups -->\n @if (groupRules.size !== 1) {\n <div class=\"fd-table__text fd-table__text--no-wrap\">\n <ng-template [ngTemplateOutlet]=\"tableHeaderCellContentTemplate\"></ng-template>:\n {{ row.value?.['value'] }}\n </div>\n }\n }\n </div>\n</ng-template>\n<!-- Column Header Cell Content Template -->\n<ng-template #tableHeaderCellContentTemplate>\n @if (_column) {\n @if (_column.headerCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"_column.headerCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: _column }\"\n ></ng-template>\n } @else {\n <span\n [id]=\"rowId + '-header-cell-' + _column.name\"\n [attr.title]=\"_column.label\"\n class=\"fd-table__cell--truncate-txt\"\n >{{ _column.label }}</span\n >\n }\n }\n</ng-template>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n Pipe,\n PipeTransform,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport {\n DisabledBehaviorDirective,\n FDK_FOCUSABLE_ITEM_DIRECTIVE,\n FDK_FOCUSABLE_LIST_DIRECTIVE,\n FocusableItemDirective,\n RtlService\n} from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport { PopoverTriggerDirective } from '@fundamental-ngx/core/popover';\nimport { TableCellDirective, TableRowDirective, TableStatusIndicatorDirective } from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n ColumnResizableSidePipe,\n PlatformTableCellResizableDirective,\n SelectionCellStylesPipe,\n SelectionMode,\n SelectionModeValue,\n SortDirection,\n TableCellStylesPipe,\n TableColumn,\n TableColumnResizeService,\n TableColumnSortingDirectionPipe,\n TableRowService,\n TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { TableCellHeaderPopoverComponent } from '../table-cell-header-popover/table-cell-header-popover.component';\nimport { TableHeaderCellContentComponent } from '../table-header-cell-content/table-header-cell-content.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-header-row]',\n templateUrl: './table-header-row.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n useExisting: TableHeaderRowComponent\n }\n ],\n host: {\n role: 'row'\n },\n imports: [\n TableCellDirective,\n TableStatusIndicatorDirective,\n DisabledBehaviorDirective,\n CheckboxComponent,\n FormsModule,\n PlatformTableCellResizableDirective,\n NgClass,\n NgStyle,\n PopoverTriggerDirective,\n TableHeaderCellContentComponent,\n TableCellHeaderPopoverComponent,\n FdTranslatePipe,\n SelectionCellStylesPipe,\n TableCellStylesPipe,\n ColumnResizableSidePipe,\n TableColumnSortingDirectionPipe,\n forwardRef(() => IsColumnHasHeaderMenuPipe)\n ],\n // TODO: to be removed after bumping to latest styles and using the class from there\n styles: `\n .fd-table__sr-only {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n width: 1px;\n border: 0;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n white-space: nowrap;\n }\n `\n})\nexport class TableHeaderRowComponent extends TableRowDirective implements OnInit {\n /** Table ID. */\n @Input()\n rowId: string;\n\n /**\n * Whether to fix the table header and footer. Default is true.\n * Note that if the table contains freezable columns, the header and\n * footer will be fixed automatically, regardless of this input value.\n * */\n @Input()\n fixed: boolean;\n\n /**\n * Whether to show selection column.\n */\n @Input()\n isShownSelectionColumn: boolean;\n\n /**\n * Row checked state.\n */\n @Input()\n checkedState: boolean | null;\n\n /**\n * Selection mode.\n */\n @Input()\n selectionMode: SelectionModeValue;\n\n /**\n * Selection column width.\n */\n @Input()\n selectionColumnWidth: number;\n\n /** The column `name` to freeze columns up to and including. */\n @Input()\n freezeColumnsTo: string;\n\n /** Table without horizontal borders. */\n @Input()\n noHorizontalBorders = false;\n\n /** Table without vertical borders. */\n @Input()\n noVerticalBorders = false;\n\n /** Table without borders. */\n @Input()\n noBorders = false;\n\n /** The column `name` to freeze columns after and including. */\n @Input()\n freezeEndColumnsTo: string;\n\n /** @hidden */\n @Input()\n disableSelectionCheckbox = false;\n\n /** @hidden */\n @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n private set _focusableCellItems(items: QueryList<FocusableItemDirective>) {\n this.setItems(items.toArray());\n }\n\n /**\n * @hidden\n * Used to remove the selection column title, to prevent screenreader from reading \"Select All\" when focusing non-header cells\n * */\n readonly selectionColumnHeaderDisableTitle = signal(true);\n\n /** @hidden */\n readonly SELECTION_MODE = SelectionMode;\n\n /** @hidden */\n readonly SORT_DIRECTION = SortDirection;\n\n /** @hidden */\n readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n\n /** @hidden */\n readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n /** @hidden */\n readonly _tableRowService = inject(TableRowService);\n\n /** @hidden */\n protected readonly isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef);\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n this._tableColumnResizeService.markForCheck.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._cdr.detectChanges();\n });\n }\n\n /** @hidden */\n _columnTrackBy(index: number, column: TableColumn): string {\n return column.name;\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'isColumnHasHeaderMenu',\n standalone: true\n})\nexport class IsColumnHasHeaderMenuPipe implements PipeTransform {\n /** @hidden */\n private readonly _fdpTableService = inject(TableService);\n\n /** @hidden */\n transform(column: TableColumn): boolean {\n return (\n column.sortable ||\n column.groupable ||\n column.freezable ||\n column.endFreezable ||\n (column.filterable && !this._fdpTableService._isFilteringFromHeaderDisabled$())\n );\n }\n}\n","@if (_fdpTableService._semanticHighlighting$()) {\n <th\n [class.fd-table__cell--fixed]=\"fixed\"\n class=\"fd-table__cell\"\n [ngClass]=\"{\n 'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n 'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n }\"\n fd-table-status-indicator\n fdkDisabled\n [style.min-width]=\"_fdpTableService._semanticHighlightingColumnWidth$()\"\n [style.max-width]=\"_fdpTableService._semanticHighlightingColumnWidth$()\"\n ></th>\n}\n\n@if (isShownSelectionColumn) {\n <th\n fd-table-cell\n [ngClass]=\"{\n 'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n 'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n }\"\n [focusable]=\"true\"\n [class.fd-table__cell--fixed]=\"fixed\"\n class=\"fd-table__cell--checkbox\"\n [style]=\"\n _contentDensityObserver.contentDensity$()\n | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n \"\n (keydown.enter)=\"\n selectionMode === SELECTION_MODE.MULTIPLE && _tableRowService.toggleAllSelectableRows(!checkedState)\n \"\n (keydown.space)=\"\n selectionMode === SELECTION_MODE.MULTIPLE && _tableRowService.toggleAllSelectableRows(!checkedState);\n $event.preventDefault()\n \"\n (cellFocused)=\"_tableRowService.cellFocused($event)\"\n (mouseenter)=\"selectionColumnHeaderDisableTitle.set(false)\"\n (mouseleave)=\"selectionColumnHeaderDisableTitle.set(true)\"\n (focusin)=\"selectionColumnHeaderDisableTitle.set(false)\"\n (focusout)=\"selectionColumnHeaderDisableTitle.set(true)\"\n [attr.title]=\"\n selectionMode === SELECTION_MODE.SINGLE || selectionColumnHeaderDisableTitle()\n ? null\n : !checkedState\n ? ('platformTable.selectAllCheckboxLabel' | fdTranslate)()\n : ('platformTable.deselectAllCheckboxLabel' | fdTranslate)()\n \"\n [attr.aria-description]=\"\n selectionMode === SELECTION_MODE.SINGLE\n ? null\n : checkedState\n ? ('platformTable.deselectAllCheckboxLongLabel' | fdTranslate)()\n : checkedState === null\n ? ('platformTable.selectAllCheckboxMixedLongLabel' | fdTranslate)()\n : ('platformTable.selectAllCheckboxLongLabel' | fdTranslate)()\n \"\n >\n @if (selectionMode === SELECTION_MODE.MULTIPLE) {\n <fd-checkbox\n tabIndexValue=\"-1\"\n labelClass=\"fd-table__checkbox-label\"\n [fdkDisabled]=\"_fdpTableService.visibleColumnsLength() === 0 || disableSelectionCheckbox\"\n [tristate]=\"true\"\n [tristateSelectable]=\"false\"\n [ngModel]=\"checkedState\"\n (ngModelChange)=\"_tableRowService.toggleAllSelectableRows($event)\"\n ></fd-checkbox>\n }\n </th>\n}\n\n@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n <th\n [focusable]=\"true\"\n role=\"columnheader\"\n [fdpTableCellResizable]=\"\n $index\n | columnResizableSide\n : _fdpTableService.visibleColumnsLength()\n : _fdpTableService._isShownNavigationColumn$()\n \"\n [columnName]=\"column.name\"\n [id]=\"rowId + '__' + column.name\"\n [attr.aria-colindex]=\"$index\"\n [attr.aria-sort]=\"_fdpTableService.sortRules$().get(column.key) | fdpTableColumnSortingDirection\"\n [class.fd-table__cell--non-interactive]=\"column.nonInteractive\"\n [ngClass]=\"[\n 'fdp-table__col--' + column.name,\n column._freezed ? 'fd-table__cell--fixed' : '',\n column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n $last && !_fdpTableService._isShownNavigationColumn$() ? 'is-last-child' : '',\n (column | isColumnHasHeaderMenu) ? 'fd-table__item--clickable' : ''\n ]\"\n [ngStyle]=\"\n column\n | tableCellStyles\n : isRtl()\n : _fdpTableService._semanticHighlightingColumnWidth$()\n : selectionColumnWidth\n : column._freezed\n : column._endFreezed\n : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n : _tableColumnResizeService.getColumnWidthStyle(column.name)\n : _tableColumnResizeService.getNextColumnsWidth(column.name)\n : noBorders\n : noHorizontalBorders\n : noVerticalBorders\n \"\n [fdPopoverTrigger]=\"(column | isColumnHasHeaderMenu) ? tablePopover.popover : null\"\n (cellFocused)=\"_tableRowService.cellFocused($event)\"\n (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n >\n <fdp-table-header-cell-content [id]=\"rowId\" [column]=\"column\" [attr.title]=\"column.label\">\n <!-- Header menu -->\n <fdp-table-cell-header-popover\n #tablePopover\n [disabled]=\"!(column | isColumnHasHeaderMenu)\"\n [columnFrozen]=\"column._freezed || column._endFreezed\"\n [column]=\"column\"\n [columnIndex]=\"$index\"\n [popoverTemplate]=\"(column | isColumnHasHeaderMenu) ? column.headerCellPopoverTemplate : null\"\n [filteringFromHeaderDisabled]=\"_fdpTableService._isFilteringFromHeaderDisabled$()\"\n ></fdp-table-cell-header-popover>\n </fdp-table-header-cell-content>\n </th>\n}\n\n@if (_fdpTableService._isShownNavigationColumn$()) {\n <th\n [ngClass]=\"{\n 'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n 'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n }\"\n class=\"fd-table__cell fdp-table__cell--navigation is-last-child\"\n role=\"columnheader\"\n tabindex=\"-1\"\n >\n <span class=\"fd-table__sr-only\">\n {{ ('platformTable.navigationColumnTitle' | fdTranslate)() }}\n </span>\n </th>\n}\n\n<th\n aria-hidden=\"true\"\n class=\"fd-table__cell fd-table__cell--mock\"\n [class.fd-table__cell--mock-borderless]=\"!_tableColumnResizeService.cellMockVisible$()\"\n fdkDisabled\n></th>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport {\n DisabledBehaviorDirective,\n FDK_FOCUSABLE_ITEM_DIRECTIVE,\n FDK_FOCUSABLE_LIST_DIRECTIVE,\n FocusableItem,\n FocusableItemDirective,\n ValueByPathPipe\n} from '@fundamental-ngx/cdk/utils';\nimport { FormLabelComponent } from '@fundamental-ngx/core/form';\nimport {\n TableCellDirective,\n TableRowDirective,\n TableStatusIndicatorDirective,\n TableTextDirective\n} from '@fundamental-ngx/core/table';\nimport {\n SelectionMode,\n SelectionModeValue,\n TableRow,\n TableService,\n isTreeRow,\n isTreeRowFirstCell\n} from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-popping-row]',\n templateUrl: './table-popping-row.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n useExisting: TablePoppingRowComponent\n }\n ],\n host: {\n role: 'row',\n '[attr.aria-expanded]': '_isTreeRow(row) ? row.expanded : null'\n },\n imports: [\n TableCellDirective,\n DisabledBehaviorDirective,\n TableTextDirective,\n FormLabelComponent,\n NgTemplateOutlet,\n ValueByPathPipe,\n TableStatusIndicatorDirective\n ]\n})\nexport class TablePoppingRowComponent<T> extends TableRowDirective {\n /** Table Row. */\n @Input()\n row: TableRow<T>;\n\n /** Whether the row is selected. */\n @HostBinding('attr.aria-selected')\n @Input()\n checked: boolean | null;\n\n /** Current selection mode. */\n @Input()\n selectionMode: SelectionModeValue;\n\n /** Event emitted when group row expansion state needs to be toggled. */\n @Output()\n toggleGroupRow = new EventEmitter<TableRow<T>>();\n\n /** Event emitted when cell being clicked on. */\n @Output()\n cellClicked = new EventEmitter<{ index: number; row: TableRow<T> }>();\n\n /** @hidden */\n @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n private set _focusableCellItems(items: QueryList<FocusableItemDirective>) {\n this.setItems(items.toArray());\n }\n\n /** @hidden */\n readonly SELECTION_MODE = SelectionMode;\n\n /** @hidden */\n readonly _isTreeRow = isTreeRow;\n\n /** @hidden */\n readonly _isTreeRowFirstCell = isTreeRowFirstCell;\n\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n\n /** Set items programmatically. */\n setItems(items: ReadonlyArray<FocusableItem>): void {\n this._itemsOverride.set(items);\n }\n}\n","@if (_fdpTableService._semanticHighlighting$(); as semanticHighlighting) {\n <td\n class=\"fd-table__cell\"\n fd-table-status-indicator\n [status]=\"row.value[semanticHighlighting]\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></td>\n}\n\n@if (selectionMode !== SELECTION_MODE.NONE) {\n <td class=\"fd-table__cell\" tabindex=\"-1\" aria-hidden=\"true\"></td>\n}\n\n<td\n fd-table-cell\n colspan=\"100%\"\n [attr.data-nesting-level]=\"row.level + 1\"\n [attr.aria-expanded]=\"_isTreeRow(row) ? row.expanded : null\"\n (click)=\"cellClicked.emit({ index: 0, row })\"\n (keydown.enter)=\"_isTreeRowFirstCell(0, row, $event) && toggleGroupRow.emit(row)\"\n [focusable]=\"true\"\n>\n @for (poppingColumn of _fdpTableService.poppingColumns$(); track poppingColumn.name) {\n <div fd-table-text>\n @if (poppingColumn?.label?.length) {\n <label fd-form-label>{{ poppingColumn.label }}:</label>\n }\n\n @if (poppingColumn?.columnCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"poppingColumn.columnCellTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: true, rowIndex: row.index }\"\n ></ng-template>\n } @else {\n {{ row.value | valueByPath: poppingColumn.key }}\n }\n </div>\n }\n</td>\n","import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport { set } from '@fundamental-ngx/cdk/utils';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { InputComponent, PlatformDatePickerComponent, SwitchComponent } from '@fundamental-ngx/platform/form';\nimport { EditableTableCell, TableColumn, TableRow } from '@fundamental-ngx/platform/table-helpers';\n\nlet controlUniqId = 0;\n\n@Component({\n selector: 'fdp-table-editable-cell',\n templateUrl: './table-editable-cell.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: EditableTableCell, useExisting: TableEditableCellComponent }],\n imports: [FormsModule, InputComponent, PlatformDatePickerComponent, SwitchComponent, FdTranslatePipe]\n})\nexport class TableEditableCellComponent implements EditableTableCell {\n /** Table row definition. */\n @Input()\n row: TableRow;\n\n /** Table cell definition. */\n @Input()\n column: TableColumn;\n\n /** Column value. */\n @Input()\n set columnValue(value: any) {\n this._columnValue = value;\n set(this.row.value, this.column.key, value);\n }\n\n get columnValue(): any {\n return this._columnValue;\n }\n\n /** Editable cell form. */\n @ViewChild(NgForm)\n form: NgForm;\n\n /** @hidden */\n _controlUniqName = `input-${controlUniqId++}`;\n\n /** @hidden */\n private _columnValue: any;\n}\n","<form #ngForm>\n @switch (column.dataType) {\n @case ('number') {\n <fdp-input\n [placeholder]=\"('platformTable.editableCellNumberPlaceholder' | fdTranslate)()\"\n [(ngModel)]=\"columnValue\"\n [name]=\"_controlUniqName\"\n type=\"number\"\n ></fdp-input>\n }\n @case ('date') {\n <fdp-date-picker\n type=\"single\"\n [placeholder]=\"('platformTable.editableCellDatePlaceholder' | fdTranslate)()\"\n [name]=\"_controlUniqName\"\n [allowNull]=\"false\"\n [(ngModel)]=\"columnValue\"\n ></fdp-date-picker>\n }\n @case ('boolean') {\n <fdp-switch [(ngModel)]=\"columnValue\" [name]=\"_controlUniqName\"></fdp-switch>\n }\n @default {\n <fdp-input\n [placeholder]=\"('platformTable.editableCellStringPlaceholder' | fdTranslate)()\"\n [(ngModel)]=\"columnValue\"\n [name]=\"_controlUniqName\"\n type=\"text\"\n ></fdp-input>\n }\n }\n</form>\n","import { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { AsyncPipe, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation,\n computed,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport {\n DisabledBehaviorDirective,\n FDK_FOCUSABLE_ITEM_DIRECTIVE,\n FDK_FOCUSABLE_LIST_DIRECTIVE,\n FocusableItemDirective,\n FocusableItemPosition,\n KeyUtil,\n RtlService,\n ValueByPathPipe,\n destroyObservable,\n get,\n uuidv4\n} from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport {\n TableCellDirective,\n TableIconDirective,\n TableRowDirective,\n TableStatusIndicatorDirective\n} from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n ColumnResizableSidePipe,\n EditableTableCell,\n PlatformTableCellResizableDirective,\n SelectionCellStylesPipe,\n SelectionMode,\n SelectionModeValue,\n TableCellStylesPipe,\n TableColumn,\n TableColumnResizeService,\n TableDraggableDirective,\n TableRow,\n TableRowKeyboardDrag,\n TableRowService,\n TableService,\n isTreeRow,\n isTreeRowFirstCell\n} from '@fundamental-ngx/platform/table-helpers';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { TableEditableCellComponent } from '../table-editable-cell/table-editable-cell.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-row]',\n templateUrl: './table-row.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n useExisting: TableRowComponent\n }\n ],\n host: {\n role: 'row',\n '[attr.aria-expanded]': '_isTreeRow(row) ? row.expanded : null'\n },\n imports: [\n TableCellDirective,\n TableStatusIndicatorDirective,\n DisabledBehaviorDirective,\n NgStyle,\n NgTemplateOutlet,\n CheckboxComponent,\n FormsModule,\n PlatformTableCellResizableDirective,\n NgClass,\n TableEditableCellComponent,\n TableIconDirective,\n AsyncPipe,\n ValueByPathPipe,\n FdTranslatePipe,\n SelectionCellStylesPipe,\n TableCellStylesPipe,\n ColumnResizableSidePipe,\n IconComponent\n ]\n})\nexport class TableRowComponent<T> extends TableRowDirective implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n /** Row ID. */\n @Input()\n rowId: string;\n\n /** Table Row. */\n @Input()\n row: TableRow<T>;\n\n /** Row index. */\n @Input()\n index: number;\n\n /** Selection mode. */\n @Input()\n selectionMode: SelectionModeValue;\n\n /** Selectable flag key. */\n @Input()\n selectableKey: string;\n\n /** Whether to enable checkbox tristate mode. */\n @Input()\n enableTristateMode: boolean;\n\n /**\n * Whether to fix the table header and footer. Default is true.\n * Note that if the table contains freezable columns, the header and\n * footer will be fixed automatically, regardless of this input value.\n * */\n @Input()\n fixed: boolean;\n\n /** Selection column width. */\n @Input()\n selectionColumnWidth: number;\n\n /** The column `name` to freeze columns up to and including. */\n @Input()\n freezeColumnsTo: string;\n\n /** The column `name` to freeze columns after and including. */\n @Input()\n freezeEndColumnsTo: string;\n\n /**\n * Event emitted when keyboard drag performed.\n */\n @Output()\n keyboardDrag = new EventEmitter<TableRowKeyboardDrag>();\n\n /** @hidden */\n @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n private set _focusableViewCellItems(items: QueryList<FocusableItemDirective>) {\n this.setItems(items.toArray());\n }\n\n /** @hidden */\n @ViewChildren(EditableTableCell)\n private readonly _editableCells: QueryList<EditableTableCell>;\n\n /** @hidden */\n @HostBinding('attr.aria-selected')\n protected get _ariaSelected(): boolean {\n return !!this.row.checked;\n }\n\n /** @hidden */\n _hasRowHeaderColumn$ = computed(() => this._fdpTableService.visibleColumns$().some((c) => c.role === 'rowheader'));\n\n /** @hidden */\n _rowSelectionHelperTextId = `rowSelectionHelper-${uuidv4()}`;\n\n /** @hidden */\n readonly _announceEmptyCell = signal(false);\n\n /** @hidden */\n readonly _isTreeRowFirstCell = isTreeRowFirstCell;\n\n /** @hidden */\n readonly SELECTION_MODE = SelectionMode;\n\n /** @hidden */\n readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n /** @hidden */\n readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n\n /** @hidden */\n readonly _tableRowService = inject(TableRowService);\n\n /** @hidden */\n readonly _isTreeRow = isTreeRow;\n\n /** @hidden */\n protected readonly isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n protected readonly navigationIcon = computed(() => (this.isRtl() ? 'slim-arrow-left' : 'slim-arrow-right'));\n\n /** @hidden */\n protected readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _refreshChildRows$ = new Subject<void>();\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef);\n\n /** @hidden */\n private readonly _zone = inject(NgZone);\n\n /** @hidden */\n private readonly _elmRef = inject(ElementRef);\n\n /** @hidden */\n private readonly _dndTableDirective = inject(TableDraggableDirective, {\n optional: true\n });\n\n /** @hidden */\n constructor() {\n super();\n this._tableColumnResizeService.resizeInProgress$\n .pipe(\n switchMap(() => this._tableColumnResizeService.markForCheck),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this._cdr.markForCheck();\n });\n\n this._zone.runOutsideAngular(() => {\n fromEvent<KeyboardEvent>(this._elmRef.nativeElement, 'keydown')\n .pipe(\n filter(() => !!this._dndTableDirective),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((event) => {\n this._onKeyDown(event);\n });\n });\n }\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n this._editableCells.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const cells = this._editableCells.toArray();\n if (cells.length > 0) {\n this._tableRowService.updateEditableCells(this.row, cells);\n } else {\n this._tableRowService.removeEditableCells(this.row);\n }\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('row' in changes) {\n this._listenToRowExpansion();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this._refreshChildRows$.next();\n this._refreshChildRows$.complete();\n this._tableRowService.removeEditableCells(this.row);\n }\n\n /** @hidden */\n _toggleGroupRow(): void {\n this._tableRowService.toggleRow({ type: 'toggleRow', row: this.row });\n }\n\n /** @hidden */\n _toggleSingleSelectableRow(event?: Event): void {\n event?.preventDefault();\n this._tableRowService.toggleRow({ type: 'toggleSingleSelectableRow', row: this.row });\n }\n\n /** @hidden */\n _toggleMultiSelectRow(row: TableRow<T>, event?: Event): void {\n event?.preventDefault();\n this._tableRowService.toggleRow({ ...{ row, event }, ...{ type: 'toggleMultiSelectRow' } });\n }\n\n /** @hidden */\n _columnTrackBy(index: number, column: TableColumn): string {\n return column.name;\n }\n\n /** @hidden */\n _itemFocusedEventAnnouncer = (position: FocusableItemPosition): string => {\n let retVal = `Column ${position.colIndex + 1} of ${position.totalCols}, `;\n let column;\n if (this._fdpTableService?.visibleColumns$) {\n let colIndex = position.colIndex;\n if (this.selectionMode === 'single' || this.selectionMode === 'multiple') {\n colIndex--;\n }\n column = this._fdpTableService.visibleColumns$()[colIndex];\n }\n if (column && (column._freezed || column._endFreezed)) {\n retVal = retVal + 'fixed, ';\n }\n retVal = retVal + `row: ${position.rowIndex + 1} of ${position.totalRows}`;\n if (this._isTreeRow(this.row) || this.row.level > 0) {\n retVal = retVal + ', level ' + (this.row.level + 1);\n }\n return retVal;\n };\n\n /** @hidden */\n _handleCellFocused(\n event: FocusableItemPosition,\n index: number,\n row: TableRow<T>,\n column: TableColumn,\n tableTextContainer: HTMLElement\n ): void {\n this._setAnnounceEmptyCell(row, column, tableTextContainer);\n this._tableRowService.cellFocused(event);\n this._tableRowService.cellActivate(index, row);\n }\n\n /** @hidden */\n protected _handleCellSpaceKey(colIdx: number, tableCellElement: HTMLTableCellElement, $event: Event): void {\n if ($event.target === tableCellElement && isTreeRowFirstCell(colIdx, this.row, $event)) {\n $event.preventDefault();\n this._toggleGroupRow();\n }\n }\n\n /** @hidden */\n private _listenToRowExpansion(): void {\n this._refreshChildRows$.next();\n const refresh = merge(this._refreshChildRows$, destroyObservable(this._destroyRef));\n // Load items only once. Further loading will be covered by the lazy loading functionality.\n this.row?.expanded$\n ?.pipe(\n filter((expanded) => expanded && this.row.children.length === 0),\n takeUntil(refresh)\n )\n .subscribe(() => {\n this._tableRowService.loadChildRows(this.row);\n });\n }\n\n /** @hidden */\n private _onKeyDown(event: KeyboardEvent): void {\n const isArrowDown = KeyUtil.isKeyCode(event, DOWN_ARROW);\n const isArrowUp = KeyUtil.isKeyCode(event, UP_ARROW);\n\n if (!event.altKey) {\n return;\n }\n\n if (!isArrowDown && !isArrowUp) {\n return;\n }\n\n this._dndTableDirective?.dragRowFromKeyboard(\n isArrowDown ? 'down' : 'up',\n event,\n this.index,\n event.shiftKey ? 'group' : 'shift'\n );\n }\n\n /** @hidden */\n private _setAnnounceEmptyCell(row: TableRow<T>, column: TableColumn, tableTextContainer: HTMLElement): void {\n if (row.state !== 'readonly') {\n this._announceEmptyCell.set(false);\n return;\n }\n\n // If cell contains elements with explicit accessible names, don't announce as empty\n if (this._hasAccessibleContent(tableTextContainer)) {\n this._announceEmptyCell.set(false);\n return;\n }\n\n let value: string;\n // For non-column templates (data-driven), always check for empty content.\n const isCellEmptyInNonColumnTemplate =\n !column.columnCellTemplate &&\n (!(value = get(row.value, column.key)) || (typeof value === 'string' && value.trim() === ''));\n\n // For column templates (consumer-provided), check text content by default.\n // Otherwise, determined by consumer by disabling default checking.\n const isCellEmptyInColumnTemplate =\n column.columnCellTemplate && column.announceEmptyCell() && tableTextContainer?.innerText?.trim() === '';\n\n this._announceEmptyCell.set(isCellEmptyInColumnTemplate || isCellEmptyInNonColumnTemplate);\n }\n\n /** @hidden Checks if container has elements with explicit accessible names (aria-label, aria-labelledby) */\n private _hasAccessibleContent(container: HTMLElement): boolean {\n return !!container?.querySelector('[aria-label], [aria-labelledby]');\n }\n}\n","@if (_fdpTableService._semanticHighlighting$(); as semanticHighlighting) {\n <td\n class=\"fd-table__cell\"\n fd-table-status-indicator\n fdkDisabled\n [addDisabledClass]=\"false\"\n [status]=\"row.value[semanticHighlighting]\"\n ></td>\n}\n<!-- hidden text for screenreader -->\n<ng-template #selectionScreenReaderText>\n <span\n aria-hidden=\"true\"\n [attr.id]=\"_rowSelectionHelperTextId\"\n [ngStyle]=\"{\n position: 'absolute !important',\n height: '1px',\n width: '1px',\n overflow: 'hidden',\n clip: 'rect(1px, 1px, 1px, 1px)',\n color: 'transparent',\n display: 'block'\n }\"\n >\n {{ ((row.checked ? 'platformTable.deselectSingleRow' : 'platformTable.selectSingleRow') | fdTranslate)() }}\n </span>\n</ng-template>\n<!-- Row Selection Cell -->\n@if (selectionMode === SELECTION_MODE.SINGLE) {\n @if (row.value[selectableKey] !== false) {\n <td\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [attr.role]=\"_hasRowHeaderColumn$() ? 'rowheader' : 'gridcell'\"\n fd-table-cell\n [focusable]=\"true\"\n [style]=\"\n _contentDensityObserver.contentDensity$()\n | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n \"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n (click)=\"_toggleSingleSelectableRow()\"\n (keydown.enter)=\"_toggleSingleSelectableRow($event)\"\n (keydown.space)=\"_toggleSingleSelectableRow($event)\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n </td>\n } @else {\n <td\n class=\"fd-table__cell--checkbox\"\n role=\"gridcell\"\n fd-table-cell\n fdkDisabled\n [addDisabledClass]=\"false\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n }\n} @else if (selectionMode === SELECTION_MODE.MULTIPLE) {\n @if (row.value[selectableKey] !== false) {\n <td\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n role=\"cell\"\n fd-table-cell\n [focusable]=\"true\"\n (keydown.enter)=\"_toggleMultiSelectRow(row, $event)\"\n (keydown.space)=\"_toggleMultiSelectRow(row, $event)\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n [attr.aria-selected]=\"row.checked\"\n [style]=\"\n _contentDensityObserver.contentDensity$()\n | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n \"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n <fd-checkbox\n tabIndexValue=\"-1\"\n labelClass=\"fd-table__checkbox-label\"\n [tristate]=\"enableTristateMode\"\n [tristateSelectable]=\"false\"\n [ngModel]=\"row.checked$ | async\"\n (ngModelChange)=\"_toggleMultiSelectRow(row)\"\n ></fd-checkbox>\n </td>\n } @else {\n <td\n class=\"fd-table__cell--checkbox\"\n role=\"gridcell\"\n fd-table-cell\n fdkDisabled\n [addDisabledClass]=\"false\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n }\n}\n@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n <td\n #tableCellElement\n fd-table-cell\n [fdpTableCellResizable]=\"\n $index\n | columnResizableSide\n : _fdpTableService.visibleColumnsLength()\n : _fdpTableService._isShownNavigationColumn$()\n \"\n [columnName]=\"column.name\"\n [focusable]=\"true\"\n [attr.role]=\"column.role\"\n [headers]=\"rowId + '__' + column.name\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [ngClass]=\"[\n 'fdp-table__col--' + column.name,\n column._freezed ? 'fd-table__cell--fixed' : '',\n column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n row.isTree && $index === 0 ? 'fd-table__cell--expand' : '',\n $last && !_fdpTableService._isShownNavigationColumn$() ? 'is-last-child' : ''\n ]\"\n [ngStyle]=\"\n column\n | tableCellStyles\n : isRtl()\n : _fdpTableService._semanticHighlightingColumnWidth$()\n : selectionColumnWidth\n : column._freezed\n : column._endFreezed\n : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n : _tableColumnResizeService.getColumnWidthStyle(column.name)\n : _tableColumnResizeService.getNextColumnsWidth(column.name)\n \"\n [attr.aria-expanded]=\"_isTreeRowFirstCell($index, row) ? row.expanded : null\"\n [attr.data-nesting-level]=\"$index === 0 ? row.level + 1 : null\"\n (cellFocused)=\"_handleCellFocused($event, $index, row, column, tableTextContainer)\"\n (focusout)=\"_announceEmptyCell.set(false)\"\n (click)=\"_tableRowService.cellClicked({ index: $index, row })\"\n (keydown.enter)=\"_isTreeRowFirstCell($index, row, $event) && _toggleGroupRow()\"\n (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.space)=\"_handleCellSpaceKey($index, tableCellElement, $event)\"\n [attr.title]=\"\n _isTreeRowFirstCell($index, row) && row.expanded\n ? ('platformTable.collapseRowButtonTitle' | fdTranslate)()\n : _isTreeRowFirstCell($index, row) && !row.expanded\n ? ('platformTable.expandRowButtonTitle' | fdTranslate)()\n : null\n \"\n >\n <div\n [class.fd-table__text]=\"column.applyText\"\n [class.fd-table__text--no-wrap]=\"column.noWrap\"\n [class.fd-table__cell--truncate-txt]=\"column.applyText\"\n [attr.title]=\"\n tableTextContainer.offsetWidth < tableTextContainer.scrollWidth ? tableTextContainer.textContent : null\n \"\n #tableTextContainer\n >\n @if (_isTreeRowFirstCell($index, row)) {\n <span\n class=\"fd-table__expand\"\n [class.fd-table__expand--open]=\"row.expanded$ | async\"\n aria-hidden=\"true\"\n ></span>\n }\n @if (row.state === 'readonly') {\n @if (_announceEmptyCell()) {\n <span\n [ngStyle]=\"{\n position: 'absolute',\n height: '1px',\n width: '1px',\n overflow: 'hidden',\n clip: 'rect(1px, 1px, 1px, 1px)',\n color: 'transparent',\n display: 'block'\n }\"\n >\n {{ ('platformTable.emptyCell' | fdTranslate)() }}\n </span>\n }\n @if (column?.columnCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"column.columnCellTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: false, rowIndex: row.index }\"\n ></ng-template>\n } @else {\n {{ row.value | valueByPath: column.key }}\n }\n } @else {\n @if (column?.editableColumnCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"column.editableColumnCellTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: false, rowIndex: row.index }\"\n ></ng-template>\n } @else {\n <fdp-table-editable-cell\n [row]=\"row\"\n [column]=\"column\"\n [columnValue]=\"row.value | valueByPath: column.key\"\n ></fdp-table-editable-cell>\n }\n }\n </div>\n </td>\n}\n<ng-content></ng-content>\n@if (_fdpTableService._isShownNavigationColumn$()) {\n <td fd-table-cell class=\"fdp-table__cell--navigation is-last-child\" fdkDisabled [addDisabledClass]=\"false\">\n @if (row.navigatable) {\n <fd-icon\n fd-table-icon\n [navigation]=\"true\"\n [glyph]=\"navigationIcon()\"\n class=\"fdp-table__navigation-indicator\"\n [attr.title]=\"('platformTable.rowNavigateButtonTitle' | fdTranslate)()\"\n ></fd-icon>\n }\n </td>\n}\n<td\n aria-hidden=\"true\"\n class=\"fd-table__cell fd-table__cell--mock\"\n [class.fd-table__cell--mock-borderless]=\"!_tableColumnResizeService.cellMockVisible$()\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n></td>\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { SPACE } from '@angular/cdk/keycodes';\nimport {\n AfterViewChecked,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ContentChild,\n ContentChildren,\n effect,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n signal,\n SimpleChanges,\n TrackByFunction,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n DndListDirective,\n DragAndDropModule,\n FDK_FOCUSABLE_GRID_DIRECTIVE,\n FocusableCellPosition,\n FocusableGridDirective,\n IntersectionSpyDirective,\n KeyUtil,\n Nullable,\n range,\n RangeSelector,\n resizeObservable,\n RtlService,\n TabbableElementService,\n uniq\n} from '@fundamental-ngx/cdk/utils';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport {\n ContentDensityMode,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { SkeletonComponent } from '@fundamental-ngx/core/skeleton';\nimport {\n TableComponent as CoreTableComponent,\n TableService as CoreTableService,\n TableComponent as FdTableComponent,\n TableBodyDirective,\n TableCellDirective,\n TableFooterDirective,\n TableHeaderDirective,\n TableRowDirective\n} from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { FDP_PRESET_MANAGED_COMPONENT, isJsObject } from '@fundamental-ngx/platform/shared';\nimport {\n applySelectionToChildren,\n buildNewRowSkeleton,\n CollectionFilter,\n CollectionGroup,\n CollectionSort,\n convertObjectsToTableRows,\n convertTreeObjectsToTableRows,\n convertTreeTableRowToFlatList,\n DEFAULT_HIGHLIGHTING_KEY,\n EDITABLE_ROW_SEMANTIC_STATE,\n EditableTableCell,\n FDP_TABLE_DRAGGABLE_DIRECTIVE,\n FDP_TABLE_STATE_DIRECTIVE,\n FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n findRowChildren,\n getFreezableColumns,\n getFreezableEndColumns,\n getRowParents,\n getSelectableRows,\n isRowNavigatable,\n isTableRow,\n isTreeRowFirstCell,\n PlatformTableManagedPreset,\n ROW_HEIGHT,\n RowClassesPipe,\n RowComparator,\n SaveRowsEvent,\n SELECTION_COLUMN_WIDTH,\n SelectionMode,\n SelectionModeValue,\n SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH,\n Table,\n TABLE_COLUMN_MIN_WIDTH,\n TableCellActivateEvent,\n TableColumn,\n TableColumnFreezeEvent,\n TableColumnResizeService,\n TableColumnsChangeEvent,\n TableDataSource,\n TableDataSourceDirective,\n TableDraggable,\n TableFilterChangeEvent,\n TableGroupChangeEvent,\n TableHeaderResizerDirective,\n TableInitialState,\n TablePageChangeEvent,\n TableResponsiveService,\n TableRow,\n TableRowActivateEvent,\n TableRowClass,\n TableRowSelectionChangeEvent,\n TableRowService,\n TableRowToggleOpenStateEvent,\n TableRowType,\n TableScrollable,\n TableScrollableDirective,\n TableScrollDispatcherService,\n TableService,\n TableSortChangeEvent,\n TableState,\n TableVirtualScroll\n} from '@fundamental-ngx/platform/table-helpers';\nimport { shallowEqual } from 'fast-equals';\nimport { fromEvent, Observable, of, Subject, Subscription } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport {\n NoDataWrapperComponent,\n PlatformTableColumnResizerComponent,\n TABLE_TOOLBAR,\n TableAppliedFilter,\n TableToolbarInterface,\n ToolbarContext\n} from './components';\nimport { TableGrowingButtonComponent } from './components/growing-button/table-growing-button.component';\nimport { TableFooterRowComponent } from './components/table-footer-row/table-footer-row.component';\nimport { TableGroupRowComponent } from './components/table-group-row/table-group-row.component';\nimport { TableHeaderRowComponent } from './components/table-header-row/table-header-row.component';\nimport { TablePoppingRowComponent } from './components/table-popping-row/table-popping-row.component';\nimport { TableRowComponent } from './components/table-row/table-row.component';\n\nlet tableUniqueId = 0;\n\n/**\n * The component that represents a table.\n * A table is a set of tabular data. Line items can support data, images and actions.\n * ```html\n * <fdp-table\n * [dataSource]=\"source\"\n * fdCompact\n * selectionMode=\"multiple\"\n * emptyTableMessage=\"No data found\">\n *\n * <fdp-table-toolbar\n * title=\"Order Line Items\"\n * [hideItemCount]=\"false\">\n * </fdp-table-toolbar>\n *\n * <fdp-column\n * name=\"name\"\n * key=\"name\"\n * label=\"Name\"\n * align=\"start\">\n * </fdp-column>\n *\n * <fdp-column\n * name=\"description\"\n * key=\"description\"\n * label=\"Description\">\n * </fdp-column>\n * </fdp-table>\n * ```\n */\n@Component({\n selector: 'fdp-table',\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: Table, useExisting: forwardRef(() => TableComponent) },\n TableRowService,\n TableService,\n CoreTableService,\n TableScrollDispatcherService,\n TableColumnResizeService,\n TableResponsiveService,\n contentDensityObserverProviders({\n supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY, ContentDensityMode.CONDENSED]\n }),\n {\n provide: FDP_PRESET_MANAGED_COMPONENT,\n useExisting: TableComponent\n }\n ],\n hostDirectives: [\n {\n directive: TableDataSourceDirective,\n inputs: ['dataSource', 'childDataSource'],\n\n outputs: [\n 'childDataSourceChanged',\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n 'onDataRequested',\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n 'onDataReceived',\n 'dataSourceChanged',\n 'dataChanged',\n 'isLoading'\n ]\n },\n TableHeaderResizerDirective\n ],\n host: {\n class: 'fdp-table',\n '[class.fdp-table--outer-scroll]': 'outerScroll',\n '[class.fd-table--no-horizontal-borders]': 'noHorizontalBorders || noBorders',\n '[class.fd-table--no-vertical-borders]': 'noVerticalBorders',\n '[class.fd-table--group]': '_isGroupTable$()'\n },\n imports: [\n NgTemplateOutlet,\n BusyIndicatorComponent,\n PlatformTableColumnResizerComponent,\n TableScrollableDirective,\n FocusableGridDirective,\n CoreTableComponent,\n TableHeaderDirective,\n TableHeaderRowComponent,\n TableBodyDirective,\n DragAndDropModule,\n TableGroupRowComponent,\n TableRowComponent,\n TablePoppingRowComponent,\n TableRowDirective,\n TableCellDirective,\n SkeletonComponent,\n IntersectionSpyDirective,\n AsyncPipe,\n FdTranslatePipe,\n RowClassesPipe,\n TableGrowingButtonComponent,\n TableFooterDirective,\n TableFooterRowComponent\n ]\n})\nexport class TableComponent<T = any>\n extends Table<T>\n implements AfterViewInit, OnDestroy, OnChanges, OnInit, AfterViewChecked\n{\n /** Component name used in a Preset-managed component. */\n @Input()\n name = 'platformTable';\n\n /** ID for the Table. */\n @Input()\n @HostBinding('attr.id')\n id = `fdp-table-${tableUniqueId++}`;\n\n /** Whether to allow resizing columns by dragging the column edge with mouse. */\n @Input()\n enableDragResize = true;\n\n /**\n * Whether to fix the table header and footer. Default is true.\n * Note that if the table contains freezable columns, the header and\n * footer will be fixed automatically, regardless of this input value.\n * */\n @Input()\n fixed = true;\n\n /** The column `name` to freeze columns up to and including. */\n @Input()\n freezeColumnsTo: string;\n\n /** The column `name` to freeze columns after and including. */\n @Input()\n freezeEndColumnsTo: string;\n /** Toggle for page scrolling feature. */\n @Input()\n pageScrolling = false;\n /** Whether the table should render growing button at the bottom. */\n @Input()\n showGrowingButton = false;\n /**\n * Whether to show total items amount in growing button text content.\n */\n @Input()\n showItemsCount = false;\n /** Number of items per page. */\n @Input()\n pageSize: Nullable<number>;\n /** Page scrolling threshold in px. */\n @Input()\n pageScrollingThreshold = 80;\n /** Table body height. */\n @Input()\n bodyHeight: string;\n /** Text displayed when table has no items. */\n @Input()\n emptyTableMessage: string;\n /** Text displayed when table has no visible columns. */\n @Input()\n noVisibleColumnsMessage: string;\n /** Table without horizontal borders. */\n @Input()\n noHorizontalBorders = false;\n /** If the table scrolling should happen outside and stick the toolbar and thead */\n @Input({ transform: booleanAttribute })\n outerScroll = false;\n /** Table without vertical borders. */\n @Input()\n set noVerticalBorders(value: boolean) {\n this._noVerticalBorders = value;\n }\n\n get noVerticalBorders(): boolean {\n return this._noVerticalBorders || this.noBorders || this._tableService.poppingColumns$().length > 0;\n }\n\n /** @hidden */\n private _noVerticalBorders = false;\n\n /** Table without borders. */\n @Input()\n noBorders = false;\n /** Table body without any borders, but header with borders. */\n @Input()\n noBodyBorders = false;\n /** Table without outer borders */\n @HostBinding('class.fdp-table--no-outer-border')\n @Input()\n noOuterBorders = false;\n /** Table body without horizontal borders. */\n @Input()\n noBorderX = false;\n /** Table body without vertical borders. */\n @Input()\n noBorderY = false;\n /** Accessor to a children nodes of tree. */\n @Input()\n relationKey: string;\n /** Table row expanded state key. Used to set the initial state of tree row. */\n @Input()\n expandedStateKey: string;\n /** Property key indicating that the row has children accessible via [childDataSource]. */\n @Input()\n hasChildrenKey: string;\n /**\n * Whether row is navigatable.\n * Pass boolean value to set state for the all rows.\n * Pass string value with the key of the row item's field to compute state for every single row.\n */\n @Input()\n rowNavigatable: string | boolean = false;\n /**\n * Whether to highlight navigated row.\n */\n @Input()\n highlightNavigatedRow = false;\n /** Whether table row can be clicked */\n @Input()\n rowsActivable = false;\n /** Value with the key of the row item's field to enable selecting. */\n @Input()\n selectedKey: string;\n /** Value with the key of the row item's field to enable selecting. */\n @Input()\n selectableKey: string;\n /**\n * Tracking function that will be used to check the differences in data changes.\n * Used similarly to `ngFor` `trackBy` function.\n * Accepts a function that takes two parameters, index and item.\n */\n @Input()\n trackBy: TrackByFunction<T>;\n /**\n * An optional function that identifies uniqueness of a particular row.\n * Table component uses it to be able to preserve selection when a data list is changed.\n */\n @Input()\n rowComparator: RowComparator<T>;\n /** String or function to calculate additional rows' CSS classes. */\n @Input()\n rowsClass: TableRowClass<T>;\n /** Used to construct empty row object for editing. */\n @Input()\n editableRowSkeleton: T;\n /** Whether all rows should be collapsed by default after the table is loaded. */\n @Input()\n expandOnInit = false;\n /**\n * Minimum height of the row, required for the virtualScroll,\n * default is 44px in cozy, 32px in compact and 24px in condensed (set automatically)\n */\n @Input()\n rowHeight = ROW_HEIGHT.get(ContentDensityMode.COZY)!;\n /**\n * Minimum height of the popping column when displayed in pop-in mode. Required when using popping columns and virtual scroll.\n */\n @Input()\n secondaryRowHeight: number | undefined;\n /** Event emitted when the current preset configuration has been changed. */\n /**\n * Whether to load previous pages.\n * This option works only when `pageScrolling` is true, and the initial page > 1\n */\n @Input()\n loadPagesBefore = false;\n\n /**\n * Whether or not the header cells should be interactive\n * (have hover and active states)\n * default: false\n */\n @Input()\n nonInteractiveHeader = false;\n\n /** @hidden */\n _selectionMode: SelectionModeValue = SelectionMode.NONE;\n\n /** @hidden */\n @ViewChild(TableHeaderRowComponent)\n _header: TableHeaderRowComponent;\n\n /** Sets selection mode for the table. 'single' | 'multiple' | 'none' */\n @Input()\n set selectionMode(value: SelectionModeValue) {\n this._selectionMode = value;\n this._isSelectionColumnShown = this.selectionMode !== SelectionMode.NONE;\n this._setSelectionColumnWidth();\n }\n\n get selectionMode(): SelectionModeValue {\n return this._selectionMode;\n }\n\n /** @hidden */\n private _enableTristateMode = false;\n\n /**\n * When True, the checked state of each tree item depends on the checked\n * state of its parent or direct child.\n */\n @Input()\n set enableTristateMode(value: boolean) {\n this._enableTristateMode = value;\n }\n\n get enableTristateMode(): boolean {\n return this.isTreeTable && this._enableTristateMode;\n }\n\n /** Value with the key of the row item's field to compute semantic state of the row. */\n @Input()\n set semanticHighlighting(value: string) {\n this._semanticHighlightingKey = value;\n this._setSemanticHighlighting();\n }\n\n get semanticHighlighting(): string {\n if (!this._semanticHighlightingKey && this._forceSemanticHighlighting) {\n return DEFAULT_HIGHLIGHTING_KEY;\n }\n\n return this._semanticHighlightingKey;\n }\n\n /**\n * Whether to force rows to follow 'checked all' state of the table.\n * If true, all new rows that are coming from the dataSource will follow 'checked all' state.\n * If false, row will respect `checkedKey` property to define checked state of itself.\n * Default is false.\n */\n @Input()\n forceCheckedAllState = false;\n\n /**\n * aria-labelledby attribute value for the table.\n */\n @Input()\n ariaLabelledBy: string;\n\n /** The minimum width at which the user can resize a column, in pixels. Default is 50. */\n @Input()\n minimumColumnWidth = TABLE_COLUMN_MIN_WIDTH;\n\n /** Whether to display the table footer. */\n @Input({ transform: booleanAttribute })\n showTableFooter = false;\n\n /**\n * Specifies minimal width of the non-frozen columns.\n * Useful when table has large amount of freezable columns and table still should have some free space available.\n */\n @Input()\n set nonFrozenColumnsMinWidth(value: number) {\n this._listenToFixedColumnsWidth();\n this._nonFrozenColumnsMinWidth = value;\n }\n\n get nonFrozenColumnsMinWidth(): number {\n return this._nonFrozenColumnsMinWidth;\n }\n\n /** @hidden */\n private _nonFrozenColumnsMinWidth = 0;\n\n /** @hidden */\n private _shouldCheckNewRows = false;\n\n /** @hidden */\n private _calculateFrozenColumnRefresh$ = new Subject<void>();\n\n /** @hidden */\n private _defaultBodyHeight = '100%';\n\n /** Event emitted when current preset configuration has been changed. */\n @Output()\n presetChanged = new EventEmitter<PlatformTableManagedPreset>();\n /** Event fired when table selection has changed. */\n @Output()\n readonly rowSelectionChange: EventEmitter<TableRowSelectionChangeEvent<T>> = new EventEmitter<\n TableRowSelectionChangeEvent<T>\n >();\n /** Event fired when table sort order has changed. */\n @Output()\n readonly sortChange: EventEmitter<TableSortChangeEvent> = new EventEmitter<TableSortChangeEvent>();\n /** Event fired when the table filter has changed. */\n @Output()\n readonly filterChange: EventEmitter<TableFilterChangeEvent> = new EventEmitter<TableFilterChangeEvent>();\n /** Event fired when table grouping has changed. */\n @Output()\n readonly groupChange: EventEmitter<TableGroupChangeEvent> = new EventEmitter<TableGroupChangeEvent>();\n /** Event fired when visible columns list has been changed. */\n @Output()\n readonly columnsChange: EventEmitter<TableColumnsChangeEvent> = new EventEmitter<TableColumnsChangeEvent>();\n /** Event emitted when pagination state has been changed. */\n @Output()\n readonly pageChange = new EventEmitter<TablePageChangeEvent>();\n /** Event fired when there is a change in the frozen column. */\n @Output()\n readonly columnFreeze: EventEmitter<TableColumnFreezeEvent> = new EventEmitter<TableColumnFreezeEvent>();\n /** Event fired when group/tree row collapsed/expanded. */\n @Output()\n readonly rowToggleOpenState = new EventEmitter<TableRowToggleOpenStateEvent<T>>();\n /** Event fired when a cell is clicked or focused. */\n @Output()\n readonly cellActivate = new EventEmitter<TableCellActivateEvent<T>>();\n /** Event fired when row navigated. */\n @Output()\n readonly rowActivate = new EventEmitter<TableRowActivateEvent<T>>();\n /** Event fired when row navigated. */\n @Output()\n readonly rowNavigate = new EventEmitter<TableRowActivateEvent<T>>();\n /** Event fired when empty row added. */\n @Output()\n readonly emptyRowAdded = new EventEmitter<void>();\n /** Event fired when save button pressed. */\n @Output()\n readonly save = new EventEmitter<SaveRowsEvent<T>>();\n /** Event fired when cancel button pressed. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n readonly cancel = new EventEmitter<void>();\n /** Event emitted when table body being scrolled. */\n @Output()\n readonly tableScrolled = new EventEmitter<number>();\n /** Event emitted when new rows has been set and rendered. */\n @Output()\n readonly tableRowsSet = new EventEmitter<void>();\n /** Event emitted when all rows being expanded. */\n @Output()\n allRowsExpanded = new EventEmitter<void>();\n /** Event emitted when all rows being collapsed. */\n @Output()\n allRowsCollapsed = new EventEmitter<void>();\n /** Event emitted when a cell is focused. */\n @Output()\n readonly cellFocused = new EventEmitter<any>();\n /** @hidden */\n @ViewChild('tableScrollable')\n readonly tableScrollable: TableScrollable;\n /** @hidden */\n @ViewChild('tableContainer')\n readonly tableContainer: ElementRef<HTMLDivElement>;\n /** @hidden */\n @ViewChild(FdTableComponent, { read: ElementRef })\n readonly table: ElementRef<HTMLDivElement>;\n /** @hidden */\n @ViewChild(FDK_FOCUSABLE_GRID_DIRECTIVE)\n readonly _focusableGrid: FocusableGridDirective;\n /** @hidden */\n @ViewChild('tableBody', { read: ElementRef })\n private readonly _tableBody: ElementRef<HTMLElement>;\n /** @hidden */\n @ViewChild(DndListDirective)\n private readonly _dndDirective: Nullable<DndListDirective<TableRow>>;\n /** @hidden */\n @ViewChild('tableScrollMockContainer')\n readonly tableScrollMockContainer: ElementRef<HTMLDivElement>;\n /** @hidden */\n @ViewChild('tableBody', { read: ElementRef })\n readonly tableBody: ElementRef<HTMLElement>;\n /** @hidden */\n @ContentChildren(TableColumn)\n readonly columns: QueryList<TableColumn>;\n /** @hidden */\n @ContentChildren(EditableTableCell, { descendants: true })\n readonly customEditableCells: QueryList<EditableTableCell>;\n /** @hidden */\n @ContentChild(TABLE_TOOLBAR)\n readonly tableToolbar: TableToolbarInterface;\n /** @hidden */\n @ContentChild(NoDataWrapperComponent)\n readonly _noDataWrapper: Nullable<NoDataWrapperComponent>;\n\n /** Total loaded items. */\n loadedRows$ = signal(0);\n\n /** @hidden */\n hoveredRowIndex$ = signal<Nullable<number>>(null);\n\n /** @hidden */\n get initialSortBy(): CollectionSort[] {\n return this.initialState?.initialSortBy ?? [];\n }\n\n /**\n * @hidden\n * verify if the bodyheight provided is valid in percentage or pixels\n */\n get isBodyHeightValid(): boolean {\n const height = this.bodyHeight;\n\n if (height) {\n return (\n (height.endsWith('px') && this._isValidInteger(height.split('px')[0])) ||\n (height.endsWith('%') && this._isValidInteger(height.split('%')[0]))\n );\n } else {\n return false;\n }\n }\n\n /**\n * @hidden\n * if the bodyHeight is valid, then set that as value as body height for table\n * else set default body height for table as 100%\n */\n get tableBodyHeight(): string {\n return this.isBodyHeightValid ? this.bodyHeight : this._defaultBodyHeight;\n }\n\n /**\n * @hidden\n * Columns to be rendered in the template\n */\n get _visibleColumns(): TableColumn[] {\n return this._tableService.visibleColumns$();\n }\n\n /** @hidden */\n get isTreeTable(): boolean {\n return !!this._dndTableDirective?.isTreeTable;\n }\n\n /** @hidden */\n get enableRowReordering(): boolean {\n return !!this._dndTableDirective?.enableRowReordering;\n }\n\n /** Whether the table rows are draggable. */\n get isDraggable(): boolean {\n return !!this._dndTableDirective?.isTreeTable && !!this._dndTableDirective?.enableRowReordering;\n }\n\n /** @hidden */\n get _semanticHighlightingColumnWidth(): number {\n return this.semanticHighlighting ? SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH : 0;\n }\n\n /** @hidden Sum of widths of fixed columns (semantic highlighting, selection) */\n get _fixedColumnsPadding(): number {\n return this._semanticHighlightingColumnWidth + this._selectionColumnWidth;\n }\n\n /** @hidden */\n get _tableWidthPx(): number {\n return this.tableContainer.nativeElement.getBoundingClientRect().width;\n }\n\n /** @hidden */\n get loadingState(): boolean {\n return (\n this.loading ??\n (this._dataSourceDirective._internalLoadingState ||\n this._dataSourceDirective._internalChildrenLoadingState ||\n this._dndLoadingState)\n );\n }\n\n /**\n * Whether the selection column should be shown,\n * If there are no visible rows or visible columns\n * or selection mode is none, then selection column should not be shown.\n **/\n get isSelectionColumnShown(): boolean {\n return (\n this._isSelectionColumnShown &&\n !!this._tableRowsVisible.length &&\n this._tableService.visibleColumnsLength() > 0\n );\n }\n\n /** @hidden */\n get _ariaLabelledBy(): string | null {\n if (this.ariaLabelledBy) {\n return this.ariaLabelledBy;\n }\n return this.tableToolbar?.tableToolbarTitleId || null;\n }\n\n /**\n * @hidden\n * Representation of combined table rows.\n * Contains all rows including group rows.\n */\n _tableRows: TableRow<T>[] = [];\n /**\n * @hidden\n * Representation of table rows that came from dataSource.\n * Contains all rows including group rows.\n */\n _dataSourceTableRows: TableRow<T>[] = [];\n /**\n * @hidden\n * Representation of added table rows.\n */\n _newTableRows: TableRow<T>[] = [];\n /**\n * @hidden\n * Visible table rows.\n * Rows list that is used to be rendered in the ui.\n * Based on _tableRows and excludes hidden rows.\n */\n _tableRowsVisible: TableRow<T>[] = [];\n /**\n * @hidden\n * Table Column Map. Where key is column key and value is column\n */\n _keyToColumnMap: Map<string, TableColumn> = new Map();\n /**\n * @hidden\n * Freezable column names and their respective indexes\n */\n _freezableColumns: Map<string, number> = new Map();\n /**\n * @hidden\n * Freezable column names and their respective indexes for columns that will be frozen to the end of the table\n */\n _freezableEndColumns: Map<string, number> = new Map();\n /** @hidden */\n _tableColumnsLength = 0;\n /** @hidden */\n readonly loadingRowRange = range(3);\n /** @hidden */\n get loadingColumnsRange(): number[] {\n return range(this._tableColumnsLength);\n }\n /** @hidden */\n _checkedState: boolean | null = false;\n /** @hidden */\n _isGroupTable$ = computed(() => {\n const groupRules = this._tableService.groupRules$();\n\n return groupRules ? groupRules.size > 0 : (this.initialState?.initialGroupBy?.length ?? 0) > 0;\n });\n /**\n * @hidden\n * Used to create a row component placeholder and set data in it rather than re-create the row component when data changes.\n * Optimizes performance due to skipping initial setup of the component.\n */\n _tableCurrentlyRenderedRowsPlaceholder: number[] = [];\n /** @hidden */\n _dndTableRowsPlaceholder: TableRow[] = [];\n /** @hidden */\n _isSelectionColumnShown = false;\n /** @hidden */\n readonly _toolbarContext: ToolbarContext;\n /** @hidden */\n _navigatedRowIndex: number;\n /** @hidden */\n _selectionColumnWidth = 0;\n /** @hidden */\n readonly tableColumnsStream: Observable<TableColumn[]>;\n /** @hidden */\n _loadPreviousPages = false;\n /** @hidden */\n readonly _dataSourceDirective = inject<TableDataSourceDirective<T>>(TableDataSourceDirective);\n /** @hidden */\n readonly _tableRowService = inject(TableRowService);\n /** @hidden */\n readonly initialState = inject<TableInitialState>(FDP_TABLE_STATE_DIRECTIVE, {\n optional: true\n });\n /** @hidden */\n readonly _virtualScrollDirective: TableVirtualScroll | null = inject<TableVirtualScroll>(\n FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n {\n optional: true\n }\n );\n /** @hidden */\n readonly _dndTableDirective = inject<TableDraggable>(FDP_TABLE_DRAGGABLE_DIRECTIVE, {\n optional: true\n });\n /** Loading state */\n @Input()\n loading: boolean | undefined;\n /** @hidden */\n private _semanticHighlightingKey: string;\n /** @hidden */\n private _forceSemanticHighlighting = false;\n /** @hidden */\n private readonly _isShownSortSettingsInToolbar$ = signal(false);\n /** @hidden */\n private readonly _isShownFilterSettingsInToolbar$ = signal(false);\n /** @hidden */\n private readonly _isShownGroupSettingsInToolbar$ = signal(false);\n /** @hidden */\n private _appliedFilterNames = signal<TableAppliedFilter[]>([]);\n /** @hidden */\n private readonly _isShownColumnSettingsInToolbar$ = signal(false);\n /** @hidden */\n private readonly _isShownSettingsInToolbar$ = signal(false);\n\n /**\n * @hidden\n * Indicates when all items are checked\n */\n private _checkedAll = false;\n /**\n * @hidden\n * Indicates whether at least 1 item is checked\n */\n private _checkedAny = false;\n /** @hidden */\n private _subscriptions = new Subscription();\n /** @hidden */\n private _viewInitiated = false;\n /** @hidden */\n private _addedItems: T[] = [];\n /** @hidden */\n private _columnsWidthSet = false;\n /** @hidden */\n private _dndLoadingState = false;\n /** @hidden */\n private readonly _rangeSelector = new RangeSelector();\n /** @hidden */\n private _currentPreset: PlatformTableManagedPreset = {};\n /** @hidden */\n private _initialStateSet = false;\n /** @hidden */\n private _rowHeightManuallySet = false;\n /** @hidden */\n private _shouldEmitRowsChange = false;\n /** @hidden */\n private _lastFreezableColumnCalculation = false;\n /** @hidden */\n private readonly _tableHeaderResizer = inject(TableHeaderResizerDirective);\n\n /**\n * @hidden\n * Mapping function for the trackBy, provided by the user.\n * Is needed, because we are wrapping user supplied data into a `TableRow` class.\n */\n _rowTrackBy: TrackByFunction<number>;\n\n /** @hidden */\n private readonly _defaultTrackBy: TrackByFunction<number> = (index: number) => index;\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n constructor(\n private readonly _ngZone: NgZone,\n private readonly _cdr: ChangeDetectorRef,\n readonly _tableService: TableService,\n private readonly _tableScrollDispatcher: TableScrollDispatcherService,\n public readonly _tableColumnResizeService: TableColumnResizeService,\n readonly contentDensityObserver: ContentDensityObserver,\n readonly injector: Injector,\n private readonly _tabbableService: TabbableElementService\n ) {\n super();\n this.initialState?.setTable(this);\n this._dndTableDirective?.setTable(this);\n this._virtualScrollDirective?.setTable(this);\n this._dataSourceDirective.setTable(this);\n this._rowTrackBy = this._defaultTrackBy;\n this._toolbarContext = {\n counter: this._dataSourceDirective.totalItems$,\n sortable: this._isShownSortSettingsInToolbar$,\n filterable: this._isShownFilterSettingsInToolbar$,\n groupable: this._isShownGroupSettingsInToolbar$,\n columns: this._isShownColumnSettingsInToolbar$,\n settings: this._isShownSettingsInToolbar$,\n hasAnyActions: computed(\n () =>\n this._isShownSortSettingsInToolbar$() ||\n this._isShownFilterSettingsInToolbar$() ||\n this._isShownGroupSettingsInToolbar$() ||\n this._isShownColumnSettingsInToolbar$() ||\n this._isShownSettingsInToolbar$()\n ),\n appliedFilters: this._appliedFilterNames\n };\n\n effect(() => {\n this._setMockScrollbarPosition(this._rtlService?.rtl());\n });\n\n this.tableColumnsStream = this._tableService.tableColumns$.asObservable();\n\n this._subscriptions.add(\n this._tableRowService.cellFocused$.subscribe((event) => {\n this.cellFocused.emit(event);\n })\n );\n this._subscriptions.add(\n this._tableRowService.cellActivate$.subscribe((event) => {\n this.cellActivate.emit(event);\n })\n );\n }\n\n /** Returns array of rows that are currently rendered in the table body. */\n getCurrentlyRenderedRows(): number[] {\n return this._tableCurrentlyRenderedRowsPlaceholder;\n }\n\n /**\n * Sets an array of rows that are currently rendered in the table body.\n * @param startIndex Start index of all rows.\n * @param length Length of rows.\n */\n setCurrentlyRenderedRows(startIndex = 0, length: number): void {\n const newIndices = new Array(length).fill(null).map((_, i) => i + startIndex);\n const newSlice = this._tableRows.slice(startIndex, startIndex + length);\n\n // During drag with virtual scroll, preserve the dragged row at its original DnD index\n if (\n this._virtualScrollDirective?.virtualScroll &&\n this._virtualScrollDirective?.scrollWholeRows &&\n this._dndTableDirective?.dragDropInProgress &&\n this._dndTableDirective?.draggedRow &&\n this._dndTableDirective?.draggedRowGlobalIndex !== null &&\n this._dndTableDirective?.draggedDndIndex !== null\n ) {\n const draggedRow = this._dndTableDirective.draggedRow;\n const draggedGlobalIndex = this._dndTableDirective.draggedRowGlobalIndex;\n const targetDndIndex = this._dndTableDirective.draggedDndIndex;\n\n // Find where the dragged row is in the new slice\n const indexInNewSlice = newSlice.indexOf(draggedRow);\n const draggedGlobalIndexInNewIndices = newIndices.indexOf(draggedGlobalIndex);\n\n if (indexInNewSlice >= 0 && draggedGlobalIndexInNewIndices >= 0) {\n // Dragged row is in the new range - move it to target DnD index\n if (indexInNewSlice !== targetDndIndex && targetDndIndex < newSlice.length) {\n newSlice.splice(indexInNewSlice, 1);\n newSlice.splice(targetDndIndex, 0, draggedRow);\n\n newIndices.splice(draggedGlobalIndexInNewIndices, 1);\n newIndices.splice(targetDndIndex, 0, draggedGlobalIndex);\n }\n } else if (draggedGlobalIndexInNewIndices < 0) {\n // Dragged row is NOT in the new range, but we need to keep it visible\n if (targetDndIndex < newSlice.length) {\n newSlice.splice(targetDndIndex, 0, draggedRow);\n newSlice.pop();\n\n newIndices.splice(targetDndIndex, 0, draggedGlobalIndex);\n newIndices.pop();\n } else {\n newSlice.push(draggedRow);\n newIndices.push(draggedGlobalIndex);\n }\n }\n\n this._dndTableRowsPlaceholder = newSlice;\n this._tableCurrentlyRenderedRowsPlaceholder = newIndices;\n } else {\n this._dndTableRowsPlaceholder = newSlice;\n this._tableCurrentlyRenderedRowsPlaceholder = newIndices;\n }\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('loading' in changes) {\n this._tableService.setTableLoading(this.loadingState);\n }\n\n if ('trackBy' in changes) {\n this._rowTrackBy =\n typeof this.trackBy === 'function'\n ? (index) => this.trackBy(index, this._tableRowsVisible[index].value)\n : this._defaultTrackBy;\n }\n\n // changes below should be checked only after view is initialized\n if (!this._viewInitiated) {\n return;\n }\n\n if ('selectionMode' in changes) {\n this._rangeSelector.reset();\n }\n\n if (\n 'selectionMode' in changes ||\n 'freezeColumnsTo' in changes ||\n 'freezeEndColumnsTo' in changes ||\n 'semanticHighlighting' in changes\n ) {\n this.recalculateTableColumnWidth();\n }\n\n if ('rowNavigatable' in changes) {\n this._tableRows.forEach((row) => (row.navigatable = isRowNavigatable(row.value, this.rowNavigatable)));\n\n this._calculateIsShownNavigationColumn();\n }\n\n if ('rowHeight' in changes) {\n this._rowHeightManuallySet = true;\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._tableColumnResizeService.setTableRef(this);\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._viewInitiated = true;\n\n this.initialState?.setInitialState();\n\n this._dataSourceDirective.initializeDataSource();\n\n this._listenToTableStateChanges();\n\n this._listenToColumns();\n\n this._calculateVisibleColumns();\n\n this._tableService.constructTableMetadata();\n\n this._listenToTableRowsPipe();\n\n this._listenToPageScrolling();\n\n this._virtualScrollDirective?.listenOnVirtualScroll();\n\n this._listenToRowHeightChange();\n\n this._listenToColumnPropertiesChange();\n\n this._listenToTableWidthChanges();\n\n this._listenToTableContainerMouseLeave();\n\n this._listenToLoadingAndRefocusCell();\n\n if (\n !this._virtualScrollDirective?.scrollWholeRows ||\n !this._virtualScrollDirective ||\n !this._virtualScrollDirective?.virtualScroll\n ) {\n this._initScrollPosition();\n }\n\n this._listenToFixedColumnsWidth();\n\n if (this.expandOnInit) {\n this.expandAll();\n }\n\n if (!this._virtualScrollDirective?.scrollWholeRows) {\n this._subscriptions.add(\n this._virtualScrollDirective?.virtualScrollTransform$\n .pipe(filter(() => !!this._virtualScrollDirective?.virtualScroll && !!this._tableBody))\n .subscribe((transform) => {\n this._tableBody.nativeElement.style.transform = `translateY(${transform}px)`;\n })\n );\n }\n\n if (this._focusableGrid) {\n this._focusableGrid.shortRowFocus = 'first';\n }\n\n if (this._virtualScrollDirective?.scrollWholeRows) {\n this._setMockScrollbarPosition(this._rtlService?.rtl());\n }\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n // When table rows are set, emit an event to manipulate the view (e.g., scroll to some row).\n if (!this._shouldEmitRowsChange) {\n return;\n }\n this._shouldEmitRowsChange = false;\n const emitter = this.tableRowsSet;\n this._onZoneFree(() => {\n emitter.emit();\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._calculateFrozenColumnRefresh$.next();\n this._calculateFrozenColumnRefresh$.complete();\n }\n\n /** Get current state/settings of the Table. */\n getTableState(): TableState {\n return this._tableService.getTableState();\n }\n\n /** Set current state/settings of the Table. */\n setTableState(state: TableState | PlatformTableManagedPreset): void {\n this._currentPreset = state;\n const newState: TableState = Object.assign({}, this._tableService.getDefaultState(), state);\n this._tableService.setSort(newState.sortBy);\n this._tableService.setFilters(newState.filterBy);\n this._tableService.setGroups(newState.groupBy);\n this.setColumns(newState.columns);\n this._tableService.search(newState.searchInput);\n this._tableService.freezeTo(newState.freezeToColumn);\n this.pageSize = newState.page.pageSize;\n this._tableService.setCurrentPage(newState.page.currentPage);\n this._tableService.setTableState(newState);\n this._cdr.markForCheck();\n }\n\n /** Get table columns definition list. */\n getTableColumns(): TableColumn[] {\n return this.columns?.toArray() || [];\n }\n\n /** Get a list of visible table columns. */\n getVisibleTableColumns(): TableColumn[] {\n return this._visibleColumns || [];\n }\n\n /** Set Sorting rules */\n sort(sortRules: CollectionSort[]): void {\n this._tableService.setSort(sortRules);\n this._cdr.markForCheck();\n }\n\n /** Add Sorting rules to the existing ones */\n addSort(sortRules: CollectionSort[]): void {\n this._tableService.addSort(sortRules);\n this._cdr.markForCheck();\n }\n\n /** Set Filter rules */\n filter(filterRules: CollectionFilter[]): void {\n this._tableService.setFilters(filterRules);\n this._cdr.markForCheck();\n }\n\n /** Add Filter rule */\n addFilter(filterRules: CollectionFilter[]): void {\n this._tableService.addFilters(filterRules);\n this._cdr.markForCheck();\n }\n\n /** Removes filters for the provided fields */\n removeFilter(fields: string[]): void {\n this._tableService.removeFilters(fields);\n this._cdr.markForCheck();\n }\n\n /** Set Groups */\n group(groups: CollectionGroup[]): void {\n this._tableService.setGroups(groups);\n this._cdr.markForCheck();\n }\n\n /** Add Groups */\n addGroup(groups: CollectionGroup[]): void {\n this._tableService.addGroups(groups);\n this._cdr.markForCheck();\n }\n\n /**\n * Set visible table columns\n * The order is matter\n * @param columns table columns names\n */\n setColumns(columns: string[]): void {\n const tableColumns = this.getTableColumns();\n const columnsObject: Record<string, string[]> = {\n columns: [],\n keys: []\n };\n tableColumns\n .filter((column) => columns.includes(column.name))\n // We need to have same order of columns as user defined.\n .sort((a, b) => columns.indexOf(a.name) - columns.indexOf(b.name))\n .reduce((acc, column) => {\n acc.columns.push(column.name);\n acc.keys.push(column.key);\n return acc;\n }, columnsObject);\n this._tableService.setColumns(columnsObject.columns, columnsObject.keys);\n this._cdr.markForCheck();\n }\n\n /** Freeze table to column */\n freezeToColumn(columnName: string, end?: boolean): void {\n end ? (this.freezeEndColumnsTo = columnName) : (this.freezeColumnsTo = columnName);\n\n this._tableService.freezeTo(columnName, end);\n this.recalculateTableColumnWidth();\n }\n\n /** Unfreeze column */\n unfreeze(columnName: string, end?: boolean): void {\n const columns = end ? this._freezableEndColumns : this._freezableColumns;\n const freezeToColumnIndex = columns.get(columnName) ?? -1;\n const freezeToPreviousColumnName = columns[freezeToColumnIndex - 1];\n\n end\n ? (this.freezeEndColumnsTo = freezeToPreviousColumnName)\n : (this.freezeColumnsTo = freezeToPreviousColumnName);\n\n this._tableService.freezeTo(freezeToPreviousColumnName, end);\n this.recalculateTableColumnWidth();\n }\n\n /** expand all rows */\n expandAll(): void {\n const expandableRows = this._tableRows.filter((row) => row.type === TableRowType.TREE);\n if (this._dataSourceDirective.childDataSource) {\n this._tableRowService.loadChildRows(expandableRows);\n }\n this._markAsExpanded(expandableRows);\n this.allRowsExpanded.emit();\n }\n\n /** collapse all rows */\n collapseAll(): void {\n this._tableRows.forEach((e) => {\n e.expanded = false;\n if (e.parent) {\n e.hidden = true;\n }\n });\n this.onTableRowsChanged();\n this.allRowsCollapsed.emit();\n }\n\n /** Search in table */\n search(searchInput: SearchInput): void {\n this._tableService.search(searchInput);\n this._cdr.markForCheck();\n }\n\n /** Set current page number in table */\n setCurrentPage(currentPage: number): void {\n this._tableService.setCurrentPage(currentPage);\n this._cdr.markForCheck();\n }\n\n /** Set items per page number in table */\n setPageSize(pageSize: number, resetPageNumber = true): void {\n this._tableService.setItemsPerPage(pageSize, resetPageNumber);\n }\n\n /** Toolbar Sort Settings button visibility */\n showSortSettingsInToolbar(showSortSettings: boolean): void {\n this._isShownSortSettingsInToolbar$.set(showSortSettings);\n }\n\n /** Toolbar Filter Settings button visibility */\n showFilterSettingsInToolbar(showFilterSettings: boolean): void {\n this._isShownFilterSettingsInToolbar$.set(showFilterSettings);\n }\n\n /** Toolbar Group Settings button visibility */\n showGroupSettingsInToolbar(showGroupSettings: boolean): void {\n this._isShownGroupSettingsInToolbar$.set(showGroupSettings);\n }\n\n /** Toolbar Columns Settings button visibility */\n showColumnSettingsInToolbar(showColumnSettings: boolean): void {\n this._isShownColumnSettingsInToolbar$.set(showColumnSettings);\n }\n\n /** Toolbar Settings button visibility */\n showSettingsInToolbar(showSettings: boolean): void {\n this._isShownSettingsInToolbar$.set(showSettings);\n }\n\n /** Disable filter from column heder menu */\n setHeaderColumnFilteringDisabled(disabled: boolean): void {\n this._tableService._isFilteringFromHeaderDisabled$.set(disabled);\n }\n\n /** Set the row navigation */\n setRowNavigation(rowIndex: number, rowNavigatable: string | boolean): void {\n const row = this._tableRows[rowIndex];\n\n if (!row) {\n return;\n }\n\n row.navigatable = isRowNavigatable(row.value, rowNavigatable);\n\n this._calculateIsShownNavigationColumn();\n\n this._cdr.markForCheck();\n }\n\n /**\n * Toggle row checked state.\n * @param rowIndex Index of the row.\n */\n toggleSelectableRow(rowIndex: number): void {\n const row = this._tableRows[rowIndex];\n\n if (!row || row.value[this.selectableKey] === false) {\n return;\n }\n\n if (this.selectionMode === SelectionMode.SINGLE) {\n this._toggleSingleSelectableRow(row);\n } else if (this.selectionMode === SelectionMode.MULTIPLE) {\n this._toggleMultiSelectRow(row);\n }\n }\n\n /**\n * Sets the checked state of the row.\n * @param rowIndex Index of the row.\n * @param value Value of the checked state.\n */\n setRowCheckedState(rowIndex: number, value: boolean): void {\n const row = this._tableRows[rowIndex];\n\n if (!row) {\n return;\n }\n\n if (row.checked !== value) {\n this.toggleSelectableRow(rowIndex);\n }\n }\n\n /** Remove the row navigation */\n removeRowNavigation(rowIndex: number): void {\n const row = this._tableRows[rowIndex];\n\n if (!row) {\n return;\n }\n\n row.navigatable = false;\n\n this._calculateIsShownNavigationColumn();\n\n this._cdr.markForCheck();\n }\n\n /** Manually triggers column's width recalculation */\n recalculateTableColumnWidth(): void {\n this._tableColumnResizeService._setInitialTableWidth();\n this._tableColumnResizeService.setColumnNames(this._visibleColumns.map((column) => column.name));\n this._setFreezableInfo();\n }\n\n /** Gets the max allowed width for all freezable columns */\n getMaxAllowedFreezableColumnsWidth(): number {\n if (!this._freezableColumns.size) {\n return 0;\n }\n\n /** Themeable scrollbar has 0.75rem in dimension */\n const scrollbarSizeInPx = 12;\n\n return this._tableWidthPx - this._fixedColumnsPadding - scrollbarSizeInPx - 1;\n }\n\n /** Get table data source */\n getDataSource(): TableDataSource<T> {\n return this._dataSourceDirective._tableDataSource;\n }\n\n /**\n * Adds empty row for editing at the beginning of the rows array.\n */\n addRow(): void {\n this._forceSemanticHighlighting = true;\n this._setSemanticHighlighting();\n\n const newRow = buildNewRowSkeleton(this.editableRowSkeleton, this.columns.toArray());\n newRow[this.semanticHighlighting] = EDITABLE_ROW_SEMANTIC_STATE;\n\n this._addedItems.unshift(newRow);\n\n const newRows = this._createTableRowsByDataSourceItems([newRow]);\n this._newTableRows = [...newRows, ...this._newTableRows];\n\n this._setTableRows();\n this.emptyRowAdded.emit();\n }\n\n /** Cancels editing and discards newly added rows */\n cancelEditing(): void {\n this._resetEditState();\n this.cancel.emit();\n }\n\n /**\n * Emits save event and resets editable rows array.\n */\n saveRows(): void {\n const event = new SaveRowsEvent<T>(() => {\n this._dataSourceDirective._tableDataSource.fetch(this.getTableState());\n }, [...this._addedItems]);\n const editableCells: EditableTableCell[] = ([] as EditableTableCell[]).concat.apply(\n [],\n Array.from(this._tableRowService.editableCells.values())\n );\n\n const forms = [...this.customEditableCells.toArray(), ...editableCells].map((t) => t.form);\n\n // Trigger form revalidation\n forms.forEach((form) => form.onSubmit(null as any));\n if (forms.some((form) => form.invalid)) {\n return;\n }\n\n this._resetEditState();\n this.save.emit(event);\n }\n\n /** @deprecated use 'setTableState' instead. Sets current preset for the Table. */\n setPreset(data: PlatformTableManagedPreset): void {\n this.setTableState(data);\n }\n\n /** Returns current preset configuration. */\n getCurrentPreset(): PlatformTableManagedPreset {\n if (!this._currentPreset) {\n return this.getTableState();\n }\n // We need to return object as similar as the original preset.\n const currentPreset = { ...this._currentPreset };\n const presetKeys = Object.keys(currentPreset);\n const currentState = this.getTableState();\n\n Object.keys(currentState).forEach((stateKey) => {\n // Skip state entry if it's not present in preset and doesn't have any value.\n if (\n stateKey === 'columnKeys' ||\n ((!currentState[stateKey] ||\n (Array.isArray(currentState[stateKey]) && currentState[stateKey]?.length === 0)) &&\n !presetKeys.includes(stateKey))\n ) {\n return;\n }\n\n currentPreset[stateKey] = currentState[stateKey];\n });\n\n return currentPreset;\n }\n\n /**\n * Manually triggers list item event listeners for drag&drop list directive.\n */\n refreshDndList(): void {\n if (this._virtualScrollDirective?.virtualScroll !== true) {\n return;\n }\n this._dndDirective?.refreshQueryList();\n }\n\n /** @hidden */\n _onDragStarted(row: TableRow, dndIndex: number, globalIndex: number): void {\n this._dndTableDirective?.dragDropStart(row, dndIndex, globalIndex);\n }\n\n /**\n * Programmatically toggles `expand` state of the row with defined index.\n * @param rowIndexes row indexes including nested rows.\n *\n * Usage example:\n * * To toggle first level row, pass one argument:\n * ```\n * table.toggleGroupRows(0) // Will result in toggling first row if it's type is `TableRowType.TREE` or `TableRowType.GROUP`.\n * ```\n * * To toggle nested rows, pass additional arguments of indexes:\n * ```\n * table.toggleGroupRows(0, 1) // Will result in toggling first root row, then it's second child.\n * ```\n */\n toggleGroupRows(...rowIndexes: number[]): void {\n let tableRow: TableRow | null = null;\n for (const rowIndex of rowIndexes) {\n tableRow = tableRow ? tableRow.children[rowIndex] : this._tableRows[rowIndex];\n\n if (tableRow.type === TableRowType.ITEM) {\n break;\n }\n\n this._toggleGroupRow(tableRow);\n }\n }\n\n /**\n * Function used to focus a cell in the table utilizing a FocusableCellPosition interface.\n */\n focusCell(position: FocusableCellPosition): void {\n const tableEl = this.table.nativeElement as HTMLTableElement;\n tableEl.rows[position.rowIndex].cells[position.colIndex].focus();\n }\n\n /**\n * Clears the array of table rows. Triggered when new data source is applied.\n */\n clearTableRows(): void {\n this._tableRows = [];\n this.loadedRows$.set(0);\n this._tableRowsVisible = [];\n this._tableCurrentlyRenderedRowsPlaceholder = [];\n this._newTableRows = [];\n this._dataSourceTableRows = [];\n this._setTableRows([]);\n this._tableService.setCurrentPage(1);\n }\n\n // Private API\n\n /** @hidden */\n _scrollToOverlappedCell(): void {\n this.tableScrollable.scrollToOverlappedCell(\n this._rtlService?.rtl() ?? false,\n this._freezableColumns.size,\n this._freezableEndColumns.size\n );\n }\n\n /** @hidden */\n _calculatingLoading(isLoading: boolean): void {\n if (this._dndLoadingState === isLoading) {\n return;\n }\n\n this._dndLoadingState = isLoading;\n this._tableService.setTableLoading(this.loadingState);\n }\n\n /**\n * @hidden\n * Toggle selectable row in SelectionMode.MULTIPLE\n */\n _toggleMultiSelectRow(rowToToggle: TableRow, event?: Event): void {\n if (this.selectionMode !== SelectionMode.MULTIPLE) {\n throw new Error('Unexpected selection mode');\n }\n const checked = (rowToToggle.checked = !rowToToggle.checked);\n const rows = this._tableRows;\n const selectedIndex = this._tableRows.findIndex((row) => row === rowToToggle);\n\n const removed: TableRow<T>[] = [];\n const added: TableRow<T>[] = [];\n this._rangeSelector.onRangeElementToggled(selectedIndex, event as PointerEvent | KeyboardEvent);\n\n this._rangeSelector.applyValueToEachInRange((idx) => {\n const row = rows[idx];\n if (row.type === TableRowType.ITEM || row.isTree) {\n row.checked = checked;\n checked ? added.push(row) : removed.push(row);\n\n this._applyTristateSelection(row, added, removed);\n }\n });\n\n this._emitRowSelectionChangeEvent(added, removed);\n\n this._calculateCheckedAll();\n }\n\n /**\n * @hidden\n * Toggle selectable row in SelectionMode.SINGLE\n */\n _toggleSingleSelectableRow(rowToToggle: TableRow): void {\n if (this.selectionMode !== SelectionMode.SINGLE) {\n throw new Error('Unexpected selection mode');\n }\n\n const checked = (rowToToggle.checked = !rowToToggle.checked);\n const removed: TableRow<T>[] = [];\n const added: TableRow<T>[] = [];\n\n // uncheck previously checked\n getSelectableRows(this._tableRows, this.selectableKey).forEach((row) => {\n if (row === rowToToggle) {\n return;\n }\n\n if (row.checked) {\n row.checked = false;\n removed.push(row);\n }\n });\n checked ? added.push(rowToToggle) : removed.push(rowToToggle);\n\n this._emitRowSelectionChangeEvent(added, removed);\n\n this._calculateCheckedAll();\n }\n\n /**\n * @hidden\n * Select / Unselect all selectable rows\n */\n _toggleAllSelectableRows(selectAll: boolean): void {\n const removed: TableRow<T>[] = [];\n const added: TableRow<T>[] = [];\n\n getSelectableRows(this._tableRows, this.selectableKey).forEach((row) => {\n if (row.checked === selectAll) {\n return;\n }\n row.checked = selectAll;\n selectAll ? added.push(row) : removed.push(row);\n });\n\n this._rangeSelector.reset();\n\n this._shouldCheckNewRows = selectAll;\n\n this._emitRowSelectionChangeEvent(added, removed, true);\n\n this._calculateCheckedAll();\n }\n\n /**\n * @hidden\n * Create table row selection event\n */\n _emitRowSelectionChangeEvent(added: TableRow[], removed: TableRow[], all: boolean = false): void {\n const selected = getSelectableRows(this._tableRows, this.selectableKey)\n .filter(({ checked }) => checked)\n .map(({ value }) => value);\n\n this.rowSelectionChange.emit({\n source: this,\n selection: selected,\n added: added.map(({ value }) => value),\n removed: removed.map(({ value }) => value),\n index: added.concat(removed).map(({ index }) => index),\n all\n });\n }\n\n /** @hidden */\n _onCellClick(colIdx: number, row: TableRow<T>): void {\n if (row.state === 'readonly' && isTreeRowFirstCell(colIdx, row)) {\n this._toggleGroupRow(row);\n }\n }\n\n /** @hidden */\n _onRowClick(row: TableRow<T> | null, event: Event): void {\n if (row && row.state !== 'readonly') {\n return;\n }\n\n if (event && event instanceof KeyboardEvent && KeyUtil.isKeyCode(event, SPACE)) {\n const eventTarget = event.target as HTMLElement;\n const tabbableElement = this._tabbableService.getTabbableElement(eventTarget, false, true);\n if (tabbableElement) {\n event.preventDefault();\n tabbableElement.focus();\n tabbableElement.dispatchEvent(new MouseEvent('click'));\n }\n }\n\n if (row) {\n const e = event as MouseEvent | KeyboardEvent;\n const ctrlKey = e.ctrlKey || e.metaKey;\n this._emitRowNavigate(row, ctrlKey);\n this._emitRowActivate(row, ctrlKey);\n }\n }\n\n /** @hidden */\n _emitCellActivate(columnIndex: number, row: TableRow<T>): void {\n this.cellActivate.emit(new TableCellActivateEvent<T>(columnIndex, row.value));\n }\n\n /** @hidden */\n _emitRowActivate(row: TableRow<T>, ctrlKey: boolean): void {\n if (!this.rowsActivable) {\n return;\n }\n\n const rowIndex = this._tableRows.indexOf(row);\n this.rowActivate.emit(new TableRowActivateEvent<T>(rowIndex, ctrlKey, row.value));\n }\n\n /**\n * @hidden\n * Expand/Collapse group row\n */\n _toggleGroupRow(groupRow: TableRow<T>): void {\n if (this._dndTableDirective?.dragDropInProgress) {\n return;\n }\n\n this.toggleExpandableTableRow(groupRow);\n\n const groupRowIndex = this._tableRows.indexOf(groupRow);\n this.rowToggleOpenState.emit(\n new TableRowToggleOpenStateEvent(groupRowIndex, groupRow.value, groupRow.expanded)\n );\n }\n\n /** @hidden */\n _emitRowNavigate(row: TableRow<T>, ctrlKey: boolean): void {\n if (!row.navigatable) {\n return;\n }\n const rowIndex = this._tableRows.indexOf(row);\n\n if (this.highlightNavigatedRow) {\n this._navigatedRowIndex = rowIndex;\n }\n\n this.rowNavigate.emit(new TableRowActivateEvent<T>(rowIndex, ctrlKey, row.value));\n }\n\n /** Fetch data source data. */\n fetch(): void {\n this._dataSourceDirective._tableDataSource.fetch(this.getTableState());\n }\n\n /** @hidden */\n onTableRowsChanged(): void {\n this._reIndexTableRows();\n this._calculateVisibleTableRows();\n this._calculateCheckedAll();\n\n if (this._virtualScrollDirective) {\n this._virtualScrollDirective.calculateVirtualScrollRows();\n }\n }\n\n /** @hidden */\n toggleExpandableTableRow(rowToToggle: TableRow, forceFetch = false): void {\n rowToToggle.forceFetch = forceFetch;\n const expanded = (rowToToggle.expanded = !rowToToggle.expanded);\n\n findRowChildren(rowToToggle, this._tableRows).forEach((row) => {\n // if parent is collapsed we want to hide all nested items\n if (!expanded) {\n row.hidden = true;\n row.expanded = false;\n }\n\n // if parent is expanded, we want to show only items which direct parents are expanded as well\n if (expanded) {\n row.hidden = !getRowParents(row, rowToToggle).every((parent) => parent.expanded);\n }\n });\n\n this.onTableRowsChanged();\n }\n\n /** @hidden */\n _onSpyIntersect(intersected: boolean): void {\n if (!intersected) {\n return;\n }\n const {\n page: { currentPage, pageSize }\n } = this.getTableState();\n const totalItems = this._dataSourceDirective.totalItems$();\n const lastPage = Math.ceil(totalItems / (pageSize || totalItems));\n if (currentPage >= lastPage) {\n return;\n }\n this._ngZone.run(() => {\n this.setCurrentPage(currentPage + 1);\n });\n }\n\n /**\n * After rows are rendered, the IntersectionObserver on the spy row may not\n * emit a new event if the spy was already visible before the data changed.\n * This method waits for the DOM to settle, then checks whether the spy row\n * is actually inside the scroll container's viewport and, if so, triggers\n * the next page load.\n *\n * @hidden\n */\n private _recheckSpyIntersection(): void {\n setTimeout(() => {\n const container = this.tableContainer?.nativeElement;\n const spy = container?.querySelector('.fd-table__intersection-spy:last-of-type') as HTMLElement | null;\n if (!container || !spy) {\n return;\n }\n const containerRect = container.getBoundingClientRect();\n const spyRect = spy.getBoundingClientRect();\n // The spy is visible when its top edge is within or above the container's bottom edge\n // (accounting for the pageScrollingThreshold offset applied via style.top).\n if (spyRect.top <= containerRect.bottom) {\n this._onSpyIntersect(true);\n }\n });\n }\n\n /** @hidden */\n handleMouseEnter(rowIndex: number): void {\n this.hoveredRowIndex$.set(rowIndex);\n }\n\n /** @hidden */\n handleMouseLeave(): void {\n this.hoveredRowIndex$.set(null);\n }\n\n /** Manually update index after we add new items to the main array */\n private _reIndexTableRows(): void {\n this._tableRows.map((row, index) => (row.index = index));\n }\n\n /** @hidden */\n private _isValidInteger(value: string): boolean {\n return Number.isInteger(parseInt(value, 10));\n }\n\n /** @hidden */\n private _markAsExpanded(rows: TableRow<T>[]): void {\n rows.forEach((e) => {\n e.expanded = true;\n e.hidden = false;\n });\n this.onTableRowsChanged();\n }\n\n /** @hidden */\n private _listenToTableRowsPipe(): void {\n this._subscriptions.add(\n this._dataSourceDirective.items$\n .pipe(\n // map source items to table rows\n map((source: T[]) => this._createTableRowsByDataSourceItems(source)),\n // Insert items to show groups\n switchMap((rows: TableRow[]) =>\n this.isTreeTable\n ? of(rows)\n : this._tableService.groupRulesSubject.pipe(\n map((groupRules) =>\n this._tableRowService.groupTableRows(rows, groupRules.values(), groupRules)\n )\n )\n )\n )\n .subscribe((rows) => {\n const isAccumulating =\n (this.pageScrolling || this.showGrowingButton) && this.getTableState().page.currentPage > 1;\n rows = isAccumulating ? [...this._tableRows, ...rows] : rows;\n this._setTableRows(rows);\n\n // After rows change, the intersection spy <tr> may already be visible\n // in the scroll container without the IntersectionObserver emitting a\n // new transition (e.g. after switching from a short dataset to a long\n // one, or when pageSize is small enough that accumulated rows still\n // don't fill the viewport). Schedule a visibility check and, if the\n // spy is within the viewport, manually trigger the next page load.\n if (this.pageScrolling) {\n this._recheckSpyIntersection();\n }\n })\n );\n\n this._dataSourceDirective.childItems$\n .pipe(\n map((items) => {\n const rowMap = new Map<TableRow<T>, TableRow<T>[]>();\n items.forEach((rowItems, parentRow) => {\n rowMap.set(\n parentRow,\n this._createTableRowsByDataSourceItems(rowItems).map((row) => {\n row.parent = parentRow;\n row.level = parentRow.level + 1;\n row.hidden = !parentRow.expanded;\n return row;\n })\n );\n });\n\n return rowMap;\n })\n )\n .subscribe((items) => {\n items.forEach((rows, parentRow) => {\n let nestedChildrenCount = 0;\n\n function tallyNestedChildren(parent: TableRow<T>): void {\n if (parent.children) {\n nestedChildrenCount = nestedChildrenCount + parent.children.length;\n parent.children.forEach((child) => {\n tallyNestedChildren(child);\n });\n }\n }\n\n tallyNestedChildren(parentRow);\n\n this._tableRows.splice(parentRow.index + nestedChildrenCount + 1, 0, ...rows);\n\n parentRow.children.push(...rows);\n\n parentRow.lastChild = parentRow.children[parentRow.children.length - 1];\n this._setTableRows(this._tableRows);\n });\n });\n }\n\n /** @hidden */\n private _listenToTableStateChanges(): void {\n this._subscriptions.add(\n this._tableService.tableStateChanges$.subscribe(() => {\n this.presetChanged.emit(this.getCurrentPreset());\n })\n );\n this._subscriptions.add(\n this._tableService.needFetch$\n .pipe(\n map(() => this._tableService.getTableState()),\n filter((state) => !!state && !!this._dataSourceDirective._tableDataSource),\n distinctUntilChanged()\n )\n .subscribe((state) => {\n this._dataSourceDirective._tableDataSource.fetch(state);\n })\n );\n this._subscriptions.add(\n this._tableService.stateChange$.subscribe(({ type, state }) => {\n switch (type) {\n case 'columns':\n this._calculateVisibleColumns();\n this.recalculateTableColumnWidth();\n\n this.columnsChange.emit(new TableColumnsChangeEvent(this, state.current, state.previous));\n break;\n case 'filter':\n this.filterChange.emit(new TableFilterChangeEvent(this, state.current, state.previous));\n this.tableColumnFilterChange.emit();\n this._setAppliedFilterNames(state.current);\n break;\n case 'freeze':\n if (!this._lastFreezableColumnCalculation) {\n this.columnFreeze.emit(new TableColumnFreezeEvent(this, state.current, state.previous));\n }\n this.fixed = !!this.fixed || !!this._freezableColumns.size || !!this._freezableEndColumns.size;\n break;\n case 'search':\n break;\n case 'group':\n this._calculateVisibleColumns();\n this.recalculateTableColumnWidth();\n\n this.groupChange.emit(new TableGroupChangeEvent(this, state.current, state.previous));\n break;\n case 'page':\n this.pageChange.emit(new TablePageChangeEvent(this, state.current, state.previous));\n break;\n case 'sort':\n this.sortChange.emit(new TableSortChangeEvent(this, state.current, state.previous));\n break;\n }\n })\n );\n\n this._listenToTableRowStateChange();\n }\n\n /** @hidden */\n private _setAppliedFilterNames(filters: CollectionFilter[]): void {\n const formattedFilters = filters.map((f) => ({\n columnName: this._formatColumnName(f.fieldName || ''),\n\n params: this._formatParams(f.value)\n }));\n\n this._appliedFilterNames.set(formattedFilters);\n }\n\n // Helper function to format nested parameters\n private _formatParams(value: any): string {\n if (typeof value !== 'object' || value === null) {\n return String(value); // Handle non-object values\n }\n\n // handle array\n if (Array.isArray(value)) {\n return value.map((val) => this._formatParams(val)).join(', ');\n }\n\n return Object.entries(value)\n .map(([key, val]) => `${key}: ${this._formatParams(val)}`) // Recursive call for nested objects\n .join(', ');\n }\n\n /** @hidden */\n private _formatColumnName(columnName: string): string {\n return columnName.charAt(0).toUpperCase() + columnName.slice(1);\n }\n\n /** @hidden */\n private _listenToTableRowStateChange(): void {\n this._subscriptions.add(\n this._tableRowService.scrollToOverlappedCell$.subscribe(() => {\n this._scrollToOverlappedCell();\n })\n );\n\n this._subscriptions.add(\n this._tableRowService.loadChildRows$.subscribe((rows) => {\n const state = this.getTableState();\n rows.forEach((row) => {\n this._dataSourceDirective.childDataSource?.dataProvider\n .rowChildrenCount(row, state)\n .pipe(\n filter((count) => row.forceFetch || count > row.children.length),\n tap(() => (row.forceFetch = false)),\n take(1)\n )\n .subscribe(() => {\n const rowState = {\n ...state,\n ...{\n page: {\n currentPage: Math.floor(row.children.length / state.page.pageSize) + 1,\n pageSize: state.page.pageSize\n }\n }\n };\n this._dataSourceDirective.childDataSource?.fetch(rowState, [row]);\n });\n });\n })\n );\n\n this._subscriptions.add(\n this._tableRowService.cellClicked$.subscribe((evt) => {\n this._onCellClick(evt.index, evt.row);\n })\n );\n\n this._subscriptions.add(\n this._tableRowService.toggleAllSelectableRows$.subscribe((evt) => {\n this._toggleAllSelectableRows(evt);\n })\n );\n\n this._subscriptions.add(\n this._tableRowService.toggleRow$.subscribe((evt) => {\n switch (evt.type) {\n case 'toggleRow':\n this._toggleGroupRow(evt.row);\n break;\n case 'toggleMultiSelectRow':\n this._toggleMultiSelectRow(evt.row, evt.event);\n break;\n case 'toggleSingleSelectableRow':\n this._toggleSingleSelectableRow(evt.row);\n break;\n }\n })\n );\n }\n\n /** @hidden */\n private _createTableRowsByDataSourceItems(source: T[]): TableRow<T>[] {\n let rows: TableRow<T>[];\n if (this.isTreeTable) {\n rows = this._createTreeTableRowsByDataSourceItems(source);\n } else {\n rows = convertObjectsToTableRows(\n source,\n this._addedItems,\n this.selectedKey,\n this.rowNavigatable,\n this.selectionMode,\n this._tableRows,\n this.rowComparator\n );\n }\n\n if (this._shouldCheckNewRows && this.forceCheckedAllState) {\n rows.forEach((row) => {\n row.checked = row.checked || true;\n });\n }\n\n return rows;\n }\n\n /** @hidden */\n private _createTreeTableRowsByDataSourceItems(source: T[]): TableRow<T>[] {\n const item = source[0] as any;\n\n if (isTableRow(item)) {\n return convertTreeTableRowToFlatList(source as TableRow[], this.rowNavigatable);\n }\n\n if (isJsObject(item)) {\n return convertTreeObjectsToTableRows(\n source,\n this.selectionMode,\n this._tableRows,\n this.rowComparator,\n this.relationKey,\n this.hasChildrenKey,\n this.selectedKey,\n this.expandedStateKey,\n this.rowNavigatable,\n this.enableTristateMode\n );\n }\n return [];\n }\n\n /** @hidden */\n private _setTableRows(rows = this._dataSourceTableRows): void {\n this._dataSourceTableRows = rows;\n this._tableRows = [...this._newTableRows, ...this._dataSourceTableRows];\n this.loadedRows$.set(this._tableRows.length);\n this.onTableRowsChanged();\n this._calculateIsShownNavigationColumn();\n this._rangeSelector.reset();\n\n this._shouldEmitRowsChange = true;\n\n if (rows.length && !this._columnsWidthSet) {\n this.recalculateTableColumnWidth();\n this._columnsWidthSet = true;\n }\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n private _calculateVisibleTableRows(): void {\n this._tableRowsVisible = this._tableRows.filter((row) => !row.hidden);\n if (this._virtualScrollDirective?.virtualScroll) {\n this._virtualScrollDirective.calculateVirtualScrollRows();\n } else {\n this.setCurrentlyRenderedRows(0, this._tableRowsVisible.length);\n }\n }\n\n /** @hidden */\n private _listenToRowHeightChange(): void {\n this._subscriptions.add(\n this.contentDensityObserver.contentDensity$$\n .pipe(\n tap(() => {\n this._setSelectionColumnWidth();\n }),\n filter(() => Array.from(ROW_HEIGHT.values()).includes(this.rowHeight)),\n filter(() => !this._rowHeightManuallySet)\n )\n .subscribe((contentDensity) => {\n this.rowHeight = ROW_HEIGHT.get(contentDensity) ?? ROW_HEIGHT.get(ContentDensityMode.COZY)!;\n if (this._virtualScrollDirective?.virtualScroll) {\n this._virtualScrollDirective.rowHeight = this.rowHeight;\n this._virtualScrollDirective.secondaryRowHeight = this.secondaryRowHeight;\n this._virtualScrollDirective.calculateVirtualScrollRows();\n }\n })\n );\n }\n\n /** @hidden */\n private _listenToColumns(): void {\n this.columns.changes.pipe(startWith(null)).subscribe(() => {\n const columns = this.getTableColumns();\n const prevColumns = this._tableService.tableColumns$.value.map((column) => column.name);\n const currentColumns = columns.map((column) => column.name);\n\n const newColumns = columns\n .filter((column) => column.visible && !prevColumns.includes(column.name))\n .map((c) => c.name);\n const stateColumns = this.getTableState().columns;\n\n this._buildColumnsMap(columns);\n this._tableService.tableColumns$.next(columns);\n\n if (this._initialStateSet) {\n this.setColumns([...stateColumns, ...newColumns]);\n }\n\n this._initialStateSet = true;\n\n const updatedColumns = this._tableService.tableColumns$.value.map((column) => column.name);\n\n if (!shallowEqual(updatedColumns, currentColumns)) {\n this._tableService.stateChange$.next({\n type: 'columns',\n state: { previous: currentColumns, current: updatedColumns }\n });\n this._tableService.columnsChange$.next({ previous: currentColumns, current: updatedColumns });\n }\n this._tableService.detectChanges();\n });\n }\n\n /**\n * Construct visible columns for rendering purpose.\n */\n private _calculateVisibleColumns(): void {\n const columnsDefinition = this.getTableColumns();\n const { columns, groupBy } = this.getTableState();\n const groupedColumnsToHide = groupBy.filter(({ showAsColumn }) => !showAsColumn).map(({ field }) => field);\n\n const allColumns = columns // need to start mapping from state.columns list to keep right order\n .map((name) => columnsDefinition.find((column) => column.name === name))\n .filter((column): column is TableColumn => !!column)\n .filter(({ key }) => !groupedColumnsToHide.includes(key));\n\n const [visibleColumns, poppingColumns] = allColumns.reduce(\n (acc, column) => {\n if (column.responsiveState === 'hidden') {\n return acc;\n }\n acc[column.responsiveState === 'visible' ? 0 : 1].push(column);\n return acc;\n },\n [[], []] as TableColumn[][]\n );\n\n this._tableService.setVisibleColumns(visibleColumns);\n this._tableService.setPoppingColumns(poppingColumns);\n\n this._cdr.detectChanges();\n\n this._calculateTableColumnsLength();\n }\n\n /** @hidden */\n private _calculateTableColumnsLength(): void {\n const isGroupable = this.initialState?.initialGroupBy.length;\n this._tableColumnsLength =\n this.getTableColumns().length +\n (this._isSelectionColumnShown || isGroupable ? 1 : 0) +\n (this.rowNavigatable ? 1 : 0);\n }\n\n /** @hidden */\n private _calculateIsShownNavigationColumn(): void {\n this._tableService._isShownNavigationColumn$.set(this._tableRows.some((tableRow) => tableRow.navigatable));\n }\n\n /** @hidden */\n private _setFreezableInfo(): void {\n this._freezableColumns = getFreezableColumns(this._visibleColumns, this.freezeColumnsTo);\n this._freezableEndColumns = getFreezableEndColumns(this._visibleColumns, this.freezeEndColumnsTo);\n this.fixed = !!this.fixed || !!this._freezableColumns.size || !!this._freezableEndColumns.size;\n this.columns.forEach((column) => {\n column._freezed = this._freezableColumns.has(column.name);\n column._endFreezed = this._freezableEndColumns.has(column.name);\n });\n }\n\n /** @hidden */\n private _buildColumnsMap(columns = this._tableService.tableColumns$.value): void {\n this._keyToColumnMap = new Map(columns.map((column) => [column.key, column]));\n }\n\n /** @hidden */\n private _calculateCheckedAll(): void {\n const selectableRows = getSelectableRows(this._tableRows, this.selectableKey);\n const totalSelected = selectableRows.filter((r) => r.checked);\n this._checkedAll = totalSelected.length === selectableRows.length && selectableRows.length !== 0;\n this._checkedAny = totalSelected.length > 0;\n this._checkedState = this._checkedAll ? true : this._checkedAny ? null : false;\n }\n\n /**\n * Propagates tristate selection mode to the tree. It starts with updating a state for all the parents and then\n * to children\n *\n * @hidden\n */\n private _applyTristateSelection(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n if (!this.enableTristateMode) {\n return;\n }\n this._applySelectionToParents(row, addedRows, removedRows);\n this._applySelectionToChildren(row, addedRows, removedRows);\n }\n\n /** @hidden */\n private _applySelectionToParents(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n let currentRow = row.parent;\n\n while (currentRow) {\n const children = findRowChildren(currentRow, this._tableRows).filter((r) => r.parent === currentRow);\n const totalChecked: TableRow<T>[] = [];\n const totalIndeterminate: TableRow<T>[] = [];\n children.forEach((r) => {\n if (r.checked === true) {\n totalChecked.push(r);\n } else if (r.checked === null) {\n totalIndeterminate.push(r);\n }\n });\n const checkedAll = totalChecked.length === children.length;\n const checkedAny = totalChecked.length > 0;\n\n currentRow.checked = checkedAll ? true : checkedAny || totalIndeterminate.length > 0 ? null : false;\n currentRow.checked || currentRow.checked === null\n ? addedRows.push(currentRow)\n : removedRows.push(currentRow);\n\n currentRow = currentRow.parent;\n }\n }\n\n /** @hidden */\n private _applySelectionToChildren(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n applySelectionToChildren(this._tableRows, row, addedRows, removedRows);\n }\n\n /** @hidden */\n private _listenToPageScrolling(): void {\n this._subscriptions.add(\n this._tableScrollDispatcher.scrolled().subscribe((scrollable) => {\n // this block is handled in the virtual scroll directive for scrollWholeRows\n if (!this._virtualScrollDirective?.scrollWholeRows) {\n const scrollTop = scrollable.getScrollTop();\n\n this.tableScrolled.emit(scrollTop);\n\n // Instead of having two places to record this position, we could just subscribe once.\n this.getTableState().scrollTopPosition = scrollTop;\n }\n })\n );\n }\n\n /** @hidden */\n private _listenToColumnPropertiesChange(): void {\n this._subscriptions.add(\n this._tableService.markForCheck$.pipe(debounceTime(5)).subscribe(() => this._cdr.markForCheck())\n );\n this._subscriptions.add(\n this._tableService.detectChanges$.pipe(debounceTime(5)).subscribe(() => this._cdr.detectChanges())\n );\n }\n\n /** @hidden */\n private _listenToTableWidthChanges(): void {\n this._subscriptions.add(\n resizeObservable(this.tableContainer.nativeElement)\n .pipe(\n tap(() => {\n // this._tableContainerScrollWidth = this.tableContainer.nativeElement.scrollWidth;\n this._checkCellMock();\n }),\n debounceTime(100)\n )\n .subscribe(() => {\n this.recalculateTableColumnWidth();\n if (this._freezableColumns.size || this._freezableEndColumns.size) {\n this._tableColumnResizeService.updateFrozenColumnsWidth();\n this._cdr.detectChanges();\n }\n })\n );\n\n this._subscriptions.add(\n resizeObservable(this.table.nativeElement).subscribe(() => {\n // this._tableScrollWidth = this.table.nativeElement.scrollWidth;\n this._checkCellMock();\n })\n );\n }\n\n /** @hidden */\n private _listenToTableContainerMouseLeave(): void {\n this._ngZone.runOutsideAngular(() => {\n this._subscriptions.add(\n fromEvent(this.tableContainer.nativeElement, 'mouseleave').subscribe(() =>\n this._tableColumnResizeService.hideResizer()\n )\n );\n });\n }\n\n /** @hidden */\n private _initScrollPosition(): void {\n const state = this.getTableState();\n\n if (!state.scrollTopPosition || this._tableRows.length === 0) {\n return;\n }\n this.tableScrollable.initializeScrollTop(state.scrollTopPosition);\n }\n\n /**\n * @hidden\n * Resets editable rows discarding the editable rows array.\n */\n private _resetEditState(): void {\n this._newTableRows = [];\n this._addedItems = [];\n this._forceSemanticHighlighting = false;\n this._setSemanticHighlighting();\n this._setTableRows();\n }\n\n /** @hidden */\n private _listenToLoadingAndRefocusCell(): void {\n this._subscriptions.add(\n this._tableService.tableLoading$.pipe(filter((loadingState) => !loadingState)).subscribe(() => {\n setTimeout(() => {\n if (this._tableHeaderResizer.focusedCellPosition && this._focusableGrid && !this.loadingState) {\n this._focusableGrid.focusCell(this._tableHeaderResizer.focusedCellPosition);\n }\n });\n })\n );\n }\n\n /** @hidden */\n private _onZoneFree(callback: () => void): void {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n callback();\n });\n }\n\n /** @hidden */\n private _setSemanticHighlighting(): void {\n this._tableService._semanticHighlighting$.set(this.semanticHighlighting);\n this._tableService._semanticHighlightingColumnWidth$.set(this._semanticHighlightingColumnWidth);\n }\n\n /** @hidden */\n private _setSelectionColumnWidth(): void {\n this._selectionColumnWidth = this.isSelectionColumnShown\n ? (SELECTION_COLUMN_WIDTH.get(this.contentDensityObserver.value) ?? 0)\n : 0;\n }\n\n /** @hidden */\n private _checkCellMock(): void {\n this._tableColumnResizeService.cellMockVisible$.set(\n this._tableColumnResizeService.fixedWidth &&\n (this.tableContainer?.nativeElement?.scrollWidth ?? 0) > (this.table?.nativeElement?.scrollWidth ?? 0)\n );\n }\n\n /**\n * @hidden\n * Listens to fixed column width subject and calculates last applicable frozen column based on `nonFrozenColumnsMinWidth` vaue.\n */\n private _listenToFixedColumnsWidth(): void {\n this._calculateFrozenColumnRefresh$.next();\n this._calculateFrozenColumnRefresh$.complete();\n\n this._calculateFrozenColumnRefresh$ = new Subject();\n\n this._tableColumnResizeService.fixedColumsWidthChange\n .pipe(takeUntil(this._calculateFrozenColumnRefresh$))\n .subscribe(() => this._calculateLastFreezableColumn());\n }\n\n private _calculateLastFreezableColumn(): void {\n if (!this.tableScrollable || this._lastFreezableColumnCalculation) {\n return;\n }\n this._lastFreezableColumnCalculation = true;\n const allColumns = this._tableColumnResizeService.fixedColumsWidthChange.value;\n const allFrozenColumns = uniq([\n ...this._freezableColumns.keys(),\n this.freezeColumnsTo,\n ...this._freezableEndColumns.keys()\n ]);\n const columnSize = {\n frozen: new Map<string, number>(),\n unFrozen: new Map<string, number>()\n };\n allColumns.forEach((size, column) => {\n columnSize[allFrozenColumns.includes(column) ? 'frozen' : 'unFrozen'].set(column, parseInt(size, 10));\n });\n\n const frozenColumnSizes = [...columnSize.frozen.values()];\n\n if (frozenColumnSizes.length === 0) {\n this._lastFreezableColumnCalculation = false;\n return;\n }\n\n const totalFrozenSize = [...columnSize.frozen.values()].reduce((sum, size) => sum + size);\n\n let diff = this.tableScrollable.elementRef.nativeElement.getBoundingClientRect().width - totalFrozenSize;\n const freezedColumns = [...this._freezableColumns.keys()];\n\n if (diff >= this.nonFrozenColumnsMinWidth) {\n this._lastFreezableColumnCalculation = false;\n return;\n }\n\n let lastColumn: string;\n\n while (diff < this.nonFrozenColumnsMinWidth) {\n if (freezedColumns.length === 0) {\n break;\n }\n\n lastColumn = freezedColumns.pop()!;\n diff += columnSize.frozen.get(lastColumn)!;\n }\n\n this._lastFreezableColumnCalculation = false;\n\n this.freezeToColumn(freezedColumns[freezedColumns.length - 1]);\n }\n\n /** @hidden */\n private _setMockScrollbarPosition(rtl: boolean | undefined): void {\n if (this.tableScrollMockContainer) {\n this.tableScrollMockContainer.nativeElement.style.left = rtl ? '0' : 'auto';\n this.tableScrollMockContainer.nativeElement.style.right = rtl ? 'auto' : '0';\n }\n }\n}\n","@if (tableToolbar) {\n <!-- Toolbar -->\n <ng-template\n [ngTemplateOutlet]=\"tableToolbar.contentTemplateRef\"\n [ngTemplateOutletContext]=\"_toolbarContext\"\n ></ng-template>\n}\n<fd-busy-indicator\n [loading]=\"\n (_tableService.tableLoading$ | async) === true && _dataSourceDirective._firstLoadingDone && !pageScrolling\n \"\n [block]=\"true\"\n [preventWheelEvents]=\"pageScrolling && !!_virtualScrollDirective?.scrollWholeRows\"\n>\n <!-- Table Container -->\n <div class=\"fdp-table__container\" #tableContainer>\n <ng-template [ngTemplateOutlet]=\"tableTemplate\"></ng-template>\n @if (enableDragResize) {\n <!-- Table column resizer for visually representing the resizing process -->\n <fdp-table-column-resizer class=\"fdp-table__column-resizer\"></fdp-table-column-resizer>\n }\n </div>\n @if (showGrowingButton) {\n <fdp-table-growing-button [showItemsCount]=\"showItemsCount\"></fdp-table-growing-button>\n }\n</fd-busy-indicator>\n<!-- Table Template -->\n<ng-template #tableTemplate>\n <div\n class=\"fdp-table__body fd-scrollbar\"\n [class.fdp-table__body--virtual-scroll]=\"!!_virtualScrollDirective?.virtualScroll\"\n [style.position]=\"\n !!_virtualScrollDirective?.virtualScroll && !_virtualScrollDirective?.scrollWholeRows\n ? 'relative'\n : 'static'\n \"\n [class.fdp-table__body--disable-scroll]=\"\n !!_dndTableDirective?.dragDropInProgress && !_virtualScrollDirective?.scrollWholeRows\n \"\n fdpTableScrollable\n #tableScrollable=\"tableScrollable\"\n [style.height]=\"bodyHeight\"\n [class.fixed-height]=\"!!bodyHeight\"\n [attr.role]=\"pageScrolling ? 'feed' : null\"\n [class.fd-table--fixed]=\"_freezableColumns.size || fixed\"\n >\n <table\n fd-table\n [attr.role]=\"isTreeTable ? 'treegrid' : 'grid'\"\n class=\"fdp-table__body-table\"\n [allCellsFocusable]=\"true\"\n [popIn]=\"_tableService.poppingColumns$().length > 0\"\n [class.fd-table--no-outer-border]=\"noOuterBorders\"\n [attr.aria-labelledby]=\"_ariaLabelledBy\"\n >\n <thead fd-table-header [nonInteractive]=\"nonInteractiveHeader\" class=\"fdp-table__header\">\n <tr\n fdp-table-header-row\n [noBorders]=\"noBorders\"\n [noHorizontalBorders]=\"noHorizontalBorders\"\n [noVerticalBorders]=\"noVerticalBorders\"\n [rowId]=\"id\"\n [fixed]=\"fixed\"\n [isShownSelectionColumn]=\"isSelectionColumnShown\"\n [checkedState]=\"_checkedState\"\n [selectionMode]=\"_selectionMode\"\n [selectionColumnWidth]=\"_selectionColumnWidth\"\n [freezeColumnsTo]=\"freezeColumnsTo\"\n [freezeEndColumnsTo]=\"freezeEndColumnsTo\"\n (keydown.enter)=\"_onRowClick(null, $event)\"\n (keydown.space)=\"_onRowClick(null, $event)\"\n (click)=\"_onRowClick(null, $event)\"\n [disableSelectionCheckbox]=\"_dataSourceTableRows.length === 0\"\n ></tr>\n </thead>\n @if (!!_tableRowsVisible.length && _tableService.visibleColumnsLength() > 0) {\n <tbody\n fd-table-body\n fdkDndList\n #tableBody\n [dragoverPredicate]=\"_dndTableDirective?.dragoverPredicate\"\n [dropPredicate]=\"_dndTableDirective?.dropPredicate\"\n [noBorderX]=\"noBorderX || noBorders\"\n [noBorderY]=\"noBorderY || noBorders\"\n [tabIndex]=\"pageScrolling ? 0 : -1\"\n [items]=\"_dndTableRowsPlaceholder\"\n [draggable]=\"isDraggable\"\n [dropMode]=\"_dndTableDirective?.dropMode ?? 'group'\"\n (itemDropped)=\"_dndTableDirective?.dragDropItemDrop($event)\"\n (dropPredicateCalculating)=\"_calculatingLoading($event)\"\n (dropCancelled)=\"_dndTableDirective?.dropCancelled()\"\n >\n @for (rowIndex of _tableCurrentlyRenderedRowsPlaceholder; track _rowTrackBy($index, rowIndex)) {\n @if (_tableRowsVisible[rowIndex]; as row) {\n @switch (row.type) {\n @case ('group') {\n <tr\n fdp-table-group-row\n [style.max-height.px]=\"\n _virtualScrollDirective?.scrollWholeRows ? rowHeight : 'auto'\n \"\n [index]=\"rowIndex\"\n [height]=\"rowHeight\"\n [draggable]=\"isDraggable\"\n [row]=\"row\"\n [rowId]=\"id\"\n [keyToColumnMap]=\"_keyToColumnMap\"\n (toggleGroupRow)=\"_toggleGroupRow($event)\"\n (click)=\"_emitRowActivate(row, $event.ctrlKey || $event.metaKey)\"\n ></tr>\n }\n @default {\n <tr\n [fdkDndItem]=\"row\"\n [applyDragItemClass]=\"isDraggable\"\n [class]=\"row | rowClasses: rowsClass\"\n [tabindex]=\"\n !_tableService.poppingColumns$()?.length &&\n (rowsActivable || !!row.navigatable)\n ? 0\n : -1\n \"\n [focusable]=\"\n !_tableService.poppingColumns$()?.length &&\n (rowsActivable || !!row.navigatable)\n \"\n [hoverable]=\"rowsActivable || isSelectionColumnShown || !!row.navigatable\"\n [activable]=\"rowsActivable || !!row.navigatable\"\n [active]=\"rowIndex === _navigatedRowIndex\"\n [highlightActive]=\"highlightNavigatedRow\"\n [style.max-height.px]=\"\n _virtualScrollDirective?.scrollWholeRows ? rowHeight : 'auto'\n \"\n [style.height.px]=\"rowHeight\"\n [attr.aria-level]=\"isTreeTable ? row.level + 1 : null\"\n (keydown.enter)=\"_onRowClick(row, $event)\"\n (keydown.space)=\"_onRowClick(row, $event)\"\n (click)=\"_onRowClick(row, $event)\"\n (started)=\"_onDragStarted(row, $index, rowIndex)\"\n [main]=\"true\"\n [class.fd-table__row--draggable]=\"isDraggable\"\n fdp-table-row\n [attr.aria-rowindex]=\"rowIndex + 1\"\n [rowId]=\"id\"\n [class.fd-tr-hovered]=\"!row.checked && hoveredRowIndex$() === rowIndex\"\n [index]=\"rowIndex\"\n [row]=\"row\"\n [selectionMode]=\"_selectionMode\"\n [selectableKey]=\"selectableKey\"\n [enableTristateMode]=\"enableTristateMode\"\n [fixed]=\"fixed\"\n [selectionColumnWidth]=\"_selectionColumnWidth\"\n [freezeColumnsTo]=\"freezeColumnsTo\"\n [freezeEndColumnsTo]=\"freezeEndColumnsTo\"\n ></tr>\n }\n }\n @if (row.type === 'item' && _tableService.poppingColumns$().length > 0) {\n <tr\n (keydown.enter)=\"_onRowClick(row, $event)\"\n (keydown.space)=\"_onRowClick(row, $event)\"\n (click)=\"_onRowClick(row, $event)\"\n fdp-table-popping-row\n [secondary]=\"true\"\n [style.cursor]=\"rowsActivable || !!row.navigatable ? 'pointer' : 'auto'\"\n [style.height.px]=\"secondaryRowHeight\"\n [selectionMode]=\"selectionMode\"\n [row]=\"row\"\n [checked]=\"row.checked\"\n [class]=\"row | rowClasses: rowsClass\"\n (toggleGroupRow)=\"_toggleGroupRow($event)\"\n (cellClicked)=\"_onCellClick($event.index, $event.row)\"\n (mouseenter)=\"handleMouseEnter(rowIndex)\"\n (mouseleave)=\"handleMouseLeave()\"\n ></tr>\n }\n @if (row.children.length === 0 && (row.childItemsLoading$ | async)) {\n @for (_ of loadingRowRange; track $index) {\n <tr fd-table-row>\n @for (_ of loadingColumnsRange; track $index) {\n <td fd-table-cell>\n <fd-skeleton\n [style.margin]=\"'auto 0'\"\n type=\"text\"\n textLines=\"1\"\n width=\"60%\"\n ></fd-skeleton>\n </td>\n }\n </tr>\n }\n }\n <!-- Last rendered child row. -->\n @if (row.parent?.lastChild?.index === row.index) {\n <tr\n aria-hidden=\"true\"\n class=\"fd-table__intersection-spy\"\n [fdkIntersectionSpy]=\"pageScrollingThreshold\"\n (intersected)=\"$event && _tableRowService.loadChildRows(row.parent!)\"\n [style.top.px]=\"pageScrollingThreshold * -1\"\n ></tr>\n }\n }\n }\n @if (pageScrolling && !_virtualScrollDirective?.scrollWholeRows) {\n <tr\n aria-hidden=\"true\"\n class=\"fd-table__intersection-spy\"\n [fdkIntersectionSpy]=\"pageScrollingThreshold\"\n (intersected)=\"$event && _onSpyIntersect($event)\"\n [style.top.px]=\"pageScrollingThreshold * -1\"\n ></tr>\n @if (\n (_tableService.tableLoading$ | async) === true &&\n _dataSourceDirective._firstLoadingDone &&\n pageScrolling\n ) {\n <tr fd-table-row>\n @for (_ of loadingColumnsRange; track $index) {\n <td fd-table-cell>\n <fd-skeleton\n [style.margin]=\"'auto 0'\"\n type=\"text\"\n textLines=\"1\"\n width=\"100%\"\n ></fd-skeleton>\n </td>\n }\n </tr>\n }\n }\n </tbody>\n } @else {\n @if (!_dataSourceDirective._firstLoadingDone) {\n <tbody fd-table-body>\n @for (_ of loadingRowRange; track $index) {\n <tr fd-table-row>\n @for (_ of loadingColumnsRange; track $index) {\n <td fd-table-cell>\n <fd-skeleton\n [style.margin]=\"'auto 0'\"\n type=\"text\"\n textLines=\"1\"\n width=\"60%\"\n ></fd-skeleton>\n </td>\n }\n </tr>\n }\n </tbody>\n } @else {\n <tbody fd-table-body class=\"fdp-table__empty\">\n <tr fd-table-row>\n <td fd-table-cell class=\"fd-table__cell--no-data\" colspan=\"100%\">\n <div class=\"fdp-table__empty-table-message\">\n <ng-content select=\"fdp-table-no-data-wrapper\"></ng-content>\n @if (!_noDataWrapper && _tableService.visibleColumnsLength() > 0) {\n <div>\n {{\n emptyTableMessage ||\n ('platformTable.defaultEmptyMessage' | fdTranslate)()\n }}\n </div>\n } @else if (_tableService.visibleColumnsLength() === 0) {\n <div>\n {{\n noVisibleColumnsMessage ||\n ('platformTable.noVisibleColumnsMessage' | fdTranslate)()\n }}\n </div>\n }\n </div>\n </td>\n </tr>\n </tbody>\n }\n }\n @if (pageScrolling) {\n <tbody class=\"fd-table__body__focus-mock\"></tbody>\n }\n @if (_virtualScrollDirective?.virtualScroll && !_virtualScrollDirective?.scrollWholeRows) {\n <!-- the tbody element below is so the scrollbar renders correctly -->\n <tbody>\n <tr>\n <td colspan=\"100%\" [style.height.px]=\"_virtualScrollDirective!.virtualScrollTotalHeight\"></td>\n </tr>\n </tbody>\n }\n <!-- the tbody element below is so the scrollbar renders correctly -->\n @if (_virtualScrollDirective?.virtualScroll && _virtualScrollDirective?.scrollWholeRows) {\n <tbody\n [class.fd-table__body--scroll-mock]=\"!!_virtualScrollDirective?.scrollWholeRows\"\n [class.fdp-table__body--disable-scroll]=\"\n !!_dndTableDirective?.dragDropInProgress && !_virtualScrollDirective?.scrollWholeRows\n \"\n #tableScrollMockContainer\n >\n <tr>\n <td colspan=\"100%\" [style.height.px]=\"_virtualScrollDirective?.virtualScrollTotalHeight\"></td>\n </tr>\n </tbody>\n }\n @if (showTableFooter) {\n <tfoot fd-table-footer>\n <tr fdp-table-footer-row></tr>\n </tfoot>\n }\n </table>\n </div>\n</ng-template>\n<!-- Empty Table Message -->\n","import { NgModule } from '@angular/core';\n\nimport { TableHelpersModule } from '@fundamental-ngx/platform/table-helpers';\n\nimport {\n FilterCustomComponent,\n FilterMultiSelectComponent,\n FilterRuleComponent,\n FilterSingleSelectComponent,\n FilterStepComponent,\n FiltersComponent,\n FiltersListStepComponent,\n GroupingComponent,\n P13ColumnsDialogComponent,\n P13FilteringDialogComponent,\n P13GroupingDialogComponent,\n ResetButtonComponent,\n SortingComponent,\n TableColumnComponent,\n TableP13ColumnsComponent,\n TableP13DialogComponent,\n TableP13FilterComponent,\n TableP13GroupComponent,\n TableP13SortComponent,\n TableToolbarActionsComponent,\n TableToolbarComponent,\n TableViewSettingsDialogComponent,\n TableViewSettingsFilterComponent\n} from './components';\nimport {\n GetAvailableSortColumnsPipe,\n P13SortingDialogComponent\n} from './components/table-p13-dialog/sorting/sorting.component';\nimport { TableComponent } from './table.component';\n\nimport { NoDataWrapperComponent, PlatformTableColumnResizerComponent } from './components';\nimport { TableEditableCellComponent } from './components/table-editable-cell/table-editable-cell.component';\nimport { TableToolbarLeftActionsComponent } from './components/table-toolbar/table-toolbar-left-actions.component';\n\nimport { TableCellHeaderPopoverComponent, TableHeaderCellContentComponent } from './components';\nimport { TableGrowingButtonComponent } from './components/growing-button/table-growing-button.component';\nimport { TableFooterRowComponent } from './components/table-footer-row/table-footer-row.component';\nimport { TableGroupRowComponent } from './components/table-group-row/table-group-row.component';\nimport {\n IsColumnHasHeaderMenuPipe,\n TableHeaderRowComponent\n} from './components/table-header-row/table-header-row.component';\nimport { TablePoppingRowComponent } from './components/table-popping-row/table-popping-row.component';\nimport { TableRowComponent } from './components/table-row/table-row.component';\n\nconst EXPORTABLE_DECLARATIONS = [\n TableComponent,\n TableColumnComponent,\n TableToolbarComponent,\n TableToolbarActionsComponent,\n TableViewSettingsDialogComponent,\n TableViewSettingsFilterComponent,\n SortingComponent,\n GroupingComponent,\n FiltersComponent,\n FiltersListStepComponent,\n FilterStepComponent,\n FilterSingleSelectComponent,\n FilterMultiSelectComponent,\n FilterCustomComponent,\n ResetButtonComponent,\n TableP13DialogComponent,\n TableP13SortComponent,\n TableP13FilterComponent,\n TableP13GroupComponent,\n TableP13ColumnsComponent,\n P13SortingDialogComponent,\n P13GroupingDialogComponent,\n P13FilteringDialogComponent,\n FilterRuleComponent,\n P13ColumnsDialogComponent,\n PlatformTableColumnResizerComponent,\n NoDataWrapperComponent,\n GetAvailableSortColumnsPipe,\n TableEditableCellComponent,\n TableToolbarLeftActionsComponent,\n TableHeaderCellContentComponent,\n TableCellHeaderPopoverComponent,\n TableRowComponent,\n TableGroupRowComponent,\n TablePoppingRowComponent,\n TableHeaderRowComponent,\n IsColumnHasHeaderMenuPipe,\n TableGrowingButtonComponent,\n TableFooterRowComponent\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [...EXPORTABLE_DECLARATIONS, TableHelpersModule],\n exports: [...EXPORTABLE_DECLARATIONS, TableHelpersModule]\n})\nexport class PlatformTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["INITIAL_SEARCH_TEXT","INITIAL_SHOW_ALL_ITEMS","i1","ListComponent","i2","NOT_SELECTED_OPTION_VALUE","dialogConfig","distinctUntilChanged","CoreTableService","FdTableComponent","CoreTableComponent"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-platform-table.mjs","sources":["../../../../libs/platform/table/components/no-data-wrapper/no-data-wrapper.component.ts","../../../../libs/platform/table/components/reset-button/reset-button.component.ts","../../../../libs/platform/table/components/table-cell-header-popover/table-cell-header-popover.component.ts","../../../../libs/platform/table/components/table-cell-header-popover/table-cell-header-popover.component.html","../../../../libs/platform/table/components/table-column-resizer/table-column-resizer.component.ts","../../../../libs/platform/table/components/table-column/table-column.component.ts","../../../../libs/platform/table/components/table-header-cell-content/table-header-cell-content.component.ts","../../../../libs/platform/table/components/table-header-cell-content/table-header-cell-content.component.html","../../../../libs/platform/table/components/table-p13-dialog/columns/columns.component.ts","../../../../libs/platform/table/components/table-p13-dialog/columns/columns.component.html","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.model.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filter-rule.component.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filter-rule.component.html","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.component.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.component.html","../../../../libs/platform/table/components/table-p13-dialog/grouping/grouping.component.ts","../../../../libs/platform/table/components/table-p13-dialog/grouping/grouping.component.html","../../../../libs/platform/table/components/table-p13-dialog/table-p13-columns.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-filter.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-group.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-sort.component.ts","../../../../libs/platform/table/components/table-p13-dialog/sorting/sorting.component.ts","../../../../libs/platform/table/components/table-p13-dialog/sorting/sorting.component.html","../../../../libs/platform/table/components/table-p13-dialog/table-p13-dialog.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar-actions.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar-left-actions.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/constants.ts","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings-filter.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-custom.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-custom.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-single-select.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-single-select.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-active-step.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-step.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-step.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-list-step.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-list-step.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings.model.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/grouping/grouping.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/grouping/grouping.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/sorting/sorting.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/sorting/sorting.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/columns/columns.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/columns/columns.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/settings-dialog/settings-dialog.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/settings-dialog/settings-dialog.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings-dialog.component.ts","../../../../libs/platform/table/components/growing-button/table-growing-button.component.ts","../../../../libs/platform/table/components/growing-button/table-growing-button.component.html","../../../../libs/platform/table/components/table-footer-row/table-footer-row.component.ts","../../../../libs/platform/table/components/table-footer-row/table-footer-row.component.html","../../../../libs/platform/table/components/table-group-row/table-group-row.component.ts","../../../../libs/platform/table/components/table-group-row/table-group-row.component.html","../../../../libs/platform/table/components/table-header-row/table-header-row.component.ts","../../../../libs/platform/table/components/table-header-row/table-header-row.component.html","../../../../libs/platform/table/components/table-popping-row/table-popping-row.component.ts","../../../../libs/platform/table/components/table-popping-row/table-popping-row.component.html","../../../../libs/platform/table/components/table-editable-cell/table-editable-cell.component.ts","../../../../libs/platform/table/components/table-editable-cell/table-editable-cell.component.html","../../../../libs/platform/table/components/table-row/table-row.component.ts","../../../../libs/platform/table/components/table-row/table-row.component.html","../../../../libs/platform/table/table.component.ts","../../../../libs/platform/table/table.component.html","../../../../libs/platform/table/table.module.ts","../../../../libs/platform/table/fundamental-ngx-platform-table.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fdp-table-no-data-wrapper',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: `\n fdp-table-no-data-wrapper {\n display: block;\n width: 100%;\n }\n `,\n standalone: true\n})\nexport class NoDataWrapperComponent {}\n","import { ChangeDetectionStrategy, Component, Inject, InjectionToken, Signal, ViewEncapsulation } from '@angular/core';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\n\n/**\n * Reset button.\n *\n * Used to reset resettable state by click.\n *\n */\n\nexport interface Resettable {\n reset: () => void;\n isResetAvailable$: Signal<boolean>;\n}\n\nexport const RESETTABLE_TOKEN = new InjectionToken<Resettable>('Resettable');\n\n@Component({\n selector: `fdp-table-reset-button`,\n template: `<button\n fd-button\n fdType=\"transparent\"\n [label]=\"('platformTable.resetChangesButtonLabel' | fdTranslate)()\"\n (click)=\"resettable.reset()\"\n [disabled]=\"!resettable.isResetAvailable$()\"\n ></button>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class ResetButtonComponent {\n /** @hidden */\n constructor(@Inject(RESETTABLE_TOKEN) public resettable: Resettable) {}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Input,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { FormControlComponent, FormItemComponent, FormLabelComponent } from '@fundamental-ngx/core/form';\nimport { ListIconDirective, ListLinkDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverComponent, TriggerConfig } from '@fundamental-ngx/core/popover';\nimport { Placement, PopoverPlacement } from '@fundamental-ngx/core/shared';\nimport { TablePopoverDirective } from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FreeContentListItemComponent, ListComponent } from '@fundamental-ngx/platform/list';\nimport {\n CollectionStringFilter,\n ColumnAlign,\n ColumnAlignValue,\n FILTER_STRING_STRATEGY,\n FilterableColumnDataType,\n SortDirection,\n Table,\n TableColumn,\n TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'fdp-table-cell-header-popover',\n templateUrl: './table-cell-header-popover.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n PopoverComponent,\n TablePopoverDirective,\n ListComponent,\n FreeContentListItemComponent,\n NgTemplateOutlet,\n TemplateDirective,\n ListLinkDirective,\n ListIconDirective,\n ListTitleDirective,\n FormItemComponent,\n FormLabelComponent,\n FormControlComponent,\n FdTranslatePipe\n ]\n})\nexport class TableCellHeaderPopoverComponent implements AfterViewInit {\n /** Column definition. */\n @Input()\n column: TableColumn;\n\n /** Custom popover template. */\n @Input()\n popoverTemplate: Nullable<TemplateRef<any>>;\n\n /** Whether the popover is disabled. */\n @Input()\n disabled = false;\n\n /** Whether the column is frozen. */\n @Input()\n columnFrozen = false;\n\n /** Whether the filtering from header is disabled. */\n @Input()\n filteringFromHeaderDisabled: Nullable<boolean> = false;\n\n /** Column index */\n @Input()\n columnIndex: number;\n\n /** @hidden */\n @ViewChild(PopoverComponent, { static: false })\n popover: Nullable<PopoverComponent>;\n\n /** @hidden */\n @ViewChildren(TemplateDirective)\n _popoverItems: QueryList<TemplateDirective>;\n\n /** @hidden */\n @ViewChild(ListComponent)\n _listComponent: ListComponent<any>;\n\n /** @hidden */\n _popoverItems$ = signal<TemplateRef<any>[]>([]);\n\n /** @hidden */\n _headerPopoverTriggers: TriggerConfig[] = [\n {\n trigger: 'click',\n openAction: true,\n closeAction: true,\n stopPropagation: true\n },\n {\n trigger: 'keydown.enter',\n openAction: true,\n closeAction: true,\n stopPropagation: true\n },\n {\n trigger: 'keydown.space',\n openAction: true,\n closeAction: true,\n stopPropagation: true\n }\n ];\n\n /** @hidden */\n protected readonly SORT_DIRECTION = SortDirection;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _tableService = inject(TableService);\n\n /** @hidden */\n private readonly _table = inject(Table);\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._popoverItems.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._popoverItems$.set(this._popoverItems.map((t) => t.templateRef));\n });\n }\n\n /** @hidden */\n mapColumnAlignToPlacement(columnAlignValue: Nullable<ColumnAlignValue>): Placement {\n switch (columnAlignValue) {\n case ColumnAlign.START:\n return PopoverPlacement.BOTTOM_START;\n case ColumnAlign.CENTER:\n return PopoverPlacement.BOTTOM;\n case ColumnAlign.END:\n return PopoverPlacement.BOTTOM_END;\n default:\n return PopoverPlacement.AUTO;\n }\n }\n\n /** @hidden */\n _setColumnHeaderSortBy(field: TableColumn['key'], direction: SortDirection): void {\n this._tableService.setSort([{ field, direction }]);\n this._closePopover();\n }\n\n /** @hidden */\n _setColumnHeaderGroupBy(field: TableColumn['key']): void {\n const state = this._tableService.getTableState();\n if (state.groupBy?.length === 1 && state.groupBy[0].field === field) {\n // reset grouping, if already grouped by this field\n this._tableService.setGroups([]);\n } else {\n this._tableService.setGroups([{ field, direction: SortDirection.NONE, showAsColumn: true }]);\n }\n }\n\n /** @hidden */\n _setColumnHeaderFilterBy(field: TableColumn['key'], value: any): void {\n if (!value) {\n this._tableService.removeFilters([field]);\n return;\n }\n const collectionFilter: CollectionStringFilter = {\n field,\n value,\n type: FilterableColumnDataType.STRING,\n strategy: FILTER_STRING_STRATEGY.CONTAINS,\n exclude: false\n };\n\n this._tableService.addFilters([collectionFilter]);\n this._closePopover();\n }\n\n /** @hidden */\n _freeze(): void {\n this._table.freezeToColumn(this.column.name, this.column.endFreezable);\n this._closePopover();\n }\n\n /** @hidden */\n _unFreeze(): void {\n this._table.unfreeze(this.column.name, this.column.endFreezable);\n this._closePopover();\n }\n\n /** @hidden */\n _popoverOpened(isOpen: boolean): void {\n if (isOpen) {\n this._listComponent?._setCurrentActiveItemIndex(0);\n }\n }\n\n /** @hidden */\n _closePopover(): void {\n if (this.popover) {\n this.popover.close();\n const triggerElement = this.popover.trigger();\n if (triggerElement) {\n (triggerElement as ElementRef).nativeElement.focus();\n }\n }\n }\n}\n","@if (!popoverTemplate) {\n <fd-popover\n [placement]=\"mapColumnAlignToPlacement(column?.align)\"\n [disabled]=\"disabled\"\n [noArrow]=\"true\"\n fd-table-popover\n [focusAutoCapture]=\"true\"\n [focusTrapped]=\"true\"\n [triggers]=\"_headerPopoverTriggers\"\n (isOpenChange)=\"_popoverOpened($event)\"\n >\n <fdp-list [noBorder]=\"true\" [navigated]=\"true\" role=\"menu\">\n @for (item of _popoverItems$(); track item) {\n <li fdp-free-content-list-item role=\"menuitem\">\n <ng-template\n [ngTemplateOutlet]=\"item\"\n [ngTemplateOutletContext]=\"{ popover: popover }\"\n ></ng-template>\n </li>\n }\n </fdp-list>\n </fd-popover>\n} @else {\n <ng-template\n [ngTemplateOutlet]=\"popoverTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: _popoverItems$.asReadonly() }\"\n ></ng-template>\n}\n@if (column?.sortable) {\n <ng-template fdkTemplate=\"sortingAscPopoverItem\" let-popover=\"popover\">\n <div\n fd-list-link\n role=\"button\"\n [focusable]=\"true\"\n (click)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.ASC)\"\n (keydown.enter)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.ASC)\"\n >\n <span fd-list-icon glyph=\"sort-ascending\"></span>\n <span fd-list-title>{{ ('platformTable.headerMenuSortAsc' | fdTranslate)() }}</span>\n </div>\n </ng-template>\n <ng-template fdkTemplate=\"sortingDescPopoverItem\" let-popover=\"popover\">\n <div\n fd-list-link\n role=\"button\"\n [focusable]=\"true\"\n (click)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.DESC)\"\n (keydown.enter)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.DESC)\"\n >\n <span fd-list-icon glyph=\"sort-descending\"></span>\n <span fd-list-title>{{ ('platformTable.headerMenuSortDesc' | fdTranslate)() }}</span>\n </div>\n </ng-template>\n}\n@if (column?.groupable) {\n <ng-template fdkTemplate=\"groupPopoverItem\" let-popover=\"popover\">\n <div\n fd-list-link\n role=\"button\"\n [focusable]=\"true\"\n (click)=\"_setColumnHeaderGroupBy(column.key)\"\n (keydown.enter)=\"_setColumnHeaderGroupBy(column.key)\"\n >\n <span fd-list-title>{{ ('platformTable.headerMenuGroup' | fdTranslate)() }}</span>\n </div>\n </ng-template>\n}\n@if (column?.freezable || column?.endFreezable) {\n <ng-template fdkTemplate=\"freezePopoverItem\" let-popover=\"popover\">\n @if (!columnFrozen) {\n <div fd-list-link role=\"button\" [focusable]=\"true\" (click)=\"_freeze()\" (keydown.enter)=\"_freeze()\">\n <span fd-list-title>{{\n (\n (!column?.endFreezable\n ? columnIndex > 0\n ? 'platformTable.headerMenuFreezePlural'\n : 'platformTable.headerMenuFreeze'\n : 'platformTable.headerMenuEndFreeze'\n ) | fdTranslate\n )()\n }}</span>\n </div>\n } @else {\n <div fd-list-link role=\"button\" [focusable]=\"true\" (click)=\"_unFreeze()\" (keydown.enter)=\"_unFreeze()\">\n <span fd-list-title>{{\n (\n (columnIndex > 0\n ? 'platformTable.headerMenuUnfreezePlural'\n : 'platformTable.headerMenuUnfreeze'\n ) | fdTranslate\n )()\n }}</span>\n </div>\n }\n </ng-template>\n}\n@if (column?.filterable && !filteringFromHeaderDisabled) {\n <ng-template fdkTemplate=\"filteringPopoverItem\" let-popover=\"popover\">\n <div fd-list-link [style.cursor]=\"'auto'\" [focusable]=\"true\">\n <i fd-list-icon glyph=\"filter\"></i>\n <div fd-form-item [horizontal]=\"true\" (click)=\"$event.stopPropagation()\">\n <label fd-form-label [for]=\"'fdp-table-column-filtering-' + column.name\">{{\n ('platformTable.headerMenuFilter' | fdTranslate)()\n }}</label>\n <input\n fd-form-control\n [id]=\"'fdp-table-column-filtering-' + column.name\"\n (keydown.enter)=\"_setColumnHeaderFilterBy(column.key, $any($event.target)?.value)\"\n (keydown)=\"$event.stopPropagation()\"\n />\n </div>\n </div>\n </ng-template>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n DOCUMENT,\n ElementRef,\n inject,\n Inject,\n NgZone,\n OnInit,\n Renderer2,\n ViewEncapsulation\n} from '@angular/core';\nimport { TableColumnResizeService } from '@fundamental-ngx/platform/table-helpers';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\n\n/** @dynamic */\n@Component({\n selector: `fdp-table-column-resizer`,\n template: ` <div class=\"fdp-table__resizer-inner\"></div>`,\n styleUrl: './table-column-resizer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-table-column-resizer'\n },\n standalone: true\n})\nexport class PlatformTableColumnResizerComponent implements OnInit {\n /** @hidden */\n private _pointerMoveListener: Subscription;\n\n /** @hidden */\n private _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n constructor(\n private readonly _ngZone: NgZone,\n private readonly _tableColumnResizeService: TableColumnResizeService,\n private readonly _renderer: Renderer2,\n private readonly _elmRef: ElementRef,\n @Inject(DOCUMENT) private readonly _document: Document | null\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this._elmRef.nativeElement, 'mousedown')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((evt) => {\n if (evt.button === 0 && !evt.ctrlKey) {\n this._tableColumnResizeService.startResize(evt);\n\n this._listenForMouseUp();\n }\n });\n\n this._tableColumnResizeService.resizerPosition$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((position) => {\n this._renderer.setStyle(this._elmRef.nativeElement, 'display', position > 0 ? 'block' : 'none');\n if (!position) {\n return;\n }\n this._renderer.setStyle(\n this._elmRef.nativeElement,\n 'left',\n this._isRtl() ? 'auto' : `${position}px`\n );\n this._renderer.setStyle(\n this._elmRef.nativeElement,\n 'right',\n !this._isRtl() ? 'auto' : `${position}px`\n );\n });\n\n this._tableColumnResizeService.resizeInProgress$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((resizeInProgress) => {\n if (resizeInProgress) {\n this._renderer.addClass(this._elmRef.nativeElement, 'fdp-table-column-resizer--active');\n } else {\n this._renderer.removeClass(this._elmRef.nativeElement, 'fdp-table-column-resizer--active');\n }\n });\n });\n }\n\n /** @hidden */\n private _listenForMouseUp(): void {\n this._ngZone.runOutsideAngular(() => {\n this._pointerMoveListener?.unsubscribe();\n\n if (!this._document) {\n return;\n }\n this._pointerMoveListener = fromEvent<MouseEvent>(this._document, 'mouseup')\n .pipe(take(1), takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n this._tableColumnResizeService.finishResize(event);\n // this._cd.markForCheck();\n });\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Host,\n Input,\n OnChanges,\n OnInit,\n Optional,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n input\n} from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n ColumnAlignValue,\n FdpCellDef,\n FdpColumnResponsiveState,\n FdpEditableCellDef,\n FdpHeaderCellDef,\n FilterableColumnDataType,\n TableCellHeaderPopoverDirective,\n TableColumn,\n TableColumnResizeService,\n TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { BehaviorSubject } from 'rxjs';\n\n/**\n * The component that represents a table column.\n * ```html\n * <fdp-column\n * name=\"name\"\n * key=\"name\"\n * label=\"Name\"\n * align=\"start\">\n * </fdp-column>\n *\n * <fdp-column\n * name=\"price\"\n * key=\"price.value\">\n * <fdp-table-header *fdpHeaderCellDef>Price</fdp-table-header>\n * <fdp-table-cell *fdpCellDef=\"let item\">\n * {{item.price.value}} {{item.price.currency}}\n * </fdp-table-cell>\n * </fdp-column>\n * ```\n * */\n@Component({\n selector: 'fdp-column',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: TableColumn, useExisting: TableColumnComponent }],\n standalone: true\n})\nexport class TableColumnComponent extends TableColumn implements OnInit, OnChanges {\n /** Column unique identifier. */\n @Input()\n name: string;\n\n /** Column data accessor. */\n @Input()\n key: string;\n\n /** Column header label. */\n @Input()\n set label(value: string) {\n this.labelValueChanges$.next(value);\n }\n\n get label(): string {\n return this.labelValueChanges$.value;\n }\n\n /** Column footer label, to be used when the footer contains only text. */\n @Input()\n footerLabel: string;\n\n /** Column footer cell template, to be used when the footer cell requires more complex content than only text. */\n @Input()\n footerCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Cell text alignment. */\n @Input() align: ColumnAlignValue = 'start';\n\n /** Toggles sort feature for the column. */\n @Input()\n sortable = false;\n\n /** Toggles filter feature for the column. */\n @Input()\n filterable = false;\n\n /** Initial visibility state of the column. Default `true`. */\n @Input()\n visible = true;\n\n /**\n * Data type the column represents. Default is 'string'\n * @type { 'string' | 'number' | 'date' | 'boolean' }\n */\n @Input()\n dataType: FilterableColumnDataType = FilterableColumnDataType.STRING;\n\n /**\n * Optional array of available filter options.\n * Providing values to this input will cause the filter to change from a text-type input to a select-type input.\n * */\n @Input()\n filterSelectOptions: string[] = [];\n\n /** Toggles grouping feature for the column. */\n @Input()\n groupable = false;\n\n /** Toggles freeze feature for the column. */\n @Input()\n freezable = false;\n\n /** Toggles freeze feature for the column. */\n @Input()\n endFreezable = false;\n\n /** Whether the table cell inside table header should be non-interactive. */\n @Input()\n nonInteractive = false;\n\n /** Width of the column cells. */\n @Input()\n set width(value: string) {\n this._width = value;\n this._tableColumnResizeService.setCustomWidth(this.name, value);\n }\n get width(): string {\n return this._width;\n }\n\n /** Whether the text should wrap, when text is too long for 1 line */\n @Input()\n noWrap = false;\n\n /** Whether to apply fd-table-text (text-shadow) to the cell content, if disabled noWrap has no effect. */\n @Input()\n applyText = true;\n\n /** Column role attribute. */\n @Input()\n role: 'cell' | 'rowheader' | 'gridcell' = 'gridcell';\n\n /** Whether to announce empty cells to screen readers. Default is true. */\n readonly announceEmptyCell = input(true);\n\n /** Column cell template */\n columnCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Label change event */\n labelValueChanges$ = new BehaviorSubject('');\n\n /** Editable column cell template. */\n editableColumnCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header template */\n headerCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header popover template. */\n headerCellPopoverTemplate: Nullable<TemplateRef<any>>;\n\n /** Stores information for the header cell if the ellipsis are visible after the column resize */\n headerOverflows = false;\n\n /** @hidden */\n _freezed = false;\n\n /** @hidden */\n _endFreezed = false;\n\n /** @hidden */\n @ContentChild(FdpCellDef)\n set fdpCellDef(fdpCellDef: Nullable<FdpCellDef>) {\n this.columnCellTemplate = fdpCellDef?.templateRef;\n }\n\n /** Editable column cell template definition. */\n @ContentChild(FdpEditableCellDef)\n set fdpEditableCellDef(fdpEditableCellDef: Nullable<FdpEditableCellDef>) {\n this.editableColumnCellTemplate = fdpEditableCellDef?.templateRef;\n }\n\n /** @hidden */\n @ContentChild(FdpHeaderCellDef)\n set fdpHeaderCellDef(fdpHeaderCellDef: Nullable<FdpHeaderCellDef>) {\n this.headerCellTemplate = fdpHeaderCellDef?.templateRef;\n }\n\n /** @hidden */\n @ContentChild(TableCellHeaderPopoverDirective)\n set fdpHeaderCellPopover(popover: Nullable<TableCellHeaderPopoverDirective>) {\n this.headerCellPopoverTemplate = popover?.templateRef;\n }\n\n /** Responsive state of the column. */\n responsiveState: FdpColumnResponsiveState = 'visible';\n\n /** @hidden */\n private _width: string;\n\n /** @hidden */\n constructor(\n private readonly _tableColumnResizeService: TableColumnResizeService,\n @Optional() @Host() private readonly _tableService?: TableService\n ) {\n super();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._validateNameOption();\n }\n\n /** Table won't know about column properties update so notify about it manually\n * @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._tableService && (changes.sortable || changes.filterable || changes.groupable || changes.freezable)) {\n this._tableService.markForCheck();\n }\n }\n\n /** @hidden */\n private _validateNameOption(): void {\n if (typeof this.name !== 'string') {\n throw Error('fdp-column: \"name\" option is required.');\n }\n }\n}\n","import { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, computed, inject, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { TableIconDirective } from '@fundamental-ngx/core/table';\nimport { SortDirection, TableColumn, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n selector: 'fdp-table-header-cell-content',\n templateUrl: './table-header-cell-content.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n fdp-table-header-cell-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-grow: 0;\n }\n fdp-table-header-cell-content .fd-table__text--no-wrap {\n width: 100%;\n }\n `\n ],\n imports: [NgTemplateOutlet, IconComponent, TableIconDirective, AsyncPipe, NgStyle]\n})\nexport class TableHeaderCellContentComponent {\n /** Table Id */\n @Input()\n id: string;\n\n /** Column reference. */\n @Input()\n set column(value: Nullable<TableColumn>) {\n this._column$.set(value);\n }\n\n get column(): Nullable<TableColumn> {\n return this._column$();\n }\n\n /** Whether column has applied sorting. */\n readonly hasSorting$ = computed(() => {\n const column = this._column$();\n return column && this._fdpTableService.sortRules$().has(column.key);\n });\n\n /** Whether column has applied filtering. */\n readonly hasFilter$ = computed(() => {\n const column = this._column$();\n return column && this._fdpTableService.filterRules$().has(column.key);\n });\n\n /** Applied sorting. */\n readonly sorting$ = computed(() => {\n const column = this._column$();\n return column && this._fdpTableService.sortRules$().get(column.key);\n });\n\n /** @hidden */\n readonly SORT_DIRECTION = SortDirection;\n\n /** @hidden */\n private readonly _column$ = signal<Nullable<TableColumn>>(null);\n\n /** @hidden */\n private readonly _fdpTableService = inject(TableService);\n}\n","<div\n class=\"fd-table__text--no-wrap\"\n [class]=\"{ 'fd-table__inner': hasSorting$() || hasFilter$() }\"\n [ngStyle]=\"{ 'justify-content': column?.align, gap: column?.align ? '0.5rem' : '' }\"\n>\n <ng-template\n [ngTemplateOutlet]=\"tableHeaderCellContentTemplate\"\n [ngTemplateOutletContext]=\"{ column: column }\"\n ></ng-template>\n @if (hasSorting$() || hasFilter$()) {\n <div class=\"fd-table__column-header-icons\">\n @if (hasFilter$()) {\n <fd-icon fd-table-icon glyph=\"filter\"></fd-icon>\n }\n @if (hasSorting$()) {\n <fd-icon\n fd-table-icon\n [ariaHidden]=\"true\"\n [glyph]=\"sorting$()?.direction === SORT_DIRECTION.ASC ? 'sort-ascending' : 'sort-descending'\"\n ></fd-icon>\n }\n </div>\n }\n</div>\n<ng-content></ng-content>\n<ng-template #tableHeaderCellContentTemplate let-column=\"column\">\n @if (column?.headerCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"column.headerCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: column }\"\n ></ng-template>\n } @else {\n <span [id]=\"id + '-header-cell-' + column?.name\" class=\"fd-table__cell--truncate-txt\">\n {{ column?.labelValueChanges$ | async }}\n </span>\n }\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n signal\n} from '@angular/core';\nimport { TableDialogCommonData } from '@fundamental-ngx/platform/table-helpers';\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { ToolbarComponent, ToolbarItemDirective, ToolbarSpacerDirective } from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nexport interface DialogTableColumn {\n label: string;\n key: string;\n}\n\nexport type VisibleColumnType = string; // ColumnKey\n\nexport interface ColumnsDialogData extends TableDialogCommonData {\n availableColumns: DialogTableColumn[];\n visibleColumns: VisibleColumnType[];\n}\n\nexport interface ColumnsDialogResultData {\n visibleColumns: VisibleColumnType[];\n columnOrder?: VisibleColumnType[];\n}\n\nclass SelectableColumn {\n constructor(\n /** Selected */\n public selected: boolean,\n /** Active */\n public active: boolean,\n /** Table Column it belongs to */\n public column: DialogTableColumn\n ) {}\n}\n\nconst INITIAL_SEARCH_TEXT = '';\nconst INITIAL_SHOW_ALL_ITEMS = true;\n\n@Component({\n templateUrl: './columns.component.html',\n styleUrl: './columns.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13ColumnsDialogComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n BarLeftDirective,\n BarElementDirective,\n TitleComponent,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n ToolbarComponent,\n SearchFieldComponent,\n ToolbarSpacerDirective,\n ButtonComponent,\n ToolbarItemDirective,\n ListComponent,\n ListItemComponent,\n CheckboxComponent,\n FormsModule,\n ListTitleDirective,\n DialogFooterComponent,\n ButtonBarComponent,\n AsyncPipe,\n FdTranslatePipe,\n InitialFocusDirective\n ]\n})\nexport class P13ColumnsDialogComponent implements Resettable, OnInit, OnDestroy {\n /** Indicates when reset command is available */\n readonly isResetAvailable$ = signal(false);\n\n /** Table columns available for grouping */\n readonly availableColumns: DialogTableColumn[] = [];\n\n /** All available columns for interacting */\n _selectableColumns: SelectableColumn[] = [];\n\n /** filtered columns that are rendered in the list */\n _filteredColumns: SelectableColumn[] = [];\n\n /** Search Query subject */\n _searchQuerySubject = new BehaviorSubject<string>(INITIAL_SEARCH_TEXT);\n /** Show All flag subject */\n _showAllItemsSubject = new BehaviorSubject<boolean>(INITIAL_SHOW_ALL_ITEMS);\n\n /** Selected columns count */\n _selectedColumnsCount = 0;\n\n /** Flag to track disabled state for move-down move-up buttons */\n _moveUpDisabled = true;\n /** Flag to track disabled state for move-down move-up buttons */\n _moveDownDisabled = true;\n\n /** @hidden */\n get _isShownAllItems(): boolean {\n return this._showAllItemsSubject.getValue();\n }\n\n /** @hidden */\n get _selectAllDisabled(): boolean {\n return !this._isShownAllItems || this._filteredColumns.length === 0;\n }\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(\n public dialogRef: DialogRef<ColumnsDialogData>,\n private cdr: ChangeDetectorRef\n ) {\n const { availableColumns, visibleColumns } = this.dialogRef.data;\n\n this.availableColumns = availableColumns?.map(({ label, key }) => ({ label, key })) || [];\n\n this._initiateColumns(visibleColumns);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenToFilterOptions();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** Reset to the initial state */\n reset(): void {\n this._initiateColumns(this.availableColumns.map((c) => c.key));\n this.isResetAvailable$.set(false);\n }\n\n /** Close dialog */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /** Confirm changes and close dialog */\n confirm(): void {\n const visibleColumns = this._getVisibleColumnsFromSelectedColumns(this._selectableColumns);\n const columnOrder = this._getColumnOrder(this._selectableColumns);\n const result: ColumnsDialogResultData = { visibleColumns, columnOrder };\n this.dialogRef.close(result);\n }\n\n /** @hidden */\n _toggleSelectAll(selectAll: boolean): void {\n this._selectableColumns.forEach((column) => (column.selected = selectAll));\n this._onToggleColumn();\n }\n\n /** @hidden */\n _onToggleColumn(): void {\n this._countSelectedColumns();\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _recalculateResetAvailability(): void {\n let resettable = false;\n if (this._selectedColumnsCount !== this.availableColumns.length) {\n // Initially all columns are selected. If not, reset should be active\n resettable = true;\n } else {\n // if all are selected, check for columns order to match the initial one\n for (let index = 0; index < this.availableColumns.length; index++) {\n if (this._selectableColumns[index].column.key !== this.availableColumns[index].key) {\n resettable = true;\n break;\n }\n }\n }\n this.isResetAvailable$.set(resettable);\n }\n\n /** @hidden */\n _searchInputChange({ text }: SearchInput): void {\n this._searchQuerySubject.next(text || '');\n }\n\n /** @hidden */\n _toggleShowAll(): void {\n const showAllItems = this._showAllItemsSubject.getValue();\n this._showAllItemsSubject.next(!showAllItems);\n }\n\n /** @hidden */\n _setActiveColumn(column: SelectableColumn | null): void {\n this._selectableColumns.map((_column) => {\n _column.active = _column === column;\n });\n\n this._calculateMovementButtonsState();\n }\n\n /** @hidden */\n _moveActiveToTop(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this._moveColumnInFilteredListByIndex(this._getActiveColumnIndexInFilteredList(), 0);\n }\n\n /** @hidden */\n _moveActiveToBottom(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this._moveColumnInFilteredListByIndex(\n this._getActiveColumnIndexInFilteredList(),\n this._filteredColumns.length - 1\n );\n }\n\n /** @hidden */\n _moveActiveUp(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n const activeColumnIndex = this._getActiveColumnIndexInFilteredList();\n this._moveColumnInFilteredListByIndex(activeColumnIndex, activeColumnIndex - 1);\n\n // keep the focus back to the move up button as it gets lost on click\n setTimeout(() => {\n const moveUpBtn = event.target as HTMLElement;\n moveUpBtn.focus();\n }, 0);\n }\n\n /** @hidden */\n _moveActiveDown(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n const activeColumnIndex = this._getActiveColumnIndexInFilteredList();\n this._moveColumnInFilteredListByIndex(activeColumnIndex, activeColumnIndex + 1);\n }\n\n /** @hidden */\n _isReorderColumnButtonShowable(item: SelectableColumn): boolean {\n return item.active && item.selected;\n }\n\n /** @hidden */\n _filterByColumnKy(index: number, item: SelectableColumn): string {\n return item?.column.key;\n }\n\n /**\n * @hidden\n * @param visibleColumnKeys keys of columns that should be displayed as selected.\n * Also, their order matters: it will be used\n */\n private _initiateColumns(visibleColumnKeys: string[]): void {\n const visibleColumnIndexMap = new Map(visibleColumnKeys.map((key, index) => [key, index]));\n this._selectableColumns = this.availableColumns.slice().map(\n (column, index: number): SelectableColumn => ({\n column,\n selected: visibleColumnKeys.includes(column.key),\n active: index === 0\n })\n );\n\n // keep count of selected\n this._countSelectedColumns();\n\n this._recalculateResetAvailability();\n\n // reset filter settings settings\n this._searchQuerySubject.next(INITIAL_SEARCH_TEXT);\n this._showAllItemsSubject.next(INITIAL_SHOW_ALL_ITEMS);\n }\n\n /** @hidden */\n private _listenToFilterOptions(): void {\n this._subscriptions.add(\n combineLatest([this._showAllItemsSubject, this._searchQuerySubject])\n .pipe(debounceTime(20))\n .subscribe(([showAll, searchQuery]) => {\n this._filteredColumns = this._selectableColumns.filter((item) => {\n const matchesSearchQuery = item.column.label\n .toLocaleLowerCase()\n .includes(searchQuery.toLocaleLowerCase());\n const matchesShowAll = showAll || item.selected;\n return matchesSearchQuery && matchesShowAll;\n });\n this._onChangeFilteredColumnsList();\n\n this.cdr.markForCheck();\n })\n );\n }\n\n /** @hidden */\n private _onChangeFilteredColumnsList(): void {\n this._calculateMovementButtonsState();\n }\n\n /** @hidden */\n private _getVisibleColumnsFromSelectedColumns(columns = this._selectableColumns): VisibleColumnType[] {\n return columns.filter(({ selected }) => selected).map(({ column }): VisibleColumnType => column.key);\n }\n\n /** @hidden */\n private _getColumnOrder(columns: SelectableColumn[]): VisibleColumnType[] {\n return columns.map((column) => column.column.key);\n }\n\n /** @hidden */\n private _getActiveColumnIndexInFilteredList(): number {\n return this._filteredColumns.findIndex(({ active }) => active);\n }\n\n /** @hidden */\n private _moveColumnInFilteredListByIndex(from: number, to: number): void {\n const { movedItem, replacedItem } = this._moveElementInTheListByIndex(this._filteredColumns, from, to);\n /**\n * need to reflect analogical movement in the original list\n * with respect to the original list order\n */\n this._moveColumnInSelectableList(movedItem, replacedItem);\n\n this._calculateMovementButtonsState();\n this._recalculateResetAvailability();\n }\n\n /**\n * @hidden\n * Move column in selectable list.\n */\n private _moveColumnInSelectableList(itemToMove: SelectableColumn, targetItem: SelectableColumn): void {\n const list = this._selectableColumns;\n this._moveElementInTheListByIndex(list, list.indexOf(itemToMove), list.indexOf(targetItem));\n }\n\n /**\n * @hidden\n * Move element in the list\n * @return moved item and replaced item.\n */\n private _moveElementInTheListByIndex<T>(\n list: T[],\n fromIndex: number,\n toIndex: number\n ): { movedItem: T; replacedItem: T } {\n const listLength = list.length;\n\n fromIndex = Math.min(Math.max(fromIndex, 0), listLength - 1);\n toIndex = Math.min(Math.max(toIndex, 0), listLength - 1);\n\n const replacedItem = list[toIndex];\n const movedItem = list.splice(fromIndex, 1)[0];\n\n list.splice(toIndex, 0, movedItem);\n\n return { movedItem, replacedItem };\n }\n\n /** @hidden */\n private _countSelectedColumns(): void {\n this._selectedColumnsCount = this._selectableColumns.filter(({ selected }) => selected).length;\n }\n\n /** @hidden */\n private _calculateMovementButtonsState(): void {\n const activeIndex = this._getActiveColumnIndexInFilteredList();\n this._moveUpDisabled = activeIndex < 1;\n this._moveDownDisabled = activeIndex < 0 || activeIndex >= this._filteredColumns.length - 1;\n }\n}\n","<fd-dialog class=\"fdp-table-p13-columns-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 fd-title [headerSize]=\"4\">\n {{ ('platformTable.P13ColumnsDialogHeader' | fdTranslate)() }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <fd-toolbar>\n <fdp-search-field\n [placeholder]=\"('platformTable.P13ColumnsDialogSearchPlaceholder' | fdTranslate)()\"\n [inputText]=\"(_searchQuerySubject | async) || ''\"\n [suggestions]=\"[]\"\n (inputChange)=\"_searchInputChange($event)\"\n fdkInitialFocus\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <!-- Show Selected/All -->\n <button fd-toolbar-item fd-button fdType=\"transparent\" (click)=\"_toggleShowAll()\">\n @if ((_showAllItemsSubject | async) === true) {\n {{ ('platformTable.P13ColumnsDialogsShowSelected' | fdTranslate)() }}\n } @else {\n {{ ('platformTable.P13ColumnsDialogShowAll' | fdTranslate)() }}\n }\n </button>\n </fd-toolbar>\n <ul fd-list [selection]=\"true\" aria-multiselectable=\"true\">\n <li\n fd-list-item\n (focus)=\"_setActiveColumn(null)\"\n [selected]=\"_selectedColumnsCount === _selectableColumns.length\"\n >\n <fd-checkbox\n [ngModel]=\"_selectedColumnsCount === _selectableColumns.length\"\n (ngModelChange)=\"_toggleSelectAll($event)\"\n [disabled]=\"_selectAllDisabled\"\n ></fd-checkbox>\n <span fd-list-title>\n {{\n (\n 'platformTable.P13ColumnsDialogSelectAll'\n | fdTranslate\n : {\n selectedColumnsCount: _selectedColumnsCount,\n selectableColumnsCount: _selectableColumns.length\n }\n )()\n }}\n </span>\n </li>\n @for (item of _filteredColumns; track _filterByColumnKy($index, item)) {\n <li\n fd-list-item\n [preventClick]=\"true\"\n [class.fd-select-item--selected]=\"item.selected\"\n [selected]=\"item.selected\"\n [class.fd-select-item--active]=\"item.active\"\n (focus)=\"_setActiveColumn(item)\"\n >\n <fd-checkbox [(ngModel)]=\"item.selected\" (ngModelChange)=\"_onToggleColumn()\"></fd-checkbox>\n <span fd-list-title>\n {{ item.column.label }}\n </span>\n\n <!-- Active Button Movement -->\n @if (_isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"collapse-group\"\n [disabled]=\"_moveUpDisabled\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n (click)=\"_moveActiveToTop($event)\"\n (keydown.enter)=\"_moveActiveToTop($event)\"\n ></button>\n }\n @if (_isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-up\"\n [disabled]=\"_moveUpDisabled\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n (click)=\"_moveActiveUp($event)\"\n (keydown.enter)=\"_moveActiveUp($event)\"\n ></button>\n }\n @if (_isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-down\"\n [disabled]=\"_moveDownDisabled\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n (click)=\"_moveActiveDown($event)\"\n (keydown.enter)=\"_moveActiveDown($event)\"\n ></button>\n }\n @if (_isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"expand-group\"\n [disabled]=\"_moveDownDisabled\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n (click)=\"_moveActiveToBottom($event)\"\n (keydown.enter)=\"_moveActiveToBottom($event)\"\n ></button>\n }\n </li>\n }\n </ul>\n </fd-dialog-body>\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.P13ColumnsDialogConfirmationBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n <fd-button-bar\n fdType=\"transparent\"\n [label]=\"('platformTable.P13ColumnsDialogCancelBtnLabel' | fdTranslate)()\"\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import {\n CollectionFilter,\n FilterableColumnDataType,\n FilterStrategy,\n getFilterStrategiesBasedOnDataType,\n TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\n\nexport interface FilterableColumn {\n label: string;\n key: string;\n dataType: FilterableColumnDataType;\n filterable?: boolean;\n filterSelectOptions?: string[]; // add optional filterSelectOptions\n}\n\nexport interface FilterDialogData extends TableDialogCommonData {\n collectionFilter: CollectionFilter[];\n columns: FilterableColumn[];\n validator?: ((rules: CollectionFilter[]) => boolean) | undefined;\n}\n\nexport interface FilterDialogResultData {\n collectionFilter: CollectionFilter[];\n}\n\n/**\n * Filter Rule\n *\n * represents one rule per row\n */\n\nexport class FilterRule<T = any> {\n /** Validation flg */\n isValid = false;\n\n /** Available strategies options */\n strategies: ReadonlyArray<FilterStrategy> = [];\n\n /** Data type */\n dataType?: FilterableColumnDataType;\n\n /**\n * Optional array of available filter options.\n * Providing values to this input will cause the filter to change from a text-type input to a select-type input.\n * */\n filterSelectOptions: string[] = [];\n\n /** returns whether filter rule has value */\n get hasValue(): boolean {\n return this.valueExists(this.value) || this.valueExists(this.value2);\n }\n\n /** @hidden */\n constructor(\n readonly columns: ReadonlyArray<FilterableColumn>,\n /** Column key the rule belongs to */\n public columnKey?: string,\n /** Data type */\n public strategy?: FilterStrategy,\n /** Main filter value */\n public value?: T | null,\n /** Additional filter value */\n public value2?: T | null\n ) {\n if (!this.columnKey) {\n this.setColumnKey(columns[0]?.key);\n }\n if (!this.dataType) {\n this.setDataTypeByColumnKey(this.columnKey);\n }\n if (this.strategies.length === 0) {\n this.setStrategiesByColumnKey(this.columnKey);\n }\n if (this.filterSelectOptions.length === 0) {\n this.setFilterSelectOptionsByColumnKey(this.columnKey);\n }\n }\n\n /** @hidden */\n setValid(isValid: boolean): void {\n this.isValid = isValid;\n }\n\n /** @hidden */\n setValue(value: T | null): void {\n this.value = value;\n }\n\n /** @hidden */\n setValue2(value: T | null): void {\n this.value2 = value;\n }\n\n /** @hidden */\n setStrategy(strategy: FilterStrategy): void {\n this.strategy = strategy;\n }\n\n /** @hidden */\n setStrategiesByColumnKey(columnKey?: string): void {\n const dataType = this.columns.find((column) => column.key === columnKey)?.dataType;\n if (!dataType) {\n return;\n }\n\n const strategies = getFilterStrategiesBasedOnDataType(dataType);\n\n if (this.strategies === strategies) {\n return;\n }\n\n this.strategies = strategies;\n\n if (!this.strategies.includes(this.strategy!)) {\n this.setStrategy(strategies[0]);\n }\n }\n\n /** @hidden */\n setColumnKey(columnKey: string): void {\n if (columnKey === this.columnKey) {\n return;\n }\n this.columnKey = columnKey;\n\n // reset values\n this.setValue(null);\n this.setValue2(null);\n\n // update data type\n this.setDataTypeByColumnKey(columnKey);\n\n // update available Filter options\n this.setFilterSelectOptionsByColumnKey(columnKey);\n\n // update available strategies list\n this.setStrategiesByColumnKey(columnKey);\n }\n\n /** @hidden */\n setDataTypeByColumnKey(columnKey?: string): void {\n const dataType = this.columns.find((column) => column.key === columnKey)?.dataType;\n this.dataType = dataType;\n }\n\n /** @hidden */\n setFilterSelectOptionsByColumnKey(columnKey?: string): void {\n const filterSelectOptions = this.columns.find((column) => column.key === columnKey)?.filterSelectOptions;\n this.filterSelectOptions = filterSelectOptions ? filterSelectOptions : [];\n }\n\n /** @hidden */\n private valueExists(value: any): boolean {\n return !!value || value === 0 || typeof value === 'boolean';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport {\n FILTER_STRATEGY,\n FILTER_STRATEGY_LABEL,\n FilterableColumnDataType\n} from '@fundamental-ngx/platform/table-helpers';\nimport { Subscription } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { LayoutGridColDirective, LayoutGridRowDirective } from '@fundamental-ngx/core/layout-grid';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FilterRule } from './filtering.model';\n\n@Component({\n selector: 'fdp-table-filter-rule',\n templateUrl: './filter-rule.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n LayoutGridRowDirective,\n LayoutGridColDirective,\n SelectComponent,\n FormsModule,\n OptionComponent,\n NgTemplateOutlet,\n DatePickerComponent,\n FormControlComponent,\n FdTranslatePipe\n ]\n})\nexport class FilterRuleComponent implements OnDestroy {\n /** Rule to be displayed **/\n @Input() rule: FilterRule;\n\n /** Emits when rule is changed */\n @Output() ruleChange: EventEmitter<void> = new EventEmitter();\n\n /** Emits when rule state is changed */\n @Output() ruleStateChange: EventEmitter<boolean> = new EventEmitter();\n\n /** @hidden */\n readonly FILTER_STRATEGY = FILTER_STRATEGY;\n\n /** @hidden */\n readonly DATA_TYPE = FilterableColumnDataType;\n\n /** @hidden */\n readonly strategyLabels = FILTER_STRATEGY_LABEL;\n\n /** @hidden */\n @ViewChild(NgForm)\n set ngForm(ngForm: NgForm) {\n if (!ngForm) {\n return;\n }\n this._subscriptions.add(\n ngForm.statusChanges\n ?.pipe(\n // Skip first that triggers on initial phase\n skip(1)\n )\n .subscribe(() => {\n const isValid = !!ngForm.valid;\n this.rule.setValid(isValid);\n this.ruleStateChange.emit(isValid);\n })\n );\n }\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _onModelChange(): void {\n this.ruleChange.emit();\n }\n}\n","<div fdLayoutGridRow>\n <div fdLayoutGridCol colGrow>\n <div fdLayoutGridRow>\n <div fdLayoutGridCol colGrow>\n <!-- Column -->\n <fd-select\n class=\"filter-row__select\"\n [ngModel]=\"rule.columnKey\"\n (ngModelChange)=\"rule.setColumnKey($event); _onModelChange()\"\n >\n @for (column of rule.columns; track column) {\n <li fd-option [value]=\"column.key\">{{ column.label }}</li>\n }\n </fd-select>\n </div>\n <div fdLayoutGridCol colGrow>\n <!-- Strategy -->\n <fd-select\n class=\"filter-row__select\"\n [ngModel]=\"rule.strategy\"\n (ngModelChange)=\"rule.setStrategy($event); _onModelChange()\"\n >\n @for (strategy of rule.strategies; track strategy) {\n <li fd-option [value]=\"strategy\">\n {{\n (\n strategyLabels[strategy] || 'platformTable.P13FilterStrategyLabelNotDefined'\n | fdTranslate\n )()\n }}\n </li>\n }\n </fd-select>\n </div>\n </div>\n </div>\n <div fdLayoutGridCol colGrow>\n <div fdLayoutGridRow ngForm>\n @if (rule.strategy === FILTER_STRATEGY.BETWEEN) {\n <div fdLayoutGridCol colGrow>\n <ng-template\n [ngTemplateOutlet]=\"ruleInputTemplate\"\n [ngTemplateOutletContext]=\"{ valueKey: 'value' }\"\n ></ng-template>\n </div>\n <div fdLayoutGridCol colGrow>\n <ng-template\n [ngTemplateOutlet]=\"ruleInputTemplate\"\n [ngTemplateOutletContext]=\"{ valueKey: 'value2' }\"\n ></ng-template>\n </div>\n } @else {\n <div fdLayoutGridCol colGrow>\n <ng-template\n [ngTemplateOutlet]=\"ruleInputTemplate\"\n [ngTemplateOutletContext]=\"{ valueKey: 'value' }\"\n ></ng-template>\n </div>\n }\n\n <!-- Rule Control Based on Data Type -->\n <ng-template #ruleInputTemplate let-valueKey=\"valueKey\">\n @if (rule.dataType === DATA_TYPE.DATE) {\n <fd-date-picker\n class=\"filter-row__input\"\n type=\"single\"\n [required]=\"true\"\n [name]=\"valueKey\"\n [(ngModel)]=\"rule[valueKey]\"\n (ngModelChange)=\"_onModelChange()\"\n ></fd-date-picker>\n } @else if (rule.dataType === DATA_TYPE.BOOLEAN) {\n <fd-select\n class=\"filter-row__select\"\n [name]=\"valueKey\"\n [(ngModel)]=\"rule[valueKey]\"\n (ngModelChange)=\"_onModelChange()\"\n [required]=\"true\"\n >\n <li fd-option [value]=\"undefined\">\n {{ ('platformTable.P13FilterBooleanOptionNotDefined' | fdTranslate)() }}\n </li>\n <li fd-option [value]=\"true\">\n {{ ('platformTable.P13FilterBooleanOptionTrue' | fdTranslate)() }}\n </li>\n <li fd-option [value]=\"false\">\n {{ ('platformTable.P13FilterBooleanOptionFalse' | fdTranslate)() }}\n </li>\n </fd-select>\n } @else if (rule.filterSelectOptions.length) {\n <!-- Filter options dropdown menu -->\n <fd-select\n [ngModel]=\"rule[valueKey]\"\n (ngModelChange)=\"rule.setValue($event); _onModelChange()\"\n [required]=\"true\"\n [name]=\"valueKey\"\n class=\"filter-row__select\"\n >\n @for (option of rule.filterSelectOptions; track $index) {\n <li fd-option [value]=\"option\">{{ option }}</li>\n }\n </fd-select>\n } @else {\n <input\n type=\"text\"\n class=\"filter-row__input\"\n fd-form-control\n required\n [name]=\"valueKey\"\n [(ngModel)]=\"rule[valueKey]\"\n (ngModelChange)=\"_onModelChange()\"\n />\n }\n </ng-template>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, signal } from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { LayoutGridColDirective, LayoutGridComponent, LayoutGridRowDirective } from '@fundamental-ngx/core/layout-grid';\nimport { PanelComponent, PanelContentDirective, PanelTitleDirective } from '@fundamental-ngx/core/panel';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FilterRuleComponent } from './filter-rule.component';\nimport { FilterDialogData, FilterDialogResultData, FilterRule, FilterableColumn } from './filtering.model';\n\nexport { FilterDialogData, FilterDialogResultData };\n\n@Component({\n templateUrl: './filtering.component.html',\n styleUrl: './filtering.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13FilteringDialogComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n BarLeftDirective,\n BarElementDirective,\n TitleComponent,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n PanelComponent,\n PanelTitleDirective,\n PanelContentDirective,\n LayoutGridComponent,\n LayoutGridRowDirective,\n FilterRuleComponent,\n LayoutGridColDirective,\n ButtonComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe\n ]\n})\nexport class P13FilteringDialogComponent implements Resettable {\n /** Indicates when reset command is available */\n readonly isResetAvailable$ = signal(false);\n\n /** Table columns available for filtering */\n readonly columns: FilterableColumn[] = [];\n\n /**\n * @hidden\n * Include Rules\n */\n _includeRules: FilterRule[] = [];\n\n /**\n * @hidden\n * Exclude Rules\n */\n _excludeRules: FilterRule[] = [];\n\n /**\n * @hidden\n * Count of valid included rules\n */\n _validIncludeRulesCount = 0;\n\n /**\n * @hidden\n * Count of valid excluded rules\n */\n _validExcludeRulesCount = 0;\n\n /**\n * @hidden\n * Panel opened/closed flag\n */\n _includePanelExpanded = true;\n\n /**\n * @hidden\n * Panel opened/closed flag\n */\n _excludePanelExpanded = false;\n\n /** @hidden */\n constructor(public dialogRef: DialogRef<FilterDialogData>) {\n const { columns, collectionFilter } = this.dialogRef.data;\n\n this.columns = columns.filter((column) => column.filterable) || [];\n\n this._initiateRules(collectionFilter);\n\n this._calculateValidRulesCount();\n\n this._excludePanelExpanded = this._validExcludeRulesCount > 0;\n\n this._recalculateResetAvailability();\n }\n\n /** Reset changes to the initial state */\n reset(): void {\n this._initiateRules();\n this.isResetAvailable$.set(false);\n this._validIncludeRulesCount = 0;\n this._validExcludeRulesCount = 0;\n }\n\n /** Close dialog */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /** Confirm changes and close dialog */\n confirm(): void {\n const includeFilters = this._getCollectionFiltersFromIncludeRules();\n const excludeFilters = this._getCollectionFiltersFromExcludeRules();\n const validator = this.dialogRef.data.validator;\n const combinedFilters = [...includeFilters, ...excludeFilters];\n\n if (!validator || validator(combinedFilters)) {\n const result: FilterDialogResultData = { collectionFilter: combinedFilters };\n\n this.dialogRef.close(result);\n }\n }\n\n /** @hidden */\n _removeRule(rule: FilterRule, rules: FilterRule[]): void {\n const index = rules.indexOf(rule);\n\n if (index === -1) {\n return;\n }\n\n rules.splice(index, 1);\n\n // Keep at least one item in the list\n if (rules.length === 0) {\n rules.push(new FilterRule(this.columns));\n }\n\n this._recalculateResetAvailability();\n\n this._calculateValidRulesCount();\n }\n\n /** @hidden */\n _addNewRule(rules: FilterRule[]): void {\n const lastRule = rules.slice(-1)[0];\n rules.push(new FilterRule(this.columns, lastRule?.columnKey, lastRule?.strategy));\n }\n\n /** @hidden */\n _recalculateResetAvailability(): void {\n const hasOnlyOneEmptyIncludeRule = this._includeRules.length === 1 && !this._includeRules[0].hasValue;\n const hasOnlyOneEmptyExcludeRule = this._excludeRules.length === 1 && !this._excludeRules[0].hasValue;\n this.isResetAvailable$.set(!hasOnlyOneEmptyIncludeRule || !hasOnlyOneEmptyExcludeRule);\n }\n\n /** @hidden */\n _onRuleStateChange(): void {\n this._calculateValidRulesCount();\n }\n\n /** @hidden */\n private _initiateRules(initialRules?: CollectionFilter[]): void {\n this._includeRules = this._createRules(initialRules?.filter(({ exclude }) => !exclude));\n this._excludeRules = this._createRules(initialRules?.filter(({ exclude }) => exclude));\n\n [this._includeRules, this._excludeRules].forEach((rules) => {\n // Rules on initial phase are considered as valid\n rules.forEach((rule) => rule.setValid(true));\n // Keep at least one item in the list\n if (rules.length === 0) {\n rules.push(new FilterRule(this.columns));\n }\n });\n }\n\n /** @hidden */\n private _createRules(collectionFilter: CollectionFilter[] = []): FilterRule[] {\n return collectionFilter.map(\n ({ field, value, value2, strategy }): FilterRule =>\n new FilterRule(this.columns, field, strategy, value, value2)\n );\n }\n\n /** @hidden */\n private _getCollectionFiltersFromRules(rules: FilterRule[]): CollectionFilter[] {\n return rules.filter(this._isRuleValid).map(\n ({ columnKey, strategy, value, value2 }): CollectionFilter => ({\n field: columnKey!,\n value,\n value2,\n strategy: strategy!\n })\n );\n }\n\n /** @hidden */\n private _getCollectionFiltersFromIncludeRules(): CollectionFilter[] {\n return this._getCollectionFiltersFromRules(this._includeRules).map(\n (collectionFilter): CollectionFilter => ({\n ...collectionFilter,\n exclude: false\n })\n );\n }\n\n /** @hidden */\n private _getCollectionFiltersFromExcludeRules(): CollectionFilter[] {\n return this._getCollectionFiltersFromRules(this._excludeRules).map(\n (collectionFilter): CollectionFilter => ({\n ...collectionFilter,\n exclude: true\n })\n );\n }\n\n /** @hidden */\n private _calculateValidRulesCount = (): void => {\n this._validIncludeRulesCount = this._includeRules.filter(this._isRuleValid).length;\n this._validExcludeRulesCount = this._excludeRules.filter(this._isRuleValid).length;\n };\n\n /** @hidden */\n private _isRuleValid = (rule: FilterRule): boolean => rule?.isValid;\n}\n","<fd-dialog class=\"fdp-table-p13-filtering-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 fd-title [headerSize]=\"4\">{{ ('platformTable.P13FilterDialogHeader' | fdTranslate)() }}</h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <!-- Include Rules -->\n <fd-panel [expanded]=\"_includePanelExpanded\">\n <div fd-panel-title>\n {{\n (\n (_validIncludeRulesCount > 0\n ? 'platformTable.P13FilterDialogIncludePanelTitleWithCount'\n : 'platformTable.P13FilterDialogIncludePanelTitleWithoutCount'\n ) | fdTranslate: { count: _validIncludeRulesCount }\n )()\n }}\n </div>\n <div fd-panel-content>\n @for (rule of _includeRules; track rule) {\n <fd-layout-grid>\n <div fdLayoutGridRow>\n <fdp-table-filter-rule\n [fdLayoutGridCol]=\"10\"\n [rule]=\"rule\"\n (ruleChange)=\"_recalculateResetAvailability()\"\n (ruleStateChange)=\"_onRuleStateChange()\"\n ></fdp-table-filter-rule>\n <!-- Actions buttons -->\n <div [fdLayoutGridCol]=\"2\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"sys-cancel\"\n [attr.aria-label]=\"\n ('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\n \"\n [title]=\"('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\"\n (click)=\"_removeRule(rule, _includeRules)\"\n ></button>\n @if (_includeRules.length - 1 === $index) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"add\"\n [attr.aria-label]=\"\n ('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\n \"\n [title]=\"('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\"\n (click)=\"_addNewRule(_includeRules)\"\n ></button>\n }\n </div>\n </div>\n </fd-layout-grid>\n }\n </div>\n </fd-panel>\n <!-- Exclude Rules -->\n <fd-panel [expanded]=\"_excludePanelExpanded\">\n <div fd-panel-title>\n {{\n (\n (_validExcludeRulesCount > 0\n ? 'platformTable.P13FilterDialogExcludePanelTitleWithCount'\n : 'platformTable.P13FilterDialogExcludePanelTitleWithoutCount'\n ) | fdTranslate: { count: _validExcludeRulesCount }\n )()\n }}\n </div>\n <div fd-panel-content>\n @for (rule of _excludeRules; track rule) {\n <fd-layout-grid>\n <div fdLayoutGridRow>\n <fdp-table-filter-rule\n [fdLayoutGridCol]=\"10\"\n [rule]=\"rule\"\n (ruleChange)=\"_recalculateResetAvailability()\"\n (ruleStateChange)=\"_onRuleStateChange()\"\n ></fdp-table-filter-rule>\n <!-- Actions buttons -->\n <div [fdLayoutGridCol]=\"2\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"sys-cancel\"\n [attr.aria-label]=\"\n ('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\n \"\n [title]=\"('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\"\n (click)=\"_removeRule(rule, _excludeRules)\"\n ></button>\n @if (_excludeRules.length - 1 === $index) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"add\"\n [attr.aria-label]=\"\n ('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\n \"\n [title]=\"('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\"\n (click)=\"_addNewRule(_excludeRules)\"\n ></button>\n }\n </div>\n </div>\n </fd-layout-grid>\n }\n </div>\n </fd-panel>\n </fd-dialog-body>\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.P13FilterDialogConfirmationBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n <fd-button-bar\n fdType=\"transparent\"\n [label]=\"('platformTable.P13FilterDialogCancelBtnLabel' | fdTranslate)()\"\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, signal, ViewEncapsulation } from '@angular/core';\nimport {\n CollectionGroup,\n getUniqueListValuesByKey,\n SortDirection,\n TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n DialogRef\n} from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ResetButtonComponent, Resettable, RESETTABLE_TOKEN } from '../../reset-button/reset-button.component';\n\nexport interface GroupDialogColumn {\n label: string;\n key: string;\n}\n\nexport interface GroupDialogData extends TableDialogCommonData {\n collectionGroup: CollectionGroup[];\n columns: GroupDialogColumn[];\n}\n\nexport interface GroupDialogResultData {\n collectionGroup: CollectionGroup[];\n}\n\nconst NOT_SELECTED_OPTION_VALUE = null;\n\nclass GroupRule {\n get isValid(): boolean {\n return this.columnKey !== NOT_SELECTED_OPTION_VALUE;\n }\n\n constructor(\n /** Column key the rule belongs to */\n public columnKey: string | null = NOT_SELECTED_OPTION_VALUE,\n /** Show Field as Column */\n public showAsColumn = true\n ) {}\n}\n\n@Component({\n templateUrl: './grouping.component.html',\n styleUrl: './grouping.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13GroupingDialogComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n BarLeftDirective,\n BarElementDirective,\n TitleComponent,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n SelectComponent,\n OptionComponent,\n CheckboxComponent,\n FormsModule,\n ButtonComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe\n ]\n})\nexport class P13GroupingDialogComponent implements Resettable {\n /** Table columns available for grouping */\n readonly columns: GroupDialogColumn[] = [];\n /** Indicates when reset command is available */\n readonly isResetAvailable$ = signal(false);\n\n /** Group rules to render */\n rules: GroupRule[] = [];\n\n /** @hidden */\n constructor(public dialogRef: DialogRef<GroupDialogData>) {\n const { columns, collectionGroup } = this.dialogRef.data;\n\n this.columns = columns || [];\n\n this._initiateRules(collectionGroup);\n }\n\n /** Reset changes to the initial state */\n reset(): void {\n this._initiateRules();\n this.isResetAvailable$.set(false);\n }\n\n /** Close dialog */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /** Confirm changes and close dialog */\n confirm(): void {\n const collectionGroup = this._getCollectionGroupFromGroupRules(this._getUniqueRules(this.rules));\n const result: GroupDialogResultData = { collectionGroup };\n this.dialogRef.close(result);\n }\n\n /** @hidden */\n _recalculateResetAvailability(): void {\n const hasOnlyOneEmptyRule = this.rules.length === 1 && !this.rules[0].isValid;\n this.isResetAvailable$.set(!hasOnlyOneEmptyRule);\n }\n\n /** @hidden */\n _removeRule(rule: GroupRule): void {\n this.rules = this.rules.filter((_rule) => _rule !== rule);\n\n // Keep at least one item in the list\n if (this.rules.length === 0) {\n this.rules.push(new GroupRule());\n }\n\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _addNew(index: number): void {\n this.rules.splice(index + 1, 0, new GroupRule());\n }\n\n /** @hidden */\n _onRuleColumnKeyChange(rule: GroupRule, columnKey: string): void {\n rule.columnKey = columnKey;\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _onRuleShowAsColumnChange(rule: GroupRule, value: boolean): void {\n rule.showAsColumn = value;\n this._recalculateResetAvailability();\n }\n\n /** Get available columns for a rule */\n getAvailableColumns(rule: GroupRule): GroupDialogColumn[] {\n const selectedKeys = this.rules.map((r) => r.columnKey).filter((key) => key !== NOT_SELECTED_OPTION_VALUE);\n return this.columns.filter((column) => !selectedKeys.includes(column.key) || column.key === rule.columnKey);\n }\n\n /** @hidden */\n private _initiateRules(collectionGroup?: CollectionGroup[]): void {\n this.rules = this._createGroupRules(collectionGroup);\n\n // Keep at least one item in the list\n if (this.rules.length === 0) {\n this.rules.push(new GroupRule());\n }\n\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n private _createGroupRules(collectionGroup: CollectionGroup[] = []): GroupRule[] {\n return collectionGroup.map(({ field, showAsColumn }): GroupRule => new GroupRule(field, showAsColumn));\n }\n\n /** @hidden */\n private _getCollectionGroupFromGroupRules(rules = this.rules): CollectionGroup[] {\n return rules.filter(this._isRuleValid).map(\n ({ columnKey, showAsColumn }): CollectionGroup => ({\n field: columnKey!,\n showAsColumn,\n direction: SortDirection.NONE\n })\n );\n }\n\n /** @hidden */\n private _getUniqueRules(rules: GroupRule[]): GroupRule[] {\n return getUniqueListValuesByKey(rules, 'columnKey');\n }\n\n /** @hidden */\n private _isRuleValid = (rule: GroupRule): boolean => rule?.isValid;\n}\n","<fd-dialog class=\"fdp-table-p13-grouping-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 fd-title [headerSize]=\"4\">{{ ('platformTable.P13GroupDialogHeader' | fdTranslate)() }}</h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n @for (rule of rules; track rule; let i = $index) {\n <div class=\"group-row\">\n <fd-select\n class=\"group-row__select\"\n [value]=\"rule.columnKey\"\n (valueChange)=\"_onRuleColumnKeyChange(rule, $event)\"\n [placeholder]=\"('platformTable.P13GroupDialogNoneSelectedColumnSelectPlaceholder' | fdTranslate)()\"\n >\n @for (column of getAvailableColumns(rule); track column) {\n <li fd-option [value]=\"column.key\">\n {{ column.label }}\n </li>\n }\n </fd-select>\n\n <fd-checkbox\n class=\"group-row__checkbox\"\n [ngModel]=\"rule.showAsColumn\"\n (ngModelChange)=\"_onRuleShowAsColumnChange(rule, $event)\"\n [label]=\"('platformTable.P13GroupDialogShowFieldAsColumnCheckboxLabel' | fdTranslate)()\"\n ></fd-checkbox>\n\n <div class=\"group-row__actions\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"sys-cancel\"\n [attr.aria-label]=\"('platformTable.P13GroupDialogRemoveGroupBtnTitle' | fdTranslate)()\"\n [title]=\"('platformTable.P13GroupDialogRemoveGroupBtnTitle' | fdTranslate)()\"\n (click)=\"_removeRule(rule)\"\n [disabled]=\"!rule.columnKey\"\n ></button>\n\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"add\"\n [attr.aria-label]=\"('platformTable.P13GroupDialogAddNewGroupBtnTitle' | fdTranslate)()\"\n [title]=\"('platformTable.P13GroupDialogAddNewGroupBtnTitle' | fdTranslate)()\"\n (click)=\"_addNew(i)\"\n [disabled]=\"rules.length >= columns.length || !rule.columnKey\"\n ></button>\n </div>\n </div>\n }\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.P13GroupDialogConfirmationBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n\n <fd-button-bar\n fdType=\"transparent\"\n [label]=\"('platformTable.P13GroupDialogCancelBtnLabel' | fdTranslate)()\"\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Columns Settings.\n *\n */\n@Component({\n selector: 'fdp-table-p13-columns',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableP13ColumnsComponent {}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * Personalization Dialog Filter Settings.\n */\n@Component({\n selector: 'fdp-table-p13-filter',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableP13FilterComponent {\n /**\n * Function for handling validation of the filter rules in the table personalization dialog.\n */\n @Input()\n validator: ((rules: CollectionFilter[]) => boolean) | undefined;\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Group Settings.\n *\n */\n@Component({\n selector: 'fdp-table-p13-group',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableP13GroupComponent {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Sort Settings.\n *\n */\n@Component({\n selector: 'fdp-table-p13-sort',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableP13SortComponent {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Pipe,\n PipeTransform,\n ViewEncapsulation,\n forwardRef,\n signal\n} from '@angular/core';\nimport {\n CollectionSort,\n SortDirection,\n TableDialogCommonData,\n getUniqueListValuesByKey\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { DisabledBehaviorDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nexport interface SortDialogColumn {\n label: string;\n key: string;\n}\n\nexport interface SortDialogData extends TableDialogCommonData {\n collectionSort: CollectionSort[];\n columns: SortDialogColumn[];\n}\n\nexport interface SortDialogResultData {\n collectionSort: CollectionSort[];\n}\n\nexport interface SortRule {\n columnKey: string | null;\n direction: SortDirection;\n}\n\nconst NOT_SELECTED_OPTION_VALUE = null;\n\nclass ValidatedSortRule implements SortRule {\n get isValid(): boolean {\n return this.columnKey !== NOT_SELECTED_OPTION_VALUE && this.direction !== NOT_SELECTED_OPTION_VALUE;\n }\n\n constructor(\n /** Column key the rule belongs to */\n public columnKey: string | null = NOT_SELECTED_OPTION_VALUE,\n /** Sort direction */\n public direction: SortDirection = SortDirection.ASC\n ) {}\n}\n\n@Component({\n templateUrl: './sorting.component.html',\n styleUrl: './sorting.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13SortingDialogComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n BarLeftDirective,\n BarElementDirective,\n TitleComponent,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n SelectComponent,\n OptionComponent,\n ButtonComponent,\n DisabledBehaviorDirective,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe,\n forwardRef(() => GetAvailableSortColumnsPipe)\n ]\n})\nexport class P13SortingDialogComponent implements Resettable {\n /** Table columns available for sorting */\n readonly columns: SortDialogColumn[] = [];\n\n /** Indicates when reset command is available */\n readonly isResetAvailable$ = signal(false);\n\n /** @hidden */\n readonly SORT_DIRECTION = SortDirection;\n\n /** Sort rules to render */\n rules: ValidatedSortRule[] = [];\n\n /** @hidden */\n constructor(\n public dialogRef: DialogRef<SortDialogData>,\n private cdr: ChangeDetectorRef\n ) {\n const { columns, collectionSort } = this.dialogRef.data;\n\n this.columns = columns || [];\n\n this._initiateRules(collectionSort);\n }\n\n /** Reset changes to the initial state */\n reset(): void {\n this._initiateRules();\n this.isResetAvailable$.set(false);\n }\n\n /** Close dialog */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /** Confirm changes and close dialog */\n confirm(): void {\n const collectionSort = this._getCollectionSortFromSortRules(this._getUniqueRules(this.rules));\n const result: SortDialogResultData = { collectionSort };\n this.dialogRef.close(result);\n }\n\n /** @hidden */\n _removeRule(rule: ValidatedSortRule): void {\n this.rules = this.rules.filter((_rule) => _rule !== rule);\n\n // Keep at least one item in the list\n if (this.rules.length === 0) {\n this.rules.push(new ValidatedSortRule());\n }\n\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _addNew(index: number): void {\n this.rules.splice(index + 1, 0, new ValidatedSortRule());\n }\n\n /** @hidden */\n _onRuleColumnKeyChange(rule: ValidatedSortRule, columnKey: string): void {\n rule.columnKey = columnKey;\n this._recalculateResetAvailability();\n this.cdr.detectChanges();\n }\n\n /** @hidden */\n _onRuleDirectionChange(rule: ValidatedSortRule, direction: SortDirection): void {\n rule.direction = direction;\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n _recalculateResetAvailability(): void {\n const hasOnlyOneEmptyRule = this.rules.length === 1 && !this.rules[0].isValid;\n this.isResetAvailable$.set(!hasOnlyOneEmptyRule);\n }\n\n /** @hidden */\n _trackByColumnKey(index: number, rule: ValidatedSortRule): string | null {\n return rule.columnKey;\n }\n\n /** @hidden */\n private _initiateRules(collectionSort?: CollectionSort[]): void {\n this.rules = this._createRules(collectionSort);\n\n // Keep at least one item in the list\n if (this.rules.length === 0) {\n this.rules.push(new ValidatedSortRule());\n }\n\n this._recalculateResetAvailability();\n }\n\n /** @hidden */\n private _createRules(collectionSort: CollectionSort[] = []): ValidatedSortRule[] {\n return collectionSort.map(({ field, direction }): ValidatedSortRule => new ValidatedSortRule(field, direction));\n }\n\n /** @hidden */\n private _getCollectionSortFromSortRules(rules = this.rules): CollectionSort[] {\n return rules.filter(this._isRuleValid).map(\n ({ columnKey, direction }): CollectionSort => ({\n field: columnKey,\n direction\n })\n );\n }\n\n /** @hidden */\n private _getUniqueRules(rules: ValidatedSortRule[]): ValidatedSortRule[] {\n return getUniqueListValuesByKey(rules, 'columnKey');\n }\n\n /** @hidden */\n private _isRuleValid = (rule: ValidatedSortRule): boolean => rule?.isValid;\n}\n\n@Pipe({\n name: 'getAvailableSortColumns',\n pure: false,\n standalone: true\n})\nexport class GetAvailableSortColumnsPipe implements PipeTransform {\n /** @hidden */\n transform(columns: SortDialogColumn[], rules: SortRule[], currentKey: string | null): SortDialogColumn[] {\n const usedKeys = new Set(rules.map((r) => r.columnKey));\n return columns.filter((c) => !usedKeys.has(c.key) || currentKey === c.key);\n }\n}\n","<fd-dialog class=\"fdp-table-p13-sorting-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 fd-title [headerSize]=\"4\">\n {{ ('platformTable.P13SortDialogHeader' | fdTranslate)() }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @for (rule of rules; track _trackByColumnKey(i, rule); let i = $index) {\n <div class=\"sort-row\">\n <fd-select\n class=\"sort-row__select\"\n [value]=\"rule.columnKey\"\n (valueChange)=\"_onRuleColumnKeyChange(rule, $event)\"\n [placeholder]=\"('platformTable.P13SortDialogNoneSelectedColumn' | fdTranslate)()\"\n >\n @for (column of columns | getAvailableSortColumns: rules : rule.columnKey; track column) {\n <li fd-option [value]=\"column.key\">\n {{ column.label }}\n </li>\n }\n </fd-select>\n <fd-select\n class=\"sort-row__select\"\n [value]=\"rule.direction\"\n (valueChange)=\"_onRuleDirectionChange(rule, $event)\"\n [placeholder]=\"('platformTable.P13SortDialogNoneSelectedSorting' | fdTranslate)()\"\n >\n <li fd-option [value]=\"SORT_DIRECTION.ASC\">\n {{ ('platformTable.P13SortDialogSortOrderSelectOptionAsc' | fdTranslate)() }}\n </li>\n <li fd-option [value]=\"SORT_DIRECTION.DESC\">\n {{ ('platformTable.P13SortDialogSortOrderSelectOptionDesc' | fdTranslate)() }}\n </li>\n </fd-select>\n <div class=\"sort-row__actions\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"sys-cancel\"\n [attr.aria-label]=\"('platformTable.P13SortDialogRemoveSortBtnTitle' | fdTranslate)()\"\n [title]=\"('platformTable.P13SortDialogRemoveSortBtnTitle' | fdTranslate)()\"\n (click)=\"_removeRule(rule)\"\n ></button>\n <button\n fd-button\n [fdkDisabled]=\"rules.length === columns.length\"\n fdType=\"transparent\"\n glyph=\"add\"\n [attr.aria-label]=\"('platformTable.P13SortDialogAddNewSortBtnTitle' | fdTranslate)()\"\n [title]=\"('platformTable.P13SortDialogAddNewSortBtnTitle' | fdTranslate)()\"\n (click)=\"_addNew(i)\"\n ></button>\n </div>\n </div>\n }\n </fd-dialog-body>\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.P13SortDialogConfirmationBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n <fd-button-bar\n fdType=\"transparent\"\n [label]=\"('platformTable.P13SortDialogCancelBtnLabel' | fdTranslate)()\"\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnDestroy,\n Output\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';\n\nimport {\n CollectionFilter,\n CollectionGroup,\n CollectionSort,\n Table,\n TableColumn,\n TableDialogCommonData,\n TableState\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport { TableP13ColumnsComponent } from './table-p13-columns.component';\nimport { TableP13FilterComponent } from './table-p13-filter.component';\nimport { TableP13GroupComponent } from './table-p13-group.component';\nimport { TableP13SortComponent } from './table-p13-sort.component';\n\nimport { VisibleColumnType } from './columns/columns.component';\n\nimport { ColumnsDialogData, ColumnsDialogResultData, P13ColumnsDialogComponent } from './columns/columns.component';\nimport { FilterDialogData, FilterDialogResultData, P13FilteringDialogComponent } from './filtering/filtering.component';\nimport { GroupDialogData, GroupDialogResultData, P13GroupingDialogComponent } from './grouping/grouping.component';\nimport { P13SortingDialogComponent, SortDialogData, SortDialogResultData } from './sorting/sorting.component';\n\nconst dialogConfig: DialogConfig = {\n responsivePadding: true,\n verticalPadding: true,\n minWidth: '30rem',\n /** 88px it's the header + footer height */\n bodyMinHeight: 'calc(50vh - 88px)'\n};\n\n/**\n * View settings dialog component.\n *\n * Used to link view settings filters options to the grid table.\n *\n * ```html\n * <fdp-table #myTable></fdp-table>\n * ...\n * <fdp-table-p13-dialog [table]=\"myTable\">\n * <!-- Sort Panel -->\n * <fdp-table-p13-sort></fdp-table-p13-sort>\n *\n * <!-- Filter Panel -->\n * <fdp-table-p13-filter></fdp-table-p13-filter>\n *\n * <!-- Group Panel -->\n * <fdp-table-p13-group></fdp-table-p13-group>\n *\n * <!-- Columns Panel -->\n * <fdp-table-p13-columns></fdp-table-p13-columns>\n * </fdp-table-p13-dialog>\n * ```\n * */\n@Component({\n selector: 'fdp-table-p13-dialog',\n template: '',\n styles: [\n `\n :host {\n z-index: 999;\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class TableP13DialogComponent implements OnDestroy {\n /** Reference to table component. */\n @Input()\n set table(table: Table) {\n this._setTable(table);\n }\n get table(): Table {\n return this._table;\n }\n\n /** Event emitted when dialog is closed. */\n @Output()\n dialogClosed = new EventEmitter<string[]>();\n\n /** @hidden */\n @ContentChild(TableP13SortComponent)\n sort: TableP13SortComponent;\n\n /** @hidden */\n @ContentChild(TableP13FilterComponent)\n filter: TableP13FilterComponent;\n\n /** @hidden */\n @ContentChild(TableP13GroupComponent)\n group: TableP13GroupComponent;\n\n /** @hidden */\n @ContentChild(TableP13ColumnsComponent)\n columns: TableP13ColumnsComponent;\n\n /** @hidden */\n _table: Table;\n\n /** @hidden */\n _dialogRef: DialogRef<TableDialogCommonData, any>;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _tableSubscriptions = new Subscription();\n\n /** @hidden */\n private _columnOrder: VisibleColumnType[];\n\n /** @hidden */\n constructor(private readonly _dialogService: DialogService) {}\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._unsubscribeFromTable();\n }\n\n /** Open Sort Settings Dialog */\n showSortingSettings(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns().filter(({ sortable }) => sortable);\n const sortBy = state.sortBy;\n const dialogData: SortDialogData = {\n columns: columns.map(({ label, key }) => ({ label, key })),\n collectionSort: sortBy\n };\n\n // dismiss any open dialog, before opening a new one\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n P13SortingDialogComponent,\n {\n ...dialogConfig,\n data: dialogData\n },\n this.table.injector\n );\n\n this._subscriptions.add(\n this._dialogRef.afterClosed\n .pipe(filter((result) => !!result))\n .subscribe(({ collectionSort }: SortDialogResultData) => {\n this._applySorting(collectionSort);\n })\n );\n }\n\n /** Open Filtering Settings Dialog */\n showFilteringSettings(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns();\n const filterBy = state?.filterBy;\n const dialogData: FilterDialogData = {\n // add filterSelectOptions to be sent with the data\n columns: columns.map(({ label, key, dataType, filterable, filterSelectOptions }) => ({\n label,\n key,\n dataType,\n filterable,\n filterSelectOptions\n })),\n collectionFilter: filterBy\n };\n\n if (this.filter && this.filter.validator) {\n dialogData.validator = this.filter.validator;\n }\n\n // dismiss any open dialog, before opening a new one\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n P13FilteringDialogComponent,\n {\n ...dialogConfig,\n disablePaddings: true,\n width: '50rem',\n data: dialogData\n },\n this.table.injector\n );\n\n this._subscriptions.add(\n this._dialogRef.afterClosed\n .pipe(filter((result) => !!result))\n .subscribe(({ collectionFilter }: FilterDialogResultData) => {\n this._applyFiltering(collectionFilter);\n })\n );\n }\n\n /** Open Grouping Settings Dialog */\n showGroupingSettings(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns();\n const visibleColumns = state.columns;\n const groupBy = state.groupBy;\n const dialogData: GroupDialogData = {\n columns: columns\n // We can group by visible columns only\n .filter(({ name }) => visibleColumns.includes(name))\n .filter(({ groupable }) => groupable)\n .map(({ label, key }) => ({ label, key })),\n collectionGroup: groupBy\n };\n\n // dismiss any open dialog, before opening a new one\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n P13GroupingDialogComponent,\n {\n ...dialogConfig,\n data: dialogData\n },\n this.table.injector\n );\n\n this._subscriptions.add(\n this._dialogRef.afterClosed\n .pipe(filter((result) => !!result))\n .subscribe(({ collectionGroup }: GroupDialogResultData) => {\n this._applyGrouping(collectionGroup);\n })\n );\n }\n\n /** Open Columns Settings Dialog */\n showColumnsSettings(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns();\n const visibleColumns = state.columns;\n const dialogData: ColumnsDialogData = {\n availableColumns: columns.map(({ label, name }) => ({ label, key: name })),\n visibleColumns\n };\n\n if (this._columnOrder && this._columnOrder.length) {\n dialogData.availableColumns.sort(\n (a, b) => this._columnOrder.indexOf(a.key) - this._columnOrder.indexOf(b.key)\n );\n }\n\n // dismiss any open dialog, before opening a new one\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n P13ColumnsDialogComponent,\n {\n ...dialogConfig,\n disablePaddings: true,\n minWidth: '35rem',\n data: dialogData\n },\n this.table.injector\n );\n\n this._subscriptions.add(\n this._dialogRef.afterClosed\n .pipe(filter((result) => !!result))\n .subscribe(({ visibleColumns: result, columnOrder }: ColumnsDialogResultData) => {\n if (columnOrder) {\n this._columnOrder = columnOrder;\n }\n this.dialogClosed.emit(result);\n this._applyColumns(result);\n })\n );\n }\n\n /** @hidden */\n private _setTable(table: Table): void {\n this._table = table;\n\n this._unsubscribeFromTable();\n\n if (this._table) {\n this._subscribeToTable();\n }\n }\n\n /** @hidden */\n private _subscribeToTable(): void {\n this._listenToTableTriggersToOpenDialogs();\n this._listenToTableColumns();\n }\n\n /** @hidden */\n private _listenToTableTriggersToOpenDialogs(): void {\n this._tableSubscriptions.add(this._table.openTableSortSettings.subscribe(() => this.showSortingSettings()));\n this._tableSubscriptions.add(this._table.openTableFilterSettings.subscribe(() => this.showFilteringSettings()));\n this._tableSubscriptions.add(this._table.openTableGroupSettings.subscribe(() => this.showGroupingSettings()));\n this._tableSubscriptions.add(this._table.openTableColumnSettings.subscribe(() => this.showColumnsSettings()));\n }\n\n /** @hidden */\n private _listenToTableColumns(): void {\n this._tableSubscriptions.add(\n this._table.tableColumnsStream.subscribe((columns: TableColumn[]) => {\n this._table?.showSortSettingsInToolbar(columns.some(({ sortable }) => sortable));\n\n this._table?.showGroupSettingsInToolbar(columns.some(({ groupable }) => groupable));\n\n this._table?.showColumnSettingsInToolbar(columns.length > 0);\n\n this._table?.showFilterSettingsInToolbar(columns.some(({ filterable }) => filterable));\n\n this._table?.setHeaderColumnFilteringDisabled(columns.some(({ filterable }) => filterable));\n })\n );\n }\n\n /** @hidden */\n private _getTableState(): TableState {\n return this._table?.getTableState();\n }\n\n /** @hidden */\n private _getTableColumns(): TableColumn[] {\n return this._table?.getTableColumns() || [];\n }\n\n /** @hidden */\n private _applySorting(collectionSort: CollectionSort[]): void {\n this._table?.sort(collectionSort);\n }\n\n /** @hidden */\n private _applyFiltering(filters: CollectionFilter[]): void {\n this._table?.filter(filters);\n }\n\n /** @hidden */\n private _applyGrouping(collectionGroup: CollectionGroup[]): void {\n this._table?.group(collectionGroup);\n }\n\n /** @hidden */\n private _applyColumns(columns: string[]): void {\n this._table?.setColumns(columns);\n }\n\n /** @hidden */\n private _unsubscribeFromTable(): void {\n this._tableSubscriptions.unsubscribe();\n this._tableSubscriptions = new Subscription();\n }\n}\n","import { InjectionToken, TemplateRef } from '@angular/core';\n\nexport interface TableToolbarInterface {\n tableToolbarTitleId: string;\n contentTemplateRef: TemplateRef<any>;\n}\n\n/** @deprecated Use TableToolbarInterface instead */\nexport type TableToolbarWithTemplate = TableToolbarInterface;\n\n/**\n * Used to provide a table-toolbar to the table component without causing a circular dependency.\n */\nexport const TABLE_TOOLBAR = new InjectionToken<any>('PLATFORM_TABLE_TOOLBAR');\n","import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\n\n/**\n * The component that represents a table toolbar actions.\n * ```html\n * <fdp-table-toolbar-actions>\n * <fdp-button label=\"Action One\"></fdp-button>\n * <fdp-button label=\"Action Two\"></fdp-button>\n * </fdp-table-toolbar-actions>\n * ```\n * */\n@Component({\n selector: 'fdp-table-toolbar-actions',\n template: `\n <ng-template>\n <ng-content></ng-content>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableToolbarActionsComponent {\n /** @hidden */\n @ViewChild(TemplateRef)\n contentTemplateRef: TemplateRef<any>;\n}\n","import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fdp-table-toolbar-left-actions',\n template: `\n <ng-template>\n <ng-content></ng-content>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableToolbarLeftActionsComponent {\n /** @hidden */\n @ViewChild(TemplateRef)\n _contentTemplateRef: TemplateRef<any>;\n}\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n DestroyRef,\n Directive,\n EventEmitter,\n Input,\n Output,\n Signal,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n computed,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { HeadingLevel } from '@fundamental-ngx/core/shared';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport {\n ToolbarComponent,\n ToolbarItemDirective,\n ToolbarLabelDirective,\n ToolbarSeparatorComponent,\n ToolbarSpacerDirective\n} from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent, SearchInput, SuggestionItem } from '@fundamental-ngx/platform/search-field';\nimport { Table, TableService } from '@fundamental-ngx/platform/table-helpers';\nimport { TABLE_TOOLBAR, TableToolbarInterface } from './table-toolbar';\nimport { TableToolbarActionsComponent } from './table-toolbar-actions.component';\nimport { TableToolbarLeftActionsComponent } from './table-toolbar-left-actions.component';\n\nexport interface TableAppliedFilter {\n columnName: string;\n params: string;\n}\n\nexport interface ToolbarContext {\n counter: Signal<number>;\n sortable: Signal<boolean>;\n filterable: Signal<boolean>;\n groupable: Signal<boolean>;\n columns: Signal<boolean>;\n settings: Signal<boolean>;\n hasAnyActions: Signal<boolean>;\n appliedFilters: Signal<TableAppliedFilter[]>;\n}\n\n/** Context provided to the titleTemplate. */\nexport interface TableToolbarTitleTemplateContext {\n /** Item count signal. */\n counter: Signal<number>;\n}\n\nexport type EditMode = 'none' | 'inline';\n\nlet tableToolbarTitleUniqueId = 0;\nlet tableToolbarUniqueId = 0;\n\n@Directive({\n selector: '[fdpTableToolbarTemplate]',\n standalone: true\n})\nexport class TableToolbarTemplateDirective {\n /** @hidden */\n readonly templateRef = inject<TemplateRef<ToolbarContext>>(TemplateRef);\n\n /** @hidden */\n static ngTemplateContextGuard(\n _directive: TableToolbarTemplateDirective,\n context: unknown\n ): context is ToolbarContext {\n return true;\n }\n}\n\n/**\n * The component that represents a table toolbar.\n *\n * ```html\n * <fdp-table-toolbar\n * title=\"Order Line Items\"\n * [hideItemCount]=\"false\">\n * </fdp-table-toolbar>\n * ```\n * */\n\n@Component({\n selector: 'fdp-table-toolbar',\n templateUrl: './table-toolbar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }],\n imports: [\n ToolbarComponent,\n ToolbarItemDirective,\n ToolbarSeparatorComponent,\n NgTemplateOutlet,\n ToolbarSpacerDirective,\n SearchFieldComponent,\n ButtonComponent,\n AsyncPipe,\n FdTranslatePipe,\n TableToolbarTemplateDirective,\n ToolbarLabelDirective,\n ContentDensityDirective,\n TitleComponent\n ]\n})\nexport class TableToolbarComponent implements TableToolbarInterface, AfterViewChecked {\n /**\n * Whether the toolbar should hide elements in popover when they overflow.\n * */\n @Input()\n shouldOverflow = true;\n\n /** Table title. */\n @Input()\n title: string;\n\n /** Aria label for the search field. */\n @Input()\n searchFieldAriaLabel: Nullable<string>;\n\n /** Toggle to show table item count. */\n @Input()\n hideItemCount = false;\n\n /** Toggle to show search input. */\n @Input()\n hideSearchInput = false;\n\n /** Set a customized placeholder */\n @Input()\n searchFieldPlaceholder: string;\n\n /** Toggle to expand and collapse all feature */\n @Input()\n showExpandCollapseButtons = false;\n /** Suggestions for search field. */\n @Input()\n searchSuggestions: SuggestionItem[] = [];\n\n /** Table rows edit/add mode. */\n @Input()\n editMode: EditMode = 'none';\n\n /** Whether display Refresh button in the search field */\n @Input()\n disableRefresh = false;\n\n /** Whether display search button in the search field */\n @Input()\n disableSearch = false;\n\n /** Toolbar Aria-label attribute. */\n @Input()\n ariaLabel: string;\n\n /** Toolbar Aria-labelledby attribute. */\n @Input()\n ariaLabelledBy: string;\n\n /** Toolbar Aria-describedby attribute. */\n @Input()\n ariaDescribedBy: string;\n\n /** Toolbar Aria-orientation attribute. */\n @Input()\n ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * The ID of the toolbar\n * */\n @Input()\n id = `fd-table-toolbar-${tableToolbarUniqueId++}`;\n\n /** Search field input text. */\n @Input()\n set searchFieldInputText(text: string) {\n this._searchInputText = text;\n this.submitSearch({ text, category: null });\n }\n get searchFieldInputText(): string {\n return this._searchInputText;\n }\n\n /** Event emitted when the search field input is changed. */\n @Output()\n searchFieldInputChange = new EventEmitter<string>();\n\n /** @hidden */\n @ContentChild(TableToolbarActionsComponent)\n tableToolbarActionsComponent: TableToolbarActionsComponent;\n\n /** @hidden */\n @ContentChild(TableToolbarLeftActionsComponent)\n _tableToolbarLeftActionsComponent: TableToolbarLeftActionsComponent;\n\n /** @hidden */\n @ViewChild(TemplateRef)\n contentTemplateRef: TemplateRef<any>;\n\n /** @hidden */\n tableToolbarTitleId: string = 'fd-table-toolbar-title-' + tableToolbarTitleUniqueId++;\n\n /** @hidden */\n _showSaveButton = false;\n\n /** @hidden */\n _searchInputText = '';\n\n /**\n * Custom title template. When provided, it replaces the default string title.\n * The template context provides a `counter` signal with the current item count.\n *\n * ```html\n * <fdp-table-toolbar [titleTemplate]=\"customTitleTpl\">\n * <ng-template #customTitleTpl let-counter=\"counter\">\n * <fd-icon glyph=\"product\"></fd-icon> Products ({{ counter() }})\n * </ng-template>\n * </fdp-table-toolbar>\n * ```\n */\n titleTemplate = input<TemplateRef<TableToolbarTitleTemplateContext> | null>(null);\n\n /**\n * Heading level of the table toolbar title.\n */\n headingLevel = input<HeadingLevel>(2);\n\n /** @hidden */\n readonly headingLevelParsed = computed(() => {\n const level = this.headingLevel();\n if (typeof level === 'number') {\n return level;\n } else if (typeof level === 'string') {\n return Number.parseInt(level.replace(/\\D/g, ''), 10);\n }\n return 2;\n });\n\n /** @hidden */\n readonly tableLoading$: Observable<boolean> = inject(TableService).tableLoading$;\n\n /** @hidden Title text extracted from titleTemplate for accessibility. */\n protected readonly titleText = signal<string>('');\n\n /** @hidden */\n private _titleObserver: MutationObserver | undefined;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(\n private _tableService: TableService,\n private readonly _table: Table\n ) {\n this._listenToTableEvents();\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n // Set up observer once the element exists in the DOM\n if (!this._titleObserver) {\n this._setupTitleObserver();\n }\n }\n\n /** @hidden */\n submitSearch(search: SearchInput): void {\n this._table.search(search);\n }\n\n /** @hidden */\n searchInputChanged(event: SearchInput): void {\n this.searchFieldInputChange.emit(event.text);\n }\n\n /** @hidden */\n openSorting(): void {\n this._table.openTableSortSettings.emit();\n }\n\n /** @hidden */\n openFiltering(): void {\n this._table.openTableFilterSettings.emit();\n }\n\n /** @hidden */\n openGrouping(): void {\n this._table.openTableGroupSettings.emit();\n }\n\n /** @hidden */\n openColumns(): void {\n this._table.openTableColumnSettings.emit();\n }\n\n /** @hidden */\n _addRow(): void {\n this._table.addRow();\n }\n\n /** @hidden */\n _saveRows(): void {\n this._table.saveRows();\n }\n\n /** @hidden */\n _cancelEditing(): void {\n this._table.cancelEditing();\n }\n\n /** @hidden */\n _expandAll(): void {\n this._table.expandAll();\n }\n\n /** @hidden */\n _formatAppliedFilters(appliedFilters: { columnName: string; params: string }[]): string {\n return appliedFilters\n .map((filter, index) => {\n const separator = index < appliedFilters.length - 1 ? ', ' : '';\n return `${filter.columnName} (${filter.params})${separator}`;\n })\n .join('');\n }\n\n /** @hidden */\n _closeFilterToolbar(): void {\n this._tableService.resetFilters();\n }\n\n /** @hidden */\n _collapseAll(): void {\n this._table.collapseAll();\n }\n\n /** @hidden */\n private _listenToTableEvents(): void {\n this._table.emptyRowAdded.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._showSaveButton = true;\n });\n\n this._table.save.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._showSaveButton = false;\n });\n\n this._table.cancel.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._showSaveButton = false;\n });\n\n this._table.presetChanged.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((state) => {\n this._searchInputText = state.searchInput?.text ?? '';\n });\n }\n\n /** @hidden Sets up a MutationObserver to watch for title content changes. */\n private _setupTitleObserver(): void {\n const titleElement = document.getElementById(this.tableToolbarTitleId);\n if (titleElement) {\n this._updateTitleText(titleElement);\n this._titleObserver = new MutationObserver(() => this._updateTitleText(titleElement));\n this._titleObserver.observe(titleElement, {\n childList: true,\n subtree: true,\n characterData: true\n });\n this._destroyRef.onDestroy(() => this._titleObserver?.disconnect());\n }\n }\n\n /** @hidden Updates the title text from the rendered title element. */\n private _updateTitleText(titleElement: HTMLElement): void {\n const text = titleElement.textContent?.trim() || '';\n if (text !== this.titleText()) {\n this.titleText.set(text);\n }\n }\n}\n","<ng-template\n fdpTableToolbarTemplate\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n let-settings=\"settings\"\n let-hasAnyActions=\"hasAnyActions\"\n let-appliedFilters=\"appliedFilters\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"titleTemplate() ? '' : title && !hideItemCount ? title + ' (' + counter() + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n [headingLevel]=\"headingLevel()\"\n [ariaLabel]=\"ariaLabel\"\n [id]=\"id\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ariaOrientation]=\"ariaOrientation\"\n >\n @if (titleTemplate()) {\n <span\n fd-title\n role=\"heading\"\n [headerSize]=\"4\"\n [attr.aria-level]=\"headingLevelParsed()\"\n [attr.title]=\"titleText()\"\n [attr.aria-label]=\"titleText()\"\n class=\"fd-toolbar__title fd-toolbar__title--truncate\"\n [id]=\"tableToolbarTitleId\"\n >\n <ng-template\n [ngTemplateOutlet]=\"titleTemplate()\"\n [ngTemplateOutletContext]=\"{ counter: counter }\"\n ></ng-template>\n </span>\n }\n @if (_tableToolbarLeftActionsComponent) {\n <div fd-toolbar-item class=\"fd-toolbar__group\">\n @if (!!title || !!titleTemplate() || !hideItemCount) {\n <fd-toolbar-separator></fd-toolbar-separator>\n }\n <ng-template [ngTemplateOutlet]=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-template>\n </div>\n }\n <fd-toolbar-spacer></fd-toolbar-spacer>\n @if (!hideSearchInput) {\n <fdp-search-field\n fd-toolbar-item\n [style.min-width.rem]=\"15.5\"\n [placeholder]=\"\n searchFieldPlaceholder\n ? searchFieldPlaceholder\n : ('platformTable.toolbarSearchPlaceholder' | fdTranslate)()\n \"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [disableRefresh]=\"disableRefresh\"\n [disableSearch]=\"disableSearch\"\n [ariaLabel]=\"searchFieldAriaLabel\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n (inputChange)=\"searchInputChanged($event)\"\n ></fdp-search-field>\n }\n @if (editMode !== 'none') {\n <button\n fd-button\n fd-toolbar-item\n [label]=\"('platformTable.toolbarActionCreateButtonLabel' | fdTranslate)()\"\n (click)=\"_addRow()\"\n ></button>\n @if (_showSaveButton) {\n @if (_showSaveButton) {\n <button\n fd-button\n fd-toolbar-item\n [label]=\"('platformTable.toolbarActionSaveButtonLabel' | fdTranslate)()\"\n (click)=\"_saveRows()\"\n ></button>\n }\n <fd-toolbar-separator></fd-toolbar-separator>\n <button\n fd-button\n fd-toolbar-item\n [label]=\"('platformTable.toolbarActionCancelButtonLabel' | fdTranslate)()\"\n (click)=\"_cancelEditing()\"\n fdType=\"transparent\"\n ></button>\n }\n @if (tableToolbarActionsComponent || hasAnyActions()) {\n <fd-toolbar-separator fd-toolbar-item></fd-toolbar-separator>\n }\n }\n @if (tableToolbarActionsComponent) {\n <span fd-toolbar-item class=\"fdp-table-toolbar-actions\">\n <ng-template [ngTemplateOutlet]=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-template>\n </span>\n }\n @if (showExpandCollapseButtons || hasAnyActions()) {\n @if (tableToolbarActionsComponent) {\n <fd-toolbar-separator fd-toolbar-item></fd-toolbar-separator>\n }\n @if (showExpandCollapseButtons) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"('platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n ></button>\n <button\n fd-button\n fd-toolbar-item\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"('platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n ></button>\n }\n @if (settings()) {\n <button\n fd-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"action-settings\"\n [title]=\"('platformTable.toolbarActionButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openSorting()\"\n ></button>\n }\n @if (sortable()) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"sort\"\n [title]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openSorting()\"\n ></button>\n }\n @if (filterable()) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"filter\"\n [title]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openFiltering()\"\n ></button>\n }\n @if (groupable()) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"group-2\"\n [title]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openGrouping()\"\n ></button>\n }\n @if (columns()) {\n <button\n fd-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"action-settings\"\n [title]=\"('platformTable.toolbarActionColumnsButtonTitle' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.toolbarActionColumnsButtonTitle' | fdTranslate)()\"\n fdType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openColumns()\"\n ></button>\n }\n }\n </fd-toolbar>\n @if (appliedFilters().length) {\n <fd-toolbar\n fdType=\"info\"\n class=\"fdp-table__applied-filters-toolbar\"\n [active]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [shouldOverflow]=\"shouldOverflow\"\n [headingLevel]=\"headingLevel()\"\n >\n <label fd-toolbar-label>\n {{ ('platformTable.filteredBy' | fdTranslate)() }}:\n {{ _formatAppliedFilters(appliedFilters()) }}\n </label>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <button\n fdCompact\n (click)=\"_closeFilterToolbar()\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n [title]=\"('platformTable.clearFilters' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.clearFilters' | fdTranslate)()\"\n ></button>\n </fd-toolbar>\n }\n</ng-template>\n","export const NOT_FILTERED_OPTION_VALUE = `table-filters-not-filtered-option-value-${Math.random()\n .toString()\n .slice(2, 5)}`;\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport {\n FdpViewSettingsFilterCustomDef,\n FilterType,\n TableFilterSelectOption\n} from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * View settings dialog filter component.\n *\n * ```html\n * <!-- With custom form -->\n * <fdp-table-view-settings-filter\n * column=\"name\"\n * label=\"Name\"\n * type=\"custom\">\n * <ng-container *fdpViewSettingsFilterCustomDef=\"let model\">\n * <label>Enter name:</label>\n * <fdp-input type=\"text\" name=\"name\" [(ngModel)]=\"model.name\"></fdp-input>\n * </ng-container>\n * </fdp-table-view-settings-filter>\n *\n * <!-- Single select -->\n * <fdp-table-view-settings-filter\n * column=\"status\"\n * label=\"Status\"\n * type=\"single-select\"\n * values=\"[{value: 'OUT_OF_STOCK', label: 'Out of stock'}, { value: 'AVAILABLE', label: 'Available'}]\">\n * </fdp-table-view-settings-filter>\n * ```\n *\n * */\n@Component({\n selector: 'fdp-table-view-settings-filter',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableViewSettingsFilterComponent {\n /** Table column name on which to filter. */\n @Input()\n column: string;\n\n /** Label for the column. */\n @Input()\n label: string;\n\n /**\n * Type of filter interface.\n * @type {'single-select' | 'multi-select' | 'custom' 'category'}\n */\n @Input()\n type: FilterType;\n\n /** Selection values for 'single-select' or 'multi-select' filter types. */\n @Input()\n values: TableFilterSelectOption[];\n\n /** Custom filter template directive reference */\n customFilterTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ContentChild(FdpViewSettingsFilterCustomDef)\n set _filterCustomDef(filterCustomDef: FdpViewSettingsFilterCustomDef) {\n this.customFilterTemplate = filterCustomDef?.templateRef;\n }\n}\n","import {\n afterEveryRender,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Input,\n Output\n} from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ContentDensityMode,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\n\n/**\n * Custom Select filter type.\n *\n * Used to render user's custom filter template\n *\n */\n\n@Component({\n selector: 'fdp-filter-custom',\n templateUrl: './filter-custom.component.html',\n // afterEveryRender is used to detect mutations on the _value object after each render cycle.\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [contentDensityObserverProviders()],\n imports: [NgTemplateOutlet]\n})\nexport class FilterCustomComponent {\n /** ViewSettingsFilter options the filter is created from */\n @Input()\n filter: TableViewSettingsFilterComponent;\n\n /** The filter model */\n @Input()\n set filterBy(filterBy: CollectionFilter | undefined) {\n if (!filterBy?.value || Object.prototype.toString.call(filterBy?.value) !== '[object Object]') {\n // force value to be an object\n this._value = {};\n } else {\n this._value = { ...filterBy.value };\n }\n\n this._valueLastEmitted = { ...this._value };\n }\n\n /** Filter model change event */\n @Output()\n valueChange: EventEmitter<unknown> = new EventEmitter<unknown>();\n\n /** Content Density, comes from table injector */\n get contentDensity(): ContentDensityMode {\n return this.contentDensityObserver.value;\n }\n /**\n * @hidden\n * Currently selected value\n */\n _value: Record<string, any>;\n\n /**\n * @hidden\n * Last emitted value\n */\n _valueLastEmitted: Record<string, any>;\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef);\n\n /** @hidden */\n constructor(private contentDensityObserver: ContentDensityObserver) {\n afterEveryRender(() => this._checkValueChanges());\n }\n\n /** @hidden */\n _checkValueChanges(): void {\n try {\n if (JSON.stringify(this._value) === JSON.stringify(this._valueLastEmitted)) {\n return;\n }\n\n this._valueLastEmitted = { ...this._value };\n\n this.valueChange.emit(this._value);\n this._cdr.markForCheck();\n } catch {}\n }\n}\n","<ng-template\n [ngTemplateOutlet]=\"filter.customFilterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: _value, valueChangeEmitter: valueChange, contentDensity: contentDensity }\"\n>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { CollectionFilter, TableFilterSelectOption } from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * Multi Select filter type.\n *\n */\n\ntype SelectableOption = TableFilterSelectOption & { selected: boolean };\n\n@Component({\n selector: 'fdp-filter-multi-select',\n templateUrl: './filter-multi-select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ListComponent, ListItemComponent, CheckboxComponent, FormsModule, ListTitleDirective]\n})\nexport class FilterMultiSelectComponent {\n /** Selectable filter options */\n @Input()\n options: TableFilterSelectOption[] = [];\n\n /** The filter model */\n @Input()\n set filterBy(filterBy: CollectionFilter | undefined) {\n const filterByValue = filterBy?.value || [];\n this._selectableOptions = this.options.map(\n (option): SelectableOption => ({\n ...option,\n selected: filterByValue.includes(option.value)\n })\n );\n this._updateValueBasedOnOptions();\n }\n\n /** Filter model change event */\n @Output()\n valueChange: EventEmitter<any[]> = new EventEmitter();\n\n /**\n * @hidden\n * Currently selected values\n */\n _value: any[];\n\n /** @hidden */\n _selectableOptions: SelectableOption[];\n\n /** @hidden */\n _onSelectChange(option: SelectableOption, selected: boolean): void {\n option.selected = selected;\n this._updateValueBasedOnOptions();\n this.valueChange.emit(this._value);\n }\n\n /** @hidden */\n _updateValueBasedOnOptions(): void {\n this._value = this._selectableOptions.filter(({ selected }) => selected).map(({ value }) => value);\n }\n}\n","<ul fd-list [selection]=\"true\">\n @for (option of _selectableOptions; track option) {\n <li fd-list-item [selected]=\"option.selected\">\n <fd-checkbox [ngModel]=\"option.selected\" (ngModelChange)=\"_onSelectChange(option, $event)\"></fd-checkbox>\n <span fd-list-title>{{ option.label }}</span>\n </li>\n }\n</ul>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { CollectionFilter, TableFilterSelectOption } from '@fundamental-ngx/platform/table-helpers';\n\nimport { FormsModule } from '@angular/forms';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { NOT_FILTERED_OPTION_VALUE } from './constants';\n\n/**\n * Single Select filter type.\n *\n */\n\n@Component({\n selector: 'fdp-filter-single-select',\n templateUrl: './filter-single-select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ListComponent, ListItemComponent, RadioButtonComponent, FormsModule, ListTitleDirective, FdTranslatePipe]\n})\nexport class FilterSingleSelectComponent {\n /** Selectable filter options */\n @Input()\n options: TableFilterSelectOption[] = [];\n\n /** The filter model */\n @Input()\n set filterBy(filterBy: CollectionFilter | undefined) {\n const value = filterBy?.value?.[0];\n this._value = value === undefined ? NOT_FILTERED_OPTION_VALUE : value;\n }\n\n /** Filter model change event */\n @Output()\n valueChange: EventEmitter<any[]> = new EventEmitter();\n\n /** @hidden */\n readonly NOT_FILTERED_OPTION_VALUE = NOT_FILTERED_OPTION_VALUE;\n\n /**\n * @hidden\n * Currently selected value\n */\n _value: any;\n\n /** @hidden */\n _onValueChange(value: unknown): void {\n if (value === this._value) {\n return;\n }\n\n this._value = value;\n\n if (value === NOT_FILTERED_OPTION_VALUE) {\n this.valueChange.emit([]);\n } else {\n this.valueChange.emit([value]);\n }\n }\n}\n","<ul fd-list [selection]=\"true\">\n <li fd-list-item [selected]=\"_value === NOT_FILTERED_OPTION_VALUE\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"NOT_FILTERED_OPTION_VALUE\"\n state=\"default\"\n [ngModel]=\"_value\"\n (ngModelChange)=\"_onValueChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.filterDialogNotFilteredLabel' | fdTranslate)() }}</span>\n </li>\n @for (option of options; track option) {\n <li fd-list-item [selected]=\"option.value === _value\">\n <fd-radio-button\n [ngModel]=\"_value\"\n (ngModelChange)=\"_onValueChange($event)\"\n [value]=\"option.value\"\n name=\"filtering-settings-single-select\"\n ></fd-radio-button>\n <span fd-list-title>{{ option.label }}</span>\n </li>\n }\n</ul>\n","import { InjectionToken, TemplateRef } from '@angular/core';\n\nexport interface FiltersViewStep {\n titleTemplateRef: TemplateRef<any>;\n bodyTemplateRef: TemplateRef<any>;\n}\n\nexport const FILTERS_VIEW_STEP_TOKEN = new InjectionToken<FiltersViewStep>('FiltersViewStep');\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { CollectionFilter, FILTER_STRATEGY, FilterType } from '@fundamental-ngx/platform/table-helpers';\n\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\nimport { FilterCustomComponent } from './filter-custom.component';\nimport { FilterMultiSelectComponent } from './filter-multi-select.component';\nimport { FilterSingleSelectComponent } from './filter-single-select.component';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\n\n/**\n * Filter dialog step.\n *\n * Used to render selected filter options.\n *\n */\n\n@Component({\n selector: 'fdp-filter-step',\n templateUrl: './filter-step.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n /** Each filters dialog step must provide FILTERS_VIEW_STEP_TOKEN to be accessible */\n providers: [{ provide: FILTERS_VIEW_STEP_TOKEN, useExisting: forwardRef(() => FilterStepComponent) }],\n imports: [\n ButtonComponent,\n TitleComponent,\n FilterSingleSelectComponent,\n FilterMultiSelectComponent,\n FilterCustomComponent,\n FdTranslatePipe\n ]\n})\nexport class FilterStepComponent implements FiltersViewStep {\n /** ViewSettingsFilter options the filter is created from */\n @Input()\n filter: TableViewSettingsFilterComponent;\n\n /** Column key to apply this filter to */\n @Input()\n columnKey: string;\n\n /** Table's content density to be used */\n @Input()\n contentDensity: ContentDensity;\n\n /** The current filter model */\n @Input()\n set filterBy(filterByList: CollectionFilter[]) {\n this._filterBy = filterByList.find(({ field }) => field === this.columnKey);\n }\n\n /** Column name to display in the filter */\n @Input()\n columnName: string;\n\n /** Heading level of the dialog. */\n @Input()\n headingLevel = 2;\n\n /** Go back event */\n @Output()\n back: EventEmitter<void> = new EventEmitter<void>();\n\n /** Filter model change event */\n @Output()\n valueChange: EventEmitter<CollectionFilter> = new EventEmitter<CollectionFilter>();\n\n /** Template ref to the filter title */\n @ViewChild('titleTemplate')\n titleTemplateRef: TemplateRef<any>;\n\n /** Template ref to the filter body */\n @ViewChild('bodyTemplate')\n bodyTemplateRef: TemplateRef<any>;\n\n /** @hidden */\n readonly FILTER_TYPE = FilterType;\n\n /** @hidden */\n _filterBy?: CollectionFilter;\n\n /** @hidden */\n _onFilterValueChange(filterValue: any): void {\n const filterBy: CollectionFilter = this._filterBy || {\n field: this.columnKey,\n value: null,\n fieldName: this.columnName,\n strategy: FILTER_STRATEGY.EQ,\n exclude: false\n };\n\n const newFilterBy = { ...filterBy, value: filterValue };\n\n this.valueChange.emit(newFilterBy);\n }\n}\n","<ng-template #titleTemplate>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [title]=\"('platformTable.filterDialogBackToColumns' | fdTranslate)()\"\n [ariaLabel]=\"('platformTable.filterDialogBackToColumns' | fdTranslate)()\"\n (click)=\"back.emit()\"\n ></button>\n <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">\n {{ ('platformTable.filterDialogFilterByLabel' | fdTranslate: { filterLabel: filter.label })() }}\n </span>\n</ng-template>\n\n<ng-template #bodyTemplate>\n @switch (filter.type) {\n @case (FILTER_TYPE.SINGLE) {\n <fdp-filter-single-select\n [options]=\"filter.values\"\n [filterBy]=\"_filterBy\"\n (valueChange)=\"_onFilterValueChange($event)\"\n ></fdp-filter-single-select>\n }\n @case (FILTER_TYPE.MULTI) {\n <fdp-filter-multi-select\n [options]=\"filter.values\"\n [filterBy]=\"_filterBy\"\n (valueChange)=\"_onFilterValueChange($event)\"\n ></fdp-filter-multi-select>\n }\n @case (FILTER_TYPE.CUSTOM) {\n <fdp-filter-custom\n [filter]=\"filter\"\n [filterBy]=\"_filterBy\"\n (valueChange)=\"_onFilterValueChange($event)\"\n ></fdp-filter-custom>\n }\n @case (FILTER_TYPE.CATEGORY) {\n Categories list is not implemented\n }\n }\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListLinkDirective,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\n\n/**\n * Filters list dialog step.\n *\n * Used to render available filters to drill down.\n *\n */\n\nexport interface SelectableFilter {\n label: string;\n}\n@Component({\n selector: 'fdp-filters-list-step',\n templateUrl: './filters-list-step.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n /** Each filters dialog step must provide FILTERS_VIEW_STEP_TOKEN to be accessible */\n providers: [{ provide: FILTERS_VIEW_STEP_TOKEN, useExisting: forwardRef(() => FiltersListStepComponent) }],\n imports: [\n TitleComponent,\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListLinkDirective,\n ListTitleDirective,\n FdTranslatePipe\n ]\n})\nexport class FiltersListStepComponent implements FiltersViewStep {\n /** Selectable filters list */\n @Input()\n filters: SelectableFilter[] = [];\n\n /** Heading level of the dialog. */\n @Input()\n headingLevel: number;\n\n /** Select event is fired once some filter is selected */\n @Output()\n selectFilter: EventEmitter<SelectableFilter> = new EventEmitter<SelectableFilter>();\n\n /** Template ref to the filter title */\n @ViewChild('titleTemplate')\n titleTemplateRef: TemplateRef<any>;\n\n /** Template ref to the filter body */\n @ViewChild('bodyTemplate')\n bodyTemplateRef: TemplateRef<any>;\n}\n","<ng-template #titleTemplate>\n <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">{{\n ('platformTable.filterDialogFilterTitle' | fdTranslate)()\n }}</span>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div fd-list-group-header>\n <span fd-list-title id=\"platformTableInternalFilterListGroupHeader\">\n {{ ('platformTable.filterDialogFilterBy' | fdTranslate)() }}\n </span>\n </div>\n <ul fd-list aria-labelledby=\"platformTableInternalFilterListGroupHeader\" [navigationIndicator]=\"true\">\n @for (filter of filters; track filter) {\n <li\n fd-list-item\n [interactive]=\"true\"\n (click)=\"selectFilter.emit(filter)\"\n (keydown.space)=\"selectFilter.emit(filter)\"\n (keydown.enter)=\"selectFilter.emit(filter)\"\n >\n <a fd-list-link [navigationIndicator]=\"true\">\n <span fd-list-title>{{ filter.label }}</span>\n </a>\n </li>\n }\n </ul>\n</ng-template>\n","import {\n CollectionFilter,\n SortDirection,\n TableColumn,\n TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\nimport { TableViewSettingsFilterComponent } from './table-view-settings-filter.component';\n\nexport interface SettingsSortDialogColumn {\n label: string;\n key: string;\n}\n\nexport interface SettingsSortDialogData extends TableDialogCommonData {\n direction: SortDirection;\n field: string | null;\n columns: SettingsSortDialogColumn[];\n allowDisablingSorting: boolean;\n}\n\nexport interface SettingsSortDialogResultData {\n field: string | null;\n direction: SortDirection;\n}\n\nexport const NOT_SORTED_OPTION_VALUE = null;\nexport const INITIAL_DIRECTION = SortDirection.ASC;\n\nexport interface SettingsGroupDialogColumn {\n label: string;\n key: string;\n}\n\nexport interface SettingsGroupDialogData extends TableDialogCommonData {\n direction: SortDirection;\n field: string | null;\n columns: SettingsGroupDialogColumn[];\n}\n\nexport interface SettingsGroupDialogResultData {\n field: string | null;\n direction: SortDirection;\n}\n\nexport const NOT_GROUPED_OPTION_VALUE = null;\n\nexport interface FiltersDialogData extends TableDialogCommonData {\n filterBy: CollectionFilter[];\n columns: TableColumn[];\n viewSettingsFilters: TableViewSettingsFilterComponent[];\n}\n\nexport interface FiltersDialogResultData {\n filterBy: CollectionFilter[];\n}\n\nexport enum ACTIVE_STEP {\n SELECT_FILTER = 'SELECT_FILTER',\n FILTER = 'FILTER'\n}\n\nexport enum ActiveTab {\n SORT = 'sort',\n FILTER = 'filter',\n GROUP = 'group',\n COLUMNS = 'columns'\n}\n\nexport interface SettingsColumnsDialogColumn {\n label: string;\n key: string;\n name: string;\n visible: boolean;\n}\n\nexport interface SettingsColumnsDialogData extends TableDialogCommonData {\n columns: SettingsColumnsDialogColumn[];\n}\n\nexport interface SettingsColumnsDialogResultData {\n visibleColumns: string[];\n columnOrder: string[];\n columns: SettingsColumnsDialogColumn[];\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n input,\n Input,\n OnInit,\n output,\n signal,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { CollectionFilter, FilterType, TableColumn } from '@fundamental-ngx/platform/table-helpers';\nimport { shallowEqual } from 'fast-equals';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\nimport { ACTIVE_STEP, FiltersDialogData, FiltersDialogResultData } from '../table-view-settings.model';\nimport { FilterStepComponent } from './filter-step.component';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\nimport { FiltersListStepComponent, SelectableFilter } from './filters-list-step.component';\n\n@Component({\n selector: 'fdp-filters',\n templateUrl: './filters.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgTemplateOutlet, FiltersListStepComponent, FilterStepComponent]\n})\nexport class FiltersComponent implements AfterViewInit, OnInit {\n /** Data for the filtering dialog */\n @Input() set filteringData(value: FiltersDialogData) {\n this._initializeFilterData(value);\n }\n\n /** @hidden Heading level */\n headingLevel = input<number>(2);\n\n /** Initial set of filters applied */\n initialFilters = input<CollectionFilter[]>([]);\n\n /** Emits when the active filter step view changes */\n activeFilterStepViewChange = output<FiltersViewStep>();\n\n /** Emits the final result of filter changes */\n filterChange = output<FiltersDialogResultData>();\n\n /** Emits whether the reset button should be enabled */\n resetAvailabilityChange = output<boolean>();\n\n /** Signal to hold currently applied filter rules */\n filterBy = signal<CollectionFilter[]>([]);\n\n /** Signal for table columns, used to retrieve the column key */\n columns = signal<TableColumn[]>([]);\n\n /** Signal for declared filter options */\n viewSettingsFilters = signal<TableViewSettingsFilterComponent[]>([]);\n\n /** Signal to track the currently selected filter step */\n activeStep = signal<ACTIVE_STEP>(ACTIVE_STEP.SELECT_FILTER);\n\n /** Signal to track the currently selected filter */\n activeFilter = signal<Nullable<TableViewSettingsFilterComponent>>(null);\n\n /** Signal to track the column key associated with the active filter */\n activeFilterColumnKey = signal<Nullable<string>>(null);\n\n /** Signal for the currently active filter step view */\n activeFilterStepView = signal<Nullable<FiltersViewStep>>(null);\n\n /** Reference to the available steps */\n readonly ACTIVE_STEP = ACTIVE_STEP;\n\n /** hidden */\n constructor(private readonly _cd: ChangeDetectorRef) {}\n\n /** hidden */\n ngOnInit(): void {\n this._compareSelectedFilters();\n }\n\n /** hidden */\n ngAfterViewInit(): void {\n this._cd.detectChanges();\n }\n\n /** Setter for the active filter step view to trigger updates */\n @ViewChild(FILTERS_VIEW_STEP_TOKEN)\n set setActiveFilterStepView(view: FiltersViewStep) {\n this.activeFilterStepView.set(view);\n this.activeFilterStepViewChange.emit(view);\n this._cd.detectChanges();\n }\n\n /**\n * Select a filter to drill down and update the active filter step.\n * @param filter The filter to be selected and applied.\n */\n selectFilter(filter: SelectableFilter): void {\n this.activeStep.set(ACTIVE_STEP.FILTER);\n const selectedFilter = filter as TableViewSettingsFilterComponent;\n this.activeFilter.set(selectedFilter);\n const columnKey = this.columns().find(({ name }) => name === selectedFilter.column)?.key || null;\n this.activeFilterColumnKey.set(columnKey);\n this._cd.detectChanges();\n }\n\n /** Navigate back to the top-level filters list */\n goToFilters(): void {\n this.activeStep.set(ACTIVE_STEP.SELECT_FILTER);\n this.activeFilter.set(null);\n }\n\n /**\n * Apply changes to the selected filter and emit the filter change event.\n * @param filter The filter to apply\n * @param filterComponent The component for the filter (provides type info)\n */\n applyFilter(filter: CollectionFilter, filterComponent: Nullable<TableViewSettingsFilterComponent>): void {\n if (!filter) {\n return;\n }\n\n // Update the filter by removing the previous filter for the field\n this.filterBy.set(this.filterBy().filter(({ field }) => field !== filter.field));\n\n if (!filterComponent) {\n return;\n }\n const filterIsNotEmpty =\n filterComponent.type === FilterType.CUSTOM ||\n (filterComponent.type === FilterType.MULTI && filter.value?.length) ||\n (filterComponent.type === FilterType.SINGLE && filter.value?.length);\n\n // Add the new filter if it has a value\n if (filterIsNotEmpty) {\n this.filterBy.set([...this.filterBy(), filter]);\n }\n\n this._compareSelectedFilters();\n this.filterChange.emit({ filterBy: this.filterBy() });\n this._cd.detectChanges();\n }\n\n /**\n * Private method to initialize filter data on component initialization.\n * Extracts the initial filter values and table column data.\n */\n private _initializeFilterData(filteringData: FiltersDialogData): void {\n if (filteringData) {\n this.filterBy.set([...filteringData.filterBy]);\n this.viewSettingsFilters.set(filteringData.viewSettingsFilters);\n this.columns.set(filteringData.columns);\n }\n }\n\n /**\n * Private method to compare the current selected filters against the initial state.\n * Enables or disables the reset button based on filter state comparison.\n */\n private _compareSelectedFilters(): void {\n if (!shallowEqual(this.initialFilters(), this.filterBy())) {\n this.resetAvailabilityChange.emit(true);\n } else {\n this.resetAvailabilityChange.emit(false);\n }\n }\n}\n","@if (activeFilterStepView()?.bodyTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"activeFilterStepView()?.bodyTemplateRef ?? null\"></ng-container>\n}\n<!-- Keep active step component -->\n@if (activeStep() === ACTIVE_STEP.SELECT_FILTER) {\n <fdp-filters-list-step\n [headingLevel]=\"headingLevel()\"\n [filters]=\"viewSettingsFilters()\"\n (selectFilter)=\"selectFilter($event)\"\n ></fdp-filters-list-step>\n} @else if (activeStep() === ACTIVE_STEP.FILTER) {\n <fdp-filter-step\n [headingLevel]=\"headingLevel()\"\n [columnKey]=\"activeFilterColumnKey()!\"\n [columnName]=\"activeFilter()!.label\"\n [filter]=\"activeFilter()!\"\n [filterBy]=\"filterBy()\"\n (back)=\"goToFilters()\"\n (valueChange)=\"applyFilter($event, activeFilter())\"\n ></fdp-filter-step>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n linkedSignal,\n output,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SortDirection } from '@fundamental-ngx/platform/table-helpers';\nimport { distinctUntilChanged } from 'rxjs';\nimport {\n INITIAL_DIRECTION,\n NOT_GROUPED_OPTION_VALUE,\n SettingsGroupDialogData,\n SettingsGroupDialogResultData\n} from '../table-view-settings.model';\n\nlet groupOrderHeaderUniqueId = 0;\n\n@Component({\n selector: 'fdp-grouping',\n templateUrl: './grouping.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n ListComponent,\n ListGroupHeaderDirective,\n ListTitleDirective,\n ListItemComponent,\n RadioButtonComponent,\n FormsModule,\n FdTranslatePipe\n ]\n})\nexport class GroupingComponent {\n /** Input data for grouping */\n groupingData = input<SettingsGroupDialogData>();\n\n /** @hidden Initial grouping settings */\n initialGrouping = input<Nullable<SettingsGroupDialogResultData>>();\n\n /** Event emitter for group changes */\n groupChange = output<SettingsGroupDialogResultData>();\n\n /** Current selected grouping direction - resets when groupingData changes */\n direction = linkedSignal(() => this.groupingData()?.direction ?? INITIAL_DIRECTION);\n\n /** Current selected grouping field - resets when groupingData changes */\n field = linkedSignal(() => this.groupingData()?.field ?? NOT_GROUPED_OPTION_VALUE);\n\n /** @hidden */\n groupOrderHeaderId = `fdp-table-group-dialog-group-order-header-${groupOrderHeaderUniqueId++}`;\n\n /** @hidden */\n groupByHeaderId = `fdp-table-group-dialog-group-by-header-${groupOrderHeaderUniqueId++}`;\n\n /** Constants for grouping directions */\n readonly SORT_DIRECTION = SortDirection;\n\n /** Constant for 'Not grouped' option */\n readonly NOT_GROUPED_OPTION_VALUE = NOT_GROUPED_OPTION_VALUE;\n\n /** Table columns available for grouping */\n columns = computed(() => this.groupingData()?.columns ?? []);\n\n /** Event emitter for reset availability changes */\n resetAvailabilityChange = outputFromObservable(\n toObservable(\n computed(() => {\n const initial = this.initialGrouping();\n if (!initial) {\n return false;\n }\n return this.direction() !== initial.direction || this.field() !== initial.field;\n })\n ).pipe(distinctUntilChanged())\n );\n\n /**\n * Handle changes to grouping direction.\n * @param direction New grouping direction.\n */\n _groupOrderChange(direction: SortDirection): void {\n this.direction.set(direction);\n this._onModelChange();\n }\n\n /**\n * Handle changes to the grouping field.\n * @param field New grouping field.\n */\n _groupFieldChange(field: string): void {\n this.field.set(field);\n this._onModelChange();\n }\n\n /**\n * Emit group change event.\n * @hidden\n */\n private _onModelChange(): void {\n const result: SettingsGroupDialogResultData = { field: this.field(), direction: this.direction() };\n this.groupChange.emit(result);\n }\n}\n","<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"groupOrderHeaderId\">\n {{ ('platformTable.groupDialogGroupOrderHeader' | fdTranslate)() }}\n </span>\n </legend>\n <ul fd-list [selection]=\"true\" [attr.aria-labelledby]=\"groupOrderHeaderId\">\n <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.ASC\">\n <fd-radio-button\n name=\"sort-order\"\n value=\"asc\"\n state=\"default\"\n [ngModel]=\"direction()\"\n (ngModelChange)=\"_groupOrderChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.groupDialogGroupOrderAsc' | fdTranslate)() }}</span>\n </li>\n <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.DESC\">\n <fd-radio-button\n name=\"sort-order\"\n value=\"desc\"\n state=\"default\"\n [ngModel]=\"direction()\"\n (ngModelChange)=\"_groupOrderChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.groupDialogGroupOrderDesc' | fdTranslate)() }}</span>\n </li>\n </ul>\n</fieldset>\n\n<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"groupByHeaderId\">\n {{ ('platformTable.groupDialogGroupByHeader' | fdTranslate)() }}\n </span>\n </legend>\n <ul fd-list [selection]=\"true\" [attr.aria-labelledby]=\"groupByHeaderId\">\n <li fd-list-item [selected]=\"NOT_GROUPED_OPTION_VALUE === field()\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"NOT_GROUPED_OPTION_VALUE\"\n state=\"default\"\n [ngModel]=\"field()\"\n (ngModelChange)=\"_groupFieldChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.groupDialogNotGroupedLabel' | fdTranslate)() }}</span>\n </li>\n @for (column of columns(); track column) {\n <li fd-list-item [selected]=\"column.key === field()\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"column.key\"\n state=\"default\"\n [ngModel]=\"field()\"\n (ngModelChange)=\"_groupFieldChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ column.label }}</span>\n </li>\n }\n </ul>\n</fieldset>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n linkedSignal,\n output,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CollectionSort, SortDirection } from '@fundamental-ngx/platform/table-helpers';\nimport { distinctUntilChanged } from 'rxjs';\nimport {\n INITIAL_DIRECTION,\n NOT_SORTED_OPTION_VALUE,\n SettingsSortDialogData,\n SettingsSortDialogResultData\n} from '../table-view-settings.model';\n\nlet sortOrderHeaderUniqueId = 0;\nlet sortDialogSortByHeaderUniqueId = 0;\n\n@Component({\n selector: 'fdp-sorting',\n templateUrl: './sorting.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n ListComponent,\n ListGroupHeaderDirective,\n ListTitleDirective,\n ListItemComponent,\n RadioButtonComponent,\n FormsModule,\n FdTranslatePipe\n ]\n})\nexport class SortingComponent {\n /** Input data for sorting */\n sortingData = input<SettingsSortDialogData>();\n\n /** @hidden Initial sorting state */\n initialSorting = input<Nullable<CollectionSort>>();\n\n /** Event emitter for sort changes */\n sortChange = output<SettingsSortDialogResultData>();\n\n /** Current selected sorting direction - resets when sortingData changes */\n direction = linkedSignal(() => this.sortingData()?.direction ?? INITIAL_DIRECTION);\n\n /** Current selected sorting field - resets when sortingData changes */\n field = linkedSignal(() => this.sortingData()?.field ?? NOT_SORTED_OPTION_VALUE);\n\n /** @hidden */\n sortOrderHeaderId = `fdp-table-sort-order-header-${sortOrderHeaderUniqueId++}`;\n\n /** @hidden */\n sortDialogSortByHeaderId = `fdp-table-sort-dialog-sort-by-header-${sortDialogSortByHeaderUniqueId++}`;\n\n /** @hidden Constants for sort direction */\n readonly SORT_DIRECTION = SortDirection;\n\n /** @hidden Constant for 'Not sorted' option value */\n readonly NOT_SORTED_OPTION_VALUE = NOT_SORTED_OPTION_VALUE;\n\n /** Whether disabling sorting is allowed */\n allowDisablingSorting = computed(() => this.sortingData()?.allowDisablingSorting ?? false);\n\n /** Available table columns for sorting */\n columns = computed(() => this.sortingData()?.columns ?? []);\n\n /** Event emitter for reset availability changes */\n resetAvailabilityChange = outputFromObservable(\n toObservable(\n computed(() => {\n const initial = this.initialSorting();\n if (!initial) {\n return false;\n }\n return this.direction() !== initial.direction || this.field() !== initial.field;\n })\n ).pipe(distinctUntilChanged())\n );\n\n /**\n * Handle sort direction changes.\n * @param direction New sorting direction.\n */\n _sortDirectionChange(direction: SortDirection): void {\n this.direction.set(direction);\n this._onModelChange();\n }\n\n /**\n * Handle sort field changes.\n * @param field New sorting field.\n */\n _sortFieldChange(field: string): void {\n this.field.set(field);\n this._onModelChange();\n }\n\n /**\n * Emit changes to the model.\n * @hidden\n */\n private _onModelChange(): void {\n this.sortChange.emit({ direction: this.direction(), field: this.field() });\n }\n}\n","<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"sortOrderHeaderId\">\n {{ ('platformTable.sortDialogSortOrderHeader' | fdTranslate)() }}\n </span>\n </legend>\n <ul fd-list [selection]=\"true\" [attr.aria-labelledby]=\"sortOrderHeaderId\">\n <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.ASC\">\n <fd-radio-button\n name=\"sort-order\"\n value=\"asc\"\n state=\"default\"\n [ngModel]=\"direction()\"\n (ngModelChange)=\"_sortDirectionChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.sortDialogSortOrderAsc' | fdTranslate)() }}</span>\n </li>\n <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.DESC\">\n <fd-radio-button\n name=\"sort-order\"\n value=\"desc\"\n state=\"default\"\n [ngModel]=\"direction()\"\n (ngModelChange)=\"_sortDirectionChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.sortDialogSortOrderDesc' | fdTranslate)() }}</span>\n </li>\n </ul>\n</fieldset>\n\n<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"sortDialogSortByHeaderId\">\n {{ ('platformTable.sortDialogSortByHeader' | fdTranslate)() }}\n </span>\n </legend>\n <ul fd-list [selection]=\"true\" [attr.aria-labelledby]=\"sortDialogSortByHeaderId\">\n @if (allowDisablingSorting()) {\n <li fd-list-item [selected]=\"field() === NOT_SORTED_OPTION_VALUE\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"NOT_SORTED_OPTION_VALUE\"\n state=\"default\"\n [ngModel]=\"field()\"\n (ngModelChange)=\"_sortFieldChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ ('platformTable.sortDialogNotSortedLabel' | fdTranslate)() }}</span>\n </li>\n }\n @for (column of columns(); track column) {\n <li fd-list-item [selected]=\"column.key === field()\">\n <fd-radio-button\n name=\"sort-by\"\n [value]=\"column.key\"\n state=\"default\"\n [ngModel]=\"field()\"\n (ngModelChange)=\"_sortFieldChange($event)\"\n ></fd-radio-button>\n <span fd-list-title>{{ column.label }}</span>\n </li>\n }\n </ul>\n</fieldset>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n linkedSignal,\n output,\n signal,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport {\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { ToolbarComponent, ToolbarItemDirective, ToolbarSpacerDirective } from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent, SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { shallowEqual } from 'fast-equals';\nimport {\n SettingsColumnsDialogColumn,\n SettingsColumnsDialogData,\n SettingsColumnsDialogResultData\n} from '../table-view-settings.model';\n\nexport interface SelectableColumn {\n /** Selected */\n selected: boolean;\n /** Active */\n active: boolean;\n /** Table Column it belongs to */\n column: SettingsColumnsDialogColumn;\n}\n\nconst INITIAL_SEARCH_TEXT = '';\nconst INITIAL_SHOW_ALL_ITEMS = true;\n\nlet columnsHeaderUniqueId = 0;\n\n@Component({\n selector: 'fdp-columns',\n templateUrl: './columns.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n ToolbarComponent,\n SearchFieldComponent,\n ToolbarSpacerDirective,\n ButtonComponent,\n ToolbarItemDirective,\n ListComponent,\n ListGroupHeaderDirective,\n ListItemComponent,\n CheckboxComponent,\n FormsModule,\n ListTitleDirective,\n FdTranslatePipe\n ]\n})\nexport class ColumnsComponent {\n /** Input data for columns configuration */\n columnsData = input<SettingsColumnsDialogData>();\n\n /** @hidden Initial columns state */\n initialColumns = input<Nullable<SettingsColumnsDialogResultData>>();\n\n /** Event emitter for columns changes */\n columnsChange = output<SettingsColumnsDialogResultData>();\n\n /** Event emitter for reset availability changes */\n resetAvailabilityChange = output<boolean>();\n\n /** @hidden All available columns for interacting - resets when columnsData changes */\n protected selectableColumns = linkedSignal<SelectableColumn[]>(() => {\n const data = this.columnsData();\n const allColumns = data?.columns || [];\n const initialCols = allColumns.map(\n (column, index): SelectableColumn => ({\n column,\n selected: column.visible,\n active: index === 0\n })\n );\n // Trigger reset availability check when columnsData changes\n if (initialCols.length > 0) {\n this._compareInitialColumnsNextTick();\n }\n return initialCols;\n });\n\n /** @hidden Search Query */\n protected searchQuery = signal<string>(INITIAL_SEARCH_TEXT);\n\n /** @hidden Show All flag */\n protected showAllItems = signal<boolean>(INITIAL_SHOW_ALL_ITEMS);\n\n /** @hidden filtered columns that are rendered in the list */\n protected filteredColumns = computed(() => {\n const searchQuery = this.searchQuery();\n const showAll = this.showAllItems();\n return this.selectableColumns().filter((item) => {\n const matchesSearchQuery = item.column.label.toLocaleLowerCase().includes(searchQuery.toLocaleLowerCase());\n const matchesShowAll = showAll || item.selected;\n return matchesSearchQuery && matchesShowAll;\n });\n });\n\n /** @hidden Selected columns count */\n protected selectedColumnsCount = computed(() => this.selectableColumns().filter(({ selected }) => selected).length);\n\n /** @hidden Flag to track disabled state for move-up button */\n protected moveUpDisabled = computed(() => this._activeColumnIndexInFilteredList() < 1);\n\n /** @hidden Flag to track disabled state for move-down button */\n protected moveDownDisabled = computed(() => {\n const activeIndex = this._activeColumnIndexInFilteredList();\n const filteredLength = this.filteredColumns().length;\n return activeIndex < 0 || activeIndex >= filteredLength - 1;\n });\n\n /** @hidden */\n protected columnsHeaderId = `fdp-table-columns-header-${columnsHeaderUniqueId++}`;\n\n /** @hidden */\n protected get selectAllDisabled(): boolean {\n return !this.showAllItems() || this.filteredColumns().length === 0;\n }\n\n /** @hidden Index of active column in filtered list */\n private _activeColumnIndexInFilteredList = computed(() => this.filteredColumns().findIndex(({ active }) => active));\n\n /** @hidden */\n protected toggleSelectAll(selectAll: boolean): void {\n this.selectableColumns.update((columns) =>\n columns.map((column) => ({\n ...column,\n selected: selectAll\n }))\n );\n this.onToggleColumn();\n }\n\n /** @hidden */\n protected onToggleColumn(): void {\n this._onModelChange();\n }\n\n /** @hidden */\n protected searchInputChange({ text }: SearchInput): void {\n this.searchQuery.set(text || '');\n }\n\n /** @hidden */\n protected toggleShowAll(): void {\n this.showAllItems.update((val) => !val);\n }\n\n /** @hidden */\n protected setActiveColumn(column: SelectableColumn | null): void {\n this.selectableColumns.update((columns) =>\n columns.map((col) => ({\n ...col,\n active: col === column\n }))\n );\n }\n\n /** @hidden */\n protected moveActiveToTop(event: Event): void {\n this._moveActiveColumn(event, 0);\n }\n\n /** @hidden */\n protected moveActiveToBottom(event: Event): void {\n this._moveActiveColumn(event, this.filteredColumns().length - 1);\n }\n\n /** @hidden */\n protected moveActiveUp(event: Event): void {\n const activeIndex = this._activeColumnIndexInFilteredList();\n this._moveActiveColumn(event, activeIndex - 1, true);\n }\n\n /** @hidden */\n protected moveActiveDown(event: Event): void {\n const activeIndex = this._activeColumnIndexInFilteredList();\n this._moveActiveColumn(event, activeIndex + 1);\n }\n\n /** @hidden */\n protected isReorderColumnButtonShowable(item: SelectableColumn): boolean {\n return item.active && item.selected;\n }\n\n /** @hidden */\n protected filterByColumnKey(index: number, item: SelectableColumn): string {\n return item?.column.key;\n }\n\n /** @hidden Move active column to target index */\n private _moveActiveColumn(event: Event, targetIndex: number, refocusButton = false): void {\n event.stopPropagation();\n event.preventDefault();\n this._moveColumnInFilteredListByIndex(this._activeColumnIndexInFilteredList(), targetIndex);\n\n if (refocusButton) {\n // setTimeout is needed to allow the new button to render for focusing\n setTimeout(() => (event.target as HTMLElement | null)?.focus(), 0);\n }\n }\n\n /** @hidden Build result data from current selectable columns */\n private _buildResultData(columns: SelectableColumn[]): SettingsColumnsDialogResultData {\n return {\n visibleColumns: columns.filter(({ selected }) => selected).map(({ column }) => column.name),\n columnOrder: columns.map(({ column }) => column.name),\n columns: columns.map((selectable) => ({ ...selectable.column, visible: selectable.selected }))\n };\n }\n\n /** @hidden */\n private _moveColumnInFilteredListByIndex(from: number, to: number): void {\n const filteredColumns = this.filteredColumns();\n const { movedItem, replacedItem } = this._moveElementInTheListByIndex(filteredColumns, from, to);\n /**\n * need to reflect analogical movement in the original list\n * with respect to the original list order\n */\n this._moveColumnInSelectableList(movedItem, replacedItem);\n\n this._onModelChange();\n }\n\n /**\n * @hidden\n * Move column in selectable list.\n */\n private _moveColumnInSelectableList(itemToMove: SelectableColumn, targetItem: SelectableColumn): void {\n this.selectableColumns.update((columns) => {\n this._moveElementInTheListByIndex(columns, columns.indexOf(itemToMove), columns.indexOf(targetItem));\n return [...columns];\n });\n }\n\n /**\n * @hidden\n * Move element in the list\n * @return moved item and replaced item.\n */\n private _moveElementInTheListByIndex<T>(\n list: T[],\n fromIndex: number,\n toIndex: number\n ): { movedItem: T; replacedItem: T } {\n const listLength = list.length;\n\n fromIndex = Math.min(Math.max(fromIndex, 0), listLength - 1);\n toIndex = Math.min(Math.max(toIndex, 0), listLength - 1);\n\n const replacedItem = list[toIndex];\n const movedItem = list.splice(fromIndex, 1)[0];\n\n list.splice(toIndex, 0, movedItem);\n\n return { movedItem, replacedItem };\n }\n\n /**\n * Emit changes to the model and compare with initial columns.\n * @hidden\n */\n private _onModelChange(): void {\n const result = this._buildResultData(this.selectableColumns());\n this.columnsChange.emit(result);\n\n const initialColumns = this.initialColumns();\n if (initialColumns) {\n const isChanged =\n !shallowEqual(result.visibleColumns, initialColumns.visibleColumns) ||\n !shallowEqual(result.columnOrder, initialColumns.columnOrder);\n this.resetAvailabilityChange.emit(isChanged);\n }\n }\n\n /**\n * Compare initial columns with current state on next tick.\n * Scheduled via setTimeout to avoid triggering during signal computation.\n * @hidden\n */\n private _compareInitialColumnsNextTick(): void {\n setTimeout(() => {\n const initialColumns = this.initialColumns();\n if (!initialColumns) {\n return;\n }\n\n const current = this._buildResultData(this.selectableColumns());\n const isChanged =\n !shallowEqual(current.visibleColumns, initialColumns.visibleColumns) ||\n !shallowEqual(current.columnOrder, initialColumns.columnOrder);\n\n if (isChanged) {\n this.resetAvailabilityChange.emit(true);\n }\n }, 0);\n }\n}\n","<fieldset>\n <legend fd-list-group-header>\n <span fd-list-title [attr.id]=\"columnsHeaderId\">\n {{ ('platformTable.P13ColumnsDialogHeader' | fdTranslate)() }}\n </span>\n </legend>\n <fd-toolbar>\n <fdp-search-field\n [placeholder]=\"('platformTable.P13ColumnsDialogSearchPlaceholder' | fdTranslate)()\"\n [inputText]=\"searchQuery()\"\n [suggestions]=\"[]\"\n (inputChange)=\"searchInputChange($event)\"\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <button fd-toolbar-item fd-button fdType=\"transparent\" (click)=\"toggleShowAll()\">\n @if (showAllItems() === true) {\n {{ ('platformTable.P13ColumnsDialogsShowSelected' | fdTranslate)() }}\n } @else {\n {{ ('platformTable.P13ColumnsDialogShowAll' | fdTranslate)() }}\n }\n </button>\n </fd-toolbar>\n <ul fd-list [selection]=\"true\" aria-multiselectable=\"true\" [attr.aria-labelledby]=\"columnsHeaderId\">\n <li\n fd-list-item\n (focus)=\"setActiveColumn(null)\"\n [selected]=\"selectedColumnsCount() === selectableColumns().length\"\n >\n <fd-checkbox\n [ngModel]=\"selectedColumnsCount() === selectableColumns().length\"\n (ngModelChange)=\"toggleSelectAll($event)\"\n [disabled]=\"selectAllDisabled\"\n ></fd-checkbox>\n <span fd-list-title>\n {{\n (\n 'platformTable.P13ColumnsDialogSelectAll'\n | fdTranslate\n : {\n selectedColumnsCount: selectedColumnsCount(),\n selectableColumnsCount: selectableColumns().length\n }\n )()\n }}\n </span>\n </li>\n @for (item of filteredColumns(); track filterByColumnKey($index, item)) {\n <li\n fd-list-item\n [preventClick]=\"true\"\n [class.fd-select-item--selected]=\"item.selected\"\n [selected]=\"item.selected\"\n [class.fd-select-item--active]=\"item.active\"\n (focus)=\"setActiveColumn(item)\"\n >\n <fd-checkbox [(ngModel)]=\"item.selected\" (ngModelChange)=\"onToggleColumn()\"></fd-checkbox>\n <span fd-list-title>\n {{ item.column.label }}\n </span>\n\n <!-- Active Button Movement -->\n @if (isReorderColumnButtonShowable(item)) {\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"collapse-group\"\n [disabled]=\"moveUpDisabled()\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n (click)=\"moveActiveToTop($event)\"\n (keydown.enter)=\"moveActiveToTop($event)\"\n ></button>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-up\"\n [disabled]=\"moveUpDisabled()\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n (click)=\"moveActiveUp($event)\"\n (keydown.enter)=\"moveActiveUp($event)\"\n ></button>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-down\"\n [disabled]=\"moveDownDisabled()\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n (click)=\"moveActiveDown($event)\"\n (keydown.enter)=\"moveActiveDown($event)\"\n ></button>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"expand-group\"\n [disabled]=\"moveDownDisabled()\"\n [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n [title]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n (click)=\"moveActiveToBottom($event)\"\n (keydown.enter)=\"moveActiveToBottom($event)\"\n ></button>\n }\n </li>\n }\n </ul>\n</fieldset>\n","import { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, signal } from '@angular/core';\nimport { InitialFocusDirective, Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n DialogRef\n} from '@fundamental-ngx/core/dialog';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { IconTabBarComponent, IconTabBarItem, IconTabBarTabComponent } from '@fundamental-ngx/platform/icon-tab-bar';\nimport { CollectionFilter, CollectionSort, Table } from '@fundamental-ngx/platform/table-helpers';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\nimport { ColumnsComponent } from '../columns/columns.component';\nimport { FiltersViewStep } from '../filtering/filters-active-step';\nimport { FiltersComponent } from '../filtering/filters.component';\nimport { GroupingComponent } from '../grouping/grouping.component';\nimport { SortingComponent } from '../sorting/sorting.component';\nimport {\n ActiveTab,\n FiltersDialogData,\n FiltersDialogResultData,\n INITIAL_DIRECTION,\n NOT_GROUPED_OPTION_VALUE,\n NOT_SORTED_OPTION_VALUE,\n SettingsColumnsDialogData,\n SettingsColumnsDialogResultData,\n SettingsGroupDialogData,\n SettingsGroupDialogResultData,\n SettingsSortDialogData,\n SettingsSortDialogResultData\n} from '../table-view-settings.model';\n\n@Component({\n selector: 'fdp-settings-dialog-settings',\n providers: [{ provide: RESETTABLE_TOKEN, useExisting: forwardRef(() => SettingsDialogComponent) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n BarLeftDirective,\n BarElementDirective,\n BarRightDirective,\n ResetButtonComponent,\n CdkScrollable,\n DialogBodyComponent,\n DialogFooterComponent,\n FdTranslatePipe,\n SortingComponent,\n FiltersComponent,\n GroupingComponent,\n ColumnsComponent,\n NgTemplateOutlet,\n TemplateDirective,\n TitleComponent,\n ButtonBarComponent,\n InitialFocusDirective,\n IconTabBarComponent,\n IconTabBarTabComponent\n ],\n templateUrl: './settings-dialog.component.html'\n})\nexport class SettingsDialogComponent implements Resettable {\n /** Data for sorting */\n sortingData = signal<Nullable<SettingsSortDialogData>>(null);\n\n /** Data for filtering */\n filteringData = signal<Nullable<FiltersDialogData>>(null);\n\n /** Data for grouping */\n groupingData = signal<Nullable<SettingsGroupDialogData>>(null);\n\n /** Data for columns */\n columnsData = signal<Nullable<SettingsColumnsDialogData>>(null);\n\n /** The active tab to display ('sort', 'filter', 'group', or 'columns') */\n activeTab = signal<Nullable<ActiveTab>>(null);\n\n /** Flag indicating whether the subheader should be shown */\n showSubheader = signal<boolean>(false);\n\n /** Heading level of the dialog header. */\n headingLevel: number;\n\n /** Current step component to render for filtering */\n activeFilterStepView = signal<Nullable<FiltersViewStep>>(null);\n\n /** Signal to track reset availability */\n readonly isResetAvailable$ = signal(false);\n\n /** @hidden Initial sorting configuration */\n _initialSorting = signal<Nullable<CollectionSort>>(null);\n\n /** @hidden Initial filter configurations */\n _initialFilters = signal<CollectionFilter[]>([]);\n\n /** @hidden Initial grouping configurations */\n _initialGrouping = signal<Nullable<SettingsGroupDialogResultData>>(null);\n\n /** @hidden Initial columns configurations */\n _initialColumns = signal<Nullable<SettingsColumnsDialogResultData>>(null);\n\n /** @hidden */\n protected showColumns = false;\n\n /** @hidden Expose ActiveTab enum to template */\n protected readonly ActiveTab = ActiveTab;\n\n /** @hidden Pending columns changes (not applied to signal to avoid triggering child effects) */\n private _pendingColumnsChanges: Nullable<SettingsColumnsDialogResultData> = null;\n\n /** @hidden Tracks reset availability per tab */\n private _resetAvailabilityByTab = signal<Record<string, boolean>>({});\n\n /**\n * Constructor that initializes dialog data and sets initial values for sorting, filtering, grouping, and columns.\n */\n constructor(\n private readonly dialogRef: DialogRef<{\n sortingData: Nullable<SettingsSortDialogData>;\n filteringData: Nullable<FiltersDialogData>;\n groupingData: Nullable<SettingsGroupDialogData>;\n columnsData: Nullable<SettingsColumnsDialogData>;\n headingLevel: 1 | 2 | 3 | 4 | 5 | 6;\n allowColumnConfiguration: boolean;\n }>,\n private readonly _table: Table\n ) {\n const data = this.dialogRef.data;\n this.sortingData.set(data.sortingData);\n this.filteringData.set(data.filteringData);\n this.groupingData.set(data.groupingData);\n this.showColumns = data.allowColumnConfiguration;\n if (this.showColumns) {\n this.columnsData.set(data.columnsData);\n this._setInitialColumns();\n }\n this.headingLevel = data.headingLevel;\n this.activeTab.set(this._getInitialActiveTab());\n this._shouldRenderSubheader();\n this._setInitialSorting();\n this._setInitialFilters();\n this._setInitialGrouping();\n }\n\n /**\n * Confirm the dialog action and close the dialog, returning updated settings data.\n */\n confirm(): void {\n const columnsData = this._pendingColumnsChanges\n ? { columns: this._pendingColumnsChanges.columns }\n : this.columnsData();\n\n this.dialogRef.close({\n sortingData: this.sortingData(),\n filteringData: this.filteringData(),\n groupingData: this.groupingData(),\n columnsData\n });\n }\n\n /**\n * Cancel the dialog and close it without saving any changes.\n */\n cancel(): void {\n this.dialogRef.close(null);\n }\n\n /**\n * Reset the settings based on the currently active tab (sort, filter, group, columns).\n */\n reset(): void {\n if (this.activeTab() === ActiveTab.SORT && this.sortingData()) {\n this.sortingData.set({\n ...this.sortingData()!,\n field: this._initialSorting()!.field,\n direction: this._initialSorting()!.direction\n });\n }\n if (this.activeTab() === ActiveTab.FILTER && this.filteringData()) {\n this.filteringData.set({\n ...this.filteringData()!,\n filterBy: this._initialFilters()\n });\n }\n if (this.activeTab() === ActiveTab.GROUP && this.groupingData()) {\n this.groupingData.set({\n ...this.groupingData()!,\n field: this._initialGrouping()!.field,\n direction: this._initialGrouping()!.direction\n });\n }\n if (this.activeTab() === ActiveTab.COLUMNS && this.columnsData()) {\n const initialColumns = this._initialColumns();\n if (initialColumns) {\n // Reset columns to initial state (both order and visibility)\n this.columnsData.set({\n ...this.columnsData()!,\n columns: initialColumns.columns\n });\n }\n this._pendingColumnsChanges = initialColumns;\n }\n this.updateResetAvailability(this.activeTab()!, false);\n }\n\n /**\n * Handle sort change event and update sorting data.\n * @param event Updated sorting data.\n */\n onSortChange(event: SettingsSortDialogResultData): void {\n this.sortingData.set({\n ...this.sortingData()!,\n field: event.field,\n direction: event.direction\n });\n }\n\n /**\n * Handle filter change event and update filtering data.\n * @param event Updated filtering data.\n */\n onFilterChange(event: FiltersDialogResultData): void {\n this.filteringData.set({\n ...this.filteringData()!,\n filterBy: event.filterBy\n });\n }\n\n /**\n * Handle group change event and update grouping data.\n * @param event Updated grouping data.\n */\n onGroupChange(event: SettingsGroupDialogResultData): void {\n this.groupingData.set({\n ...this.groupingData()!,\n field: event.field,\n direction: event.direction\n });\n }\n\n /**\n * Handle columns change event and update columns data.\n * Store pending changes without updating the signal to avoid triggering child effects.\n * @param event Updated columns data.\n */\n onColumnsChange(event: SettingsColumnsDialogResultData): void {\n this._pendingColumnsChanges = event;\n }\n\n /**\n * Update the active filter step view when a change occurs.\n * @param event The new active filter step view.\n */\n onActiveFilterStepViewChange(event: FiltersViewStep): void {\n this.activeFilterStepView.set(event);\n }\n\n /**\n * Handle tab selection changes from the icon tab bar.\n * @param event The selected tab item.\n */\n protected onTabSelected(event: IconTabBarItem): void {\n // Map tab index to ActiveTab enum based on which tabs are rendered\n // The order is: columns (if showColumns), sort, filter, group\n const tabOrder: ActiveTab[] = [];\n if (this.columnsData() && this.showColumns) {\n tabOrder.push(ActiveTab.COLUMNS);\n }\n if (this.sortingData()) {\n tabOrder.push(ActiveTab.SORT);\n }\n if (this.filteringData()) {\n tabOrder.push(ActiveTab.FILTER);\n }\n if (this.groupingData()) {\n tabOrder.push(ActiveTab.GROUP);\n }\n\n const selectedTab = tabOrder[event.index];\n if (selectedTab) {\n this.activeTab.set(selectedTab);\n this.updateResetAvailability();\n }\n }\n\n /**\n * Update reset availability for a specific tab or the currently active tab.\n * @param tab Optional tab to update. If provided, updates that specific tab and the global state if it's active.\n * If not provided, updates the global state based on the currently active tab.\n * @param available Whether reset is available (only used when tab is provided).\n */\n protected updateResetAvailability(tab?: ActiveTab, available?: boolean): void {\n if (tab !== undefined && available !== undefined) {\n // Update tracking for the specific tab\n this._resetAvailabilityByTab.update((state) => ({ ...state, [tab]: available }));\n\n // If this is the active tab, update the global reset availability\n if (this.activeTab() === tab) {\n this.isResetAvailable$.set(available);\n }\n } else {\n // Update global reset availability based on the currently active tab\n const currentTab = this.activeTab();\n if (currentTab) {\n const tabAvailable = this._resetAvailabilityByTab()[currentTab] ?? false;\n this.isResetAvailable$.set(tabAvailable);\n }\n }\n }\n\n /**\n * Determine the initial active tab based on available data.\n * @returns The name of the active tab to display.\n */\n private _getInitialActiveTab(): Nullable<ActiveTab> {\n if (this.columnsData()) {\n return ActiveTab.COLUMNS;\n } else if (this.sortingData()) {\n return ActiveTab.SORT;\n } else if (this.filteringData()) {\n return ActiveTab.FILTER;\n } else if (this.groupingData()) {\n return ActiveTab.GROUP;\n }\n return null;\n }\n\n /**\n * Determine if the subheader should be shown based on the availability of sorting, filtering, grouping, and columns data.\n */\n private _shouldRenderSubheader(): void {\n const validDataCount = [\n this.sortingData(),\n this.filteringData(),\n this.groupingData(),\n this.columnsData()\n ].filter((data) => data !== null).length;\n this.showSubheader.set(validDataCount >= 2);\n }\n\n /**\n * Set initial sorting configuration from the table's state.\n */\n private _setInitialSorting(): void {\n const initialSorting = (this._table.initialState?.initialSortBy || [])[0];\n this._initialSorting.set({\n field: initialSorting?.field ?? NOT_SORTED_OPTION_VALUE,\n direction: initialSorting?.direction ?? INITIAL_DIRECTION\n });\n }\n\n /**\n * Set initial filter configuration from the table's state.\n */\n private _setInitialFilters(): void {\n this._initialFilters.set(this._table.initialState?.initialFilterBy ?? []);\n }\n\n /**\n * Set initial grouping configuration from the table's state.\n */\n private _setInitialGrouping(): void {\n const initialGrouping = (this._table.initialState?.initialGroupBy || [])[0];\n this._initialGrouping.set({\n field: initialGrouping?.field ?? NOT_GROUPED_OPTION_VALUE,\n direction: initialGrouping?.direction ?? INITIAL_DIRECTION\n });\n }\n\n /**\n * Set initial columns configuration from the table's state.\n */\n private _setInitialColumns(): void {\n const allColumns = this._table.getTableColumns();\n const initialVisibleColumns = allColumns.filter((col) => col.visible).map((col) => col.name);\n const columnOrder = allColumns.map((col) => col.name);\n\n // Build initial columns array\n const initialColumnsArray = allColumns.map((col) => ({\n label: col.label,\n key: col.key,\n name: col.name,\n visible: col.visible\n }));\n\n this._initialColumns.set({\n visibleColumns: initialVisibleColumns,\n columnOrder,\n columns: initialColumnsArray\n });\n }\n}\n","<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n @if (activeTab() !== 'filter') {\n <fd-bar-element>\n <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">{{\n ('platformTable.settingsDialogHeader' | fdTranslate)()\n }}</span>\n </fd-bar-element>\n } @else {\n <fd-bar-element>\n @if (activeFilterStepView()?.titleTemplateRef) {\n <ng-container\n [ngTemplateOutlet]=\"activeFilterStepView()?.titleTemplateRef ?? null\"\n ></ng-container>\n }\n </fd-bar-element>\n }\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body disablePaddings>\n @if (showSubheader()) {\n <fdp-icon-tab-bar layoutMode=\"row\" iconTabSize=\"sm\" (iconTabSelected)=\"onTabSelected($event)\">\n @if (columnsData() && showColumns) {\n <fdp-icon-tab-bar-tab [label]=\"('platformTable.toolbarActionColumnsButtonTitle' | fdTranslate)()\">\n <fdp-columns\n [columnsData]=\"columnsData()!\"\n [initialColumns]=\"_initialColumns()\"\n (columnsChange)=\"onColumnsChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.COLUMNS, $event)\"\n ></fdp-columns>\n </fdp-icon-tab-bar-tab>\n }\n @if (sortingData()) {\n <fdp-icon-tab-bar-tab [label]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\">\n <fdp-sorting\n [sortingData]=\"sortingData()!\"\n [initialSorting]=\"_initialSorting()\"\n (sortChange)=\"onSortChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.SORT, $event)\"\n ></fdp-sorting>\n </fdp-icon-tab-bar-tab>\n }\n @if (filteringData()) {\n <fdp-icon-tab-bar-tab [label]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\">\n <fdp-filters\n [headingLevel]=\"headingLevel\"\n [filteringData]=\"filteringData()!\"\n [initialFilters]=\"_initialFilters()\"\n (activeFilterStepViewChange)=\"onActiveFilterStepViewChange($event)\"\n (filterChange)=\"onFilterChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.FILTER, $event)\"\n ></fdp-filters>\n </fdp-icon-tab-bar-tab>\n }\n @if (groupingData()) {\n <fdp-icon-tab-bar-tab [label]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\">\n <fdp-grouping\n [groupingData]=\"groupingData()!\"\n [initialGrouping]=\"_initialGrouping()\"\n (groupChange)=\"onGroupChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.GROUP, $event)\"\n ></fdp-grouping>\n </fdp-icon-tab-bar-tab>\n }\n </fdp-icon-tab-bar>\n } @else {\n @if (columnsData() && showColumns) {\n <fdp-columns\n [columnsData]=\"columnsData()!\"\n [initialColumns]=\"_initialColumns()\"\n (columnsChange)=\"onColumnsChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.COLUMNS, $event)\"\n ></fdp-columns>\n }\n @if (sortingData()) {\n <fdp-sorting\n [sortingData]=\"sortingData()!\"\n [initialSorting]=\"_initialSorting()\"\n (sortChange)=\"onSortChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.SORT, $event)\"\n ></fdp-sorting>\n }\n @if (filteringData()) {\n <fdp-filters\n [headingLevel]=\"headingLevel\"\n [filteringData]=\"filteringData()!\"\n [initialFilters]=\"_initialFilters()\"\n (activeFilterStepViewChange)=\"onActiveFilterStepViewChange($event)\"\n (filterChange)=\"onFilterChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.FILTER, $event)\"\n ></fdp-filters>\n }\n @if (groupingData()) {\n <fdp-grouping\n [groupingData]=\"groupingData()!\"\n [initialGrouping]=\"_initialGrouping()\"\n (groupChange)=\"onGroupChange($event)\"\n (resetAvailabilityChange)=\"updateResetAvailability(ActiveTab.GROUP, $event)\"\n ></fdp-grouping>\n }\n }\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformTable.confirmBtnLabel' | fdTranslate)()\"\n (click)=\"confirm()\"\n ></fd-button-bar>\n <fd-button-bar\n [label]=\"('platformTable.cancelBtnLabel' | fdTranslate)()\"\n fdkInitialFocus\n (click)=\"cancel()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n forwardRef,\n inject,\n Input,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { filter, startWith } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';\nimport {\n CollectionFilter,\n SortDirection,\n Table,\n TableColumn,\n TableDialogCommonData,\n TableState\n} from '@fundamental-ngx/platform/table-helpers';\nimport { SettingsDialogComponent } from './settings-dialog/settings-dialog.component';\nimport { TableViewSettingsFilterComponent } from './table-view-settings-filter.component';\nimport {\n FiltersDialogData,\n SettingsColumnsDialogColumn,\n SettingsColumnsDialogData,\n SettingsGroupDialogData,\n SettingsSortDialogData\n} from './table-view-settings.model';\n\nexport const dialogConfig: DialogConfig = {\n responsivePadding: false,\n verticalPadding: false,\n width: 'auto'\n};\n\nexport interface CombinedTableDialogData {\n sortingData: SettingsSortDialogData | null;\n filteringData: FiltersDialogData | null;\n groupingData: SettingsGroupDialogData | null;\n columnsData: SettingsColumnsDialogData | null;\n}\n\n/**\n * View settings dialog component.\n *\n * Used to link view settings filters options to the grid table.\n *\n * ```html\n * <fdp-table #myTable></fdp-table>\n * ...\n * <fdp-table-view-settings-dialog [table]=\"myTable\">\n * <fdp-table-view-settings-filter\n * column=\"status\"\n * label=\"Status\"\n * type=\"single-select\"\n * values=\"[{value: 'filterValue', label: 'Filter label'}]\">\n * </fdp-table-view-settings-filter>\n * </fdp-table-view-settings-dialog>\n * ```\n * */\n@Component({\n selector: 'fdp-table-view-settings-dialog',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class TableViewSettingsDialogComponent implements AfterViewInit {\n /** Reference to table component. */\n @Input()\n set table(table: Table) {\n this._setTable(table);\n }\n\n get table(): Table {\n return this._table;\n }\n\n /** Whether to allow selecting '(Not sorted)' option in sorting dialog. */\n @Input()\n allowDisablingSorting = true;\n\n /** Heading level of the dialog. */\n @Input()\n headingLevel: 1 | 2 | 3 | 4 | 5 | 6 = 2;\n\n /** Whether to allow the user to configure column show/hide, as well as column order. */\n @Input()\n allowColumnConfiguration = false;\n\n /** @hidden */\n @ContentChildren(forwardRef(() => TableViewSettingsFilterComponent))\n filters: QueryList<TableViewSettingsFilterComponent>;\n\n /** @hidden */\n _table: Table;\n\n /** @hidden */\n _dialogRef: DialogRef<TableDialogCommonData | CombinedTableDialogData, any>;\n\n /** @hidden Stores the last known full column order (visible + hidden) */\n private _lastColumnOrder: SettingsColumnsDialogColumn[] | null = null;\n\n private readonly destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(private readonly _dialogService: DialogService) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._listenToFilters();\n }\n\n /** Open Sort Settings Dialog */\n showViewSettingsDialog(): void {\n const state = this._getTableState();\n const columns = this._getTableColumns();\n\n const sortData: SettingsSortDialogData = {\n columns: columns.filter(({ sortable }) => sortable),\n direction: state.sortBy?.[0]?.direction,\n field: state.sortBy?.[0]?.field,\n allowDisablingSorting: this.allowDisablingSorting\n };\n\n const filterData: FiltersDialogData = {\n columns,\n viewSettingsFilters: this.filters.toArray(),\n filterBy: state?.filterBy\n };\n\n const groupData: SettingsGroupDialogData = {\n columns: columns.filter(({ groupable }) => groupable),\n direction: state.groupBy?.[0]?.direction,\n field: state.groupBy?.[0]?.field\n };\n\n // Get visible columns from table state\n const visibleColumnNames = state.columns || [];\n\n // Use last known column order if available, otherwise use table's natural order\n let allColumns: SettingsColumnsDialogColumn[];\n\n if (this._lastColumnOrder && this._lastColumnOrder.length > 0) {\n // Filter cached columns to only include those that still exist in live column definitions\n const validCachedColumns = this._lastColumnOrder.filter((cachedCol) =>\n columns.some((liveCol) => liveCol.name === cachedCol.name)\n );\n\n // Check if any new columns were added that aren't in the cache\n const newColumns = columns.filter(\n (liveCol) => !validCachedColumns.some((cachedCol) => cachedCol.name === liveCol.name)\n );\n\n // Combine valid cached columns (preserving order) with new columns (appended at end)\n const combinedColumns = [\n ...validCachedColumns.map((col) => ({\n ...col,\n visible: visibleColumnNames.includes(col.name)\n })),\n ...newColumns.map((col) => ({\n label: col.label,\n key: col.key,\n name: col.name,\n visible: visibleColumnNames.includes(col.name)\n }))\n ];\n\n allColumns = combinedColumns;\n } else {\n // First time opening - use table's natural column order\n // Get all columns and determine their current order and visibility\n const allColumnNames = [...visibleColumnNames];\n\n // Add any columns that aren't in the visible list (hidden columns)\n columns.forEach((col) => {\n if (!allColumnNames.includes(col.name)) {\n allColumnNames.push(col.name);\n }\n });\n\n allColumns = allColumnNames\n .map((name) => {\n const col = columns.find((c) => c.name === name);\n if (!col) {\n return null;\n }\n return {\n label: col.label,\n key: col.key,\n name: col.name,\n visible: visibleColumnNames.includes(col.name)\n };\n })\n .filter((col): col is NonNullable<typeof col> => col !== null);\n }\n\n const currentColumnsData: SettingsColumnsDialogData = {\n columns: allColumns\n };\n\n if (this._dialogRef) {\n this._dialogRef.dismiss();\n }\n\n this._dialogRef = this._dialogService.open(\n SettingsDialogComponent,\n {\n ...dialogConfig,\n data: {\n sortingData: sortData.columns.length > 0 ? sortData : null,\n filteringData: filterData.viewSettingsFilters.length > 0 ? filterData : null,\n groupingData: groupData.columns.length > 0 ? groupData : null,\n columnsData: currentColumnsData.columns.length > 0 ? currentColumnsData : null,\n headingLevel: this.headingLevel,\n allowColumnConfiguration: this.allowColumnConfiguration\n }\n },\n this.table.injector\n );\n\n this._dialogRef.afterClosed\n .pipe(\n filter((result) => !!result),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(({ sortingData, filteringData, groupingData, columnsData }) => {\n if (sortingData) {\n this._applySorting(sortingData.field, sortingData.direction);\n }\n if (filteringData) {\n this._applyFiltering(filteringData.filterBy);\n }\n if (groupingData) {\n this._applyGrouping(groupingData.field, groupingData.direction);\n }\n if (columnsData) {\n this._applyColumns(columnsData);\n }\n });\n }\n\n /** @hidden */\n private _listenToFilters(): void {\n this.filters.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.filters.toArray().length > 0) {\n this._table?.showSettingsInToolbar(true);\n }\n });\n }\n\n /** @hidden */\n private _setTable(table: Table): void {\n this._table = table;\n this._subscribeToTable();\n }\n\n /** @hidden */\n private _subscribeToTable(): void {\n if (!this._table) {\n return;\n }\n\n this._table.openTableSortSettings\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.showViewSettingsDialog());\n\n this._table.openTableFilterSettings\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.showViewSettingsDialog());\n\n this._table.openTableGroupSettings\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.showViewSettingsDialog());\n\n this._table.tableColumnsStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((columns: TableColumn[]) => {\n const show =\n columns.some(({ sortable }) => sortable) ||\n columns.some(({ groupable }) => groupable) ||\n this.allowColumnConfiguration;\n this._table?.showSettingsInToolbar(show);\n });\n }\n\n /** @hidden */\n private _getTableState(): TableState {\n return this._table?.getTableState();\n }\n\n /** @hidden */\n private _getTableColumns(): TableColumn[] {\n return this._table?.getTableColumns() || [];\n }\n\n /** @hidden */\n private _applySorting(field: string | null, direction: SortDirection): void {\n this._table?.sort(field ? [{ field, direction }] : []);\n }\n\n /** @hidden */\n private _applyFiltering(filters: CollectionFilter[]): void {\n this._table?.filter(filters);\n }\n\n /** @hidden */\n private _applyGrouping(field: string | null, direction: SortDirection): void {\n this._table?.group(field ? [{ field, direction, showAsColumn: true }] : []);\n }\n\n /** @hidden */\n private _applyColumns(columnsData: SettingsColumnsDialogData): void {\n // Store the full column order (including hidden) so we can restore it on next open\n this._lastColumnOrder = columnsData.columns;\n\n // Get the visible columns in the order specified by the user\n const visibleColumnNames = columnsData.columns.filter((col) => col.visible).map((col) => col.name);\n\n // Use the table's setColumns method which handles both visibility and ordering\n this._table?.setColumns(visibleColumnNames);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { ListComponent, ListItemComponent, ListLinkDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Table, TableDataSourceDirective, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n selector: 'fdp-table-growing-button',\n imports: [ListComponent, ListItemComponent, ListTitleDirective, ListLinkDirective, FdTranslatePipe],\n templateUrl: './table-growing-button.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableGrowingButtonComponent {\n /** Whether to show items count. */\n @Input()\n showItemsCount = false;\n\n /** @hidden */\n readonly _tableService = inject(TableService);\n\n /** @hidden */\n readonly _dataSourceDirective = inject(TableDataSourceDirective);\n\n /** @hidden */\n readonly _table = inject(Table);\n\n /** @hidden */\n _loadMore(): void {\n (this._table as any)._onSpyIntersect(true);\n }\n}\n","<div fd-list role=\"none\">\n @if (_table.loadedRows$() < _dataSourceDirective.totalItems$()) {\n <div\n fd-list-item\n ariaRole=\"none\"\n class=\"fdp-table__growing-button\"\n [growing]=\"true\"\n [style.height]=\"'auto'\"\n [action]=\"true\"\n >\n <a fd-list-link (click)=\"_loadMore()\">\n <div fd-list-title>\n <div\n class=\"fdp-table__growing-button-content\"\n [class.fdp-table__growing-button-content--byline]=\"showItemsCount\"\n >\n @if (!showItemsCount) {\n {{ ('platformTable.loadMore' | fdTranslate)() }}\n } @else {\n <div class=\"fdp-table__growing-button__title\">\n {{ ('platformTable.loadMore' | fdTranslate)() }}\n </div>\n <div class=\"fdp-table__growing-button__subtitle\">\n [ {{ _table.loadedRows$() }} / {{ _dataSourceDirective.totalItems$() }} ]\n </div>\n }\n </div>\n </div>\n </a>\n </div>\n } @else if (_table.loadedRows$() === _dataSourceDirective.totalItems$() && showItemsCount) {\n <li\n fd-list-item\n [style.height]=\"'auto'\"\n ariaRole=\"none\"\n class=\"fdp-table__growing-button-content fdp-table__growing-button-total\"\n >\n <span fd-list-title>\n {{\n (\n 'platformTable.showingBlankOfBlank'\n | fdTranslate: { totalGrowingItemsCount: _table.loadedRows$() }\n )()\n }}\n </span>\n </li>\n }\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { TableCellDirective, TableRowDirective } from '@fundamental-ngx/core/table';\nimport { TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-footer-row]',\n templateUrl: './table-footer-row.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TableCellDirective, NgTemplateOutlet]\n})\nexport class TableFooterRowComponent extends TableRowDirective {\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n}\n","@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n <td class=\"fd-table__cell\" tabindex=\"-1\">\n @if (column?.footerLabel) {\n <span class=\"fd-table__cell--truncate-txt\">\n {{ column.footerLabel }}\n </span>\n } @else if (column?.footerCellTemplate && column.footerCellTemplate !== undefined) {\n <ng-template\n [ngTemplateOutlet]=\"column.footerCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: column }\"\n ></ng-template>\n }\n </td>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n Output,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport {\n FDK_FOCUSABLE_ITEM_DIRECTIVE,\n FDK_FOCUSABLE_LIST_DIRECTIVE,\n FocusableItemDirective,\n Nullable\n} from '@fundamental-ngx/cdk/utils';\nimport { TableCellDirective, TableRowDirective } from '@fundamental-ngx/core/table';\nimport { TableColumn, TableRow, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-group-row]',\n templateUrl: './table-group-row.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n useExisting: TableGroupRowComponent\n }\n ],\n host: {\n role: 'row',\n '[attr.aria-expanded]': 'row.expanded'\n },\n imports: [TableCellDirective, NgTemplateOutlet]\n})\nexport class TableGroupRowComponent<T> extends TableRowDirective implements OnChanges {\n /** Table ID. */\n @Input()\n rowId: string;\n /** Row index. */\n @HostBinding('attr.aria-rowindex')\n @Input()\n index: number;\n\n /** Row height. */\n @HostBinding('style.height.px')\n @Input()\n height: number;\n\n /** Whether the row is draggable. */\n @HostBinding('class.fd-table__row--draggable')\n @Input()\n draggable = false;\n\n /** Table Row. */\n @Input()\n row: TableRow<T>;\n\n /** Key to column mapping. */\n @Input()\n keyToColumnMap: Map<string, TableColumn>;\n\n /** Event emitted when group row expansion state needs to be toggled. */\n @Output()\n toggleGroupRow = new EventEmitter<TableRow<T>>();\n\n /** @hidden */\n _column: Nullable<TableColumn>;\n\n /** @hidden */\n @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n private set _focusableViewCellItems(items: QueryList<FocusableItemDirective>) {\n this.setItems(items.toArray());\n }\n\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('row' in changes || 'keyToColumnMap' in changes) {\n this._column = this.keyToColumnMap.get(this.row.value?.['field']);\n }\n }\n}\n","<td\n fd-table-cell\n class=\"fd-table__cell--group fd-table__cell--expand\"\n tabindex=\"0\"\n role=\"gridcell\"\n [focusable]=\"true\"\n colspan=\"100%\"\n [attr.aria-expanded]=\"row.expanded\"\n [attr.data-nesting-level]=\"row.level + 1\"\n (keydown.enter)=\"toggleGroupRow.emit(row)\"\n (keydown.space)=\"toggleGroupRow.emit(row)\"\n (click)=\"toggleGroupRow.emit(row)\"\n>\n <ng-template [ngTemplateOutlet]=\"tableCellExpandTemplate\"></ng-template>\n</td>\n<!-- Table Cell Expand Template -->\n<ng-template #tableCellExpandTemplate>\n <div class=\"fd-table__expand-wrapper\">\n <span class=\"fd-table__expand\" [class.fd-table__expand--open]=\"row.expanded\" aria-hidden=\"true\"></span>\n @if (_fdpTableService.groupRules$(); as groupRules) {\n <!-- Group row template when no nested groups -->\n @if (groupRules.size === 1) {\n <div class=\"fd-table__text fd-table__text--no-wrap\">\n {{ row.value?.['value'] }} - {{ row.value?.['count'] }}\n </div>\n }\n <!-- Group row template when there are nested groups -->\n @if (groupRules.size !== 1) {\n <div class=\"fd-table__text fd-table__text--no-wrap\">\n <ng-template [ngTemplateOutlet]=\"tableHeaderCellContentTemplate\"></ng-template>:\n {{ row.value?.['value'] }}\n </div>\n }\n }\n </div>\n</ng-template>\n<!-- Column Header Cell Content Template -->\n<ng-template #tableHeaderCellContentTemplate>\n @if (_column) {\n @if (_column.headerCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"_column.headerCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: _column }\"\n ></ng-template>\n } @else {\n <span\n [id]=\"rowId + '-header-cell-' + _column.name\"\n [attr.title]=\"_column.label\"\n class=\"fd-table__cell--truncate-txt\"\n >{{ _column.label }}</span\n >\n }\n }\n</ng-template>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n Pipe,\n PipeTransform,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport {\n DisabledBehaviorDirective,\n FDK_FOCUSABLE_ITEM_DIRECTIVE,\n FDK_FOCUSABLE_LIST_DIRECTIVE,\n FocusableItemDirective,\n RtlService\n} from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport { PopoverTriggerDirective } from '@fundamental-ngx/core/popover';\nimport { TableCellDirective, TableRowDirective, TableStatusIndicatorDirective } from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n ColumnResizableSidePipe,\n PlatformTableCellResizableDirective,\n SelectionCellStylesPipe,\n SelectionMode,\n SelectionModeValue,\n SortDirection,\n TableCellStylesPipe,\n TableColumn,\n TableColumnResizeService,\n TableColumnSortingDirectionPipe,\n TableRowService,\n TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { TableCellHeaderPopoverComponent } from '../table-cell-header-popover/table-cell-header-popover.component';\nimport { TableHeaderCellContentComponent } from '../table-header-cell-content/table-header-cell-content.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-header-row]',\n templateUrl: './table-header-row.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n useExisting: TableHeaderRowComponent\n }\n ],\n host: {\n role: 'row'\n },\n imports: [\n TableCellDirective,\n TableStatusIndicatorDirective,\n DisabledBehaviorDirective,\n CheckboxComponent,\n FormsModule,\n PlatformTableCellResizableDirective,\n NgClass,\n NgStyle,\n PopoverTriggerDirective,\n TableHeaderCellContentComponent,\n TableCellHeaderPopoverComponent,\n FdTranslatePipe,\n SelectionCellStylesPipe,\n TableCellStylesPipe,\n ColumnResizableSidePipe,\n TableColumnSortingDirectionPipe,\n forwardRef(() => IsColumnHasHeaderMenuPipe)\n ],\n // TODO: to be removed after bumping to latest styles and using the class from there\n styles: `\n .fd-table__sr-only {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n width: 1px;\n border: 0;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n white-space: nowrap;\n }\n `\n})\nexport class TableHeaderRowComponent extends TableRowDirective implements OnInit {\n /** Table ID. */\n @Input()\n rowId: string;\n\n /**\n * Whether to fix the table header and footer. Default is true.\n * Note that if the table contains freezable columns, the header and\n * footer will be fixed automatically, regardless of this input value.\n * */\n @Input()\n fixed: boolean;\n\n /**\n * Whether to show selection column.\n */\n @Input()\n isShownSelectionColumn: boolean;\n\n /**\n * Row checked state.\n */\n @Input()\n checkedState: boolean | null;\n\n /**\n * Selection mode.\n */\n @Input()\n selectionMode: SelectionModeValue;\n\n /**\n * Selection column width.\n */\n @Input()\n selectionColumnWidth: number;\n\n /** The column `name` to freeze columns up to and including. */\n @Input()\n freezeColumnsTo: string;\n\n /** Table without horizontal borders. */\n @Input()\n noHorizontalBorders = false;\n\n /** Table without vertical borders. */\n @Input()\n noVerticalBorders = false;\n\n /** Table without borders. */\n @Input()\n noBorders = false;\n\n /** The column `name` to freeze columns after and including. */\n @Input()\n freezeEndColumnsTo: string;\n\n /** @hidden */\n @Input()\n disableSelectionCheckbox = false;\n\n /** @hidden */\n @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n private set _focusableCellItems(items: QueryList<FocusableItemDirective>) {\n this.setItems(items.toArray());\n }\n\n /**\n * @hidden\n * Used to remove the selection column title, to prevent screenreader from reading \"Select All\" when focusing non-header cells\n * */\n readonly selectionColumnHeaderDisableTitle = signal(true);\n\n /** @hidden */\n readonly SELECTION_MODE = SelectionMode;\n\n /** @hidden */\n readonly SORT_DIRECTION = SortDirection;\n\n /** @hidden */\n readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n\n /** @hidden */\n readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n /** @hidden */\n readonly _tableRowService = inject(TableRowService);\n\n /** @hidden */\n protected readonly isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef);\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n this._tableColumnResizeService.markForCheck.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._cdr.detectChanges();\n });\n }\n\n /** @hidden */\n _columnTrackBy(index: number, column: TableColumn): string {\n return column.name;\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'isColumnHasHeaderMenu',\n standalone: true\n})\nexport class IsColumnHasHeaderMenuPipe implements PipeTransform {\n /** @hidden */\n private readonly _fdpTableService = inject(TableService);\n\n /** @hidden */\n transform(column: TableColumn): boolean {\n return (\n column.sortable ||\n column.groupable ||\n column.freezable ||\n column.endFreezable ||\n (column.filterable && !this._fdpTableService._isFilteringFromHeaderDisabled$())\n );\n }\n}\n","@if (_fdpTableService._semanticHighlighting$()) {\n <th\n [class.fd-table__cell--fixed]=\"fixed\"\n class=\"fd-table__cell\"\n [ngClass]=\"{\n 'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n 'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n }\"\n fd-table-status-indicator\n fdkDisabled\n [style.min-width]=\"_fdpTableService._semanticHighlightingColumnWidth$()\"\n [style.max-width]=\"_fdpTableService._semanticHighlightingColumnWidth$()\"\n ></th>\n}\n\n@if (isShownSelectionColumn) {\n <th\n fd-table-cell\n [ngClass]=\"{\n 'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n 'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n }\"\n [focusable]=\"true\"\n [class.fd-table__cell--fixed]=\"fixed\"\n class=\"fd-table__cell--checkbox\"\n [style]=\"\n _contentDensityObserver.contentDensity$()\n | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n \"\n (keydown.enter)=\"\n selectionMode === SELECTION_MODE.MULTIPLE && _tableRowService.toggleAllSelectableRows(!checkedState)\n \"\n (keydown.space)=\"\n selectionMode === SELECTION_MODE.MULTIPLE && _tableRowService.toggleAllSelectableRows(!checkedState);\n $event.preventDefault()\n \"\n (cellFocused)=\"_tableRowService.cellFocused($event)\"\n (mouseenter)=\"selectionColumnHeaderDisableTitle.set(false)\"\n (mouseleave)=\"selectionColumnHeaderDisableTitle.set(true)\"\n (focusin)=\"selectionColumnHeaderDisableTitle.set(false)\"\n (focusout)=\"selectionColumnHeaderDisableTitle.set(true)\"\n [attr.title]=\"\n selectionMode === SELECTION_MODE.SINGLE || selectionColumnHeaderDisableTitle()\n ? null\n : !checkedState\n ? ('platformTable.selectAllCheckboxLabel' | fdTranslate)()\n : ('platformTable.deselectAllCheckboxLabel' | fdTranslate)()\n \"\n [attr.aria-description]=\"\n selectionMode === SELECTION_MODE.SINGLE\n ? null\n : checkedState\n ? ('platformTable.deselectAllCheckboxLongLabel' | fdTranslate)()\n : checkedState === null\n ? ('platformTable.selectAllCheckboxMixedLongLabel' | fdTranslate)()\n : ('platformTable.selectAllCheckboxLongLabel' | fdTranslate)()\n \"\n >\n @if (selectionMode === SELECTION_MODE.MULTIPLE) {\n <fd-checkbox\n tabIndexValue=\"-1\"\n labelClass=\"fd-table__checkbox-label\"\n [fdkDisabled]=\"_fdpTableService.visibleColumnsLength() === 0 || disableSelectionCheckbox\"\n [tristate]=\"true\"\n [tristateSelectable]=\"false\"\n [ngModel]=\"checkedState\"\n (ngModelChange)=\"_tableRowService.toggleAllSelectableRows($event)\"\n ></fd-checkbox>\n }\n </th>\n}\n\n@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n <th\n [focusable]=\"true\"\n role=\"columnheader\"\n [fdpTableCellResizable]=\"\n $index\n | columnResizableSide\n : _fdpTableService.visibleColumnsLength()\n : _fdpTableService._isShownNavigationColumn$()\n \"\n [columnName]=\"column.name\"\n [id]=\"rowId + '__' + column.name\"\n [attr.aria-colindex]=\"$index\"\n [attr.aria-sort]=\"_fdpTableService.sortRules$().get(column.key) | fdpTableColumnSortingDirection\"\n [class.fd-table__cell--non-interactive]=\"column.nonInteractive\"\n [ngClass]=\"[\n 'fdp-table__col--' + column.name,\n column._freezed ? 'fd-table__cell--fixed' : '',\n column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n $last && !_fdpTableService._isShownNavigationColumn$() ? 'is-last-child' : '',\n (column | isColumnHasHeaderMenu) ? 'fd-table__item--clickable' : ''\n ]\"\n [ngStyle]=\"\n column\n | tableCellStyles\n : isRtl()\n : _fdpTableService._semanticHighlightingColumnWidth$()\n : selectionColumnWidth\n : column._freezed\n : column._endFreezed\n : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n : _tableColumnResizeService.getColumnWidthStyle(column.name)\n : _tableColumnResizeService.getNextColumnsWidth(column.name)\n : noBorders\n : noHorizontalBorders\n : noVerticalBorders\n \"\n [fdPopoverTrigger]=\"(column | isColumnHasHeaderMenu) ? tablePopover.popover : null\"\n (cellFocused)=\"_tableRowService.cellFocused($event)\"\n (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n >\n <fdp-table-header-cell-content [id]=\"rowId\" [column]=\"column\" [attr.title]=\"column.label\">\n <!-- Header menu -->\n <fdp-table-cell-header-popover\n #tablePopover\n [disabled]=\"!(column | isColumnHasHeaderMenu)\"\n [columnFrozen]=\"column._freezed || column._endFreezed\"\n [column]=\"column\"\n [columnIndex]=\"$index\"\n [popoverTemplate]=\"(column | isColumnHasHeaderMenu) ? column.headerCellPopoverTemplate : null\"\n [filteringFromHeaderDisabled]=\"_fdpTableService._isFilteringFromHeaderDisabled$()\"\n ></fdp-table-cell-header-popover>\n </fdp-table-header-cell-content>\n </th>\n}\n\n@if (_fdpTableService._isShownNavigationColumn$()) {\n <th\n [ngClass]=\"{\n 'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n 'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n }\"\n class=\"fd-table__cell fdp-table__cell--navigation is-last-child\"\n role=\"columnheader\"\n tabindex=\"-1\"\n >\n <span class=\"fd-table__sr-only\">\n {{ ('platformTable.navigationColumnTitle' | fdTranslate)() }}\n </span>\n </th>\n}\n\n<th\n aria-hidden=\"true\"\n class=\"fd-table__cell fd-table__cell--mock\"\n [class.fd-table__cell--mock-borderless]=\"!_tableColumnResizeService.cellMockVisible$()\"\n fdkDisabled\n></th>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport {\n DisabledBehaviorDirective,\n FDK_FOCUSABLE_ITEM_DIRECTIVE,\n FDK_FOCUSABLE_LIST_DIRECTIVE,\n FocusableItem,\n FocusableItemDirective,\n ValueByPathPipe\n} from '@fundamental-ngx/cdk/utils';\nimport { FormLabelComponent } from '@fundamental-ngx/core/form';\nimport {\n TableCellDirective,\n TableRowDirective,\n TableStatusIndicatorDirective,\n TableTextDirective\n} from '@fundamental-ngx/core/table';\nimport {\n SelectionMode,\n SelectionModeValue,\n TableRow,\n TableService,\n isTreeRow,\n isTreeRowFirstCell\n} from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-popping-row]',\n templateUrl: './table-popping-row.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n useExisting: TablePoppingRowComponent\n }\n ],\n host: {\n role: 'row',\n '[attr.aria-expanded]': '_isTreeRow(row) ? row.expanded : null'\n },\n imports: [\n TableCellDirective,\n DisabledBehaviorDirective,\n TableTextDirective,\n FormLabelComponent,\n NgTemplateOutlet,\n ValueByPathPipe,\n TableStatusIndicatorDirective\n ]\n})\nexport class TablePoppingRowComponent<T> extends TableRowDirective {\n /** Table Row. */\n @Input()\n row: TableRow<T>;\n\n /** Whether the row is selected. */\n @HostBinding('attr.aria-selected')\n @Input()\n checked: boolean | null;\n\n /** Current selection mode. */\n @Input()\n selectionMode: SelectionModeValue;\n\n /** Event emitted when group row expansion state needs to be toggled. */\n @Output()\n toggleGroupRow = new EventEmitter<TableRow<T>>();\n\n /** Event emitted when cell being clicked on. */\n @Output()\n cellClicked = new EventEmitter<{ index: number; row: TableRow<T> }>();\n\n /** @hidden */\n @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n private set _focusableCellItems(items: QueryList<FocusableItemDirective>) {\n this.setItems(items.toArray());\n }\n\n /** @hidden */\n readonly SELECTION_MODE = SelectionMode;\n\n /** @hidden */\n readonly _isTreeRow = isTreeRow;\n\n /** @hidden */\n readonly _isTreeRowFirstCell = isTreeRowFirstCell;\n\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n\n /** Set items programmatically. */\n setItems(items: ReadonlyArray<FocusableItem>): void {\n this._itemsOverride.set(items);\n }\n}\n","@if (_fdpTableService._semanticHighlighting$(); as semanticHighlighting) {\n <td\n class=\"fd-table__cell\"\n fd-table-status-indicator\n [status]=\"row.value[semanticHighlighting]\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></td>\n}\n\n@if (selectionMode !== SELECTION_MODE.NONE) {\n <td class=\"fd-table__cell\" tabindex=\"-1\" aria-hidden=\"true\"></td>\n}\n\n<td\n fd-table-cell\n colspan=\"100%\"\n [attr.data-nesting-level]=\"row.level + 1\"\n [attr.aria-expanded]=\"_isTreeRow(row) ? row.expanded : null\"\n (click)=\"cellClicked.emit({ index: 0, row })\"\n (keydown.enter)=\"_isTreeRowFirstCell(0, row, $event) && toggleGroupRow.emit(row)\"\n [focusable]=\"true\"\n>\n @for (poppingColumn of _fdpTableService.poppingColumns$(); track poppingColumn.name) {\n <div fd-table-text>\n @if (poppingColumn?.label?.length) {\n <label fd-form-label>{{ poppingColumn.label }}:</label>\n }\n\n @if (poppingColumn?.columnCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"poppingColumn.columnCellTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: true, rowIndex: row.index }\"\n ></ng-template>\n } @else {\n {{ row.value | valueByPath: poppingColumn.key }}\n }\n </div>\n }\n</td>\n","import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport { set } from '@fundamental-ngx/cdk/utils';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { InputComponent, PlatformDatePickerComponent, SwitchComponent } from '@fundamental-ngx/platform/form';\nimport { EditableTableCell, TableColumn, TableRow } from '@fundamental-ngx/platform/table-helpers';\n\nlet controlUniqId = 0;\n\n@Component({\n selector: 'fdp-table-editable-cell',\n templateUrl: './table-editable-cell.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: EditableTableCell, useExisting: TableEditableCellComponent }],\n imports: [FormsModule, InputComponent, PlatformDatePickerComponent, SwitchComponent, FdTranslatePipe]\n})\nexport class TableEditableCellComponent implements EditableTableCell {\n /** Table row definition. */\n @Input()\n row: TableRow;\n\n /** Table cell definition. */\n @Input()\n column: TableColumn;\n\n /** Column value. */\n @Input()\n set columnValue(value: any) {\n this._columnValue = value;\n set(this.row.value, this.column.key, value);\n }\n\n get columnValue(): any {\n return this._columnValue;\n }\n\n /** Editable cell form. */\n @ViewChild(NgForm)\n form: NgForm;\n\n /** @hidden */\n _controlUniqName = `input-${controlUniqId++}`;\n\n /** @hidden */\n private _columnValue: any;\n}\n","<form #ngForm>\n @switch (column.dataType) {\n @case ('number') {\n <fdp-input\n [placeholder]=\"('platformTable.editableCellNumberPlaceholder' | fdTranslate)()\"\n [(ngModel)]=\"columnValue\"\n [name]=\"_controlUniqName\"\n type=\"number\"\n ></fdp-input>\n }\n @case ('date') {\n <fdp-date-picker\n type=\"single\"\n [placeholder]=\"('platformTable.editableCellDatePlaceholder' | fdTranslate)()\"\n [name]=\"_controlUniqName\"\n [allowNull]=\"false\"\n [(ngModel)]=\"columnValue\"\n ></fdp-date-picker>\n }\n @case ('boolean') {\n <fdp-switch [(ngModel)]=\"columnValue\" [name]=\"_controlUniqName\"></fdp-switch>\n }\n @default {\n <fdp-input\n [placeholder]=\"('platformTable.editableCellStringPlaceholder' | fdTranslate)()\"\n [(ngModel)]=\"columnValue\"\n [name]=\"_controlUniqName\"\n type=\"text\"\n ></fdp-input>\n }\n }\n</form>\n","import { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { AsyncPipe, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation,\n computed,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport {\n DisabledBehaviorDirective,\n FDK_FOCUSABLE_ITEM_DIRECTIVE,\n FDK_FOCUSABLE_LIST_DIRECTIVE,\n FocusableItemDirective,\n FocusableItemPosition,\n KeyUtil,\n RtlService,\n ValueByPathPipe,\n destroyObservable,\n get,\n uuidv4\n} from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport {\n TableCellDirective,\n TableIconDirective,\n TableRowDirective,\n TableStatusIndicatorDirective\n} from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n ColumnResizableSidePipe,\n EditableTableCell,\n PlatformTableCellResizableDirective,\n SelectionCellStylesPipe,\n SelectionMode,\n SelectionModeValue,\n TableCellStylesPipe,\n TableColumn,\n TableColumnResizeService,\n TableDraggableDirective,\n TableRow,\n TableRowKeyboardDrag,\n TableRowService,\n TableService,\n isTreeRow,\n isTreeRowFirstCell\n} from '@fundamental-ngx/platform/table-helpers';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { TableEditableCellComponent } from '../table-editable-cell/table-editable-cell.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-table-row]',\n templateUrl: './table-row.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n useExisting: TableRowComponent\n }\n ],\n host: {\n role: 'row',\n '[attr.aria-expanded]': '_isTreeRow(row) ? row.expanded : null'\n },\n imports: [\n TableCellDirective,\n TableStatusIndicatorDirective,\n DisabledBehaviorDirective,\n NgStyle,\n NgTemplateOutlet,\n CheckboxComponent,\n FormsModule,\n PlatformTableCellResizableDirective,\n NgClass,\n TableEditableCellComponent,\n TableIconDirective,\n AsyncPipe,\n ValueByPathPipe,\n FdTranslatePipe,\n SelectionCellStylesPipe,\n TableCellStylesPipe,\n ColumnResizableSidePipe,\n IconComponent\n ]\n})\nexport class TableRowComponent<T> extends TableRowDirective implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n /** Row ID. */\n @Input()\n rowId: string;\n\n /** Table Row. */\n @Input()\n row: TableRow<T>;\n\n /** Row index. */\n @Input()\n index: number;\n\n /** Selection mode. */\n @Input()\n selectionMode: SelectionModeValue;\n\n /** Selectable flag key. */\n @Input()\n selectableKey: string;\n\n /** Whether to enable checkbox tristate mode. */\n @Input()\n enableTristateMode: boolean;\n\n /**\n * Whether to fix the table header and footer. Default is true.\n * Note that if the table contains freezable columns, the header and\n * footer will be fixed automatically, regardless of this input value.\n * */\n @Input()\n fixed: boolean;\n\n /** Selection column width. */\n @Input()\n selectionColumnWidth: number;\n\n /** The column `name` to freeze columns up to and including. */\n @Input()\n freezeColumnsTo: string;\n\n /** The column `name` to freeze columns after and including. */\n @Input()\n freezeEndColumnsTo: string;\n\n /**\n * Event emitted when keyboard drag performed.\n */\n @Output()\n keyboardDrag = new EventEmitter<TableRowKeyboardDrag>();\n\n /** @hidden */\n @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n private set _focusableViewCellItems(items: QueryList<FocusableItemDirective>) {\n this.setItems(items.toArray());\n }\n\n /** @hidden */\n @ViewChildren(EditableTableCell)\n private readonly _editableCells: QueryList<EditableTableCell>;\n\n /** @hidden */\n @HostBinding('attr.aria-selected')\n protected get _ariaSelected(): boolean {\n return !!this.row.checked;\n }\n\n /** @hidden */\n _hasRowHeaderColumn$ = computed(() => this._fdpTableService.visibleColumns$().some((c) => c.role === 'rowheader'));\n\n /** @hidden */\n _rowSelectionHelperTextId = `rowSelectionHelper-${uuidv4()}`;\n\n /** @hidden */\n readonly _announceEmptyCell = signal(false);\n\n /** @hidden */\n readonly _isTreeRowFirstCell = isTreeRowFirstCell;\n\n /** @hidden */\n readonly SELECTION_MODE = SelectionMode;\n\n /** @hidden */\n readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n /** @hidden */\n readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n /** @hidden */\n readonly _fdpTableService = inject(TableService);\n\n /** @hidden */\n readonly _tableRowService = inject(TableRowService);\n\n /** @hidden */\n readonly _isTreeRow = isTreeRow;\n\n /** @hidden */\n protected readonly isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n protected readonly navigationIcon = computed(() => (this.isRtl() ? 'slim-arrow-left' : 'slim-arrow-right'));\n\n /** @hidden */\n protected readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _refreshChildRows$ = new Subject<void>();\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef);\n\n /** @hidden */\n private readonly _zone = inject(NgZone);\n\n /** @hidden */\n private readonly _elmRef = inject(ElementRef);\n\n /** @hidden */\n private readonly _dndTableDirective = inject(TableDraggableDirective, {\n optional: true\n });\n\n /** @hidden */\n constructor() {\n super();\n this._tableColumnResizeService.resizeInProgress$\n .pipe(\n switchMap(() => this._tableColumnResizeService.markForCheck),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this._cdr.markForCheck();\n });\n\n this._zone.runOutsideAngular(() => {\n fromEvent<KeyboardEvent>(this._elmRef.nativeElement, 'keydown')\n .pipe(\n filter(() => !!this._dndTableDirective),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((event) => {\n this._onKeyDown(event);\n });\n });\n }\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n this._editableCells.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const cells = this._editableCells.toArray();\n if (cells.length > 0) {\n this._tableRowService.updateEditableCells(this.row, cells);\n } else {\n this._tableRowService.removeEditableCells(this.row);\n }\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('row' in changes) {\n this._listenToRowExpansion();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this._refreshChildRows$.next();\n this._refreshChildRows$.complete();\n this._tableRowService.removeEditableCells(this.row);\n }\n\n /** @hidden */\n _toggleGroupRow(): void {\n this._tableRowService.toggleRow({ type: 'toggleRow', row: this.row });\n }\n\n /** @hidden */\n _toggleSingleSelectableRow(event?: Event): void {\n event?.preventDefault();\n this._tableRowService.toggleRow({ type: 'toggleSingleSelectableRow', row: this.row });\n }\n\n /** @hidden */\n _toggleMultiSelectRow(row: TableRow<T>, event?: Event): void {\n event?.preventDefault();\n this._tableRowService.toggleRow({ ...{ row, event }, ...{ type: 'toggleMultiSelectRow' } });\n }\n\n /** @hidden */\n _columnTrackBy(index: number, column: TableColumn): string {\n return column.name;\n }\n\n /** @hidden */\n _itemFocusedEventAnnouncer = (position: FocusableItemPosition): string => {\n let retVal = `Column ${position.colIndex + 1} of ${position.totalCols}, `;\n let column;\n if (this._fdpTableService?.visibleColumns$) {\n let colIndex = position.colIndex;\n if (this.selectionMode === 'single' || this.selectionMode === 'multiple') {\n colIndex--;\n }\n column = this._fdpTableService.visibleColumns$()[colIndex];\n }\n if (column && (column._freezed || column._endFreezed)) {\n retVal = retVal + 'fixed, ';\n }\n retVal = retVal + `row: ${position.rowIndex + 1} of ${position.totalRows}`;\n if (this._isTreeRow(this.row) || this.row.level > 0) {\n retVal = retVal + ', level ' + (this.row.level + 1);\n }\n return retVal;\n };\n\n /** @hidden */\n _handleCellFocused(\n event: FocusableItemPosition,\n index: number,\n row: TableRow<T>,\n column: TableColumn,\n tableTextContainer: HTMLElement\n ): void {\n this._setAnnounceEmptyCell(row, column, tableTextContainer);\n this._tableRowService.cellFocused(event);\n this._tableRowService.cellActivate(index, row);\n }\n\n /** @hidden */\n protected _handleCellSpaceKey(colIdx: number, tableCellElement: HTMLTableCellElement, $event: Event): void {\n if ($event.target === tableCellElement && isTreeRowFirstCell(colIdx, this.row, $event)) {\n $event.preventDefault();\n this._toggleGroupRow();\n }\n }\n\n /** @hidden */\n private _listenToRowExpansion(): void {\n this._refreshChildRows$.next();\n const refresh = merge(this._refreshChildRows$, destroyObservable(this._destroyRef));\n // Load items only once. Further loading will be covered by the lazy loading functionality.\n this.row?.expanded$\n ?.pipe(\n filter((expanded) => expanded && this.row.children.length === 0),\n takeUntil(refresh)\n )\n .subscribe(() => {\n this._tableRowService.loadChildRows(this.row);\n });\n }\n\n /** @hidden */\n private _onKeyDown(event: KeyboardEvent): void {\n const isArrowDown = KeyUtil.isKeyCode(event, DOWN_ARROW);\n const isArrowUp = KeyUtil.isKeyCode(event, UP_ARROW);\n\n if (!event.altKey) {\n return;\n }\n\n if (!isArrowDown && !isArrowUp) {\n return;\n }\n\n this._dndTableDirective?.dragRowFromKeyboard(\n isArrowDown ? 'down' : 'up',\n event,\n this.index,\n event.shiftKey ? 'group' : 'shift'\n );\n }\n\n /** @hidden */\n private _setAnnounceEmptyCell(row: TableRow<T>, column: TableColumn, tableTextContainer: HTMLElement): void {\n if (row.state !== 'readonly') {\n this._announceEmptyCell.set(false);\n return;\n }\n\n // If cell contains elements with explicit accessible names, don't announce as empty\n if (this._hasAccessibleContent(tableTextContainer)) {\n this._announceEmptyCell.set(false);\n return;\n }\n\n let value: string;\n // For non-column templates (data-driven), always check for empty content.\n const isCellEmptyInNonColumnTemplate =\n !column.columnCellTemplate &&\n (!(value = get(row.value, column.key)) || (typeof value === 'string' && value.trim() === ''));\n\n // For column templates (consumer-provided), check text content by default.\n // Otherwise, determined by consumer by disabling default checking.\n const isCellEmptyInColumnTemplate =\n column.columnCellTemplate && column.announceEmptyCell() && tableTextContainer?.innerText?.trim() === '';\n\n this._announceEmptyCell.set(isCellEmptyInColumnTemplate || isCellEmptyInNonColumnTemplate);\n }\n\n /** @hidden Checks if container has elements with explicit accessible names (aria-label, aria-labelledby) */\n private _hasAccessibleContent(container: HTMLElement): boolean {\n return !!container?.querySelector('[aria-label], [aria-labelledby]');\n }\n}\n","@if (_fdpTableService._semanticHighlighting$(); as semanticHighlighting) {\n <td\n class=\"fd-table__cell\"\n fd-table-status-indicator\n fdkDisabled\n [addDisabledClass]=\"false\"\n [status]=\"row.value[semanticHighlighting]\"\n ></td>\n}\n<!-- hidden text for screenreader -->\n<ng-template #selectionScreenReaderText>\n <span\n aria-hidden=\"true\"\n [attr.id]=\"_rowSelectionHelperTextId\"\n [ngStyle]=\"{\n position: 'absolute !important',\n height: '1px',\n width: '1px',\n overflow: 'hidden',\n clip: 'rect(1px, 1px, 1px, 1px)',\n color: 'transparent',\n display: 'block'\n }\"\n >\n {{ ((row.checked ? 'platformTable.deselectSingleRow' : 'platformTable.selectSingleRow') | fdTranslate)() }}\n </span>\n</ng-template>\n<!-- Row Selection Cell -->\n@if (selectionMode === SELECTION_MODE.SINGLE) {\n @if (row.value[selectableKey] !== false) {\n <td\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [attr.role]=\"_hasRowHeaderColumn$() ? 'rowheader' : 'gridcell'\"\n fd-table-cell\n [focusable]=\"true\"\n [style]=\"\n _contentDensityObserver.contentDensity$()\n | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n \"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n (click)=\"_toggleSingleSelectableRow()\"\n (keydown.enter)=\"_toggleSingleSelectableRow($event)\"\n (keydown.space)=\"_toggleSingleSelectableRow($event)\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n </td>\n } @else {\n <td\n class=\"fd-table__cell--checkbox\"\n role=\"gridcell\"\n fd-table-cell\n fdkDisabled\n [addDisabledClass]=\"false\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n }\n} @else if (selectionMode === SELECTION_MODE.MULTIPLE) {\n @if (row.value[selectableKey] !== false) {\n <td\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n role=\"cell\"\n fd-table-cell\n [focusable]=\"true\"\n (keydown.enter)=\"_toggleMultiSelectRow(row, $event)\"\n (keydown.space)=\"_toggleMultiSelectRow(row, $event)\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n [attr.aria-selected]=\"row.checked\"\n [style]=\"\n _contentDensityObserver.contentDensity$()\n | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n \"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n <fd-checkbox\n tabIndexValue=\"-1\"\n labelClass=\"fd-table__checkbox-label\"\n [tristate]=\"enableTristateMode\"\n [tristateSelectable]=\"false\"\n [ngModel]=\"row.checked$ | async\"\n (ngModelChange)=\"_toggleMultiSelectRow(row)\"\n ></fd-checkbox>\n </td>\n } @else {\n <td\n class=\"fd-table__cell--checkbox\"\n role=\"gridcell\"\n fd-table-cell\n fdkDisabled\n [addDisabledClass]=\"false\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n }\n}\n@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n <td\n #tableCellElement\n fd-table-cell\n [fdpTableCellResizable]=\"\n $index\n | columnResizableSide\n : _fdpTableService.visibleColumnsLength()\n : _fdpTableService._isShownNavigationColumn$()\n \"\n [columnName]=\"column.name\"\n [focusable]=\"true\"\n [attr.role]=\"column.role\"\n [headers]=\"rowId + '__' + column.name\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [ngClass]=\"[\n 'fdp-table__col--' + column.name,\n column._freezed ? 'fd-table__cell--fixed' : '',\n column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n row.isTree && $index === 0 ? 'fd-table__cell--expand' : '',\n $last && !_fdpTableService._isShownNavigationColumn$() ? 'is-last-child' : ''\n ]\"\n [ngStyle]=\"\n column\n | tableCellStyles\n : isRtl()\n : _fdpTableService._semanticHighlightingColumnWidth$()\n : selectionColumnWidth\n : column._freezed\n : column._endFreezed\n : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n : _tableColumnResizeService.getColumnWidthStyle(column.name)\n : _tableColumnResizeService.getNextColumnsWidth(column.name)\n \"\n [attr.aria-expanded]=\"_isTreeRowFirstCell($index, row) ? row.expanded : null\"\n [attr.data-nesting-level]=\"$index === 0 ? row.level + 1 : null\"\n (cellFocused)=\"_handleCellFocused($event, $index, row, column, tableTextContainer)\"\n (focusout)=\"_announceEmptyCell.set(false)\"\n (click)=\"_tableRowService.cellClicked({ index: $index, row })\"\n (keydown.enter)=\"_isTreeRowFirstCell($index, row, $event) && _toggleGroupRow()\"\n (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.space)=\"_handleCellSpaceKey($index, tableCellElement, $event)\"\n [attr.title]=\"\n _isTreeRowFirstCell($index, row) && row.expanded\n ? ('platformTable.collapseRowButtonTitle' | fdTranslate)()\n : _isTreeRowFirstCell($index, row) && !row.expanded\n ? ('platformTable.expandRowButtonTitle' | fdTranslate)()\n : null\n \"\n >\n <div\n [class.fd-table__text]=\"column.applyText\"\n [class.fd-table__text--no-wrap]=\"column.noWrap\"\n [class.fd-table__cell--truncate-txt]=\"column.applyText\"\n [attr.title]=\"\n tableTextContainer.offsetWidth < tableTextContainer.scrollWidth ? tableTextContainer.textContent : null\n \"\n #tableTextContainer\n >\n @if (_isTreeRowFirstCell($index, row)) {\n <span\n class=\"fd-table__expand\"\n [class.fd-table__expand--open]=\"row.expanded$ | async\"\n aria-hidden=\"true\"\n ></span>\n }\n @if (row.state === 'readonly') {\n @if (_announceEmptyCell()) {\n <span\n [ngStyle]=\"{\n position: 'absolute',\n height: '1px',\n width: '1px',\n overflow: 'hidden',\n clip: 'rect(1px, 1px, 1px, 1px)',\n color: 'transparent',\n display: 'block'\n }\"\n >\n {{ ('platformTable.emptyCell' | fdTranslate)() }}\n </span>\n }\n @if (column?.columnCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"column.columnCellTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: false, rowIndex: row.index }\"\n ></ng-template>\n } @else {\n {{ row.value | valueByPath: column.key }}\n }\n } @else {\n @if (column?.editableColumnCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"column.editableColumnCellTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: false, rowIndex: row.index }\"\n ></ng-template>\n } @else {\n <fdp-table-editable-cell\n [row]=\"row\"\n [column]=\"column\"\n [columnValue]=\"row.value | valueByPath: column.key\"\n ></fdp-table-editable-cell>\n }\n }\n </div>\n </td>\n}\n<ng-content></ng-content>\n@if (_fdpTableService._isShownNavigationColumn$()) {\n <td fd-table-cell class=\"fdp-table__cell--navigation is-last-child\" fdkDisabled [addDisabledClass]=\"false\">\n @if (row.navigatable) {\n <fd-icon\n fd-table-icon\n [navigation]=\"true\"\n [glyph]=\"navigationIcon()\"\n class=\"fdp-table__navigation-indicator\"\n [attr.title]=\"('platformTable.rowNavigateButtonTitle' | fdTranslate)()\"\n ></fd-icon>\n }\n </td>\n}\n<td\n aria-hidden=\"true\"\n class=\"fd-table__cell fd-table__cell--mock\"\n [class.fd-table__cell--mock-borderless]=\"!_tableColumnResizeService.cellMockVisible$()\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n></td>\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { SPACE } from '@angular/cdk/keycodes';\nimport {\n AfterViewChecked,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ContentChild,\n ContentChildren,\n effect,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n signal,\n SimpleChanges,\n TrackByFunction,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n DndListDirective,\n DragAndDropModule,\n FDK_FOCUSABLE_GRID_DIRECTIVE,\n FocusableCellPosition,\n FocusableGridDirective,\n IntersectionSpyDirective,\n KeyUtil,\n Nullable,\n range,\n RangeSelector,\n resizeObservable,\n RtlService,\n TabbableElementService,\n uniq\n} from '@fundamental-ngx/cdk/utils';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport {\n ContentDensityMode,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { SkeletonComponent } from '@fundamental-ngx/core/skeleton';\nimport {\n TableComponent as CoreTableComponent,\n TableService as CoreTableService,\n TableComponent as FdTableComponent,\n TableBodyDirective,\n TableCellDirective,\n TableFooterDirective,\n TableHeaderDirective,\n TableRowDirective\n} from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe, resolveTranslationSignalFn } from '@fundamental-ngx/i18n';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { FDP_PRESET_MANAGED_COMPONENT, isJsObject } from '@fundamental-ngx/platform/shared';\nimport {\n applySelectionToChildren,\n buildNewRowSkeleton,\n CollectionFilter,\n CollectionGroup,\n CollectionSort,\n convertObjectsToTableRows,\n convertTreeObjectsToTableRows,\n convertTreeTableRowToFlatList,\n DEFAULT_HIGHLIGHTING_KEY,\n EDITABLE_ROW_SEMANTIC_STATE,\n EditableTableCell,\n FDP_TABLE_DRAGGABLE_DIRECTIVE,\n FDP_TABLE_STATE_DIRECTIVE,\n FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n findRowChildren,\n getFreezableColumns,\n getFreezableEndColumns,\n getRowParents,\n getSelectableRows,\n isRowNavigatable,\n isTableRow,\n isTreeRowFirstCell,\n PlatformTableManagedPreset,\n ROW_HEIGHT,\n RowClassesPipe,\n RowComparator,\n SaveRowsEvent,\n SELECTION_COLUMN_WIDTH,\n SelectionMode,\n SelectionModeValue,\n SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH,\n Table,\n TABLE_COLUMN_MIN_WIDTH,\n TableCellActivateEvent,\n TableColumn,\n TableColumnFreezeEvent,\n TableColumnResizeService,\n TableColumnsChangeEvent,\n TableDataSource,\n TableDataSourceDirective,\n TableDraggable,\n TableFilterChangeEvent,\n TableGroupChangeEvent,\n TableHeaderResizerDirective,\n TableInitialState,\n TablePageChangeEvent,\n TableResponsiveService,\n TableRow,\n TableRowActivateEvent,\n TableRowClass,\n TableRowSelectionChangeEvent,\n TableRowService,\n TableRowToggleOpenStateEvent,\n TableRowType,\n TableScrollable,\n TableScrollableDirective,\n TableScrollDispatcherService,\n TableService,\n TableSortChangeEvent,\n TableState,\n TableVirtualScroll\n} from '@fundamental-ngx/platform/table-helpers';\nimport { shallowEqual } from 'fast-equals';\nimport { fromEvent, Observable, of, Subject, Subscription } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport {\n NoDataWrapperComponent,\n PlatformTableColumnResizerComponent,\n TABLE_TOOLBAR,\n TableAppliedFilter,\n TableToolbarInterface,\n ToolbarContext\n} from './components';\nimport { TableGrowingButtonComponent } from './components/growing-button/table-growing-button.component';\nimport { TableFooterRowComponent } from './components/table-footer-row/table-footer-row.component';\nimport { TableGroupRowComponent } from './components/table-group-row/table-group-row.component';\nimport { TableHeaderRowComponent } from './components/table-header-row/table-header-row.component';\nimport { TablePoppingRowComponent } from './components/table-popping-row/table-popping-row.component';\nimport { TableRowComponent } from './components/table-row/table-row.component';\n\nlet tableUniqueId = 0;\n\n/**\n * The component that represents a table.\n * A table is a set of tabular data. Line items can support data, images and actions.\n * ```html\n * <fdp-table\n * [dataSource]=\"source\"\n * fdCompact\n * selectionMode=\"multiple\"\n * emptyTableMessage=\"No data found\">\n *\n * <fdp-table-toolbar\n * title=\"Order Line Items\"\n * [hideItemCount]=\"false\">\n * </fdp-table-toolbar>\n *\n * <fdp-column\n * name=\"name\"\n * key=\"name\"\n * label=\"Name\"\n * align=\"start\">\n * </fdp-column>\n *\n * <fdp-column\n * name=\"description\"\n * key=\"description\"\n * label=\"Description\">\n * </fdp-column>\n * </fdp-table>\n * ```\n */\n@Component({\n selector: 'fdp-table',\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: Table, useExisting: forwardRef(() => TableComponent) },\n TableRowService,\n TableService,\n CoreTableService,\n TableScrollDispatcherService,\n TableColumnResizeService,\n TableResponsiveService,\n contentDensityObserverProviders({\n supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY, ContentDensityMode.CONDENSED]\n }),\n {\n provide: FDP_PRESET_MANAGED_COMPONENT,\n useExisting: TableComponent\n }\n ],\n hostDirectives: [\n {\n directive: TableDataSourceDirective,\n inputs: ['dataSource', 'childDataSource'],\n\n outputs: [\n 'childDataSourceChanged',\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n 'onDataRequested',\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n 'onDataReceived',\n 'dataSourceChanged',\n 'dataChanged',\n 'isLoading'\n ]\n },\n TableHeaderResizerDirective\n ],\n host: {\n class: 'fdp-table',\n '[class.fdp-table--outer-scroll]': 'outerScroll',\n '[class.fd-table--no-horizontal-borders]': 'noHorizontalBorders || noBorders',\n '[class.fd-table--no-vertical-borders]': 'noVerticalBorders',\n '[class.fd-table--group]': '_isGroupTable$()'\n },\n imports: [\n NgTemplateOutlet,\n BusyIndicatorComponent,\n PlatformTableColumnResizerComponent,\n TableScrollableDirective,\n FocusableGridDirective,\n CoreTableComponent,\n TableHeaderDirective,\n TableHeaderRowComponent,\n TableBodyDirective,\n DragAndDropModule,\n TableGroupRowComponent,\n TableRowComponent,\n TablePoppingRowComponent,\n TableRowDirective,\n TableCellDirective,\n SkeletonComponent,\n IntersectionSpyDirective,\n AsyncPipe,\n FdTranslatePipe,\n RowClassesPipe,\n TableGrowingButtonComponent,\n TableFooterDirective,\n TableFooterRowComponent\n ]\n})\nexport class TableComponent<T = any>\n extends Table<T>\n implements AfterViewInit, OnDestroy, OnChanges, OnInit, AfterViewChecked\n{\n /** Component name used in a Preset-managed component. */\n @Input()\n name = 'platformTable';\n\n /** ID for the Table. */\n @Input()\n @HostBinding('attr.id')\n id = `fdp-table-${tableUniqueId++}`;\n\n /** Whether to allow resizing columns by dragging the column edge with mouse. */\n @Input()\n enableDragResize = true;\n\n /**\n * Whether to fix the table header and footer. Default is true.\n * Note that if the table contains freezable columns, the header and\n * footer will be fixed automatically, regardless of this input value.\n * */\n @Input()\n fixed = true;\n\n /** The column `name` to freeze columns up to and including. */\n @Input()\n freezeColumnsTo: string;\n\n /** The column `name` to freeze columns after and including. */\n @Input()\n freezeEndColumnsTo: string;\n /** Toggle for page scrolling feature. */\n @Input()\n pageScrolling = false;\n /** Whether the table should render growing button at the bottom. */\n @Input()\n showGrowingButton = false;\n /**\n * Whether to show total items amount in growing button text content.\n */\n @Input()\n showItemsCount = false;\n /** Number of items per page. */\n @Input()\n pageSize: Nullable<number>;\n /** Page scrolling threshold in px. */\n @Input()\n pageScrollingThreshold = 80;\n /** Table body height. */\n @Input()\n bodyHeight: string;\n /** Text displayed when table has no items. */\n @Input()\n emptyTableMessage: string;\n /** Text displayed when table has no visible columns. */\n @Input()\n noVisibleColumnsMessage: string;\n /** Table without horizontal borders. */\n @Input()\n noHorizontalBorders = false;\n /** If the table scrolling should happen outside and stick the toolbar and thead */\n @Input({ transform: booleanAttribute })\n outerScroll = false;\n /** Table without vertical borders. */\n @Input()\n set noVerticalBorders(value: boolean) {\n this._noVerticalBorders = value;\n }\n\n get noVerticalBorders(): boolean {\n return this._noVerticalBorders || this.noBorders || this._tableService.poppingColumns$().length > 0;\n }\n\n /** @hidden */\n private _noVerticalBorders = false;\n\n /** Table without borders. */\n @Input()\n noBorders = false;\n /** Table body without any borders, but header with borders. */\n @Input()\n noBodyBorders = false;\n /** Table without outer borders */\n @HostBinding('class.fdp-table--no-outer-border')\n @Input()\n noOuterBorders = false;\n /** Table body without horizontal borders. */\n @Input()\n noBorderX = false;\n /** Table body without vertical borders. */\n @Input()\n noBorderY = false;\n /** Accessor to a children nodes of tree. */\n @Input()\n relationKey: string;\n /** Table row expanded state key. Used to set the initial state of tree row. */\n @Input()\n expandedStateKey: string;\n /** Property key indicating that the row has children accessible via [childDataSource]. */\n @Input()\n hasChildrenKey: string;\n /**\n * Whether row is navigatable.\n * Pass boolean value to set state for the all rows.\n * Pass string value with the key of the row item's field to compute state for every single row.\n */\n @Input()\n rowNavigatable: string | boolean = false;\n /**\n * Whether to highlight navigated row.\n */\n @Input()\n highlightNavigatedRow = false;\n /** Whether table row can be clicked */\n @Input()\n rowsActivable = false;\n /** Value with the key of the row item's field to enable selecting. */\n @Input()\n selectedKey: string;\n /** Value with the key of the row item's field to enable selecting. */\n @Input()\n selectableKey: string;\n /**\n * Tracking function that will be used to check the differences in data changes.\n * Used similarly to `ngFor` `trackBy` function.\n * Accepts a function that takes two parameters, index and item.\n */\n @Input()\n trackBy: TrackByFunction<T>;\n /**\n * An optional function that identifies uniqueness of a particular row.\n * Table component uses it to be able to preserve selection when a data list is changed.\n */\n @Input()\n rowComparator: RowComparator<T>;\n /** String or function to calculate additional rows' CSS classes. */\n @Input()\n rowsClass: TableRowClass<T>;\n /** Used to construct empty row object for editing. */\n @Input()\n editableRowSkeleton: T;\n /** Whether all rows should be collapsed by default after the table is loaded. */\n @Input()\n expandOnInit = false;\n /**\n * Minimum height of the row, required for the virtualScroll,\n * default is 44px in cozy, 32px in compact and 24px in condensed (set automatically)\n */\n @Input()\n rowHeight = ROW_HEIGHT.get(ContentDensityMode.COZY)!;\n /**\n * Minimum height of the popping column when displayed in pop-in mode. Required when using popping columns and virtual scroll.\n */\n @Input()\n secondaryRowHeight: number | undefined;\n /** Event emitted when the current preset configuration has been changed. */\n /**\n * Whether to load previous pages.\n * This option works only when `pageScrolling` is true, and the initial page > 1\n */\n @Input()\n loadPagesBefore = false;\n\n /**\n * Whether or not the header cells should be interactive\n * (have hover and active states)\n * default: false\n */\n @Input()\n nonInteractiveHeader = false;\n\n /** @hidden */\n _selectionMode: SelectionModeValue = SelectionMode.NONE;\n\n /** @hidden */\n @ViewChild(TableHeaderRowComponent)\n _header: TableHeaderRowComponent;\n\n /** Sets selection mode for the table. 'single' | 'multiple' | 'none' */\n @Input()\n set selectionMode(value: SelectionModeValue) {\n this._selectionMode = value;\n this._isSelectionColumnShown = this.selectionMode !== SelectionMode.NONE;\n this._setSelectionColumnWidth();\n }\n\n get selectionMode(): SelectionModeValue {\n return this._selectionMode;\n }\n\n /** @hidden */\n private _enableTristateMode = false;\n\n /**\n * When True, the checked state of each tree item depends on the checked\n * state of its parent or direct child.\n */\n @Input()\n set enableTristateMode(value: boolean) {\n this._enableTristateMode = value;\n }\n\n get enableTristateMode(): boolean {\n return this.isTreeTable && this._enableTristateMode;\n }\n\n /** Value with the key of the row item's field to compute semantic state of the row. */\n @Input()\n set semanticHighlighting(value: string) {\n this._semanticHighlightingKey = value;\n this._setSemanticHighlighting();\n }\n\n get semanticHighlighting(): string {\n if (!this._semanticHighlightingKey && this._forceSemanticHighlighting) {\n return DEFAULT_HIGHLIGHTING_KEY;\n }\n\n return this._semanticHighlightingKey;\n }\n\n /**\n * Whether to force rows to follow 'checked all' state of the table.\n * If true, all new rows that are coming from the dataSource will follow 'checked all' state.\n * If false, row will respect `checkedKey` property to define checked state of itself.\n * Default is false.\n */\n @Input()\n forceCheckedAllState = false;\n\n /**\n * aria-labelledby attribute value for the table.\n */\n @Input()\n ariaLabelledBy: string;\n\n /** The minimum width at which the user can resize a column, in pixels. Default is 50. */\n @Input()\n minimumColumnWidth = TABLE_COLUMN_MIN_WIDTH;\n\n /** Whether to display the table footer. */\n @Input({ transform: booleanAttribute })\n showTableFooter = false;\n\n /**\n * Specifies minimal width of the non-frozen columns.\n * Useful when table has large amount of freezable columns and table still should have some free space available.\n */\n @Input()\n set nonFrozenColumnsMinWidth(value: number) {\n this._listenToFixedColumnsWidth();\n this._nonFrozenColumnsMinWidth = value;\n }\n\n get nonFrozenColumnsMinWidth(): number {\n return this._nonFrozenColumnsMinWidth;\n }\n\n /** @hidden */\n private _nonFrozenColumnsMinWidth = 0;\n\n /** @hidden */\n private _shouldCheckNewRows = false;\n\n /** @hidden */\n private _calculateFrozenColumnRefresh$ = new Subject<void>();\n\n /** @hidden */\n private _defaultBodyHeight = '100%';\n\n /** Event emitted when current preset configuration has been changed. */\n @Output()\n presetChanged = new EventEmitter<PlatformTableManagedPreset>();\n /** Event fired when table selection has changed. */\n @Output()\n readonly rowSelectionChange: EventEmitter<TableRowSelectionChangeEvent<T>> = new EventEmitter<\n TableRowSelectionChangeEvent<T>\n >();\n /** Event fired when table sort order has changed. */\n @Output()\n readonly sortChange: EventEmitter<TableSortChangeEvent> = new EventEmitter<TableSortChangeEvent>();\n /** Event fired when the table filter has changed. */\n @Output()\n readonly filterChange: EventEmitter<TableFilterChangeEvent> = new EventEmitter<TableFilterChangeEvent>();\n /** Event fired when table grouping has changed. */\n @Output()\n readonly groupChange: EventEmitter<TableGroupChangeEvent> = new EventEmitter<TableGroupChangeEvent>();\n /** Event fired when visible columns list has been changed. */\n @Output()\n readonly columnsChange: EventEmitter<TableColumnsChangeEvent> = new EventEmitter<TableColumnsChangeEvent>();\n /** Event emitted when pagination state has been changed. */\n @Output()\n readonly pageChange = new EventEmitter<TablePageChangeEvent>();\n /** Event fired when there is a change in the frozen column. */\n @Output()\n readonly columnFreeze: EventEmitter<TableColumnFreezeEvent> = new EventEmitter<TableColumnFreezeEvent>();\n /** Event fired when group/tree row collapsed/expanded. */\n @Output()\n readonly rowToggleOpenState = new EventEmitter<TableRowToggleOpenStateEvent<T>>();\n /** Event fired when a cell is clicked or focused. */\n @Output()\n readonly cellActivate = new EventEmitter<TableCellActivateEvent<T>>();\n /** Event fired when row navigated. */\n @Output()\n readonly rowActivate = new EventEmitter<TableRowActivateEvent<T>>();\n /** Event fired when row navigated. */\n @Output()\n readonly rowNavigate = new EventEmitter<TableRowActivateEvent<T>>();\n /** Event fired when empty row added. */\n @Output()\n readonly emptyRowAdded = new EventEmitter<void>();\n /** Event fired when save button pressed. */\n @Output()\n readonly save = new EventEmitter<SaveRowsEvent<T>>();\n /** Event fired when cancel button pressed. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n readonly cancel = new EventEmitter<void>();\n /** Event emitted when table body being scrolled. */\n @Output()\n readonly tableScrolled = new EventEmitter<number>();\n /** Event emitted when new rows has been set and rendered. */\n @Output()\n readonly tableRowsSet = new EventEmitter<void>();\n /** Event emitted when all rows being expanded. */\n @Output()\n allRowsExpanded = new EventEmitter<void>();\n /** Event emitted when all rows being collapsed. */\n @Output()\n allRowsCollapsed = new EventEmitter<void>();\n /** Event emitted when a cell is focused. */\n @Output()\n readonly cellFocused = new EventEmitter<any>();\n /** @hidden */\n @ViewChild('tableScrollable')\n readonly tableScrollable: TableScrollable;\n /** @hidden */\n @ViewChild('tableContainer')\n readonly tableContainer: ElementRef<HTMLDivElement>;\n /** @hidden */\n @ViewChild(FdTableComponent, { read: ElementRef })\n readonly table: ElementRef<HTMLDivElement>;\n /** @hidden */\n @ViewChild(FDK_FOCUSABLE_GRID_DIRECTIVE)\n readonly _focusableGrid: FocusableGridDirective;\n /** @hidden */\n @ViewChild('tableBody', { read: ElementRef })\n private readonly _tableBody: ElementRef<HTMLElement>;\n /** @hidden */\n @ViewChild(DndListDirective)\n private readonly _dndDirective: Nullable<DndListDirective<TableRow>>;\n /** @hidden */\n @ViewChild('tableScrollMockContainer')\n readonly tableScrollMockContainer: ElementRef<HTMLDivElement>;\n /** @hidden */\n @ViewChild('tableBody', { read: ElementRef })\n readonly tableBody: ElementRef<HTMLElement>;\n /** @hidden */\n @ContentChildren(TableColumn)\n readonly columns: QueryList<TableColumn>;\n /** @hidden */\n @ContentChildren(EditableTableCell, { descendants: true })\n readonly customEditableCells: QueryList<EditableTableCell>;\n /** @hidden */\n @ContentChild(TABLE_TOOLBAR)\n readonly tableToolbar: TableToolbarInterface;\n /** @hidden */\n @ContentChild(NoDataWrapperComponent)\n readonly _noDataWrapper: Nullable<NoDataWrapperComponent>;\n\n /** Total loaded items. */\n loadedRows$ = signal(0);\n\n /** @hidden */\n hoveredRowIndex$ = signal<Nullable<number>>(null);\n\n /** @hidden */\n get initialSortBy(): CollectionSort[] {\n return this.initialState?.initialSortBy ?? [];\n }\n\n /**\n * @hidden\n * verify if the bodyheight provided is valid in percentage or pixels\n */\n get isBodyHeightValid(): boolean {\n const height = this.bodyHeight;\n\n if (height) {\n return (\n (height.endsWith('px') && this._isValidInteger(height.split('px')[0])) ||\n (height.endsWith('%') && this._isValidInteger(height.split('%')[0]))\n );\n } else {\n return false;\n }\n }\n\n /**\n * @hidden\n * if the bodyHeight is valid, then set that as value as body height for table\n * else set default body height for table as 100%\n */\n get tableBodyHeight(): string {\n return this.isBodyHeightValid ? this.bodyHeight : this._defaultBodyHeight;\n }\n\n /**\n * @hidden\n * Columns to be rendered in the template\n */\n get _visibleColumns(): TableColumn[] {\n return this._tableService.visibleColumns$();\n }\n\n /** @hidden */\n get isTreeTable(): boolean {\n return !!this._dndTableDirective?.isTreeTable;\n }\n\n /** @hidden */\n get enableRowReordering(): boolean {\n return !!this._dndTableDirective?.enableRowReordering;\n }\n\n /** Whether the table rows are draggable. */\n get isDraggable(): boolean {\n return !!this._dndTableDirective?.isTreeTable && !!this._dndTableDirective?.enableRowReordering;\n }\n\n /** @hidden */\n get _semanticHighlightingColumnWidth(): number {\n return this.semanticHighlighting ? SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH : 0;\n }\n\n /** @hidden Sum of widths of fixed columns (semantic highlighting, selection) */\n get _fixedColumnsPadding(): number {\n return this._semanticHighlightingColumnWidth + this._selectionColumnWidth;\n }\n\n /** @hidden */\n get _tableWidthPx(): number {\n return this.tableContainer.nativeElement.getBoundingClientRect().width;\n }\n\n /** @hidden */\n get loadingState(): boolean {\n return (\n this.loading ??\n (this._dataSourceDirective._internalLoadingState ||\n this._dataSourceDirective._internalChildrenLoadingState ||\n this._dndLoadingState)\n );\n }\n\n /**\n * Whether the selection column should be shown,\n * If there are no visible rows or visible columns\n * or selection mode is none, then selection column should not be shown.\n **/\n get isSelectionColumnShown(): boolean {\n return (\n this._isSelectionColumnShown &&\n !!this._tableRowsVisible.length &&\n this._tableService.visibleColumnsLength() > 0\n );\n }\n\n /** @hidden */\n get _ariaLabelledBy(): string | null {\n if (this.ariaLabelledBy) {\n return this.ariaLabelledBy;\n }\n return this.tableToolbar?.tableToolbarTitleId || null;\n }\n\n /**\n * @hidden\n * Representation of combined table rows.\n * Contains all rows including group rows.\n */\n _tableRows: TableRow<T>[] = [];\n /**\n * @hidden\n * Representation of table rows that came from dataSource.\n * Contains all rows including group rows.\n */\n _dataSourceTableRows: TableRow<T>[] = [];\n /**\n * @hidden\n * Representation of added table rows.\n */\n _newTableRows: TableRow<T>[] = [];\n /**\n * @hidden\n * Visible table rows.\n * Rows list that is used to be rendered in the ui.\n * Based on _tableRows and excludes hidden rows.\n */\n _tableRowsVisible: TableRow<T>[] = [];\n /**\n * @hidden\n * Table Column Map. Where key is column key and value is column\n */\n _keyToColumnMap: Map<string, TableColumn> = new Map();\n /**\n * @hidden\n * Freezable column names and their respective indexes\n */\n _freezableColumns: Map<string, number> = new Map();\n /**\n * @hidden\n * Freezable column names and their respective indexes for columns that will be frozen to the end of the table\n */\n _freezableEndColumns: Map<string, number> = new Map();\n /** @hidden */\n _tableColumnsLength = 0;\n /** @hidden */\n readonly loadingRowRange = range(3);\n /** @hidden */\n get loadingColumnsRange(): number[] {\n return range(this._tableColumnsLength);\n }\n /** @hidden */\n _checkedState: boolean | null = false;\n /** @hidden */\n _isGroupTable$ = computed(() => {\n const groupRules = this._tableService.groupRules$();\n\n return groupRules ? groupRules.size > 0 : (this.initialState?.initialGroupBy?.length ?? 0) > 0;\n });\n /**\n * @hidden\n * Used to create a row component placeholder and set data in it rather than re-create the row component when data changes.\n * Optimizes performance due to skipping initial setup of the component.\n */\n _tableCurrentlyRenderedRowsPlaceholder: number[] = [];\n /** @hidden */\n _dndTableRowsPlaceholder: TableRow[] = [];\n /** @hidden */\n _isSelectionColumnShown = false;\n /** @hidden */\n readonly _toolbarContext: ToolbarContext;\n /** @hidden */\n _navigatedRowIndex: number;\n /** @hidden */\n _selectionColumnWidth = 0;\n /** @hidden */\n readonly tableColumnsStream: Observable<TableColumn[]>;\n /** @hidden */\n _loadPreviousPages = false;\n /** @hidden */\n readonly _dataSourceDirective = inject<TableDataSourceDirective<T>>(TableDataSourceDirective);\n /** @hidden */\n readonly _tableRowService = inject(TableRowService);\n /** @hidden */\n readonly initialState = inject<TableInitialState>(FDP_TABLE_STATE_DIRECTIVE, {\n optional: true\n });\n /** @hidden */\n readonly _virtualScrollDirective: TableVirtualScroll | null = inject<TableVirtualScroll>(\n FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n {\n optional: true\n }\n );\n /** @hidden */\n readonly _dndTableDirective = inject<TableDraggable>(FDP_TABLE_DRAGGABLE_DIRECTIVE, {\n optional: true\n });\n /** Loading state */\n @Input()\n loading: boolean | undefined;\n /** @hidden */\n private _semanticHighlightingKey: string;\n /** @hidden */\n private _forceSemanticHighlighting = false;\n /** @hidden */\n private readonly _isShownSortSettingsInToolbar$ = signal(false);\n /** @hidden */\n private readonly _isShownFilterSettingsInToolbar$ = signal(false);\n /** @hidden */\n private readonly _isShownGroupSettingsInToolbar$ = signal(false);\n /** @hidden */\n private _appliedFilterNames = signal<TableAppliedFilter[]>([]);\n /** @hidden */\n private readonly _isShownColumnSettingsInToolbar$ = signal(false);\n /** @hidden */\n private readonly _isShownSettingsInToolbar$ = signal(false);\n\n /**\n * @hidden\n * Indicates when all items are checked\n */\n private _checkedAll = false;\n /**\n * @hidden\n * Indicates whether at least 1 item is checked\n */\n private _checkedAny = false;\n /** @hidden */\n private _subscriptions = new Subscription();\n /** @hidden */\n private _viewInitiated = false;\n /** @hidden */\n private _addedItems: T[] = [];\n /** @hidden */\n private _columnsWidthSet = false;\n /** @hidden */\n private _dndLoadingState = false;\n /** @hidden */\n private readonly _rangeSelector = new RangeSelector();\n /** @hidden */\n private _currentPreset: PlatformTableManagedPreset = {};\n /** @hidden */\n private _initialStateSet = false;\n /** @hidden */\n private _rowHeightManuallySet = false;\n /** @hidden */\n private _shouldEmitRowsChange = false;\n /** @hidden */\n private _lastFreezableColumnCalculation = false;\n /** @hidden */\n private readonly _tableHeaderResizer = inject(TableHeaderResizerDirective);\n\n /**\n * @hidden\n * Mapping function for the trackBy, provided by the user.\n * Is needed, because we are wrapping user supplied data into a `TableRow` class.\n */\n _rowTrackBy: TrackByFunction<number>;\n\n /** @hidden */\n private readonly _defaultTrackBy: TrackByFunction<number> = (index: number) => index;\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _translate = resolveTranslationSignalFn();\n\n /** @hidden */\n constructor(\n private readonly _ngZone: NgZone,\n private readonly _cdr: ChangeDetectorRef,\n readonly _tableService: TableService,\n private readonly _tableScrollDispatcher: TableScrollDispatcherService,\n public readonly _tableColumnResizeService: TableColumnResizeService,\n readonly contentDensityObserver: ContentDensityObserver,\n readonly injector: Injector,\n private readonly _tabbableService: TabbableElementService,\n private readonly _liveAnnouncer: LiveAnnouncer\n ) {\n super();\n this.initialState?.setTable(this);\n this._dndTableDirective?.setTable(this);\n this._virtualScrollDirective?.setTable(this);\n this._dataSourceDirective.setTable(this);\n this._rowTrackBy = this._defaultTrackBy;\n this._toolbarContext = {\n counter: this._dataSourceDirective.totalItems$,\n sortable: this._isShownSortSettingsInToolbar$,\n filterable: this._isShownFilterSettingsInToolbar$,\n groupable: this._isShownGroupSettingsInToolbar$,\n columns: this._isShownColumnSettingsInToolbar$,\n settings: this._isShownSettingsInToolbar$,\n hasAnyActions: computed(\n () =>\n this._isShownSortSettingsInToolbar$() ||\n this._isShownFilterSettingsInToolbar$() ||\n this._isShownGroupSettingsInToolbar$() ||\n this._isShownColumnSettingsInToolbar$() ||\n this._isShownSettingsInToolbar$()\n ),\n appliedFilters: this._appliedFilterNames\n };\n\n effect(() => {\n this._setMockScrollbarPosition(this._rtlService?.rtl());\n });\n\n this.tableColumnsStream = this._tableService.tableColumns$.asObservable();\n\n this._subscriptions.add(\n this._tableRowService.cellFocused$.subscribe((event) => {\n this.cellFocused.emit(event);\n })\n );\n this._subscriptions.add(\n this._tableRowService.cellActivate$.subscribe((event) => {\n this.cellActivate.emit(event);\n })\n );\n }\n\n /** Returns array of rows that are currently rendered in the table body. */\n getCurrentlyRenderedRows(): number[] {\n return this._tableCurrentlyRenderedRowsPlaceholder;\n }\n\n /**\n * Sets an array of rows that are currently rendered in the table body.\n * @param startIndex Start index of all rows.\n * @param length Length of rows.\n */\n setCurrentlyRenderedRows(startIndex = 0, length: number): void {\n const newIndices = new Array(length).fill(null).map((_, i) => i + startIndex);\n const newSlice = this._tableRows.slice(startIndex, startIndex + length);\n\n // During drag with virtual scroll, preserve the dragged row at its original DnD index\n if (\n this._virtualScrollDirective?.virtualScroll &&\n this._virtualScrollDirective?.scrollWholeRows &&\n this._dndTableDirective?.dragDropInProgress &&\n this._dndTableDirective?.draggedRow &&\n this._dndTableDirective?.draggedRowGlobalIndex !== null &&\n this._dndTableDirective?.draggedDndIndex !== null\n ) {\n const draggedRow = this._dndTableDirective.draggedRow;\n const draggedGlobalIndex = this._dndTableDirective.draggedRowGlobalIndex;\n const targetDndIndex = this._dndTableDirective.draggedDndIndex;\n\n // Find where the dragged row is in the new slice\n const indexInNewSlice = newSlice.indexOf(draggedRow);\n const draggedGlobalIndexInNewIndices = newIndices.indexOf(draggedGlobalIndex);\n\n if (indexInNewSlice >= 0 && draggedGlobalIndexInNewIndices >= 0) {\n // Dragged row is in the new range - move it to target DnD index\n if (indexInNewSlice !== targetDndIndex && targetDndIndex < newSlice.length) {\n newSlice.splice(indexInNewSlice, 1);\n newSlice.splice(targetDndIndex, 0, draggedRow);\n\n newIndices.splice(draggedGlobalIndexInNewIndices, 1);\n newIndices.splice(targetDndIndex, 0, draggedGlobalIndex);\n }\n } else if (draggedGlobalIndexInNewIndices < 0) {\n // Dragged row is NOT in the new range, but we need to keep it visible\n if (targetDndIndex < newSlice.length) {\n newSlice.splice(targetDndIndex, 0, draggedRow);\n newSlice.pop();\n\n newIndices.splice(targetDndIndex, 0, draggedGlobalIndex);\n newIndices.pop();\n } else {\n newSlice.push(draggedRow);\n newIndices.push(draggedGlobalIndex);\n }\n }\n\n this._dndTableRowsPlaceholder = newSlice;\n this._tableCurrentlyRenderedRowsPlaceholder = newIndices;\n } else {\n this._dndTableRowsPlaceholder = newSlice;\n this._tableCurrentlyRenderedRowsPlaceholder = newIndices;\n }\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('loading' in changes) {\n this._tableService.setTableLoading(this.loadingState);\n }\n\n if ('trackBy' in changes) {\n this._rowTrackBy =\n typeof this.trackBy === 'function'\n ? (index) => this.trackBy(index, this._tableRowsVisible[index].value)\n : this._defaultTrackBy;\n }\n\n // changes below should be checked only after view is initialized\n if (!this._viewInitiated) {\n return;\n }\n\n if ('selectionMode' in changes) {\n this._rangeSelector.reset();\n }\n\n if (\n 'selectionMode' in changes ||\n 'freezeColumnsTo' in changes ||\n 'freezeEndColumnsTo' in changes ||\n 'semanticHighlighting' in changes\n ) {\n this.recalculateTableColumnWidth();\n }\n\n if ('rowNavigatable' in changes) {\n this._tableRows.forEach((row) => (row.navigatable = isRowNavigatable(row.value, this.rowNavigatable)));\n\n this._calculateIsShownNavigationColumn();\n }\n\n if ('rowHeight' in changes) {\n this._rowHeightManuallySet = true;\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._tableColumnResizeService.setTableRef(this);\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._viewInitiated = true;\n\n this.initialState?.setInitialState();\n\n this._dataSourceDirective.initializeDataSource();\n\n this._listenToTableStateChanges();\n\n this._listenToColumns();\n\n this._calculateVisibleColumns();\n\n this._tableService.constructTableMetadata();\n\n this._listenToTableRowsPipe();\n\n this._listenToPageScrolling();\n\n this._virtualScrollDirective?.listenOnVirtualScroll();\n\n this._listenToRowHeightChange();\n\n this._listenToColumnPropertiesChange();\n\n this._listenToTableWidthChanges();\n\n this._listenToTableContainerMouseLeave();\n\n this._listenToLoadingAndRefocusCell();\n\n if (\n !this._virtualScrollDirective?.scrollWholeRows ||\n !this._virtualScrollDirective ||\n !this._virtualScrollDirective?.virtualScroll\n ) {\n this._initScrollPosition();\n }\n\n this._listenToFixedColumnsWidth();\n\n if (this.expandOnInit) {\n this.expandAll();\n }\n\n if (!this._virtualScrollDirective?.scrollWholeRows) {\n this._subscriptions.add(\n this._virtualScrollDirective?.virtualScrollTransform$\n .pipe(filter(() => !!this._virtualScrollDirective?.virtualScroll && !!this._tableBody))\n .subscribe((transform) => {\n this._tableBody.nativeElement.style.transform = `translateY(${transform}px)`;\n })\n );\n }\n\n if (this._focusableGrid) {\n this._focusableGrid.shortRowFocus = 'first';\n }\n\n if (this._virtualScrollDirective?.scrollWholeRows) {\n this._setMockScrollbarPosition(this._rtlService?.rtl());\n }\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n // When table rows are set, emit an event to manipulate the view (e.g., scroll to some row).\n if (!this._shouldEmitRowsChange) {\n return;\n }\n this._shouldEmitRowsChange = false;\n const emitter = this.tableRowsSet;\n this._onZoneFree(() => {\n emitter.emit();\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._calculateFrozenColumnRefresh$.next();\n this._calculateFrozenColumnRefresh$.complete();\n }\n\n /** Get current state/settings of the Table. */\n getTableState(): TableState {\n return this._tableService.getTableState();\n }\n\n /** Set current state/settings of the Table. */\n setTableState(state: TableState | PlatformTableManagedPreset): void {\n this._currentPreset = state;\n const newState: TableState = Object.assign({}, this._tableService.getDefaultState(), state);\n this._tableService.setSort(newState.sortBy);\n this._tableService.setFilters(newState.filterBy);\n this._tableService.setGroups(newState.groupBy);\n this.setColumns(newState.columns);\n this._tableService.search(newState.searchInput);\n this._tableService.freezeTo(newState.freezeToColumn);\n this.pageSize = newState.page.pageSize;\n this._tableService.setCurrentPage(newState.page.currentPage);\n this._tableService.setTableState(newState);\n this._cdr.markForCheck();\n }\n\n /** Get table columns definition list. */\n getTableColumns(): TableColumn[] {\n return this.columns?.toArray() || [];\n }\n\n /** Get a list of visible table columns. */\n getVisibleTableColumns(): TableColumn[] {\n return this._visibleColumns || [];\n }\n\n /** Set Sorting rules */\n sort(sortRules: CollectionSort[]): void {\n this._tableService.setSort(sortRules);\n this._cdr.markForCheck();\n }\n\n /** Add Sorting rules to the existing ones */\n addSort(sortRules: CollectionSort[]): void {\n this._tableService.addSort(sortRules);\n this._cdr.markForCheck();\n }\n\n /** Set Filter rules */\n filter(filterRules: CollectionFilter[]): void {\n this._tableService.setFilters(filterRules);\n this._cdr.markForCheck();\n }\n\n /** Add Filter rule */\n addFilter(filterRules: CollectionFilter[]): void {\n this._tableService.addFilters(filterRules);\n this._cdr.markForCheck();\n }\n\n /** Removes filters for the provided fields */\n removeFilter(fields: string[]): void {\n this._tableService.removeFilters(fields);\n this._cdr.markForCheck();\n }\n\n /** Set Groups */\n group(groups: CollectionGroup[]): void {\n this._tableService.setGroups(groups);\n this._cdr.markForCheck();\n }\n\n /** Add Groups */\n addGroup(groups: CollectionGroup[]): void {\n this._tableService.addGroups(groups);\n this._cdr.markForCheck();\n }\n\n /**\n * Set visible table columns\n * The order is matter\n * @param columns table columns names\n */\n setColumns(columns: string[]): void {\n const tableColumns = this.getTableColumns();\n const columnsObject: Record<string, string[]> = {\n columns: [],\n keys: []\n };\n tableColumns\n .filter((column) => columns.includes(column.name))\n // We need to have same order of columns as user defined.\n .sort((a, b) => columns.indexOf(a.name) - columns.indexOf(b.name))\n .reduce((acc, column) => {\n acc.columns.push(column.name);\n acc.keys.push(column.key);\n return acc;\n }, columnsObject);\n this._tableService.setColumns(columnsObject.columns, columnsObject.keys);\n this._cdr.markForCheck();\n }\n\n /** Freeze table to column */\n freezeToColumn(columnName: string, end?: boolean): void {\n end ? (this.freezeEndColumnsTo = columnName) : (this.freezeColumnsTo = columnName);\n\n this._tableService.freezeTo(columnName, end);\n this.recalculateTableColumnWidth();\n }\n\n /** Unfreeze column */\n unfreeze(columnName: string, end?: boolean): void {\n const columns = end ? this._freezableEndColumns : this._freezableColumns;\n const freezeToColumnIndex = columns.get(columnName) ?? -1;\n const freezeToPreviousColumnName = columns[freezeToColumnIndex - 1];\n\n end\n ? (this.freezeEndColumnsTo = freezeToPreviousColumnName)\n : (this.freezeColumnsTo = freezeToPreviousColumnName);\n\n this._tableService.freezeTo(freezeToPreviousColumnName, end);\n this.recalculateTableColumnWidth();\n }\n\n /** expand all rows */\n expandAll(): void {\n const expandableRows = this._tableRows.filter((row) => row.type === TableRowType.TREE);\n if (this._dataSourceDirective.childDataSource) {\n this._tableRowService.loadChildRows(expandableRows);\n }\n this._markAsExpanded(expandableRows);\n this.allRowsExpanded.emit();\n this._liveAnnouncer.announce(this._translate('platformTable.expandAllAnnouncementLabel')());\n }\n\n /** collapse all rows */\n collapseAll(): void {\n this._tableRows.forEach((e) => {\n e.expanded = false;\n if (e.parent) {\n e.hidden = true;\n }\n });\n this.onTableRowsChanged();\n this.allRowsCollapsed.emit();\n this._liveAnnouncer.announce(this._translate('platformTable.collapseAllAnnouncementLabel')());\n }\n\n /** Search in table */\n search(searchInput: SearchInput): void {\n this._tableService.search(searchInput);\n this._cdr.markForCheck();\n }\n\n /** Set current page number in table */\n setCurrentPage(currentPage: number): void {\n this._tableService.setCurrentPage(currentPage);\n this._cdr.markForCheck();\n }\n\n /** Set items per page number in table */\n setPageSize(pageSize: number, resetPageNumber = true): void {\n this._tableService.setItemsPerPage(pageSize, resetPageNumber);\n }\n\n /** Toolbar Sort Settings button visibility */\n showSortSettingsInToolbar(showSortSettings: boolean): void {\n this._isShownSortSettingsInToolbar$.set(showSortSettings);\n }\n\n /** Toolbar Filter Settings button visibility */\n showFilterSettingsInToolbar(showFilterSettings: boolean): void {\n this._isShownFilterSettingsInToolbar$.set(showFilterSettings);\n }\n\n /** Toolbar Group Settings button visibility */\n showGroupSettingsInToolbar(showGroupSettings: boolean): void {\n this._isShownGroupSettingsInToolbar$.set(showGroupSettings);\n }\n\n /** Toolbar Columns Settings button visibility */\n showColumnSettingsInToolbar(showColumnSettings: boolean): void {\n this._isShownColumnSettingsInToolbar$.set(showColumnSettings);\n }\n\n /** Toolbar Settings button visibility */\n showSettingsInToolbar(showSettings: boolean): void {\n this._isShownSettingsInToolbar$.set(showSettings);\n }\n\n /** Disable filter from column heder menu */\n setHeaderColumnFilteringDisabled(disabled: boolean): void {\n this._tableService._isFilteringFromHeaderDisabled$.set(disabled);\n }\n\n /** Set the row navigation */\n setRowNavigation(rowIndex: number, rowNavigatable: string | boolean): void {\n const row = this._tableRows[rowIndex];\n\n if (!row) {\n return;\n }\n\n row.navigatable = isRowNavigatable(row.value, rowNavigatable);\n\n this._calculateIsShownNavigationColumn();\n\n this._cdr.markForCheck();\n }\n\n /**\n * Toggle row checked state.\n * @param rowIndex Index of the row.\n */\n toggleSelectableRow(rowIndex: number): void {\n const row = this._tableRows[rowIndex];\n\n if (!row || row.value[this.selectableKey] === false) {\n return;\n }\n\n if (this.selectionMode === SelectionMode.SINGLE) {\n this._toggleSingleSelectableRow(row);\n } else if (this.selectionMode === SelectionMode.MULTIPLE) {\n this._toggleMultiSelectRow(row);\n }\n }\n\n /**\n * Sets the checked state of the row.\n * @param rowIndex Index of the row.\n * @param value Value of the checked state.\n */\n setRowCheckedState(rowIndex: number, value: boolean): void {\n const row = this._tableRows[rowIndex];\n\n if (!row) {\n return;\n }\n\n if (row.checked !== value) {\n this.toggleSelectableRow(rowIndex);\n }\n }\n\n /** Remove the row navigation */\n removeRowNavigation(rowIndex: number): void {\n const row = this._tableRows[rowIndex];\n\n if (!row) {\n return;\n }\n\n row.navigatable = false;\n\n this._calculateIsShownNavigationColumn();\n\n this._cdr.markForCheck();\n }\n\n /** Manually triggers column's width recalculation */\n recalculateTableColumnWidth(): void {\n this._tableColumnResizeService._setInitialTableWidth();\n this._tableColumnResizeService.setColumnNames(this._visibleColumns.map((column) => column.name));\n this._setFreezableInfo();\n }\n\n /** Gets the max allowed width for all freezable columns */\n getMaxAllowedFreezableColumnsWidth(): number {\n if (!this._freezableColumns.size) {\n return 0;\n }\n\n /** Themeable scrollbar has 0.75rem in dimension */\n const scrollbarSizeInPx = 12;\n\n return this._tableWidthPx - this._fixedColumnsPadding - scrollbarSizeInPx - 1;\n }\n\n /** Get table data source */\n getDataSource(): TableDataSource<T> {\n return this._dataSourceDirective._tableDataSource;\n }\n\n /**\n * Adds empty row for editing at the beginning of the rows array.\n */\n addRow(): void {\n this._forceSemanticHighlighting = true;\n this._setSemanticHighlighting();\n\n const newRow = buildNewRowSkeleton(this.editableRowSkeleton, this.columns.toArray());\n newRow[this.semanticHighlighting] = EDITABLE_ROW_SEMANTIC_STATE;\n\n this._addedItems.unshift(newRow);\n\n const newRows = this._createTableRowsByDataSourceItems([newRow]);\n this._newTableRows = [...newRows, ...this._newTableRows];\n\n this._setTableRows();\n this.emptyRowAdded.emit();\n }\n\n /** Cancels editing and discards newly added rows */\n cancelEditing(): void {\n this._resetEditState();\n this.cancel.emit();\n }\n\n /**\n * Emits save event and resets editable rows array.\n */\n saveRows(): void {\n const event = new SaveRowsEvent<T>(() => {\n this._dataSourceDirective._tableDataSource.fetch(this.getTableState());\n }, [...this._addedItems]);\n const editableCells: EditableTableCell[] = ([] as EditableTableCell[]).concat.apply(\n [],\n Array.from(this._tableRowService.editableCells.values())\n );\n\n const forms = [...this.customEditableCells.toArray(), ...editableCells].map((t) => t.form);\n\n // Trigger form revalidation\n forms.forEach((form) => form.onSubmit(null as any));\n if (forms.some((form) => form.invalid)) {\n return;\n }\n\n this._resetEditState();\n this.save.emit(event);\n }\n\n /** @deprecated use 'setTableState' instead. Sets current preset for the Table. */\n setPreset(data: PlatformTableManagedPreset): void {\n this.setTableState(data);\n }\n\n /** Returns current preset configuration. */\n getCurrentPreset(): PlatformTableManagedPreset {\n if (!this._currentPreset) {\n return this.getTableState();\n }\n // We need to return object as similar as the original preset.\n const currentPreset = { ...this._currentPreset };\n const presetKeys = Object.keys(currentPreset);\n const currentState = this.getTableState();\n\n Object.keys(currentState).forEach((stateKey) => {\n // Skip state entry if it's not present in preset and doesn't have any value.\n if (\n stateKey === 'columnKeys' ||\n ((!currentState[stateKey] ||\n (Array.isArray(currentState[stateKey]) && currentState[stateKey]?.length === 0)) &&\n !presetKeys.includes(stateKey))\n ) {\n return;\n }\n\n currentPreset[stateKey] = currentState[stateKey];\n });\n\n return currentPreset;\n }\n\n /**\n * Manually triggers list item event listeners for drag&drop list directive.\n */\n refreshDndList(): void {\n if (this._virtualScrollDirective?.virtualScroll !== true) {\n return;\n }\n this._dndDirective?.refreshQueryList();\n }\n\n /** @hidden */\n _onDragStarted(row: TableRow, dndIndex: number, globalIndex: number): void {\n this._dndTableDirective?.dragDropStart(row, dndIndex, globalIndex);\n }\n\n /**\n * Programmatically toggles `expand` state of the row with defined index.\n * @param rowIndexes row indexes including nested rows.\n *\n * Usage example:\n * * To toggle first level row, pass one argument:\n * ```\n * table.toggleGroupRows(0) // Will result in toggling first row if it's type is `TableRowType.TREE` or `TableRowType.GROUP`.\n * ```\n * * To toggle nested rows, pass additional arguments of indexes:\n * ```\n * table.toggleGroupRows(0, 1) // Will result in toggling first root row, then it's second child.\n * ```\n */\n toggleGroupRows(...rowIndexes: number[]): void {\n let tableRow: TableRow | null = null;\n for (const rowIndex of rowIndexes) {\n tableRow = tableRow ? tableRow.children[rowIndex] : this._tableRows[rowIndex];\n\n if (tableRow.type === TableRowType.ITEM) {\n break;\n }\n\n this._toggleGroupRow(tableRow);\n }\n }\n\n /**\n * Function used to focus a cell in the table utilizing a FocusableCellPosition interface.\n */\n focusCell(position: FocusableCellPosition): void {\n const tableEl = this.table.nativeElement as HTMLTableElement;\n tableEl.rows[position.rowIndex].cells[position.colIndex].focus();\n }\n\n /**\n * Clears the array of table rows. Triggered when new data source is applied.\n */\n clearTableRows(): void {\n this._tableRows = [];\n this.loadedRows$.set(0);\n this._tableRowsVisible = [];\n this._tableCurrentlyRenderedRowsPlaceholder = [];\n this._newTableRows = [];\n this._dataSourceTableRows = [];\n this._setTableRows([]);\n this._tableService.setCurrentPage(1);\n }\n\n // Private API\n\n /** @hidden */\n _scrollToOverlappedCell(): void {\n this.tableScrollable.scrollToOverlappedCell(\n this._rtlService?.rtl() ?? false,\n this._freezableColumns.size,\n this._freezableEndColumns.size\n );\n }\n\n /** @hidden */\n _calculatingLoading(isLoading: boolean): void {\n if (this._dndLoadingState === isLoading) {\n return;\n }\n\n this._dndLoadingState = isLoading;\n this._tableService.setTableLoading(this.loadingState);\n }\n\n /**\n * @hidden\n * Toggle selectable row in SelectionMode.MULTIPLE\n */\n _toggleMultiSelectRow(rowToToggle: TableRow, event?: Event): void {\n if (this.selectionMode !== SelectionMode.MULTIPLE) {\n throw new Error('Unexpected selection mode');\n }\n const checked = (rowToToggle.checked = !rowToToggle.checked);\n const rows = this._tableRows;\n const selectedIndex = this._tableRows.findIndex((row) => row === rowToToggle);\n\n const removed: TableRow<T>[] = [];\n const added: TableRow<T>[] = [];\n this._rangeSelector.onRangeElementToggled(selectedIndex, event as PointerEvent | KeyboardEvent);\n\n this._rangeSelector.applyValueToEachInRange((idx) => {\n const row = rows[idx];\n if (row.type === TableRowType.ITEM || row.isTree) {\n row.checked = checked;\n checked ? added.push(row) : removed.push(row);\n\n this._applyTristateSelection(row, added, removed);\n }\n });\n\n this._emitRowSelectionChangeEvent(added, removed);\n\n this._calculateCheckedAll();\n }\n\n /**\n * @hidden\n * Toggle selectable row in SelectionMode.SINGLE\n */\n _toggleSingleSelectableRow(rowToToggle: TableRow): void {\n if (this.selectionMode !== SelectionMode.SINGLE) {\n throw new Error('Unexpected selection mode');\n }\n\n const checked = (rowToToggle.checked = !rowToToggle.checked);\n const removed: TableRow<T>[] = [];\n const added: TableRow<T>[] = [];\n\n // uncheck previously checked\n getSelectableRows(this._tableRows, this.selectableKey).forEach((row) => {\n if (row === rowToToggle) {\n return;\n }\n\n if (row.checked) {\n row.checked = false;\n removed.push(row);\n }\n });\n checked ? added.push(rowToToggle) : removed.push(rowToToggle);\n\n this._emitRowSelectionChangeEvent(added, removed);\n\n this._calculateCheckedAll();\n }\n\n /**\n * @hidden\n * Select / Unselect all selectable rows\n */\n _toggleAllSelectableRows(selectAll: boolean): void {\n const removed: TableRow<T>[] = [];\n const added: TableRow<T>[] = [];\n\n getSelectableRows(this._tableRows, this.selectableKey).forEach((row) => {\n if (row.checked === selectAll) {\n return;\n }\n row.checked = selectAll;\n selectAll ? added.push(row) : removed.push(row);\n });\n\n this._rangeSelector.reset();\n\n this._shouldCheckNewRows = selectAll;\n\n this._emitRowSelectionChangeEvent(added, removed, true);\n\n this._calculateCheckedAll();\n }\n\n /**\n * @hidden\n * Create table row selection event\n */\n _emitRowSelectionChangeEvent(added: TableRow[], removed: TableRow[], all: boolean = false): void {\n const selected = getSelectableRows(this._tableRows, this.selectableKey)\n .filter(({ checked }) => checked)\n .map(({ value }) => value);\n\n this.rowSelectionChange.emit({\n source: this,\n selection: selected,\n added: added.map(({ value }) => value),\n removed: removed.map(({ value }) => value),\n index: added.concat(removed).map(({ index }) => index),\n all\n });\n }\n\n /** @hidden */\n _onCellClick(colIdx: number, row: TableRow<T>): void {\n if (row.state === 'readonly' && isTreeRowFirstCell(colIdx, row)) {\n this._toggleGroupRow(row);\n }\n }\n\n /** @hidden */\n _onRowClick(row: TableRow<T> | null, event: Event): void {\n if (row && row.state !== 'readonly') {\n return;\n }\n\n if (event && event instanceof KeyboardEvent && KeyUtil.isKeyCode(event, SPACE)) {\n const eventTarget = event.target as HTMLElement;\n const tabbableElement = this._tabbableService.getTabbableElement(eventTarget, false, true);\n if (tabbableElement) {\n event.preventDefault();\n tabbableElement.focus();\n tabbableElement.dispatchEvent(new MouseEvent('click'));\n }\n }\n\n if (row) {\n const e = event as MouseEvent | KeyboardEvent;\n const ctrlKey = e.ctrlKey || e.metaKey;\n this._emitRowNavigate(row, ctrlKey);\n this._emitRowActivate(row, ctrlKey);\n }\n }\n\n /** @hidden */\n _emitCellActivate(columnIndex: number, row: TableRow<T>): void {\n this.cellActivate.emit(new TableCellActivateEvent<T>(columnIndex, row.value));\n }\n\n /** @hidden */\n _emitRowActivate(row: TableRow<T>, ctrlKey: boolean): void {\n if (!this.rowsActivable) {\n return;\n }\n\n const rowIndex = this._tableRows.indexOf(row);\n this.rowActivate.emit(new TableRowActivateEvent<T>(rowIndex, ctrlKey, row.value));\n }\n\n /**\n * @hidden\n * Expand/Collapse group row\n */\n _toggleGroupRow(groupRow: TableRow<T>): void {\n if (this._dndTableDirective?.dragDropInProgress) {\n return;\n }\n\n this.toggleExpandableTableRow(groupRow);\n\n const groupRowIndex = this._tableRows.indexOf(groupRow);\n this.rowToggleOpenState.emit(\n new TableRowToggleOpenStateEvent(groupRowIndex, groupRow.value, groupRow.expanded)\n );\n }\n\n /** @hidden */\n _emitRowNavigate(row: TableRow<T>, ctrlKey: boolean): void {\n if (!row.navigatable) {\n return;\n }\n const rowIndex = this._tableRows.indexOf(row);\n\n if (this.highlightNavigatedRow) {\n this._navigatedRowIndex = rowIndex;\n }\n\n this.rowNavigate.emit(new TableRowActivateEvent<T>(rowIndex, ctrlKey, row.value));\n }\n\n /** Fetch data source data. */\n fetch(): void {\n this._dataSourceDirective._tableDataSource.fetch(this.getTableState());\n }\n\n /** @hidden */\n onTableRowsChanged(): void {\n this._reIndexTableRows();\n this._calculateVisibleTableRows();\n this._calculateCheckedAll();\n\n if (this._virtualScrollDirective) {\n this._virtualScrollDirective.calculateVirtualScrollRows();\n }\n }\n\n /** @hidden */\n toggleExpandableTableRow(rowToToggle: TableRow, forceFetch = false): void {\n rowToToggle.forceFetch = forceFetch;\n const expanded = (rowToToggle.expanded = !rowToToggle.expanded);\n\n findRowChildren(rowToToggle, this._tableRows).forEach((row) => {\n // if parent is collapsed we want to hide all nested items\n if (!expanded) {\n row.hidden = true;\n row.expanded = false;\n }\n\n // if parent is expanded, we want to show only items which direct parents are expanded as well\n if (expanded) {\n row.hidden = !getRowParents(row, rowToToggle).every((parent) => parent.expanded);\n }\n });\n\n this.onTableRowsChanged();\n }\n\n /** @hidden */\n _onSpyIntersect(intersected: boolean): void {\n if (!intersected) {\n return;\n }\n const {\n page: { currentPage, pageSize }\n } = this.getTableState();\n const totalItems = this._dataSourceDirective.totalItems$();\n const lastPage = Math.ceil(totalItems / (pageSize || totalItems));\n if (currentPage >= lastPage) {\n return;\n }\n this._ngZone.run(() => {\n this.setCurrentPage(currentPage + 1);\n });\n }\n\n /**\n * After rows are rendered, the IntersectionObserver on the spy row may not\n * emit a new event if the spy was already visible before the data changed.\n * This method waits for the DOM to settle, then checks whether the spy row\n * is actually inside the scroll container's viewport and, if so, triggers\n * the next page load.\n *\n * @hidden\n */\n private _recheckSpyIntersection(): void {\n setTimeout(() => {\n const container = this.tableContainer?.nativeElement;\n const spy = container?.querySelector('.fd-table__intersection-spy:last-of-type') as HTMLElement | null;\n if (!container || !spy) {\n return;\n }\n const containerRect = container.getBoundingClientRect();\n const spyRect = spy.getBoundingClientRect();\n // The spy is visible when its top edge is within or above the container's bottom edge\n // (accounting for the pageScrollingThreshold offset applied via style.top).\n if (spyRect.top <= containerRect.bottom) {\n this._onSpyIntersect(true);\n }\n });\n }\n\n /** @hidden */\n handleMouseEnter(rowIndex: number): void {\n this.hoveredRowIndex$.set(rowIndex);\n }\n\n /** @hidden */\n handleMouseLeave(): void {\n this.hoveredRowIndex$.set(null);\n }\n\n /** Manually update index after we add new items to the main array */\n private _reIndexTableRows(): void {\n this._tableRows.map((row, index) => (row.index = index));\n }\n\n /** @hidden */\n private _isValidInteger(value: string): boolean {\n return Number.isInteger(parseInt(value, 10));\n }\n\n /** @hidden */\n private _markAsExpanded(rows: TableRow<T>[]): void {\n rows.forEach((e) => {\n e.expanded = true;\n e.hidden = false;\n });\n this.onTableRowsChanged();\n }\n\n /** @hidden */\n private _listenToTableRowsPipe(): void {\n this._subscriptions.add(\n this._dataSourceDirective.items$\n .pipe(\n // map source items to table rows\n map((source: T[]) => this._createTableRowsByDataSourceItems(source)),\n // Insert items to show groups\n switchMap((rows: TableRow[]) =>\n this.isTreeTable\n ? of(rows)\n : this._tableService.groupRulesSubject.pipe(\n map((groupRules) =>\n this._tableRowService.groupTableRows(rows, groupRules.values(), groupRules)\n )\n )\n )\n )\n .subscribe((rows) => {\n const isAccumulating =\n (this.pageScrolling || this.showGrowingButton) && this.getTableState().page.currentPage > 1;\n rows = isAccumulating ? [...this._tableRows, ...rows] : rows;\n this._setTableRows(rows);\n\n // After rows change, the intersection spy <tr> may already be visible\n // in the scroll container without the IntersectionObserver emitting a\n // new transition (e.g. after switching from a short dataset to a long\n // one, or when pageSize is small enough that accumulated rows still\n // don't fill the viewport). Schedule a visibility check and, if the\n // spy is within the viewport, manually trigger the next page load.\n if (this.pageScrolling) {\n this._recheckSpyIntersection();\n }\n })\n );\n\n this._dataSourceDirective.childItems$\n .pipe(\n map((items) => {\n const rowMap = new Map<TableRow<T>, TableRow<T>[]>();\n items.forEach((rowItems, parentRow) => {\n rowMap.set(\n parentRow,\n this._createTableRowsByDataSourceItems(rowItems).map((row) => {\n row.parent = parentRow;\n row.level = parentRow.level + 1;\n row.hidden = !parentRow.expanded;\n return row;\n })\n );\n });\n\n return rowMap;\n })\n )\n .subscribe((items) => {\n items.forEach((rows, parentRow) => {\n let nestedChildrenCount = 0;\n\n function tallyNestedChildren(parent: TableRow<T>): void {\n if (parent.children) {\n nestedChildrenCount = nestedChildrenCount + parent.children.length;\n parent.children.forEach((child) => {\n tallyNestedChildren(child);\n });\n }\n }\n\n tallyNestedChildren(parentRow);\n\n this._tableRows.splice(parentRow.index + nestedChildrenCount + 1, 0, ...rows);\n\n parentRow.children.push(...rows);\n\n parentRow.lastChild = parentRow.children[parentRow.children.length - 1];\n this._setTableRows(this._tableRows);\n });\n });\n }\n\n /** @hidden */\n private _listenToTableStateChanges(): void {\n this._subscriptions.add(\n this._tableService.tableStateChanges$.subscribe(() => {\n this.presetChanged.emit(this.getCurrentPreset());\n })\n );\n this._subscriptions.add(\n this._tableService.needFetch$\n .pipe(\n map(() => this._tableService.getTableState()),\n filter((state) => !!state && !!this._dataSourceDirective._tableDataSource),\n distinctUntilChanged()\n )\n .subscribe((state) => {\n this._dataSourceDirective._tableDataSource.fetch(state);\n })\n );\n this._subscriptions.add(\n this._tableService.stateChange$.subscribe(({ type, state }) => {\n switch (type) {\n case 'columns':\n this._calculateVisibleColumns();\n this.recalculateTableColumnWidth();\n\n this.columnsChange.emit(new TableColumnsChangeEvent(this, state.current, state.previous));\n break;\n case 'filter':\n this.filterChange.emit(new TableFilterChangeEvent(this, state.current, state.previous));\n this.tableColumnFilterChange.emit();\n this._setAppliedFilterNames(state.current);\n break;\n case 'freeze':\n if (!this._lastFreezableColumnCalculation) {\n this.columnFreeze.emit(new TableColumnFreezeEvent(this, state.current, state.previous));\n }\n this.fixed = !!this.fixed || !!this._freezableColumns.size || !!this._freezableEndColumns.size;\n break;\n case 'search':\n break;\n case 'group':\n this._calculateVisibleColumns();\n this.recalculateTableColumnWidth();\n\n this.groupChange.emit(new TableGroupChangeEvent(this, state.current, state.previous));\n break;\n case 'page':\n this.pageChange.emit(new TablePageChangeEvent(this, state.current, state.previous));\n break;\n case 'sort':\n this.sortChange.emit(new TableSortChangeEvent(this, state.current, state.previous));\n break;\n }\n })\n );\n\n this._listenToTableRowStateChange();\n }\n\n /** @hidden */\n private _setAppliedFilterNames(filters: CollectionFilter[]): void {\n const formattedFilters = filters.map((f) => ({\n columnName: this._formatColumnName(f.fieldName || ''),\n\n params: this._formatParams(f.value)\n }));\n\n this._appliedFilterNames.set(formattedFilters);\n }\n\n // Helper function to format nested parameters\n private _formatParams(value: any): string {\n if (typeof value !== 'object' || value === null) {\n return String(value); // Handle non-object values\n }\n\n // handle array\n if (Array.isArray(value)) {\n return value.map((val) => this._formatParams(val)).join(', ');\n }\n\n return Object.entries(value)\n .map(([key, val]) => `${key}: ${this._formatParams(val)}`) // Recursive call for nested objects\n .join(', ');\n }\n\n /** @hidden */\n private _formatColumnName(columnName: string): string {\n return columnName.charAt(0).toUpperCase() + columnName.slice(1);\n }\n\n /** @hidden */\n private _listenToTableRowStateChange(): void {\n this._subscriptions.add(\n this._tableRowService.scrollToOverlappedCell$.subscribe(() => {\n this._scrollToOverlappedCell();\n })\n );\n\n this._subscriptions.add(\n this._tableRowService.loadChildRows$.subscribe((rows) => {\n const state = this.getTableState();\n rows.forEach((row) => {\n this._dataSourceDirective.childDataSource?.dataProvider\n .rowChildrenCount(row, state)\n .pipe(\n filter((count) => row.forceFetch || count > row.children.length),\n tap(() => (row.forceFetch = false)),\n take(1)\n )\n .subscribe(() => {\n const rowState = {\n ...state,\n ...{\n page: {\n currentPage: Math.floor(row.children.length / state.page.pageSize) + 1,\n pageSize: state.page.pageSize\n }\n }\n };\n this._dataSourceDirective.childDataSource?.fetch(rowState, [row]);\n });\n });\n })\n );\n\n this._subscriptions.add(\n this._tableRowService.cellClicked$.subscribe((evt) => {\n this._onCellClick(evt.index, evt.row);\n })\n );\n\n this._subscriptions.add(\n this._tableRowService.toggleAllSelectableRows$.subscribe((evt) => {\n this._toggleAllSelectableRows(evt);\n })\n );\n\n this._subscriptions.add(\n this._tableRowService.toggleRow$.subscribe((evt) => {\n switch (evt.type) {\n case 'toggleRow':\n this._toggleGroupRow(evt.row);\n break;\n case 'toggleMultiSelectRow':\n this._toggleMultiSelectRow(evt.row, evt.event);\n break;\n case 'toggleSingleSelectableRow':\n this._toggleSingleSelectableRow(evt.row);\n break;\n }\n })\n );\n }\n\n /** @hidden */\n private _createTableRowsByDataSourceItems(source: T[]): TableRow<T>[] {\n let rows: TableRow<T>[];\n if (this.isTreeTable) {\n rows = this._createTreeTableRowsByDataSourceItems(source);\n } else {\n rows = convertObjectsToTableRows(\n source,\n this._addedItems,\n this.selectedKey,\n this.rowNavigatable,\n this.selectionMode,\n this._tableRows,\n this.rowComparator\n );\n }\n\n if (this._shouldCheckNewRows && this.forceCheckedAllState) {\n rows.forEach((row) => {\n row.checked = row.checked || true;\n });\n }\n\n return rows;\n }\n\n /** @hidden */\n private _createTreeTableRowsByDataSourceItems(source: T[]): TableRow<T>[] {\n const item = source[0] as any;\n\n if (isTableRow(item)) {\n return convertTreeTableRowToFlatList(source as TableRow[], this.rowNavigatable);\n }\n\n if (isJsObject(item)) {\n return convertTreeObjectsToTableRows(\n source,\n this.selectionMode,\n this._tableRows,\n this.rowComparator,\n this.relationKey,\n this.hasChildrenKey,\n this.selectedKey,\n this.expandedStateKey,\n this.rowNavigatable,\n this.enableTristateMode\n );\n }\n return [];\n }\n\n /** @hidden */\n private _setTableRows(rows = this._dataSourceTableRows): void {\n this._dataSourceTableRows = rows;\n this._tableRows = [...this._newTableRows, ...this._dataSourceTableRows];\n this.loadedRows$.set(this._tableRows.length);\n this.onTableRowsChanged();\n this._calculateIsShownNavigationColumn();\n this._rangeSelector.reset();\n\n this._shouldEmitRowsChange = true;\n\n if (rows.length && !this._columnsWidthSet) {\n this.recalculateTableColumnWidth();\n this._columnsWidthSet = true;\n }\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n private _calculateVisibleTableRows(): void {\n this._tableRowsVisible = this._tableRows.filter((row) => !row.hidden);\n if (this._virtualScrollDirective?.virtualScroll) {\n this._virtualScrollDirective.calculateVirtualScrollRows();\n } else {\n this.setCurrentlyRenderedRows(0, this._tableRowsVisible.length);\n }\n }\n\n /** @hidden */\n private _listenToRowHeightChange(): void {\n this._subscriptions.add(\n this.contentDensityObserver.contentDensity$$\n .pipe(\n tap(() => {\n this._setSelectionColumnWidth();\n }),\n filter(() => Array.from(ROW_HEIGHT.values()).includes(this.rowHeight)),\n filter(() => !this._rowHeightManuallySet)\n )\n .subscribe((contentDensity) => {\n this.rowHeight = ROW_HEIGHT.get(contentDensity) ?? ROW_HEIGHT.get(ContentDensityMode.COZY)!;\n if (this._virtualScrollDirective?.virtualScroll) {\n this._virtualScrollDirective.rowHeight = this.rowHeight;\n this._virtualScrollDirective.secondaryRowHeight = this.secondaryRowHeight;\n this._virtualScrollDirective.calculateVirtualScrollRows();\n }\n })\n );\n }\n\n /** @hidden */\n private _listenToColumns(): void {\n this.columns.changes.pipe(startWith(null)).subscribe(() => {\n const columns = this.getTableColumns();\n const prevColumns = this._tableService.tableColumns$.value.map((column) => column.name);\n const currentColumns = columns.map((column) => column.name);\n\n const newColumns = columns\n .filter((column) => column.visible && !prevColumns.includes(column.name))\n .map((c) => c.name);\n const stateColumns = this.getTableState().columns;\n\n this._buildColumnsMap(columns);\n this._tableService.tableColumns$.next(columns);\n\n if (this._initialStateSet) {\n this.setColumns([...stateColumns, ...newColumns]);\n }\n\n this._initialStateSet = true;\n\n const updatedColumns = this._tableService.tableColumns$.value.map((column) => column.name);\n\n if (!shallowEqual(updatedColumns, currentColumns)) {\n this._tableService.stateChange$.next({\n type: 'columns',\n state: { previous: currentColumns, current: updatedColumns }\n });\n this._tableService.columnsChange$.next({ previous: currentColumns, current: updatedColumns });\n }\n this._tableService.detectChanges();\n });\n }\n\n /**\n * Construct visible columns for rendering purpose.\n */\n private _calculateVisibleColumns(): void {\n const columnsDefinition = this.getTableColumns();\n const { columns, groupBy } = this.getTableState();\n const groupedColumnsToHide = groupBy.filter(({ showAsColumn }) => !showAsColumn).map(({ field }) => field);\n\n const allColumns = columns // need to start mapping from state.columns list to keep right order\n .map((name) => columnsDefinition.find((column) => column.name === name))\n .filter((column): column is TableColumn => !!column)\n .filter(({ key }) => !groupedColumnsToHide.includes(key));\n\n const [visibleColumns, poppingColumns] = allColumns.reduce(\n (acc, column) => {\n if (column.responsiveState === 'hidden') {\n return acc;\n }\n acc[column.responsiveState === 'visible' ? 0 : 1].push(column);\n return acc;\n },\n [[], []] as TableColumn[][]\n );\n\n this._tableService.setVisibleColumns(visibleColumns);\n this._tableService.setPoppingColumns(poppingColumns);\n\n this._cdr.detectChanges();\n\n this._calculateTableColumnsLength();\n }\n\n /** @hidden */\n private _calculateTableColumnsLength(): void {\n const isGroupable = this.initialState?.initialGroupBy.length;\n this._tableColumnsLength =\n this.getTableColumns().length +\n (this._isSelectionColumnShown || isGroupable ? 1 : 0) +\n (this.rowNavigatable ? 1 : 0);\n }\n\n /** @hidden */\n private _calculateIsShownNavigationColumn(): void {\n this._tableService._isShownNavigationColumn$.set(this._tableRows.some((tableRow) => tableRow.navigatable));\n }\n\n /** @hidden */\n private _setFreezableInfo(): void {\n this._freezableColumns = getFreezableColumns(this._visibleColumns, this.freezeColumnsTo);\n this._freezableEndColumns = getFreezableEndColumns(this._visibleColumns, this.freezeEndColumnsTo);\n this.fixed = !!this.fixed || !!this._freezableColumns.size || !!this._freezableEndColumns.size;\n this.columns.forEach((column) => {\n column._freezed = this._freezableColumns.has(column.name);\n column._endFreezed = this._freezableEndColumns.has(column.name);\n });\n }\n\n /** @hidden */\n private _buildColumnsMap(columns = this._tableService.tableColumns$.value): void {\n this._keyToColumnMap = new Map(columns.map((column) => [column.key, column]));\n }\n\n /** @hidden */\n private _calculateCheckedAll(): void {\n const selectableRows = getSelectableRows(this._tableRows, this.selectableKey);\n const totalSelected = selectableRows.filter((r) => r.checked);\n this._checkedAll = totalSelected.length === selectableRows.length && selectableRows.length !== 0;\n this._checkedAny = totalSelected.length > 0;\n this._checkedState = this._checkedAll ? true : this._checkedAny ? null : false;\n }\n\n /**\n * Propagates tristate selection mode to the tree. It starts with updating a state for all the parents and then\n * to children\n *\n * @hidden\n */\n private _applyTristateSelection(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n if (!this.enableTristateMode) {\n return;\n }\n this._applySelectionToParents(row, addedRows, removedRows);\n this._applySelectionToChildren(row, addedRows, removedRows);\n }\n\n /** @hidden */\n private _applySelectionToParents(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n let currentRow = row.parent;\n\n while (currentRow) {\n const children = findRowChildren(currentRow, this._tableRows).filter((r) => r.parent === currentRow);\n const totalChecked: TableRow<T>[] = [];\n const totalIndeterminate: TableRow<T>[] = [];\n children.forEach((r) => {\n if (r.checked === true) {\n totalChecked.push(r);\n } else if (r.checked === null) {\n totalIndeterminate.push(r);\n }\n });\n const checkedAll = totalChecked.length === children.length;\n const checkedAny = totalChecked.length > 0;\n\n currentRow.checked = checkedAll ? true : checkedAny || totalIndeterminate.length > 0 ? null : false;\n currentRow.checked || currentRow.checked === null\n ? addedRows.push(currentRow)\n : removedRows.push(currentRow);\n\n currentRow = currentRow.parent;\n }\n }\n\n /** @hidden */\n private _applySelectionToChildren(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n applySelectionToChildren(this._tableRows, row, addedRows, removedRows);\n }\n\n /** @hidden */\n private _listenToPageScrolling(): void {\n this._subscriptions.add(\n this._tableScrollDispatcher.scrolled().subscribe((scrollable) => {\n // this block is handled in the virtual scroll directive for scrollWholeRows\n if (!this._virtualScrollDirective?.scrollWholeRows) {\n const scrollTop = scrollable.getScrollTop();\n\n this.tableScrolled.emit(scrollTop);\n\n // Instead of having two places to record this position, we could just subscribe once.\n this.getTableState().scrollTopPosition = scrollTop;\n }\n })\n );\n }\n\n /** @hidden */\n private _listenToColumnPropertiesChange(): void {\n this._subscriptions.add(\n this._tableService.markForCheck$.pipe(debounceTime(5)).subscribe(() => this._cdr.markForCheck())\n );\n this._subscriptions.add(\n this._tableService.detectChanges$.pipe(debounceTime(5)).subscribe(() => this._cdr.detectChanges())\n );\n }\n\n /** @hidden */\n private _listenToTableWidthChanges(): void {\n this._subscriptions.add(\n resizeObservable(this.tableContainer.nativeElement)\n .pipe(\n tap(() => {\n // this._tableContainerScrollWidth = this.tableContainer.nativeElement.scrollWidth;\n this._checkCellMock();\n }),\n debounceTime(100)\n )\n .subscribe(() => {\n this.recalculateTableColumnWidth();\n if (this._freezableColumns.size || this._freezableEndColumns.size) {\n this._tableColumnResizeService.updateFrozenColumnsWidth();\n this._cdr.detectChanges();\n }\n })\n );\n\n this._subscriptions.add(\n resizeObservable(this.table.nativeElement).subscribe(() => {\n // this._tableScrollWidth = this.table.nativeElement.scrollWidth;\n this._checkCellMock();\n })\n );\n }\n\n /** @hidden */\n private _listenToTableContainerMouseLeave(): void {\n this._ngZone.runOutsideAngular(() => {\n this._subscriptions.add(\n fromEvent(this.tableContainer.nativeElement, 'mouseleave').subscribe(() =>\n this._tableColumnResizeService.hideResizer()\n )\n );\n });\n }\n\n /** @hidden */\n private _initScrollPosition(): void {\n const state = this.getTableState();\n\n if (!state.scrollTopPosition || this._tableRows.length === 0) {\n return;\n }\n this.tableScrollable.initializeScrollTop(state.scrollTopPosition);\n }\n\n /**\n * @hidden\n * Resets editable rows discarding the editable rows array.\n */\n private _resetEditState(): void {\n this._newTableRows = [];\n this._addedItems = [];\n this._forceSemanticHighlighting = false;\n this._setSemanticHighlighting();\n this._setTableRows();\n }\n\n /** @hidden */\n private _listenToLoadingAndRefocusCell(): void {\n this._subscriptions.add(\n this._tableService.tableLoading$.pipe(filter((loadingState) => !loadingState)).subscribe(() => {\n setTimeout(() => {\n if (this._tableHeaderResizer.focusedCellPosition && this._focusableGrid && !this.loadingState) {\n this._focusableGrid.focusCell(this._tableHeaderResizer.focusedCellPosition);\n }\n });\n })\n );\n }\n\n /** @hidden */\n private _onZoneFree(callback: () => void): void {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n callback();\n });\n }\n\n /** @hidden */\n private _setSemanticHighlighting(): void {\n this._tableService._semanticHighlighting$.set(this.semanticHighlighting);\n this._tableService._semanticHighlightingColumnWidth$.set(this._semanticHighlightingColumnWidth);\n }\n\n /** @hidden */\n private _setSelectionColumnWidth(): void {\n this._selectionColumnWidth = this.isSelectionColumnShown\n ? (SELECTION_COLUMN_WIDTH.get(this.contentDensityObserver.value) ?? 0)\n : 0;\n }\n\n /** @hidden */\n private _checkCellMock(): void {\n this._tableColumnResizeService.cellMockVisible$.set(\n this._tableColumnResizeService.fixedWidth &&\n (this.tableContainer?.nativeElement?.scrollWidth ?? 0) > (this.table?.nativeElement?.scrollWidth ?? 0)\n );\n }\n\n /**\n * @hidden\n * Listens to fixed column width subject and calculates last applicable frozen column based on `nonFrozenColumnsMinWidth` vaue.\n */\n private _listenToFixedColumnsWidth(): void {\n this._calculateFrozenColumnRefresh$.next();\n this._calculateFrozenColumnRefresh$.complete();\n\n this._calculateFrozenColumnRefresh$ = new Subject();\n\n this._tableColumnResizeService.fixedColumsWidthChange\n .pipe(takeUntil(this._calculateFrozenColumnRefresh$))\n .subscribe(() => this._calculateLastFreezableColumn());\n }\n\n private _calculateLastFreezableColumn(): void {\n if (!this.tableScrollable || this._lastFreezableColumnCalculation) {\n return;\n }\n this._lastFreezableColumnCalculation = true;\n const allColumns = this._tableColumnResizeService.fixedColumsWidthChange.value;\n const allFrozenColumns = uniq([\n ...this._freezableColumns.keys(),\n this.freezeColumnsTo,\n ...this._freezableEndColumns.keys()\n ]);\n const columnSize = {\n frozen: new Map<string, number>(),\n unFrozen: new Map<string, number>()\n };\n allColumns.forEach((size, column) => {\n columnSize[allFrozenColumns.includes(column) ? 'frozen' : 'unFrozen'].set(column, parseInt(size, 10));\n });\n\n const frozenColumnSizes = [...columnSize.frozen.values()];\n\n if (frozenColumnSizes.length === 0) {\n this._lastFreezableColumnCalculation = false;\n return;\n }\n\n const totalFrozenSize = [...columnSize.frozen.values()].reduce((sum, size) => sum + size);\n\n let diff = this.tableScrollable.elementRef.nativeElement.getBoundingClientRect().width - totalFrozenSize;\n const freezedColumns = [...this._freezableColumns.keys()];\n\n if (diff >= this.nonFrozenColumnsMinWidth) {\n this._lastFreezableColumnCalculation = false;\n return;\n }\n\n let lastColumn: string;\n\n while (diff < this.nonFrozenColumnsMinWidth) {\n if (freezedColumns.length === 0) {\n break;\n }\n\n lastColumn = freezedColumns.pop()!;\n diff += columnSize.frozen.get(lastColumn)!;\n }\n\n this._lastFreezableColumnCalculation = false;\n\n this.freezeToColumn(freezedColumns[freezedColumns.length - 1]);\n }\n\n /** @hidden */\n private _setMockScrollbarPosition(rtl: boolean | undefined): void {\n if (this.tableScrollMockContainer) {\n this.tableScrollMockContainer.nativeElement.style.left = rtl ? '0' : 'auto';\n this.tableScrollMockContainer.nativeElement.style.right = rtl ? 'auto' : '0';\n }\n }\n}\n","@if (tableToolbar) {\n <!-- Toolbar -->\n <ng-template\n [ngTemplateOutlet]=\"tableToolbar.contentTemplateRef\"\n [ngTemplateOutletContext]=\"_toolbarContext\"\n ></ng-template>\n}\n<fd-busy-indicator\n [loading]=\"\n (_tableService.tableLoading$ | async) === true && _dataSourceDirective._firstLoadingDone && !pageScrolling\n \"\n [block]=\"true\"\n [preventWheelEvents]=\"pageScrolling && !!_virtualScrollDirective?.scrollWholeRows\"\n>\n <!-- Table Container -->\n <div class=\"fdp-table__container\" #tableContainer>\n <ng-template [ngTemplateOutlet]=\"tableTemplate\"></ng-template>\n @if (enableDragResize) {\n <!-- Table column resizer for visually representing the resizing process -->\n <fdp-table-column-resizer class=\"fdp-table__column-resizer\"></fdp-table-column-resizer>\n }\n </div>\n @if (showGrowingButton) {\n <fdp-table-growing-button [showItemsCount]=\"showItemsCount\"></fdp-table-growing-button>\n }\n</fd-busy-indicator>\n<!-- Table Template -->\n<ng-template #tableTemplate>\n <div\n class=\"fdp-table__body fd-scrollbar\"\n [class.fdp-table__body--virtual-scroll]=\"!!_virtualScrollDirective?.virtualScroll\"\n [style.position]=\"\n !!_virtualScrollDirective?.virtualScroll && !_virtualScrollDirective?.scrollWholeRows\n ? 'relative'\n : 'static'\n \"\n [class.fdp-table__body--disable-scroll]=\"\n !!_dndTableDirective?.dragDropInProgress && !_virtualScrollDirective?.scrollWholeRows\n \"\n fdpTableScrollable\n #tableScrollable=\"tableScrollable\"\n [style.height]=\"bodyHeight\"\n [class.fixed-height]=\"!!bodyHeight\"\n [attr.role]=\"pageScrolling ? 'feed' : null\"\n [class.fd-table--fixed]=\"_freezableColumns.size || fixed\"\n >\n <table\n fd-table\n [attr.role]=\"isTreeTable ? 'treegrid' : 'grid'\"\n class=\"fdp-table__body-table\"\n [allCellsFocusable]=\"true\"\n [popIn]=\"_tableService.poppingColumns$().length > 0\"\n [class.fd-table--no-outer-border]=\"noOuterBorders\"\n [attr.aria-labelledby]=\"_ariaLabelledBy\"\n >\n <thead fd-table-header [nonInteractive]=\"nonInteractiveHeader\" class=\"fdp-table__header\">\n <tr\n fdp-table-header-row\n [noBorders]=\"noBorders\"\n [noHorizontalBorders]=\"noHorizontalBorders\"\n [noVerticalBorders]=\"noVerticalBorders\"\n [rowId]=\"id\"\n [fixed]=\"fixed\"\n [isShownSelectionColumn]=\"isSelectionColumnShown\"\n [checkedState]=\"_checkedState\"\n [selectionMode]=\"_selectionMode\"\n [selectionColumnWidth]=\"_selectionColumnWidth\"\n [freezeColumnsTo]=\"freezeColumnsTo\"\n [freezeEndColumnsTo]=\"freezeEndColumnsTo\"\n (keydown.enter)=\"_onRowClick(null, $event)\"\n (keydown.space)=\"_onRowClick(null, $event)\"\n (click)=\"_onRowClick(null, $event)\"\n [disableSelectionCheckbox]=\"_dataSourceTableRows.length === 0\"\n ></tr>\n </thead>\n @if (!!_tableRowsVisible.length && _tableService.visibleColumnsLength() > 0) {\n <tbody\n fd-table-body\n fdkDndList\n #tableBody\n [dragoverPredicate]=\"_dndTableDirective?.dragoverPredicate\"\n [dropPredicate]=\"_dndTableDirective?.dropPredicate\"\n [noBorderX]=\"noBorderX || noBorders\"\n [noBorderY]=\"noBorderY || noBorders\"\n [tabIndex]=\"pageScrolling ? 0 : -1\"\n [items]=\"_dndTableRowsPlaceholder\"\n [draggable]=\"isDraggable\"\n [dropMode]=\"_dndTableDirective?.dropMode ?? 'group'\"\n (itemDropped)=\"_dndTableDirective?.dragDropItemDrop($event)\"\n (dropPredicateCalculating)=\"_calculatingLoading($event)\"\n (dropCancelled)=\"_dndTableDirective?.dropCancelled()\"\n >\n @for (rowIndex of _tableCurrentlyRenderedRowsPlaceholder; track _rowTrackBy($index, rowIndex)) {\n @if (_tableRowsVisible[rowIndex]; as row) {\n @switch (row.type) {\n @case ('group') {\n <tr\n fdp-table-group-row\n [style.max-height.px]=\"\n _virtualScrollDirective?.scrollWholeRows ? rowHeight : 'auto'\n \"\n [index]=\"rowIndex\"\n [height]=\"rowHeight\"\n [draggable]=\"isDraggable\"\n [row]=\"row\"\n [rowId]=\"id\"\n [keyToColumnMap]=\"_keyToColumnMap\"\n (toggleGroupRow)=\"_toggleGroupRow($event)\"\n (click)=\"_emitRowActivate(row, $event.ctrlKey || $event.metaKey)\"\n ></tr>\n }\n @default {\n <tr\n [fdkDndItem]=\"row\"\n [applyDragItemClass]=\"isDraggable\"\n [class]=\"row | rowClasses: rowsClass\"\n [tabindex]=\"\n !_tableService.poppingColumns$()?.length &&\n (rowsActivable || !!row.navigatable)\n ? 0\n : -1\n \"\n [focusable]=\"\n !_tableService.poppingColumns$()?.length &&\n (rowsActivable || !!row.navigatable)\n \"\n [hoverable]=\"rowsActivable || isSelectionColumnShown || !!row.navigatable\"\n [activable]=\"rowsActivable || !!row.navigatable\"\n [active]=\"rowIndex === _navigatedRowIndex\"\n [highlightActive]=\"highlightNavigatedRow\"\n [style.max-height.px]=\"\n _virtualScrollDirective?.scrollWholeRows ? rowHeight : 'auto'\n \"\n [style.height.px]=\"rowHeight\"\n [attr.aria-level]=\"isTreeTable ? row.level + 1 : null\"\n (keydown.enter)=\"_onRowClick(row, $event)\"\n (keydown.space)=\"_onRowClick(row, $event)\"\n (click)=\"_onRowClick(row, $event)\"\n (started)=\"_onDragStarted(row, $index, rowIndex)\"\n [main]=\"true\"\n [class.fd-table__row--draggable]=\"isDraggable\"\n fdp-table-row\n [attr.aria-rowindex]=\"rowIndex + 1\"\n [rowId]=\"id\"\n [class.fd-tr-hovered]=\"!row.checked && hoveredRowIndex$() === rowIndex\"\n [index]=\"rowIndex\"\n [row]=\"row\"\n [selectionMode]=\"_selectionMode\"\n [selectableKey]=\"selectableKey\"\n [enableTristateMode]=\"enableTristateMode\"\n [fixed]=\"fixed\"\n [selectionColumnWidth]=\"_selectionColumnWidth\"\n [freezeColumnsTo]=\"freezeColumnsTo\"\n [freezeEndColumnsTo]=\"freezeEndColumnsTo\"\n ></tr>\n }\n }\n @if (row.type === 'item' && _tableService.poppingColumns$().length > 0) {\n <tr\n (keydown.enter)=\"_onRowClick(row, $event)\"\n (keydown.space)=\"_onRowClick(row, $event)\"\n (click)=\"_onRowClick(row, $event)\"\n fdp-table-popping-row\n [secondary]=\"true\"\n [style.cursor]=\"rowsActivable || !!row.navigatable ? 'pointer' : 'auto'\"\n [style.height.px]=\"secondaryRowHeight\"\n [selectionMode]=\"selectionMode\"\n [row]=\"row\"\n [checked]=\"row.checked\"\n [class]=\"row | rowClasses: rowsClass\"\n (toggleGroupRow)=\"_toggleGroupRow($event)\"\n (cellClicked)=\"_onCellClick($event.index, $event.row)\"\n (mouseenter)=\"handleMouseEnter(rowIndex)\"\n (mouseleave)=\"handleMouseLeave()\"\n ></tr>\n }\n @if (row.children.length === 0 && (row.childItemsLoading$ | async)) {\n @for (_ of loadingRowRange; track $index) {\n <tr fd-table-row>\n @for (_ of loadingColumnsRange; track $index) {\n <td fd-table-cell>\n <fd-skeleton\n [style.margin]=\"'auto 0'\"\n type=\"text\"\n textLines=\"1\"\n width=\"60%\"\n ></fd-skeleton>\n </td>\n }\n </tr>\n }\n }\n <!-- Last rendered child row. -->\n @if (row.parent?.lastChild?.index === row.index) {\n <tr\n aria-hidden=\"true\"\n class=\"fd-table__intersection-spy\"\n [fdkIntersectionSpy]=\"pageScrollingThreshold\"\n (intersected)=\"$event && _tableRowService.loadChildRows(row.parent!)\"\n [style.top.px]=\"pageScrollingThreshold * -1\"\n ></tr>\n }\n }\n }\n @if (pageScrolling && !_virtualScrollDirective?.scrollWholeRows) {\n <tr\n aria-hidden=\"true\"\n class=\"fd-table__intersection-spy\"\n [fdkIntersectionSpy]=\"pageScrollingThreshold\"\n (intersected)=\"$event && _onSpyIntersect($event)\"\n [style.top.px]=\"pageScrollingThreshold * -1\"\n ></tr>\n @if (\n (_tableService.tableLoading$ | async) === true &&\n _dataSourceDirective._firstLoadingDone &&\n pageScrolling\n ) {\n <tr fd-table-row>\n @for (_ of loadingColumnsRange; track $index) {\n <td fd-table-cell>\n <fd-skeleton\n [style.margin]=\"'auto 0'\"\n type=\"text\"\n textLines=\"1\"\n width=\"100%\"\n ></fd-skeleton>\n </td>\n }\n </tr>\n }\n }\n </tbody>\n } @else {\n @if (!_dataSourceDirective._firstLoadingDone) {\n <tbody fd-table-body>\n @for (_ of loadingRowRange; track $index) {\n <tr fd-table-row>\n @for (_ of loadingColumnsRange; track $index) {\n <td fd-table-cell>\n <fd-skeleton\n [style.margin]=\"'auto 0'\"\n type=\"text\"\n textLines=\"1\"\n width=\"60%\"\n ></fd-skeleton>\n </td>\n }\n </tr>\n }\n </tbody>\n } @else {\n <tbody fd-table-body class=\"fdp-table__empty\">\n <tr fd-table-row>\n <td fd-table-cell class=\"fd-table__cell--no-data\" colspan=\"100%\">\n <div class=\"fdp-table__empty-table-message\">\n <ng-content select=\"fdp-table-no-data-wrapper\"></ng-content>\n @if (!_noDataWrapper && _tableService.visibleColumnsLength() > 0) {\n <div>\n {{\n emptyTableMessage ||\n ('platformTable.defaultEmptyMessage' | fdTranslate)()\n }}\n </div>\n } @else if (_tableService.visibleColumnsLength() === 0) {\n <div>\n {{\n noVisibleColumnsMessage ||\n ('platformTable.noVisibleColumnsMessage' | fdTranslate)()\n }}\n </div>\n }\n </div>\n </td>\n </tr>\n </tbody>\n }\n }\n @if (pageScrolling) {\n <tbody class=\"fd-table__body__focus-mock\"></tbody>\n }\n @if (_virtualScrollDirective?.virtualScroll && !_virtualScrollDirective?.scrollWholeRows) {\n <!-- the tbody element below is so the scrollbar renders correctly -->\n <tbody>\n <tr>\n <td colspan=\"100%\" [style.height.px]=\"_virtualScrollDirective!.virtualScrollTotalHeight\"></td>\n </tr>\n </tbody>\n }\n <!-- the tbody element below is so the scrollbar renders correctly -->\n @if (_virtualScrollDirective?.virtualScroll && _virtualScrollDirective?.scrollWholeRows) {\n <tbody\n [class.fd-table__body--scroll-mock]=\"!!_virtualScrollDirective?.scrollWholeRows\"\n [class.fdp-table__body--disable-scroll]=\"\n !!_dndTableDirective?.dragDropInProgress && !_virtualScrollDirective?.scrollWholeRows\n \"\n #tableScrollMockContainer\n >\n <tr>\n <td colspan=\"100%\" [style.height.px]=\"_virtualScrollDirective?.virtualScrollTotalHeight\"></td>\n </tr>\n </tbody>\n }\n @if (showTableFooter) {\n <tfoot fd-table-footer>\n <tr fdp-table-footer-row></tr>\n </tfoot>\n }\n </table>\n </div>\n</ng-template>\n<!-- Empty Table Message -->\n","import { NgModule } from '@angular/core';\n\nimport { TableHelpersModule } from '@fundamental-ngx/platform/table-helpers';\n\nimport {\n FilterCustomComponent,\n FilterMultiSelectComponent,\n FilterRuleComponent,\n FilterSingleSelectComponent,\n FilterStepComponent,\n FiltersComponent,\n FiltersListStepComponent,\n GroupingComponent,\n P13ColumnsDialogComponent,\n P13FilteringDialogComponent,\n P13GroupingDialogComponent,\n ResetButtonComponent,\n SortingComponent,\n TableColumnComponent,\n TableP13ColumnsComponent,\n TableP13DialogComponent,\n TableP13FilterComponent,\n TableP13GroupComponent,\n TableP13SortComponent,\n TableToolbarActionsComponent,\n TableToolbarComponent,\n TableViewSettingsDialogComponent,\n TableViewSettingsFilterComponent\n} from './components';\nimport {\n GetAvailableSortColumnsPipe,\n P13SortingDialogComponent\n} from './components/table-p13-dialog/sorting/sorting.component';\nimport { TableComponent } from './table.component';\n\nimport { NoDataWrapperComponent, PlatformTableColumnResizerComponent } from './components';\nimport { TableEditableCellComponent } from './components/table-editable-cell/table-editable-cell.component';\nimport { TableToolbarLeftActionsComponent } from './components/table-toolbar/table-toolbar-left-actions.component';\n\nimport { TableCellHeaderPopoverComponent, TableHeaderCellContentComponent } from './components';\nimport { TableGrowingButtonComponent } from './components/growing-button/table-growing-button.component';\nimport { TableFooterRowComponent } from './components/table-footer-row/table-footer-row.component';\nimport { TableGroupRowComponent } from './components/table-group-row/table-group-row.component';\nimport {\n IsColumnHasHeaderMenuPipe,\n TableHeaderRowComponent\n} from './components/table-header-row/table-header-row.component';\nimport { TablePoppingRowComponent } from './components/table-popping-row/table-popping-row.component';\nimport { TableRowComponent } from './components/table-row/table-row.component';\n\nconst EXPORTABLE_DECLARATIONS = [\n TableComponent,\n TableColumnComponent,\n TableToolbarComponent,\n TableToolbarActionsComponent,\n TableViewSettingsDialogComponent,\n TableViewSettingsFilterComponent,\n SortingComponent,\n GroupingComponent,\n FiltersComponent,\n FiltersListStepComponent,\n FilterStepComponent,\n FilterSingleSelectComponent,\n FilterMultiSelectComponent,\n FilterCustomComponent,\n ResetButtonComponent,\n TableP13DialogComponent,\n TableP13SortComponent,\n TableP13FilterComponent,\n TableP13GroupComponent,\n TableP13ColumnsComponent,\n P13SortingDialogComponent,\n P13GroupingDialogComponent,\n P13FilteringDialogComponent,\n FilterRuleComponent,\n P13ColumnsDialogComponent,\n PlatformTableColumnResizerComponent,\n NoDataWrapperComponent,\n GetAvailableSortColumnsPipe,\n TableEditableCellComponent,\n TableToolbarLeftActionsComponent,\n TableHeaderCellContentComponent,\n TableCellHeaderPopoverComponent,\n TableRowComponent,\n TableGroupRowComponent,\n TablePoppingRowComponent,\n TableHeaderRowComponent,\n IsColumnHasHeaderMenuPipe,\n TableGrowingButtonComponent,\n TableFooterRowComponent\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [...EXPORTABLE_DECLARATIONS, TableHelpersModule],\n exports: [...EXPORTABLE_DECLARATIONS, TableHelpersModule]\n})\nexport class PlatformTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["INITIAL_SEARCH_TEXT","INITIAL_SHOW_ALL_ITEMS","i1","ListComponent","i2","NOT_SELECTED_OPTION_VALUE","dialogConfig","distinctUntilChanged","CoreTableService","FdTableComponent","CoreTableComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAea,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,qFAXrB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAW5B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;+BACI,2BAA2B,EAAA,QAAA,EAC3B,CAAA,yBAAA,CAA2B,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,UAAA,EAOzB,IAAI,EAAA,MAAA,EAAA,CAAA,uDAAA,CAAA,EAAA;;;MCGP,gBAAgB,GAAG,IAAI,cAAc,CAAa,YAAY;MAe9D,oBAAoB,CAAA;;AAE7B,IAAA,WAAA,CAA6C,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;IAAe;AAF7D,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAET,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAF3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXnB,CAAA;;;;;;eAMC,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGD,eAAe,iIAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEjC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAbhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,CAAA,sBAAA,CAAwB;AAClC,oBAAA,QAAQ,EAAE,CAAA;;;;;;AAMC,cAAA,CAAA;oBACX,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe;AAC7C,iBAAA;;0BAGgB,MAAM;2BAAC,gBAAgB;;;MC0B3B,+BAA+B,CAAA;AArB5C,IAAA,WAAA,GAAA;;QAgCI,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAIhB,IAAA,CAAA,YAAY,GAAG,KAAK;;QAIpB,IAAA,CAAA,2BAA2B,GAAsB,KAAK;;AAmBtD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAqB,EAAE,0DAAC;;AAG/C,QAAA,IAAA,CAAA,sBAAsB,GAAoB;AACtC,YAAA;AACI,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,eAAe,EAAE;AACpB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,eAAe,EAAE;AACpB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,eAAe,EAAE;AACpB;SACJ;;QAGkB,IAAA,CAAA,cAAc,GAAG,aAAa;;AAGhC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;;AAGpC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAuF1C,IAAA;;IApFG,eAAe,GAAA;QACX,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAClG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;AACzE,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,yBAAyB,CAAC,gBAA4C,EAAA;QAClE,QAAQ,gBAAgB;YACpB,KAAK,WAAW,CAAC,KAAK;gBAClB,OAAO,gBAAgB,CAAC,YAAY;YACxC,KAAK,WAAW,CAAC,MAAM;gBACnB,OAAO,gBAAgB,CAAC,MAAM;YAClC,KAAK,WAAW,CAAC,GAAG;gBAChB,OAAO,gBAAgB,CAAC,UAAU;AACtC,YAAA;gBACI,OAAO,gBAAgB,CAAC,IAAI;;IAExC;;IAGA,sBAAsB,CAAC,KAAyB,EAAE,SAAwB,EAAA;AACtE,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,EAAE;IACxB;;AAGA,IAAA,uBAAuB,CAAC,KAAyB,EAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AAChD,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;;AAEjE,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC;aAAO;YACH,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAChG;IACJ;;IAGA,wBAAwB,CAAC,KAAyB,EAAE,KAAU,EAAA;QAC1D,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC;YACzC;QACJ;AACA,QAAA,MAAM,gBAAgB,GAA2B;YAC7C,KAAK;YACL,KAAK;YACL,IAAI,EAAE,wBAAwB,CAAC,MAAM;YACrC,QAAQ,EAAE,sBAAsB,CAAC,QAAQ;AACzC,YAAA,OAAO,EAAE;SACZ;QAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,EAAE;IACxB;;IAGA,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QACtE,IAAI,CAAC,aAAa,EAAE;IACxB;;IAGA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAChE,IAAI,CAAC,aAAa,EAAE;IACxB;;AAGA,IAAA,cAAc,CAAC,MAAe,EAAA;QAC1B,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC,CAAC;QACtD;IACJ;;IAGA,aAAa,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACpB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAC7C,IAAI,cAAc,EAAE;AACf,gBAAA,cAA6B,CAAC,aAAa,CAAC,KAAK,EAAE;YACxD;QACJ;IACJ;8GA9JS,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA0B7B,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQhB,aAAa,mEAJV,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzFnC,syJAkHA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtEQ,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,4BAA4B,EAAA,QAAA,EAAA,4DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,iBAAiB,oIACjB,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,oBAAoB,4JACpB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBArB3C,SAAS;+BACI,+BAA+B,EAAA,aAAA,EAE1B,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,gBAAgB;wBAChB,qBAAqB;wBACrB,aAAa;wBACb,4BAA4B;wBAC5B,gBAAgB;wBAChB,iBAAiB;wBACjB,iBAAiB;wBACjB,iBAAiB;wBACjB,kBAAkB;wBAClB,iBAAiB;wBACjB,kBAAkB;wBAClB,oBAAoB;wBACpB;AACH,qBAAA,EAAA,QAAA,EAAA,syJAAA,EAAA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAI7C,YAAY;uBAAC,iBAAiB;;sBAI9B,SAAS;uBAAC,aAAa;;;AExE5B;MAYa,mCAAmC,CAAA;;IAc5C,WAAA,CACqB,OAAe,EACf,yBAAmD,EACnD,SAAoB,EACpB,OAAmB,EACD,SAA0B,EAAA;QAJ5C,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;QACW,IAAA,CAAA,SAAS,GAAT,SAAS;;AAdxC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGvB,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,kDAAC;;QAGzD,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IASlE;;IAGH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAChC,SAAS,CAAa,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW;AACxD,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,iBAAA,SAAS,CAAC,CAAC,GAAG,KAAI;gBACf,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AAClC,oBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,GAAG,CAAC;oBAE/C,IAAI,CAAC,iBAAiB,EAAE;gBAC5B;AACJ,YAAA,CAAC,CAAC;YAEN,IAAI,CAAC,yBAAyB,CAAC;AAC1B,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,iBAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;gBACpB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;gBAC/F,IAAI,CAAC,QAAQ,EAAE;oBACX;gBACJ;AACA,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B,MAAM,EACN,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,CAC3C;AACD,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B,OAAO,EACP,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,CAC5C;AACL,YAAA,CAAC,CAAC;YAEN,IAAI,CAAC,yBAAyB,CAAC;AAC1B,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,iBAAA,SAAS,CAAC,CAAC,gBAAgB,KAAI;gBAC5B,IAAI,gBAAgB,EAAE;AAClB,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,kCAAkC,CAAC;gBAC3F;qBAAO;AACH,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,kCAAkC,CAAC;gBAC9F;AACJ,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;IACN;;IAGQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AAExC,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB;YACJ;YACA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAa,IAAI,CAAC,SAAS,EAAE,SAAS;AACtE,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,gBAAA,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,KAAK,CAAC;;AAEtD,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;IACN;AAjFS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,mIAmBhC,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAnBX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,0IATlC,CAAA,6CAAA,CAA+C,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAShD,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAX/C,SAAS;+BACI,CAAA,wBAAA,CAA0B,EAAA,QAAA,EAC1B,CAAA,6CAAA,CAA+C,EAAA,eAAA,EAExC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA;;0BAqBX,MAAM;2BAAC,QAAQ;;;ACvBxB;;;;;;;;;;;;;;;;;;;AAmBK;AASC,MAAO,oBAAqB,SAAQ,WAAW,CAAA;;IAUjD,IACI,KAAK,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;IACvC;AAEA,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK;IACxC;;IAwDA,IACI,KAAK,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IACnE;AACA,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM;IACtB;;IA0CA,IACI,UAAU,CAAC,UAAgC,EAAA;AAC3C,QAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU,EAAE,WAAW;IACrD;;IAGA,IACI,kBAAkB,CAAC,kBAAgD,EAAA;AACnE,QAAA,IAAI,CAAC,0BAA0B,GAAG,kBAAkB,EAAE,WAAW;IACrE;;IAGA,IACI,gBAAgB,CAAC,gBAA4C,EAAA;AAC7D,QAAA,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,EAAE,WAAW;IAC3D;;IAGA,IACI,oBAAoB,CAAC,OAAkD,EAAA;AACvE,QAAA,IAAI,CAAC,yBAAyB,GAAG,OAAO,EAAE,WAAW;IACzD;;IASA,WAAA,CACqB,yBAAmD,EAC/B,aAA4B,EAAA;AAEjE,QAAA,KAAK,EAAE;QAHU,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACL,IAAA,CAAA,aAAa,GAAb,aAAa;;QA9H7C,IAAA,CAAA,KAAK,GAAqB,OAAO;;QAI1C,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAIhB,IAAA,CAAA,UAAU,GAAG,KAAK;;QAIlB,IAAA,CAAA,OAAO,GAAG,IAAI;AAEd;;;AAGG;AAEH,QAAA,IAAA,CAAA,QAAQ,GAA6B,wBAAwB,CAAC,MAAM;AAEpE;;;AAGK;QAEL,IAAA,CAAA,mBAAmB,GAAa,EAAE;;QAIlC,IAAA,CAAA,SAAS,GAAG,KAAK;;QAIjB,IAAA,CAAA,SAAS,GAAG,KAAK;;QAIjB,IAAA,CAAA,YAAY,GAAG,KAAK;;QAIpB,IAAA,CAAA,cAAc,GAAG,KAAK;;QActB,IAAA,CAAA,MAAM,GAAG,KAAK;;QAId,IAAA,CAAA,SAAS,GAAG,IAAI;;QAIhB,IAAA,CAAA,IAAI,GAAsC,UAAU;;AAG3C,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,IAAI,6DAAC;;AAMxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC;;QAY5C,IAAA,CAAA,eAAe,GAAG,KAAK;;QAGvB,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAGhB,IAAA,CAAA,WAAW,GAAG,KAAK;;QA2BnB,IAAA,CAAA,eAAe,GAA6B,SAAS;IAWrD;;IAGA,QAAQ,GAAA;QACJ,IAAI,CAAC,mBAAmB,EAAE;IAC9B;AAEA;AACa;AACb,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AAC1G,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;QACrC;IACJ;;IAGQ,mBAAmB,GAAA;AACvB,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC/B,YAAA,MAAM,KAAK,CAAC,wCAAwC,CAAC;QACzD;IACJ;8GAjLS,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAHlB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA6H1D,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMV,kBAAkB,mFAMlB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMhB,+BAA+B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlJnC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAMH,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,oBAAsB,EAAE,CAAC;AACxE,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA2JQ;;0BAAY;;sBAxJhB;;sBAIA;;sBAIA;;sBAUA;;sBAIA;;sBAIA;;sBAGA;;sBAIA;;sBAIA;;sBAOA;;sBAOA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAUA;;sBAIA;;sBAIA;;sBA+BA,YAAY;uBAAC,UAAU;;sBAMvB,YAAY;uBAAC,kBAAkB;;sBAM/B,YAAY;uBAAC,gBAAgB;;sBAM7B,YAAY;uBAAC,+BAA+B;;;MC1KpC,+BAA+B,CAAA;AApB5C,IAAA,WAAA,GAAA;;AAoCa,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,OAAO,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AACvE,QAAA,CAAC,uDAAC;;AAGO,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,OAAO,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AACzE,QAAA,CAAC,sDAAC;;AAGO,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,OAAO,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AACvE,QAAA,CAAC,oDAAC;;QAGO,IAAA,CAAA,cAAc,GAAG,aAAa;;AAGtB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAwB,IAAI,oDAAC;;AAG9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC;AAC3D,IAAA;;IAnCG,IACI,MAAM,CAAC,KAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IAC1B;8GAbS,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3B5C,65CAqCA,EAAA,MAAA,EAAA,CAAA,8KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDZc,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAa,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAlB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE/D,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBApB3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,iBAE1B,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EActC,CAAC,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,65CAAA,EAAA,MAAA,EAAA,CAAA,8KAAA,CAAA,EAAA;;sBAIjF;;sBAIA;;;AE0BL,MAAM,gBAAgB,CAAA;AAClB,IAAA,WAAA;;IAEW,QAAiB;;IAEjB,MAAe;;IAEf,MAAyB,EAAA;QAJzB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAER,IAAA,CAAA,MAAM,GAAN,MAAM;QAEN,IAAA,CAAA,MAAM,GAAN,MAAM;IACd;AACN;AAED,MAAMA,qBAAmB,GAAG,EAAE;AAC9B,MAAMC,wBAAsB,GAAG,IAAI;MAqCtB,yBAAyB,CAAA;;AA2BlC,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE;IAC/C;;AAGA,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;IACvE;;IAMA,WAAA,CACW,SAAuC,EACtC,GAAsB,EAAA;QADvB,IAAA,CAAA,SAAS,GAAT,SAAS;QACR,IAAA,CAAA,GAAG,GAAH,GAAG;;AAxCN,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,6DAAC;;QAGjC,IAAA,CAAA,gBAAgB,GAAwB,EAAE;;QAGnD,IAAA,CAAA,kBAAkB,GAAuB,EAAE;;QAG3C,IAAA,CAAA,gBAAgB,GAAuB,EAAE;;AAGzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAASD,qBAAmB,CAAC;;AAEtE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAUC,wBAAsB,CAAC;;QAG3E,IAAA,CAAA,qBAAqB,GAAG,CAAC;;QAGzB,IAAA,CAAA,eAAe,GAAG,IAAI;;QAEtB,IAAA,CAAA,iBAAiB,GAAG,IAAI;;AAahB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;QAOvC,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;QAEhE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE;AAEzF,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;IACzC;;IAGA,QAAQ,GAAA;QACJ,IAAI,CAAC,sBAAsB,EAAE;IACjC;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;IAGA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;;IAGA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B;;IAGA,OAAO,GAAA;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAA,MAAM,MAAM,GAA4B,EAAE,cAAc,EAAE,WAAW,EAAE;AACvE,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC;;AAGA,IAAA,gBAAgB,CAAC,SAAkB,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,eAAe,EAAE;IAC1B;;IAGA,eAAe,GAAA;QACX,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,6BAA6B,EAAE;IACxC;;IAGA,6BAA6B,GAAA;QACzB,IAAI,UAAU,GAAG,KAAK;QACtB,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;;YAE7D,UAAU,GAAG,IAAI;QACrB;aAAO;;AAEH,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC/D,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;oBAChF,UAAU,GAAG,IAAI;oBACjB;gBACJ;YACJ;QACJ;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1C;;IAGA,kBAAkB,CAAC,EAAE,IAAI,EAAe,EAAA;QACpC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC7C;;IAGA,cAAc,GAAA;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE;QACzD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;IACjD;;AAGA,IAAA,gBAAgB,CAAC,MAA+B,EAAA;QAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AACpC,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO,KAAK,MAAM;AACvC,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,8BAA8B,EAAE;IACzC;;AAGA,IAAA,gBAAgB,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IACxF;;AAGA,IAAA,mBAAmB,CAAC,KAAY,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,gCAAgC,CACjC,IAAI,CAAC,mCAAmC,EAAE,EAC1C,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CACnC;IACL;;AAGA,IAAA,aAAa,CAAC,KAAY,EAAA;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mCAAmC,EAAE;QACpE,IAAI,CAAC,gCAAgC,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,CAAC,CAAC;;QAG/E,UAAU,CAAC,MAAK;AACZ,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAqB;YAC7C,SAAS,CAAC,KAAK,EAAE;QACrB,CAAC,EAAE,CAAC,CAAC;IACT;;AAGA,IAAA,eAAe,CAAC,KAAY,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mCAAmC,EAAE;QACpE,IAAI,CAAC,gCAAgC,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,CAAC,CAAC;IACnF;;AAGA,IAAA,8BAA8B,CAAC,IAAsB,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;IACvC;;IAGA,iBAAiB,CAAC,KAAa,EAAE,IAAsB,EAAA;AACnD,QAAA,OAAO,IAAI,EAAE,MAAM,CAAC,GAAG;IAC3B;AAEA;;;;AAIG;AACK,IAAA,gBAAgB,CAAC,iBAA2B,EAAA;QAChD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,CACvD,CAAC,MAAM,EAAE,KAAa,MAAwB;YAC1C,MAAM;YACN,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;YAChD,MAAM,EAAE,KAAK,KAAK;AACrB,SAAA,CAAC,CACL;;QAGD,IAAI,CAAC,qBAAqB,EAAE;QAE5B,IAAI,CAAC,6BAA6B,EAAE;;AAGpC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAACD,qBAAmB,CAAC;AAClD,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAACC,wBAAsB,CAAC;IAC1D;;IAGQ,sBAAsB,GAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,aAAa,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,CAAC;AAC9D,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;aACrB,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,KAAI;AAClC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC5D,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;AAClC,qBAAA,iBAAiB;AACjB,qBAAA,QAAQ,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;AAC9C,gBAAA,MAAM,cAAc,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ;gBAC/C,OAAO,kBAAkB,IAAI,cAAc;AAC/C,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,4BAA4B,EAAE;AAEnC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACT;IACL;;IAGQ,4BAA4B,GAAA;QAChC,IAAI,CAAC,8BAA8B,EAAE;IACzC;;AAGQ,IAAA,qCAAqC,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAA;QAC3E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAwB,MAAM,CAAC,GAAG,CAAC;IACxG;;AAGQ,IAAA,eAAe,CAAC,OAA2B,EAAA;AAC/C,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;IACrD;;IAGQ,mCAAmC,GAAA;AACvC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IAClE;;IAGQ,gCAAgC,CAAC,IAAY,EAAE,EAAU,EAAA;AAC7D,QAAA,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC;AACtG;;;AAGG;AACH,QAAA,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,YAAY,CAAC;QAEzD,IAAI,CAAC,8BAA8B,EAAE;QACrC,IAAI,CAAC,6BAA6B,EAAE;IACxC;AAEA;;;AAGG;IACK,2BAA2B,CAAC,UAA4B,EAAE,UAA4B,EAAA;AAC1F,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB;AACpC,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/F;AAEA;;;;AAIG;AACK,IAAA,4BAA4B,CAChC,IAAS,EACT,SAAiB,EACjB,OAAe,EAAA;AAEf,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;AAE9B,QAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;AAC5D,QAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;AAExD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC;AAElC,QAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE;IACtC;;IAGQ,qBAAqB,GAAA;QACzB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC,CAAC,MAAM;IAClG;;IAGQ,8BAA8B,GAAA;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mCAAmC,EAAE;AAC9D,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;IAC/F;8GA3SS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EA/BvB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7EtF,2tNA4IA,EAAA,MAAA,EAAA,CAAA,8lBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5DQ,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGpB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,kCAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,kBAAA,EAAA,4BAAA,EAAA,sCAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,eAAe,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,oBAAoB,EAAA,QAAA,EAAA,4DAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpBC,eAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGlB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAFrB,SAAS,yCACT,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIV,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAnCrC,SAAS;AAGS,YAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,2BAA2B,EAAE,CAAC,mBACjE,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,eAAe;wBACf,qBAAqB;wBACrB,iBAAiB;wBACjB,gBAAgB;wBAChB,mBAAmB;wBACnB,cAAc;wBACd,iBAAiB;wBACjB,oBAAoB;wBACpB,aAAa;wBACb,kBAAkB;wBAClB,mBAAmB;wBACnB,gBAAgB;wBAChB,oBAAoB;wBACpB,sBAAsB;wBACtB,eAAe;wBACf,oBAAoB;wBACpBD,eAAa;wBACb,iBAAiB;wBACjB,iBAAiB;wBACjB,WAAW;wBACX,kBAAkB;wBAClB,qBAAqB;wBACrB,kBAAkB;wBAClB,SAAS;wBACT,eAAe;wBACf;AACH,qBAAA,EAAA,QAAA,EAAA,2tNAAA,EAAA,MAAA,EAAA,CAAA,8lBAAA,CAAA,EAAA;;;AEhFL;;;;AAIG;MAEU,UAAU,CAAA;;AAiBnB,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IACxE;;AAGA,IAAA,WAAA,CACa,OAAwC;;IAE1C,SAAkB;;IAElB,QAAyB;;IAEzB,KAAgB;;IAEhB,MAAiB,EAAA;QARf,IAAA,CAAA,OAAO,GAAP,OAAO;QAET,IAAA,CAAA,SAAS,GAAT,SAAS;QAET,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAER,IAAA,CAAA,KAAK,GAAL,KAAK;QAEL,IAAA,CAAA,MAAM,GAAN,MAAM;;QA7BjB,IAAA,CAAA,OAAO,GAAG,KAAK;;QAGf,IAAA,CAAA,UAAU,GAAkC,EAAE;AAK9C;;;AAGK;QACL,IAAA,CAAA,mBAAmB,GAAa,EAAE;AAmB9B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/C;QACA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD;QACA,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1D;IACJ;;AAGA,IAAA,QAAQ,CAAC,OAAgB,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IAC1B;;AAGA,IAAA,QAAQ,CAAC,KAAe,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACtB;;AAGA,IAAA,SAAS,CAAC,KAAe,EAAA;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;;AAGA,IAAA,WAAW,CAAC,QAAwB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC5B;;AAGA,IAAA,wBAAwB,CAAC,SAAkB,EAAA;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,QAAQ;QAClF,IAAI,CAAC,QAAQ,EAAE;YACX;QACJ;AAEA,QAAA,MAAM,UAAU,GAAG,kCAAkC,CAAC,QAAQ,CAAC;AAE/D,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;YAChC;QACJ;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAE5B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAS,CAAC,EAAE;YAC3C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC;IACJ;;AAGA,IAAA,YAAY,CAAC,SAAiB,EAAA;AAC1B,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;YAC9B;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;AAG1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;AAGpB,QAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;;AAGtC,QAAA,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC;;AAGjD,QAAA,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC;IAC5C;;AAGA,IAAA,sBAAsB,CAAC,SAAkB,EAAA;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,QAAQ;AAClF,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC5B;;AAGA,IAAA,iCAAiC,CAAC,SAAkB,EAAA;QAChD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,mBAAmB;AACxG,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,EAAE;IAC7E;;AAGQ,IAAA,WAAW,CAAC,KAAU,EAAA;AAC1B,QAAA,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,SAAS;IAC/D;AACH;;MChHY,mBAAmB,CAAA;AAjBhC,IAAA,WAAA,GAAA;;AAsBc,QAAA,IAAA,CAAA,UAAU,GAAuB,IAAI,YAAY,EAAE;;AAGnD,QAAA,IAAA,CAAA,eAAe,GAA0B,IAAI,YAAY,EAAE;;QAG5D,IAAA,CAAA,eAAe,GAAG,eAAe;;QAGjC,IAAA,CAAA,SAAS,GAAG,wBAAwB;;QAGpC,IAAA,CAAA,cAAc,GAAG,qBAAqB;;AAuBvC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;AAW9C,IAAA;;IA/BG,IACI,MAAM,CAAC,MAAc,EAAA;QACrB,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,MAAM,CAAC;AACH,cAAE,IAAI;;QAEF,IAAI,CAAC,CAAC,CAAC;aAEV,SAAS,CAAC,MAAK;AACZ,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QACtC,CAAC,CAAC,CACT;IACL;;IAMA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;IAGA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IAC1B;8GAlDS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAoBjB,MAAM,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChErB,yoKAqHA,4CDpFQ,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,eAAe,ynBACf,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,eAAe,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,oJAChB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,kCAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACpB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAjB/B,SAAS;+BACI,uBAAuB,EAAA,eAAA,EAEhB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACL,sBAAsB;wBACtB,sBAAsB;wBACtB,eAAe;wBACf,WAAW;wBACX,eAAe;wBACf,gBAAgB;wBAChB,mBAAmB;wBACnB,oBAAoB;wBACpB;AACH,qBAAA,EAAA,QAAA,EAAA,yoKAAA,EAAA;;sBAIA;;sBAGA;;sBAGA;;sBAYA,SAAS;uBAAC,MAAM;;;MEAR,2BAA2B,CAAA;;AA4CpC,IAAA,WAAA,CAAmB,SAAsC,EAAA;QAAtC,IAAA,CAAA,SAAS,GAAT,SAAS;;AA1CnB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,6DAAC;;QAGjC,IAAA,CAAA,OAAO,GAAuB,EAAE;AAEzC;;;AAGG;QACH,IAAA,CAAA,aAAa,GAAiB,EAAE;AAEhC;;;AAGG;QACH,IAAA,CAAA,aAAa,GAAiB,EAAE;AAEhC;;;AAGG;QACH,IAAA,CAAA,uBAAuB,GAAG,CAAC;AAE3B;;;AAGG;QACH,IAAA,CAAA,uBAAuB,GAAG,CAAC;AAE3B;;;AAGG;QACH,IAAA,CAAA,qBAAqB,GAAG,IAAI;AAE5B;;;AAGG;QACH,IAAA,CAAA,qBAAqB,GAAG,KAAK;;QA0IrB,IAAA,CAAA,yBAAyB,GAAG,MAAW;AAC3C,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM;AAClF,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM;AACtF,QAAA,CAAC;;QAGO,IAAA,CAAA,YAAY,GAAG,CAAC,IAAgB,KAAc,IAAI,EAAE,OAAO;QA5I/D,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;AAEzD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;AAElE,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAErC,IAAI,CAAC,yBAAyB,EAAE;QAEhC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,uBAAuB,GAAG,CAAC;QAE7D,IAAI,CAAC,6BAA6B,EAAE;IACxC;;IAGA,KAAK,GAAA;QACD,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC;AAChC,QAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC;IACpC;;IAGA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B;;IAGA,OAAO,GAAA;AACH,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qCAAqC,EAAE;AACnE,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qCAAqC,EAAE;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS;QAC/C,MAAM,eAAe,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,cAAc,CAAC;QAE9D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,eAAe,CAAC,EAAE;AAC1C,YAAA,MAAM,MAAM,GAA2B,EAAE,gBAAgB,EAAE,eAAe,EAAE;AAE5E,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC;IACJ;;IAGA,WAAW,CAAC,IAAgB,EAAE,KAAmB,EAAA;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAEjC,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd;QACJ;AAEA,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;AAGtB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C;QAEA,IAAI,CAAC,6BAA6B,EAAE;QAEpC,IAAI,CAAC,yBAAyB,EAAE;IACpC;;AAGA,IAAA,WAAW,CAAC,KAAmB,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrF;;IAGA,6BAA6B,GAAA;AACzB,QAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ;AACrG,QAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ;QACrG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,0BAA0B,IAAI,CAAC,0BAA0B,CAAC;IAC1F;;IAGA,kBAAkB,GAAA;QACd,IAAI,CAAC,yBAAyB,EAAE;IACpC;;AAGQ,IAAA,cAAc,CAAC,YAAiC,EAAA;QACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACvF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC;AAEtF,QAAA,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;AAEvD,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;AAE5C,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C;AACJ,QAAA,CAAC,CAAC;IACN;;IAGQ,YAAY,CAAC,mBAAuC,EAAE,EAAA;AAC1D,QAAA,OAAO,gBAAgB,CAAC,GAAG,CACvB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CACnE;IACL;;AAGQ,IAAA,8BAA8B,CAAC,KAAmB,EAAA;QACtD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CACtC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAwB;AAC3D,YAAA,KAAK,EAAE,SAAU;YACjB,KAAK;YACL,MAAM;AACN,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC,CACL;IACL;;IAGQ,qCAAqC,GAAA;AACzC,QAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAC9D,CAAC,gBAAgB,MAAwB;AACrC,YAAA,GAAG,gBAAgB;AACnB,YAAA,OAAO,EAAE;AACZ,SAAA,CAAC,CACL;IACL;;IAGQ,qCAAqC,GAAA;AACzC,QAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAC9D,CAAC,gBAAgB,MAAwB;AACrC,YAAA,GAAG,gBAAgB;AACnB,YAAA,OAAO,EAAE;AACZ,SAAA,CAAC,CACL;IACL;8GAhLS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EA3BzB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,0BCrCxF,+oNAsIA,EAAA,MAAA,EAAA,CAAA,yMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9FQ,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,cAAc,0IACd,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGpB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,IAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,mBAAmB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,mBAAmB,kIACnB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,eAAe,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAClB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA/BvC,SAAS;AAGS,YAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,6BAA6B,EAAE,CAAC,mBACnE,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,eAAe;wBACf,qBAAqB;wBACrB,iBAAiB;wBACjB,gBAAgB;wBAChB,mBAAmB;wBACnB,cAAc;wBACd,iBAAiB;wBACjB,oBAAoB;wBACpB,aAAa;wBACb,kBAAkB;wBAClB,mBAAmB;wBACnB,cAAc;wBACd,mBAAmB;wBACnB,qBAAqB;wBACrB,mBAAmB;wBACnB,sBAAsB;wBACtB,mBAAmB;wBACnB,sBAAsB;wBACtB,eAAe;wBACf,qBAAqB;wBACrB,kBAAkB;wBAClB;AACH,qBAAA,EAAA,QAAA,EAAA,+oNAAA,EAAA,MAAA,EAAA,CAAA,yMAAA,CAAA,EAAA;;;AEdL,MAAMG,2BAAyB,GAAG,IAAI;AAEtC,MAAM,SAAS,CAAA;AACX,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,SAAS,KAAKA,2BAAyB;IACvD;AAEA,IAAA,WAAA;;AAEW,IAAA,SAAA,GAA2BA,2BAAyB;;AAEpD,IAAA,YAAA,GAAe,IAAI,EAAA;QAFnB,IAAA,CAAA,SAAS,GAAT,SAAS;QAET,IAAA,CAAA,YAAY,GAAZ,YAAY;IACpB;AACN;MA8BY,0BAA0B,CAAA;;AAUnC,IAAA,WAAA,CAAmB,SAAqC,EAAA;QAArC,IAAA,CAAA,SAAS,GAAT,SAAS;;QARnB,IAAA,CAAA,OAAO,GAAwB,EAAE;;AAEjC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,6DAAC;;QAG1C,IAAA,CAAA,KAAK,GAAgB,EAAE;;QAwGf,IAAA,CAAA,YAAY,GAAG,CAAC,IAAe,KAAc,IAAI,EAAE,OAAO;QApG9D,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;AAExD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE;AAE5B,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;IACxC;;IAGA,KAAK,GAAA;QACD,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;;IAGA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B;;IAGA,OAAO,GAAA;AACH,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChG,QAAA,MAAM,MAAM,GAA0B,EAAE,eAAe,EAAE;AACzD,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC;;IAGA,6BAA6B,GAAA;AACzB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;QAC7E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC;IACpD;;AAGA,IAAA,WAAW,CAAC,IAAe,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC;;QAGzD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACpC;QAEA,IAAI,CAAC,6BAA6B,EAAE;IACxC;;AAGA,IAAA,OAAO,CAAC,KAAa,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;IACpD;;IAGA,sBAAsB,CAAC,IAAe,EAAE,SAAiB,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,6BAA6B,EAAE;IACxC;;IAGA,yBAAyB,CAAC,IAAe,EAAE,KAAc,EAAA;AACrD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAI,CAAC,6BAA6B,EAAE;IACxC;;AAGA,IAAA,mBAAmB,CAAC,IAAe,EAAA;AAC/B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAKA,2BAAyB,CAAC;AAC1G,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC;IAC/G;;AAGQ,IAAA,cAAc,CAAC,eAAmC,EAAA;QACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC;;QAGpD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACpC;QAEA,IAAI,CAAC,6BAA6B,EAAE;IACxC;;IAGQ,iBAAiB,CAAC,kBAAqC,EAAE,EAAA;QAC7D,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAgB,IAAI,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC1G;;AAGQ,IAAA,iCAAiC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAA;QACxD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CACtC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAuB;AAC/C,YAAA,KAAK,EAAE,SAAU;YACjB,YAAY;YACZ,SAAS,EAAE,aAAa,CAAC;AAC5B,SAAA,CAAC,CACL;IACL;;AAGQ,IAAA,eAAe,CAAC,KAAkB,EAAA;AACtC,QAAA,OAAO,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC;IACvD;8GA5GS,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAxBxB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnEvF,m0GA8EA,EAAA,MAAA,EAAA,CAAA,qZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDRQ,eAAe,sGACf,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,cAAc,0IACd,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGpB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,eAAe,sIACf,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,eAAe,sIACf,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAClB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA5BtC,SAAS;AAGS,YAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,4BAA4B,EAAE,CAAC,mBAClE,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,eAAe;wBACf,qBAAqB;wBACrB,iBAAiB;wBACjB,gBAAgB;wBAChB,mBAAmB;wBACnB,cAAc;wBACd,iBAAiB;wBACjB,oBAAoB;wBACpB,aAAa;wBACb,kBAAkB;wBAClB,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,iBAAiB;wBACjB,WAAW;wBACX,eAAe;wBACf,qBAAqB;wBACrB,kBAAkB;wBAClB;AACH,qBAAA,EAAA,QAAA,EAAA,m0GAAA,EAAA,MAAA,EAAA,CAAA,qZAAA,CAAA,EAAA;;;AEvFL;;;AAGG;MAQU,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,iFALvB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKH,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACTD;;AAEG;MAQU,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,oHALtB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKH,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAKI;;;ACfL;;;AAGG;MAQU,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,+EALrB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKH,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACVD;;;AAGG;MAQU,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,8EALpB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKH,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACgDD,MAAM,yBAAyB,GAAG,IAAI;AAEtC,MAAM,iBAAiB,CAAA;AACnB,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,SAAS,KAAK,yBAAyB,IAAI,IAAI,CAAC,SAAS,KAAK,yBAAyB;IACvG;AAEA,IAAA,WAAA;;AAEW,IAAA,SAAA,GAA2B,yBAAyB;;IAEpD,SAAA,GAA2B,aAAa,CAAC,GAAG,EAAA;QAF5C,IAAA,CAAA,SAAS,GAAT,SAAS;QAET,IAAA,CAAA,SAAS,GAAT,SAAS;IACjB;AACN;MA8BY,yBAAyB,CAAA;;IAclC,WAAA,CACW,SAAoC,EACnC,GAAsB,EAAA;QADvB,IAAA,CAAA,SAAS,GAAT,SAAS;QACR,IAAA,CAAA,GAAG,GAAH,GAAG;;QAdN,IAAA,CAAA,OAAO,GAAuB,EAAE;;AAGhC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,6DAAC;;QAGjC,IAAA,CAAA,cAAc,GAAG,aAAa;;QAGvC,IAAA,CAAA,KAAK,GAAwB,EAAE;;QA0GvB,IAAA,CAAA,YAAY,GAAG,CAAC,IAAuB,KAAc,IAAI,EAAE,OAAO;QAnGtE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;AAEvD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE;AAE5B,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;IACvC;;IAGA,KAAK,GAAA;QACD,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;;IAGA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B;;IAGA,OAAO,GAAA;AACH,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7F,QAAA,MAAM,MAAM,GAAyB,EAAE,cAAc,EAAE;AACvD,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC;;AAGA,IAAA,WAAW,CAAC,IAAuB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC;;QAGzD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC5C;QAEA,IAAI,CAAC,6BAA6B,EAAE;IACxC;;AAGA,IAAA,OAAO,CAAC,KAAa,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,iBAAiB,EAAE,CAAC;IAC5D;;IAGA,sBAAsB,CAAC,IAAuB,EAAE,SAAiB,EAAA;AAC7D,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,6BAA6B,EAAE;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC5B;;IAGA,sBAAsB,CAAC,IAAuB,EAAE,SAAwB,EAAA;AACpE,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,6BAA6B,EAAE;IACxC;;IAGA,6BAA6B,GAAA;AACzB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;QAC7E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC;IACpD;;IAGA,iBAAiB,CAAC,KAAa,EAAE,IAAuB,EAAA;QACpD,OAAO,IAAI,CAAC,SAAS;IACzB;;AAGQ,IAAA,cAAc,CAAC,cAAiC,EAAA;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;;QAG9C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC5C;QAEA,IAAI,CAAC,6BAA6B,EAAE;IACxC;;IAGQ,YAAY,CAAC,iBAAmC,EAAE,EAAA;QACtD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAwB,IAAI,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACnH;;AAGQ,IAAA,+BAA+B,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAA;QACtD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CACtC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAsB;AAC3C,YAAA,KAAK,EAAE,SAAS;YAChB;AACH,SAAA,CAAC,CACL;IACL;;AAGQ,IAAA,eAAe,CAAC,KAA0B,EAAA;AAC9C,QAAA,OAAO,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC;IACvD;8GAlHS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAxBvB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/EtF,4rHAgFA,EAAA,MAAA,EAAA,CAAA,qSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MDEQ,eAAe,2HACf,qBAAqB,CAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACrB,iBAAiB,CAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACjB,gBAAgB,CAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAChB,mBAAmB,CAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACnB,cAAc,+JACd,iBAAiB,CAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACjB,oBAAoB,CAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAGpB,mBAAmB,CAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACnB,eAAe,CAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACf,eAAe,2JACf,eAAe,CAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACf,yBAAyB,CAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACzB,qBAAqB,kFACrB,kBAAkB,CAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAClB,eAAe,CAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAiIV,2BAA2B,CAAA,EAAA,IAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FA7H3B,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA5BrC,SAAS;AAGS,YAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,2BAA2B,EAAE,CAAC,mBACjE,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,eAAe;wBACf,qBAAqB;wBACrB,iBAAiB;wBACjB,gBAAgB;wBAChB,mBAAmB;wBACnB,cAAc;wBACd,iBAAiB;wBACjB,oBAAoB;wBACpB,aAAa;wBACb,kBAAkB;wBAClB,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,yBAAyB;wBACzB,qBAAqB;wBACrB,kBAAkB;wBAClB,eAAe;AACf,wBAAA,UAAU,CAAC,MAAM,2BAA2B;AAC/C,qBAAA,EAAA,QAAA,EAAA,4rHAAA,EAAA,MAAA,EAAA,CAAA,qSAAA,CAAA,EAAA;;MA+HQ,2BAA2B,CAAA;;AAEpC,IAAA,SAAS,CAAC,OAA2B,EAAE,KAAiB,EAAE,UAAyB,EAAA;AAC/E,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,KAAK,CAAC,CAAC,GAAG,CAAC;IAC9E;8GALS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,yBAAyB;AAC/B,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AE/LD,MAAMI,cAAY,GAAiB;AAC/B,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,QAAQ,EAAE,OAAO;;AAEjB,IAAA,aAAa,EAAE;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBK;MAcQ,uBAAuB,CAAA;;IAEhC,IACI,KAAK,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACzB;AACA,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM;IACtB;;AAsCA,IAAA,WAAA,CAA6B,cAA6B,EAAA;QAA7B,IAAA,CAAA,cAAc,GAAd,cAAc;;AAlC3C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAY;;AAyBnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;;AAGnC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE;IAMa;;IAG7D,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;QACjC,IAAI,CAAC,qBAAqB,EAAE;IAChC;;IAGA,mBAAmB,GAAA;AACf,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC;AAC1E,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,UAAU,GAAmB;YAC/B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1D,YAAA,cAAc,EAAE;SACnB;;AAGD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAC7B;QAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACtC,yBAAyB,EACzB;AACI,YAAA,GAAGA,cAAY;AACf,YAAA,IAAI,EAAE;AACT,SAAA,EACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CACtB;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,UAAU,CAAC;AACX,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC;AACjC,aAAA,SAAS,CAAC,CAAC,EAAE,cAAc,EAAwB,KAAI;AACpD,YAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;QACtC,CAAC,CAAC,CACT;IACL;;IAGA,qBAAqB,GAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ;AAChC,QAAA,MAAM,UAAU,GAAqB;;YAEjC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM;gBACjF,KAAK;gBACL,GAAG;gBACH,QAAQ;gBACR,UAAU;gBACV;AACH,aAAA,CAAC,CAAC;AACH,YAAA,gBAAgB,EAAE;SACrB;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACtC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;QAChD;;AAGA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAC7B;QAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACtC,2BAA2B,EAC3B;AACI,YAAA,GAAGA,cAAY;AACf,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE;AACT,SAAA,EACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CACtB;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,UAAU,CAAC;AACX,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC;AACjC,aAAA,SAAS,CAAC,CAAC,EAAE,gBAAgB,EAA0B,KAAI;AACxD,YAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC;QAC1C,CAAC,CAAC,CACT;IACL;;IAGA,oBAAoB,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO;AACpC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAC7B,QAAA,MAAM,UAAU,GAAoB;AAChC,YAAA,OAAO,EAAE;;AAEJ,iBAAA,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;iBAClD,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS;AACnC,iBAAA,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9C,YAAA,eAAe,EAAE;SACpB;;AAGD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAC7B;QAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACtC,0BAA0B,EAC1B;AACI,YAAA,GAAGA,cAAY;AACf,YAAA,IAAI,EAAE;AACT,SAAA,EACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CACtB;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,UAAU,CAAC;AACX,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC;AACjC,aAAA,SAAS,CAAC,CAAC,EAAE,eAAe,EAAyB,KAAI;AACtD,YAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;QACxC,CAAC,CAAC,CACT;IACL;;IAGA,mBAAmB,GAAA;AACf,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO;AACpC,QAAA,MAAM,UAAU,GAAsB;YAClC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E;SACH;QAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC/C,YAAA,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAChF;QACL;;AAGA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAC7B;QAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACtC,yBAAyB,EACzB;AACI,YAAA,GAAGA,cAAY;AACf,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE;AACT,SAAA,EACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CACtB;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,UAAU,CAAC;AACX,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC;aACjC,SAAS,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAA2B,KAAI;YAC5E,IAAI,WAAW,EAAE;AACb,gBAAA,IAAI,CAAC,YAAY,GAAG,WAAW;YACnC;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC9B,CAAC,CAAC,CACT;IACL;;AAGQ,IAAA,SAAS,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QAEnB,IAAI,CAAC,qBAAqB,EAAE;AAE5B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;;IAGQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,mCAAmC,EAAE;QAC1C,IAAI,CAAC,qBAAqB,EAAE;IAChC;;IAGQ,mCAAmC,GAAA;QACvC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC7G,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACjH;;IAGQ,qBAAqB,GAAA;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CACxB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAsB,KAAI;AAChE,YAAA,IAAI,CAAC,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC,CAAC;AAEhF,YAAA,IAAI,CAAC,MAAM,EAAE,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,CAAC,CAAC;YAEnF,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAE5D,YAAA,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,UAAU,CAAC,CAAC;AAEtF,YAAA,IAAI,CAAC,MAAM,EAAE,gCAAgC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,UAAU,CAAC,CAAC;QAC/F,CAAC,CAAC,CACL;IACL;;IAGQ,cAAc,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE;IACvC;;IAGQ,gBAAgB,GAAA;QACpB,OAAO,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE;IAC/C;;AAGQ,IAAA,aAAa,CAAC,cAAgC,EAAA;AAClD,QAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;IACrC;;AAGQ,IAAA,eAAe,CAAC,OAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;IAChC;;AAGQ,IAAA,cAAc,CAAC,eAAkC,EAAA;AACrD,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;IACvC;;AAGQ,IAAA,aAAa,CAAC,OAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;IACpC;;IAGQ,qBAAqB,GAAA;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;AACtC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,YAAY,EAAE;IACjD;8GApSS,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAelB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIrB,uBAAuB,wEAIvB,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAItB,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtC5B,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAWH,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,YACtB,EAAE,EAAA,eAAA,EAQK,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA;;sBAIf;;sBASA;;sBAIA,YAAY;uBAAC,qBAAqB;;sBAIlC,YAAY;uBAAC,uBAAuB;;sBAIpC,YAAY;uBAAC,sBAAsB;;sBAInC,YAAY;uBAAC,wBAAwB;;;ACjG1C;;AAEG;MACU,aAAa,GAAG,IAAI,cAAc,CAAM,wBAAwB;;ACX7E;;;;;;;;AAQK;MAYQ,4BAA4B,CAAA;8GAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAE1B,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXZ;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKQ,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAXxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE;;;;AAIT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAGI,SAAS;uBAAC,WAAW;;;MCXb,gCAAgC,CAAA;8GAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAE9B,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXZ;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKQ,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAX5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE;;;;AAIT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAGI,SAAS;uBAAC,WAAW;;;ACmD1B,IAAI,yBAAyB,GAAG,CAAC;AACjC,IAAI,oBAAoB,GAAG,CAAC;MAMf,6BAA6B,CAAA;AAJ1C,IAAA,WAAA,GAAA;;AAMa,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA8B,WAAW,CAAC;AAS1E,IAAA;;AANG,IAAA,OAAO,sBAAsB,CACzB,UAAyC,EACzC,OAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI;IACf;8GAVS,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAcD;;;;;;;;;AASK;MAwBQ,qBAAqB,CAAA;;IAqE9B,IACI,oBAAoB,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/C;AACA,IAAA,IAAI,oBAAoB,GAAA;QACpB,OAAO,IAAI,CAAC,gBAAgB;IAChC;;IAsEA,WAAA,CACY,aAA2B,EAClB,MAAa,EAAA;QADtB,IAAA,CAAA,aAAa,GAAb,aAAa;QACJ,IAAA,CAAA,MAAM,GAAN,MAAM;AAnJ3B;;AAEK;QAEL,IAAA,CAAA,cAAc,GAAG,IAAI;;QAYrB,IAAA,CAAA,aAAa,GAAG,KAAK;;QAIrB,IAAA,CAAA,eAAe,GAAG,KAAK;;QAQvB,IAAA,CAAA,yBAAyB,GAAG,KAAK;;QAGjC,IAAA,CAAA,iBAAiB,GAAqB,EAAE;;QAIxC,IAAA,CAAA,QAAQ,GAAa,MAAM;;QAI3B,IAAA,CAAA,cAAc,GAAG,KAAK;;QAItB,IAAA,CAAA,aAAa,GAAG,KAAK;;QAgBrB,IAAA,CAAA,eAAe,GAA8B,YAAY;AAEzD;;AAEK;AAEL,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,iBAAA,EAAoB,oBAAoB,EAAE,EAAE;;AAcjD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;;AAenD,QAAA,IAAA,CAAA,mBAAmB,GAAW,yBAAyB,GAAG,yBAAyB,EAAE;;QAGrF,IAAA,CAAA,eAAe,GAAG,KAAK;;QAGvB,IAAA,CAAA,gBAAgB,GAAG,EAAE;AAErB;;;;;;;;;;;AAWG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAuD,IAAI,yDAAC;AAEjF;;AAEG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAe,CAAC,wDAAC;;AAG5B,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3B,gBAAA,OAAO,KAAK;YAChB;AAAO,iBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAClC,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD;AACA,YAAA,OAAO,CAAC;AACZ,QAAA,CAAC,8DAAC;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAwB,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa;;AAG7D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAS,EAAE,qDAAC;;AAMhC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAO7C,IAAI,CAAC,oBAAoB,EAAE;IAC/B;;IAGA,kBAAkB,GAAA;;AAEd,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,mBAAmB,EAAE;QAC9B;IACJ;;AAGA,IAAA,YAAY,CAAC,MAAmB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B;;AAGA,IAAA,kBAAkB,CAAC,KAAkB,EAAA;QACjC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAChD;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE;IAC5C;;IAGA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE;IAC9C;;IAGA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE;IAC7C;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE;IAC9C;;IAGA,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IACxB;;IAGA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1B;;IAGA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B;;IAGA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;IAC3B;;AAGA,IAAA,qBAAqB,CAAC,cAAwD,EAAA;AAC1E,QAAA,OAAO;AACF,aAAA,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACnB,YAAA,MAAM,SAAS,GAAG,KAAK,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE;YAC/D,OAAO,CAAA,EAAG,MAAM,CAAC,UAAU,CAAA,EAAA,EAAK,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;AAChE,QAAA,CAAC;aACA,IAAI,CAAC,EAAE,CAAC;IACjB;;IAGA,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IACrC;;IAGA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7B;;IAGQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAChF,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACvE,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAChC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACzE,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAChC,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YACrF,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE;AACzD,QAAA,CAAC,CAAC;IACN;;IAGQ,mBAAmB,GAAA;QACvB,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACtE,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACnC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACrF,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE;AACtC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,aAAa,EAAE;AAClB,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;QACvE;IACJ;;AAGQ,IAAA,gBAAgB,CAAC,YAAyB,EAAA;QAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AACnD,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B;IACJ;8GA/QS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EAjBnB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAoG7D,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAI5B,gCAAgC,oGAInC,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClN1B,o1SA2NA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnHQ,gBAAgB,2QAChB,oBAAoB,EAAA,QAAA,EAAA,4DAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,yBAAyB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,gBAAgB,oJAChB,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,kCAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,kBAAA,EAAA,4BAAA,EAAA,sCAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,eAAe,sIArCV,6BAA6B,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAyClC,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,odACvB,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EALd,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAOV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtBjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,mBAEZ,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAA,qBAAuB,EAAE,CAAC,EAAA,OAAA,EAClE;wBACL,gBAAgB;wBAChB,oBAAoB;wBACpB,yBAAyB;wBACzB,gBAAgB;wBAChB,sBAAsB;wBACtB,oBAAoB;wBACpB,eAAe;wBACf,SAAS;wBACT,eAAe;wBACf,6BAA6B;wBAC7B,qBAAqB;wBACrB,uBAAuB;wBACvB;AACH,qBAAA,EAAA,QAAA,EAAA,o1SAAA,EAAA;;sBAMA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAGA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAMA;;sBAIA;;sBAUA;;sBAIA,YAAY;uBAAC,4BAA4B;;sBAIzC,YAAY;uBAAC,gCAAgC;;sBAI7C,SAAS;uBAAC,WAAW;;;MElNb,yBAAyB,GAAG,2CAA2C,IAAI,CAAC,MAAM;AAC1F,KAAA,QAAQ;AACR,KAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;ACKhB;;;;;;;;;;;;;;;;;;;;;;;;AAwBK;MAQQ,gCAAgC,CAAA;;IAwBzC,IACI,gBAAgB,CAAC,eAA+C,EAAA;AAChE,QAAA,IAAI,CAAC,oBAAoB,GAAG,eAAe,EAAE,WAAW;IAC5D;8GA3BS,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwB3B,8BAA8B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7BlC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKH,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAGI;;sBAIA;;sBAOA;;sBAIA;;sBAOA,YAAY;uBAAC,8BAA8B;;;AC3ChD;;;;;AAKG;MAUU,qBAAqB,CAAA;;IAM9B,IACI,QAAQ,CAAC,QAAsC,EAAA;QAC/C,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,iBAAiB,EAAE;;AAE3F,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QACpB;aAAO;YACH,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;QACvC;QAEA,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;IAC/C;;AAOA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK;IAC5C;;AAiBA,IAAA,WAAA,CAAoB,sBAA8C,EAAA;QAA9C,IAAA,CAAA,sBAAsB,GAAtB,sBAAsB;;AAtB1C,QAAA,IAAA,CAAA,WAAW,GAA0B,IAAI,YAAY,EAAW;;AAmB/C,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAI7C,gBAAgB,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACrD;;IAGA,kBAAkB,GAAA;AACd,QAAA,IAAI;AACA,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;gBACxE;YACJ;YAEA,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YAE3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QAC5B;QAAE,MAAM,EAAC;IACb;8GA1DS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAHnB,CAAC,+BAA+B,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChClD,qNAKA,4CD4Bc,gBAAgB,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,CAAA;;2FAEjB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,eAAA,EAGZ,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,+BAA+B,EAAE,CAAC,EAAA,OAAA,EACrC,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,qNAAA,EAAA;;sBAI1B;;sBAIA;;sBAaA;;;MElCQ,0BAA0B,CAAA;AAPvC,IAAA,WAAA,GAAA;;QAUI,IAAA,CAAA,OAAO,GAA8B,EAAE;;AAiBvC,QAAA,IAAA,CAAA,WAAW,GAAwB,IAAI,YAAY,EAAE;AAsBxD,IAAA;;IApCG,IACI,QAAQ,CAAC,QAAsC,EAAA;AAC/C,QAAA,MAAM,aAAa,GAAG,QAAQ,EAAE,KAAK,IAAI,EAAE;AAC3C,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CACtC,CAAC,MAAM,MAAwB;AAC3B,YAAA,GAAG,MAAM;YACT,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;AAChD,SAAA,CAAC,CACL;QACD,IAAI,CAAC,0BAA0B,EAAE;IACrC;;IAgBA,eAAe,CAAC,MAAwB,EAAE,QAAiB,EAAA;AACvD,QAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ;QAC1B,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACtC;;IAGA,0BAA0B,GAAA;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC;IACtG;8GAzCS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBvC,2WAQA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDUcC,eAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAErF,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,mBAElB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAACC,eAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,2WAAA,EAAA;;sBAI9F;;sBAIA;;sBAaA;;;AE9BL;;;AAGG;MASU,2BAA2B,CAAA;AAPxC,IAAA,WAAA,GAAA;;QAUI,IAAA,CAAA,OAAO,GAA8B,EAAE;;AAWvC,QAAA,IAAA,CAAA,WAAW,GAAwB,IAAI,YAAY,EAAE;;QAG5C,IAAA,CAAA,yBAAyB,GAAG,yBAAyB;AAsBjE,IAAA;;IAjCG,IACI,QAAQ,CAAC,QAAsC,EAAA;QAC/C,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,KAAK,SAAS,GAAG,yBAAyB,GAAG,KAAK;IACzE;;AAgBA,IAAA,cAAc,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;YACvB;QACJ;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AAEnB,QAAA,IAAI,KAAK,KAAK,yBAAyB,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B;aAAO;YACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAClC;IACJ;8GAtCS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBxC,m7BAuBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDJcA,eAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,IAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,6GAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEzG,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;+BACI,0BAA0B,EAAA,eAAA,EAEnB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAACC,eAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,m7BAAA,EAAA;;sBAIlH;;sBAIA;;sBAOA;;;ME3BQ,uBAAuB,GAAG,IAAI,cAAc,CAAkB,iBAAiB;;ACiB5F;;;;;AAKG;MAkBU,mBAAmB,CAAA;AAhBhC,IAAA,WAAA,GAAA;;QAyCI,IAAA,CAAA,YAAY,GAAG,CAAC;;AAIhB,QAAA,IAAA,CAAA,IAAI,GAAuB,IAAI,YAAY,EAAQ;;AAInD,QAAA,IAAA,CAAA,WAAW,GAAmC,IAAI,YAAY,EAAoB;;QAWzE,IAAA,CAAA,WAAW,GAAG,UAAU;AAmBpC,IAAA;;IAjDG,IACI,QAAQ,CAAC,YAAgC,EAAA;QACzC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC;IAC/E;;AAiCA,IAAA,oBAAoB,CAAC,WAAgB,EAAA;AACjC,QAAA,MAAM,QAAQ,GAAqB,IAAI,CAAC,SAAS,IAAI;YACjD,KAAK,EAAE,IAAI,CAAC,SAAS;AACrB,YAAA,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,QAAQ,EAAE,eAAe,CAAC,EAAE;AAC5B,YAAA,OAAO,EAAE;SACZ;QAED,MAAM,WAAW,GAAG,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE;AAEvD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;IACtC;8GA9DS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAVjB,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCzG,2iDA0CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHQ,eAAe,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,2BAA2B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,0BAA0B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,qBAAqB,mHACrB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhB/B,SAAS;+BACI,iBAAiB,EAAA,eAAA,EAEV,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAE1B,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,mBAAoB,CAAC,EAAE,CAAC,EAAA,OAAA,EAC5F;wBACL,eAAe;wBACf,cAAc;wBACd,2BAA2B;wBAC3B,0BAA0B;wBAC1B,qBAAqB;wBACrB;AACH,qBAAA,EAAA,QAAA,EAAA,2iDAAA,EAAA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAMA;;sBAIA;;sBAIA;;sBAIA;;sBAIA,SAAS;uBAAC,eAAe;;sBAIzB,SAAS;uBAAC,cAAc;;;MErChB,wBAAwB,CAAA;AAjBrC,IAAA,WAAA,GAAA;;QAoBI,IAAA,CAAA,OAAO,GAAuB,EAAE;;AAQhC,QAAA,IAAA,CAAA,YAAY,GAAmC,IAAI,YAAY,EAAoB;AAStF,IAAA;8GApBY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAXtB,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvC9G,smCA4BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDaQ,cAAc,0IACdA,eAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,wBAAwB,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,6GAClB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAjBpC,SAAS;+BACI,uBAAuB,EAAA,eAAA,EAEhB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAE1B,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,wBAAyB,CAAC,EAAE,CAAC,EAAA,OAAA,EACjG;wBACL,cAAc;wBACdA,eAAa;wBACb,wBAAwB;wBACxB,iBAAiB;wBACjB,iBAAiB;wBACjB,kBAAkB;wBAClB;AACH,qBAAA,EAAA,QAAA,EAAA,smCAAA,EAAA;;sBAIA;;sBAIA;;sBAIA;;sBAIA,SAAS;uBAAC,eAAe;;sBAIzB,SAAS;uBAAC,cAAc;;;AE3CtB,MAAM,uBAAuB,GAAG,IAAI;AACpC,MAAM,iBAAiB,GAAG,aAAa,CAAC,GAAG;AAkB3C,MAAM,wBAAwB,GAAG,IAAI;AAY5C,IAAY,WAGX;AAHD,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EAHW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAKvB,IAAY,SAKX;AALD,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACvB,CAAC,EALW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;;MC/BR,gBAAgB,CAAA;;IAEzB,IAAa,aAAa,CAAC,KAAwB,EAAA;AAC/C,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;IACrC;;AA0CA,IAAA,WAAA,CAA6B,GAAsB,EAAA;QAAtB,IAAA,CAAA,GAAG,GAAH,GAAG;;AAvChC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,CAAC,wDAAC;;AAG/B,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAqB,EAAE,0DAAC;;QAG9C,IAAA,CAAA,0BAA0B,GAAG,MAAM,EAAmB;;QAGtD,IAAA,CAAA,YAAY,GAAG,MAAM,EAA2B;;QAGhD,IAAA,CAAA,uBAAuB,GAAG,MAAM,EAAW;;AAG3C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAqB,EAAE,oDAAC;;AAGzC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAgB,EAAE,mDAAC;;AAGnC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAqC,EAAE,+DAAC;;AAGpE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAc,WAAW,CAAC,aAAa,sDAAC;;AAG3D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAA6C,IAAI,wDAAC;;AAGvE,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAmB,IAAI,iEAAC;;AAGtD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAA4B,IAAI,gEAAC;;QAGrD,IAAA,CAAA,WAAW,GAAG,WAAW;IAGoB;;IAGtD,QAAQ,GAAA;QACJ,IAAI,CAAC,uBAAuB,EAAE;IAClC;;IAGA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC5B;;IAGA,IACI,uBAAuB,CAAC,IAAqB,EAAA;AAC7C,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC5B;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,MAAwB,EAAA;QACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;QACvC,MAAM,cAAc,GAAG,MAA0C;AACjE,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,IAAI;AAChG,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC5B;;IAGA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC;AAC9C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC/B;AAEA;;;;AAIG;IACH,WAAW,CAAC,MAAwB,EAAE,eAA2D,EAAA;QAC7F,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;;QAGA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;QAEhF,IAAI,CAAC,eAAe,EAAE;YAClB;QACJ;QACA,MAAM,gBAAgB,GAClB,eAAe,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM;AAC1C,aAAC,eAAe,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;AACnE,aAAC,eAAe,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;;QAGxE,IAAI,gBAAgB,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;QACnD;QAEA,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC5B;AAEA;;;AAGG;AACK,IAAA,qBAAqB,CAAC,aAAgC,EAAA;QAC1D,IAAI,aAAa,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC;YAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;QAC3C;IACJ;AAEA;;;AAGG;IACK,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C;aAAO;AACH,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5C;IACJ;8GA1IS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA2Dd,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzFtC,21BAqBA,4CDOc,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEhE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EAEN,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,21BAAA,EAAA;;sBAIzE;;sBAyDA,SAAS;uBAAC,uBAAuB;;;AE5DtC,IAAI,wBAAwB,GAAG,CAAC;MAiBnB,iBAAiB,CAAA;AAf9B,IAAA,WAAA,GAAA;;QAiBI,IAAA,CAAA,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2B;;QAG/C,IAAA,CAAA,eAAe,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2C;;QAGlE,IAAA,CAAA,WAAW,GAAG,MAAM,EAAiC;;AAGrD,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,IAAI,iBAAiB,qDAAC;;AAGnF,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,IAAI,wBAAwB,iDAAC;;AAGlF,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAA,0CAAA,EAA6C,wBAAwB,EAAE,EAAE;;AAG9F,QAAA,IAAA,CAAA,eAAe,GAAG,CAAA,uCAAA,EAA0C,wBAAwB,EAAE,EAAE;;QAG/E,IAAA,CAAA,cAAc,GAAG,aAAa;;QAG9B,IAAA,CAAA,wBAAwB,GAAG,wBAAwB;;AAG5D,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,IAAI,EAAE,mDAAC;;QAG5D,IAAA,CAAA,uBAAuB,GAAG,oBAAoB,CAC1C,YAAY,CACR,QAAQ,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;YACtC,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,OAAO,CAAC,KAAK;QACnF,CAAC,CAAC,CACL,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CACjC;AA4BJ,IAAA;AA1BG;;;AAGG;AACH,IAAA,iBAAiB,CAAC,SAAwB,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;;AAGG;IACK,cAAc,GAAA;AAClB,QAAA,MAAM,MAAM,GAAkC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE;AAClG,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IACjC;8GArES,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9C9B,6iFA6DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxBQA,eAAa,6VACb,wBAAwB,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,IAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,WAAW,8VACX,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;+BACI,cAAc,EAAA,eAAA,EAEP,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACLA,eAAa;wBACb,wBAAwB;wBACxB,kBAAkB;wBAClB,iBAAiB;wBACjB,oBAAoB;wBACpB,WAAW;wBACX;AACH,qBAAA,EAAA,QAAA,EAAA,6iFAAA,EAAA;;;AEfL,IAAI,uBAAuB,GAAG,CAAC;AAC/B,IAAI,8BAA8B,GAAG,CAAC;MAiBzB,gBAAgB,CAAA;AAf7B,IAAA,WAAA,GAAA;;QAiBI,IAAA,CAAA,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA0B;;QAG7C,IAAA,CAAA,cAAc,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA4B;;QAGlD,IAAA,CAAA,UAAU,GAAG,MAAM,EAAgC;;AAGnD,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,IAAI,iBAAiB,qDAAC;;AAGlF,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,IAAI,uBAAuB,iDAAC;;AAGhF,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAA,4BAAA,EAA+B,uBAAuB,EAAE,EAAE;;AAG9E,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAA,qCAAA,EAAwC,8BAA8B,EAAE,EAAE;;QAG5F,IAAA,CAAA,cAAc,GAAG,aAAa;;QAG9B,IAAA,CAAA,uBAAuB,GAAG,uBAAuB;;AAG1D,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,qBAAqB,IAAI,KAAK,iEAAC;;AAG1F,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,IAAI,EAAE,mDAAC;;QAG3D,IAAA,CAAA,uBAAuB,GAAG,oBAAoB,CAC1C,YAAY,CACR,QAAQ,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;YACrC,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,OAAO,CAAC,KAAK;QACnF,CAAC,CAAC,CACL,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CACjC;AA2BJ,IAAA;AAzBG;;;AAGG;AACH,IAAA,oBAAoB,CAAC,SAAwB,EAAA;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;;AAGG;IACK,cAAc,GAAA;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9E;8GAvES,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/C7B,ipFA+DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzBQA,eAAa,6VACb,wBAAwB,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,IAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,WAAW,8VACX,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAf5B,SAAS;+BACI,aAAa,EAAA,eAAA,EAEN,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACLA,eAAa;wBACb,wBAAwB;wBACxB,kBAAkB;wBAClB,iBAAiB;wBACjB,oBAAoB;wBACpB,WAAW;wBACX;AACH,qBAAA,EAAA,QAAA,EAAA,ipFAAA,EAAA;;;AENL,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,sBAAsB,GAAG,IAAI;AAEnC,IAAI,qBAAqB,GAAG,CAAC;MAsBhB,gBAAgB,CAAA;AApB7B,IAAA,WAAA,GAAA;;QAsBI,IAAA,CAAA,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;;QAGhD,IAAA,CAAA,cAAc,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6C;;QAGnE,IAAA,CAAA,aAAa,GAAG,MAAM,EAAmC;;QAGzD,IAAA,CAAA,uBAAuB,GAAG,MAAM,EAAW;;AAGjC,QAAA,IAAA,CAAA,iBAAiB,GAAG,YAAY,CAAqB,MAAK;AAChE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,MAAM,UAAU,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE;AACtC,YAAA,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAC9B,CAAC,MAAM,EAAE,KAAK,MAAwB;gBAClC,MAAM;gBACN,QAAQ,EAAE,MAAM,CAAC,OAAO;gBACxB,MAAM,EAAE,KAAK,KAAK;AACrB,aAAA,CAAC,CACL;;AAED,YAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxB,IAAI,CAAC,8BAA8B,EAAE;YACzC;AACA,YAAA,OAAO,WAAW;AACtB,QAAA,CAAC,6DAAC;;AAGQ,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,mBAAmB,uDAAC;;AAGjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAU,sBAAsB,wDAAC;;AAGtD,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;YACnC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC5C,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;AAC1G,gBAAA,MAAM,cAAc,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ;gBAC/C,OAAO,kBAAkB,IAAI,cAAc;AAC/C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,2DAAC;;QAGQ,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGzG,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gCAAgC,EAAE,GAAG,CAAC,0DAAC;;AAG5E,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACvC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gCAAgC,EAAE;YAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM;YACpD,OAAO,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,cAAc,GAAG,CAAC;AAC/D,QAAA,CAAC,4DAAC;;AAGQ,QAAA,IAAA,CAAA,eAAe,GAAG,CAAA,yBAAA,EAA4B,qBAAqB,EAAE,EAAE;;QAQzE,IAAA,CAAA,gCAAgC,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kCAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAiLtH,IAAA;;AAtLG,IAAA,IAAc,iBAAiB,GAAA;AAC3B,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,KAAK,CAAC;IACtE;;AAMU,IAAA,eAAe,CAAC,SAAkB,EAAA;AACxC,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,KAClC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AACrB,YAAA,GAAG,MAAM;AACT,YAAA,QAAQ,EAAE;SACb,CAAC,CAAC,CACN;QACD,IAAI,CAAC,cAAc,EAAE;IACzB;;IAGU,cAAc,GAAA;QACpB,IAAI,CAAC,cAAc,EAAE;IACzB;;IAGU,iBAAiB,CAAC,EAAE,IAAI,EAAe,EAAA;QAC7C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC;;IAGU,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IAC3C;;AAGU,IAAA,eAAe,CAAC,MAA+B,EAAA;AACrD,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,KAClC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAClB,YAAA,GAAG,GAAG;YACN,MAAM,EAAE,GAAG,KAAK;SACnB,CAAC,CAAC,CACN;IACL;;AAGU,IAAA,eAAe,CAAC,KAAY,EAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;IACpC;;AAGU,IAAA,kBAAkB,CAAC,KAAY,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACpE;;AAGU,IAAA,YAAY,CAAC,KAAY,EAAA;AAC/B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gCAAgC,EAAE;QAC3D,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC;IACxD;;AAGU,IAAA,cAAc,CAAC,KAAY,EAAA;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gCAAgC,EAAE;QAC3D,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC;IAClD;;AAGU,IAAA,6BAA6B,CAAC,IAAsB,EAAA;AAC1D,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;IACvC;;IAGU,iBAAiB,CAAC,KAAa,EAAE,IAAsB,EAAA;AAC7D,QAAA,OAAO,IAAI,EAAE,MAAM,CAAC,GAAG;IAC3B;;AAGQ,IAAA,iBAAiB,CAAC,KAAY,EAAE,WAAmB,EAAE,aAAa,GAAG,KAAK,EAAA;QAC9E,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,WAAW,CAAC;QAE3F,IAAI,aAAa,EAAE;;AAEf,YAAA,UAAU,CAAC,MAAO,KAAK,CAAC,MAA6B,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACtE;IACJ;;AAGQ,IAAA,gBAAgB,CAAC,OAA2B,EAAA;QAChD,OAAO;YACH,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC;AAC3F,YAAA,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC;YACrD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;SAChG;IACL;;IAGQ,gCAAgC,CAAC,IAAY,EAAE,EAAU,EAAA;AAC7D,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAA,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC;AAChG;;;AAGG;AACH,QAAA,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,YAAY,CAAC;QAEzD,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;;AAGG;IACK,2BAA2B,CAAC,UAA4B,EAAE,UAA4B,EAAA;QAC1F,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACtC,YAAA,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACpG,YAAA,OAAO,CAAC,GAAG,OAAO,CAAC;AACvB,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACK,IAAA,4BAA4B,CAChC,IAAS,EACT,SAAiB,EACjB,OAAe,EAAA;AAEf,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;AAE9B,QAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;AAC5D,QAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;AAExD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC;AAElC,QAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE;IACtC;AAEA;;;AAGG;IACK,cAAc,GAAA;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AAE/B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAC5C,IAAI,cAAc,EAAE;AAChB,YAAA,MAAM,SAAS,GACX,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;gBACnE,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC;AACjE,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD;IACJ;AAEA;;;;AAIG;IACK,8BAA8B,GAAA;QAClC,UAAU,CAAC,MAAK;AACZ,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;YAC5C,IAAI,CAAC,cAAc,EAAE;gBACjB;YACJ;YAEA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC/D,YAAA,MAAM,SAAS,GACX,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;gBACpE,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC;YAElE,IAAI,SAAS,EAAE;AACX,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3C;QACJ,CAAC,EAAE,CAAC,CAAC;IACT;8GAtPS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChE7B,2jKA2GA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzDQ,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,kCAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,kBAAA,EAAA,4BAAA,EAAA,sCAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,eAAe,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,oBAAoB,0JACpBA,eAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,wBAAwB,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAClB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApB5B,SAAS;+BACI,aAAa,EAAA,eAAA,EAEN,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACL,gBAAgB;wBAChB,oBAAoB;wBACpB,sBAAsB;wBACtB,eAAe;wBACf,oBAAoB;wBACpBC,eAAa;wBACb,wBAAwB;wBACxB,iBAAiB;wBACjB,iBAAiB;wBACjB,WAAW;wBACX,kBAAkB;wBAClB;AACH,qBAAA,EAAA,QAAA,EAAA,2jKAAA,EAAA;;;MESQ,uBAAuB,CAAA;AAoDhC;;AAEG;IACH,WAAA,CACqB,SAOf,EACe,MAAa,EAAA;QARb,IAAA,CAAA,SAAS,GAAT,SAAS;QAQT,IAAA,CAAA,MAAM,GAAN,MAAM;;AA9D3B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAmC,IAAI,uDAAC;;AAG5D,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAA8B,IAAI,yDAAC;;AAGzD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAoC,IAAI,wDAAC;;AAG9D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAsC,IAAI,uDAAC;;AAG/D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAsB,IAAI,qDAAC;;AAG7C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,KAAK,yDAAC;;AAMtC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAA4B,IAAI,gEAAC;;AAGrD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,6DAAC;;AAG1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAA2B,IAAI,2DAAC;;AAGxD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,EAAE,2DAAC;;AAGhD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAA0C,IAAI,4DAAC;;AAGxE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAA4C,IAAI,2DAAC;;QAG/D,IAAA,CAAA,WAAW,GAAG,KAAK;;QAGV,IAAA,CAAA,SAAS,GAAG,SAAS;;QAGhC,IAAA,CAAA,sBAAsB,GAA8C,IAAI;;AAGxE,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAA0B,EAAE,mEAAC;AAgBjE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;QAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,wBAAwB;AAChD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACtC,IAAI,CAAC,kBAAkB,EAAE;QAC7B;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;QACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC/C,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,mBAAmB,EAAE;IAC9B;AAEA;;AAEG;IACH,OAAO,GAAA;AACH,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;cACnB,EAAE,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO;AAChD,cAAE,IAAI,CAAC,WAAW,EAAE;AAExB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACjB,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YACjC;AACH,SAAA,CAAC;IACN;AAEA;;AAEG;IACH,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B;AAEA;;AAEG;IACH,KAAK,GAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AAC3D,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;gBACjB,GAAG,IAAI,CAAC,WAAW,EAAG;AACtB,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,EAAG,CAAC,KAAK;AACpC,gBAAA,SAAS,EAAE,IAAI,CAAC,eAAe,EAAG,CAAC;AACtC,aAAA,CAAC;QACN;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AAC/D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;gBACnB,GAAG,IAAI,CAAC,aAAa,EAAG;AACxB,gBAAA,QAAQ,EAAE,IAAI,CAAC,eAAe;AACjC,aAAA,CAAC;QACN;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBAClB,GAAG,IAAI,CAAC,YAAY,EAAG;AACvB,gBAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAG,CAAC,KAAK;AACrC,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAG,CAAC;AACvC,aAAA,CAAC;QACN;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AAC9D,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE;YAC7C,IAAI,cAAc,EAAE;;AAEhB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;oBACjB,GAAG,IAAI,CAAC,WAAW,EAAG;oBACtB,OAAO,EAAE,cAAc,CAAC;AAC3B,iBAAA,CAAC;YACN;AACA,YAAA,IAAI,CAAC,sBAAsB,GAAG,cAAc;QAChD;QACA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAG,EAAE,KAAK,CAAC;IAC1D;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,KAAmC,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACjB,GAAG,IAAI,CAAC,WAAW,EAAG;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC;AACpB,SAAA,CAAC;IACN;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,KAA8B,EAAA;AACzC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YACnB,GAAG,IAAI,CAAC,aAAa,EAAG;YACxB,QAAQ,EAAE,KAAK,CAAC;AACnB,SAAA,CAAC;IACN;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,KAAoC,EAAA;AAC9C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,YAAY,EAAG;YACvB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC;AACpB,SAAA,CAAC;IACN;AAEA;;;;AAIG;AACH,IAAA,eAAe,CAAC,KAAsC,EAAA;AAClD,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;IACvC;AAEA;;;AAGG;AACH,IAAA,4BAA4B,CAAC,KAAsB,EAAA;AAC/C,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;IACxC;AAEA;;;AAGG;AACO,IAAA,aAAa,CAAC,KAAqB,EAAA;;;QAGzC,MAAM,QAAQ,GAAgB,EAAE;QAChC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;AACxC,YAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACpC;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACpB,YAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACjC;AACA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACtB,YAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACnC;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrB,YAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAClC;QAEA,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACzC,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YAC/B,IAAI,CAAC,uBAAuB,EAAE;QAClC;IACJ;AAEA;;;;;AAKG;IACO,uBAAuB,CAAC,GAAe,EAAE,SAAmB,EAAA;QAClE,IAAI,GAAG,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE;;YAE9C,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC;;AAGhF,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;YACzC;QACJ;aAAO;;AAEH,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE;YACnC,IAAI,UAAU,EAAE;gBACZ,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK;AACxE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC;YAC5C;QACJ;IACJ;AAEA;;;AAGG;IACK,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACpB,OAAO,SAAS,CAAC,OAAO;QAC5B;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YAC3B,OAAO,SAAS,CAAC,IAAI;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YAC7B,OAAO,SAAS,CAAC,MAAM;QAC3B;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YAC5B,OAAO,SAAS,CAAC,KAAK;QAC1B;AACA,QAAA,OAAO,IAAI;IACf;AAEA;;AAEG;IACK,sBAAsB,GAAA;AAC1B,QAAA,MAAM,cAAc,GAAG;YACnB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,WAAW;AACnB,SAAA,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM;QACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC;IAC/C;AAEA;;AAEG;IACK,kBAAkB,GAAA;AACtB,QAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,IAAI,EAAE,EAAE,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACrB,YAAA,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,uBAAuB;AACvD,YAAA,SAAS,EAAE,cAAc,EAAE,SAAS,IAAI;AAC3C,SAAA,CAAC;IACN;AAEA;;AAEG;IACK,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,IAAI,EAAE,CAAC;IAC7E;AAEA;;AAEG;IACK,mBAAmB,GAAA;AACvB,QAAA,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACtB,YAAA,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,wBAAwB;AACzD,YAAA,SAAS,EAAE,eAAe,EAAE,SAAS,IAAI;AAC5C,SAAA,CAAC;IACN;AAEA;;AAEG;IACK,kBAAkB,GAAA;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;QAChD,MAAM,qBAAqB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC;AAC5F,QAAA,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC;;QAGrD,MAAM,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;YACjD,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC;AAChB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACrB,YAAA,cAAc,EAAE,qBAAqB;YACrC,WAAW;AACX,YAAA,OAAO,EAAE;AACZ,SAAA,CAAC;IACN;8GAzUS,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,SAAA,EA3BrB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5CtG,+lMA6HA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9EQ,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,gBAAgB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEpB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAErB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,mBAAmB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,sBAAsB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAXtB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAeV,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA7BnC,SAAS;+BACI,8BAA8B,EAAA,SAAA,EAC7B,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC,EAAE,CAAC,EAAA,eAAA,EACjF,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,eAAe;wBACf,qBAAqB;wBACrB,gBAAgB;wBAChB,mBAAmB;wBACnB,iBAAiB;wBACjB,oBAAoB;wBACpB,aAAa;wBACb,mBAAmB;wBACnB,qBAAqB;wBACrB,eAAe;wBACf,gBAAgB;wBAChB,gBAAgB;wBAChB,iBAAiB;wBACjB,gBAAgB;wBAChB,gBAAgB;wBAChB,iBAAiB;wBACjB,cAAc;wBACd,kBAAkB;wBAClB,qBAAqB;wBACrB,mBAAmB;wBACnB;AACH,qBAAA,EAAA,QAAA,EAAA,+lMAAA,EAAA;;;AElCE,MAAM,YAAY,GAAiB;AACtC,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,KAAK,EAAE;;AAUX;;;;;;;;;;;;;;;;;AAiBK;MAQQ,gCAAgC,CAAA;;IAEzC,IACI,KAAK,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM;IACtB;;AA8BA,IAAA,WAAA,CAA6B,cAA6B,EAAA;QAA7B,IAAA,CAAA,cAAc,GAAd,cAAc;;QA1B3C,IAAA,CAAA,qBAAqB,GAAG,IAAI;;QAI5B,IAAA,CAAA,YAAY,GAA0B,CAAC;;QAIvC,IAAA,CAAA,wBAAwB,GAAG,KAAK;;QAaxB,IAAA,CAAA,gBAAgB,GAAyC,IAAI;AAEpD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAGa;;IAG7D,eAAe,GAAA;QACX,IAAI,CAAC,gBAAgB,EAAE;IAC3B;;IAGA,sBAAsB,GAAA;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAEvC,QAAA,MAAM,QAAQ,GAA2B;AACrC,YAAA,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC;YACnD,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS;YACvC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK;YAC/B,qBAAqB,EAAE,IAAI,CAAC;SAC/B;AAED,QAAA,MAAM,UAAU,GAAsB;YAClC,OAAO;AACP,YAAA,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAC3C,QAAQ,EAAE,KAAK,EAAE;SACpB;AAED,QAAA,MAAM,SAAS,GAA4B;AACvC,YAAA,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,CAAC;YACrD,SAAS,EAAE,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS;YACxC,KAAK,EAAE,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;SAC9B;;AAGD,QAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE;;AAG9C,QAAA,IAAI,UAAyC;AAE7C,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE3D,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,KAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAC7D;;AAGD,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC7B,CAAC,OAAO,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CACxF;;AAGD,YAAA,MAAM,eAAe,GAAG;gBACpB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAChC,oBAAA,GAAG,GAAG;oBACN,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI;AAChD,iBAAA,CAAC,CAAC;gBACH,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;oBACxB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI;AAChD,iBAAA,CAAC;aACL;YAED,UAAU,GAAG,eAAe;QAChC;aAAO;;;AAGH,YAAA,MAAM,cAAc,GAAG,CAAC,GAAG,kBAAkB,CAAC;;AAG9C,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACpB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpC,oBAAA,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBACjC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,UAAU,GAAG;AACR,iBAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACV,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;gBAChD,IAAI,CAAC,GAAG,EAAE;AACN,oBAAA,OAAO,IAAI;gBACf;gBACA,OAAO;oBACH,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI;iBAChD;AACL,YAAA,CAAC;iBACA,MAAM,CAAC,CAAC,GAAG,KAAqC,GAAG,KAAK,IAAI,CAAC;QACtE;AAEA,QAAA,MAAM,kBAAkB,GAA8B;AAClD,YAAA,OAAO,EAAE;SACZ;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAC7B;QAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACtC,uBAAuB,EACvB;AACI,YAAA,GAAG,YAAY;AACf,YAAA,IAAI,EAAE;AACF,gBAAA,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI;AAC1D,gBAAA,aAAa,EAAE,UAAU,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,IAAI;AAC5E,gBAAA,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI;AAC7D,gBAAA,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,kBAAkB,GAAG,IAAI;gBAC9E,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,wBAAwB,EAAE,IAAI,CAAC;AAClC;AACJ,SAAA,EACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CACtB;QAED,IAAI,CAAC,UAAU,CAAC;AACX,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,EAC5B,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,aAAA,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,KAAI;YACrE,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC;YAChE;YACA,IAAI,aAAa,EAAE;AACf,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC;YAChD;YACA,IAAI,YAAY,EAAE;gBACd,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC;YACnE;YACA,IAAI,WAAW,EAAE;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YACnC;AACJ,QAAA,CAAC,CAAC;IACV;;IAGQ,gBAAgB,GAAA;QACpB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC3F,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC;YAC5C;AACJ,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,SAAS,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,iBAAiB,EAAE;IAC5B;;IAGQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd;QACJ;QAEA,IAAI,CAAC,MAAM,CAAC;AACP,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC;AACP,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC;AACP,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAsB,KAAI;AAC1G,YAAA,MAAM,IAAI,GACN,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,CAAC;gBAC1C,IAAI,CAAC,wBAAwB;AACjC,YAAA,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC;AAC5C,QAAA,CAAC,CAAC;IACN;;IAGQ,cAAc,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE;IACvC;;IAGQ,gBAAgB,GAAA;QACpB,OAAO,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE;IAC/C;;IAGQ,aAAa,CAAC,KAAoB,EAAE,SAAwB,EAAA;QAChE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC;IAC1D;;AAGQ,IAAA,eAAe,CAAC,OAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;IAChC;;IAGQ,cAAc,CAAC,KAAoB,EAAE,SAAwB,EAAA;QACjE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;IAC/E;;AAGQ,IAAA,aAAa,CAAC,WAAsC,EAAA;;AAExD,QAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,OAAO;;AAG3C,QAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC;;AAGlG,QAAA,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,kBAAkB,CAAC;IAC/C;8GA5PS,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAwBP,gCAAgC,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7BxD,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKH,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAGI;;sBAUA;;sBAIA;;sBAIA;;sBAIA,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,CAAC,MAAM,gCAAgC,CAAC;;;MCpF1D,2BAA2B,CAAA;AAPxC,IAAA,WAAA,GAAA;;QAUI,IAAA,CAAA,cAAc,GAAG,KAAK;;AAGb,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;;AAGpC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAGvD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAMlC,IAAA;;IAHG,SAAS,GAAA;AACJ,QAAA,IAAI,CAAC,MAAc,CAAC,eAAe,CAAC,IAAI,CAAC;IAC9C;8GAjBS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZxC,26DAgDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzCcC,eAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKzF,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,WAC3B,CAACA,eAAa,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,CAAC,iBAEpF,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,26DAAA,EAAA;;sBAI9C;;;AEDC,MAAO,uBAAwB,SAAQ,iBAAiB,CAAA;AAR9D,IAAA,WAAA,GAAA;;;AAUa,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC;AACnD,IAAA;8GAHY,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbpC,mlBAcA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHkC,gBAAgB,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,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAErC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,aAAA,EAEnB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,mlBAAA,EAAA;;;AE+B7C,MAAO,sBAA0B,SAAQ,iBAAiB,CAAA;AAlBhE,IAAA,WAAA,GAAA;;;QAmCI,IAAA,CAAA,SAAS,GAAG,KAAK;;AAYjB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAe;;AAYvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC;AAQnD,IAAA;;IAdG,IACY,uBAAuB,CAAC,KAAwC,EAAA;QACxE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC;;AAMA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,KAAK,IAAI,OAAO,IAAI,gBAAgB,IAAI,OAAO,EAAE;AACjD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;QACrE;IACJ;8GAhDS,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,KAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gCAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,SAAA,EAZpB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,SAAA,EA0Ca,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7E9C,snEAsDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDdc,kBAAkB,oNAAE,gBAAgB,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,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAErC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAlBlC,SAAS;+BAEI,uBAAuB,EAAA,aAAA,EAElB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,sBAAsB,EAAE;AAC3B,qBAAA,EAAA,OAAA,EACQ,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,snEAAA,EAAA;;sBAI9C;;sBAGA,WAAW;uBAAC,oBAAoB;;sBAChC;;sBAIA,WAAW;uBAAC,iBAAiB;;sBAC7B;;sBAIA,WAAW;uBAAC,gCAAgC;;sBAC5C;;sBAIA;;sBAIA;;sBAIA;;sBAOA,YAAY;uBAAC,4BAA4B;;;AEoBxC,MAAO,uBAAwB,SAAQ,iBAAiB,CAAA;AAjD9D,IAAA,WAAA,GAAA;;;QA4FI,IAAA,CAAA,mBAAmB,GAAG,KAAK;;QAI3B,IAAA,CAAA,iBAAiB,GAAG,KAAK;;QAIzB,IAAA,CAAA,SAAS,GAAG,KAAK;;QAQjB,IAAA,CAAA,wBAAwB,GAAG,KAAK;AAQhC;;;AAGK;AACI,QAAA,IAAA,CAAA,iCAAiC,GAAG,MAAM,CAAC,IAAI,6EAAC;;QAGhD,IAAA,CAAA,cAAc,GAAG,aAAa;;QAG9B,IAAA,CAAA,cAAc,GAAG,aAAa;;AAG9B,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAG5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC;;AAGvC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,sBAAsB,CAAC;;AAGxD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;;AAGhC,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,iDAAC;;AAG1D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAcpD,IAAA;;IApDG,IACY,mBAAmB,CAAC,KAAwC,EAAA;QACpE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC;;IAsCA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAClG,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC7B,QAAA,CAAC,CAAC;IACN;;IAGA,cAAc,CAAC,KAAa,EAAE,MAAmB,EAAA;QAC7C,OAAO,MAAM,CAAC,IAAI;IACtB;8GAjHS,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,EAAA,SAAA,EA3CrB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,SAAA,EAoGa,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/J9C,+0NAyJA,EAAA,MAAA,EAAA,CAAA,mJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MDzFQ,kBAAkB,yOAClB,6BAA6B,CAAA,EAAA,QAAA,EAAA,uDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAC7B,yBAAyB,CAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACzB,iBAAiB,CAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACjB,WAAW,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAAD,IAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAAA,IAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACX,mCAAmC,0IACnC,OAAO,CAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACP,OAAO,CAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACP,uBAAuB,CAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACvB,+BAA+B,CAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAC/B,+BAA+B,2MAC/B,eAAe,CAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACf,uBAAuB,CAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACvB,mBAAmB,CAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACnB,uBAAuB,CAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACvB,+BAA+B,uFA2I1B,yBAAyB,CAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAzHzB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjDnC,SAAS;+BAEI,wBAAwB,EAAA,aAAA,EAEnB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,IAAI,EAAE;qBACT,EAAA,OAAA,EACQ;wBACL,kBAAkB;wBAClB,6BAA6B;wBAC7B,yBAAyB;wBACzB,iBAAiB;wBACjB,WAAW;wBACX,mCAAmC;wBACnC,OAAO;wBACP,OAAO;wBACP,uBAAuB;wBACvB,+BAA+B;wBAC/B,+BAA+B;wBAC/B,eAAe;wBACf,uBAAuB;wBACvB,mBAAmB;wBACnB,uBAAuB;wBACvB,+BAA+B;AAC/B,wBAAA,UAAU,CAAC,MAAM,yBAAyB;AAC7C,qBAAA,EAAA,QAAA,EAAA,+0NAAA,EAAA,MAAA,EAAA,CAAA,mJAAA,CAAA,EAAA;;sBAkBA;;sBAQA;;sBAMA;;sBAMA;;sBAMA;;sBAMA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA,YAAY;uBAAC,4BAA4B;;AAsD9C;MAKa,yBAAyB,CAAA;AAJtC,IAAA,WAAA,GAAA;;AAMqB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC;AAY3D,IAAA;;AATG,IAAA,SAAS,CAAC,MAAmB,EAAA;QACzB,QACI,MAAM,CAAC,QAAQ;AACf,YAAA,MAAM,CAAC,SAAS;AAChB,YAAA,MAAM,CAAC,SAAS;AAChB,YAAA,MAAM,CAAC,YAAY;AACnB,aAAC,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,+BAA+B,EAAE,CAAC;IAEvF;8GAbS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AE1JK,MAAO,wBAA4B,SAAQ,iBAAiB,CAAA;AA1BlE,IAAA,WAAA,GAAA;;;AA0CI,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAe;;AAIhD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAuC;;QAS5D,IAAA,CAAA,cAAc,GAAG,aAAa;;QAG9B,IAAA,CAAA,UAAU,GAAG,SAAS;;QAGtB,IAAA,CAAA,mBAAmB,GAAG,kBAAkB;;AAGxC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC;AAMnD,IAAA;;IArBG,IACY,mBAAmB,CAAC,KAAwC,EAAA;QACpE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC;;AAeA,IAAA,QAAQ,CAAC,KAAmC,EAAA;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC;8GA3CS,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,uCAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,EAAA,EAAA,SAAA,EApBtB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,SAAA,EAsCa,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtF9C,w6CAwCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDcQ,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAElB,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEhB,6BAA6B,iHAD7B,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIV,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA1BpC,SAAS;+BAEI,yBAAyB,EAAA,eAAA,EAElB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,sBAAsB,EAAE;qBAC3B,EAAA,OAAA,EACQ;wBACL,kBAAkB;wBAClB,yBAAyB;wBACzB,kBAAkB;wBAClB,kBAAkB;wBAClB,gBAAgB;wBAChB,eAAe;wBACf;AACH,qBAAA,EAAA,QAAA,EAAA,w6CAAA,EAAA;;sBAIA;;sBAIA,WAAW;uBAAC,oBAAoB;;sBAChC;;sBAIA;;sBAIA;;sBAIA;;sBAIA,YAAY;uBAAC,4BAA4B;;;AE/E9C,IAAI,aAAa,GAAG,CAAC;MAUR,0BAA0B,CAAA;AARvC,IAAA,WAAA,GAAA;;AAiCI,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAA,MAAA,EAAS,aAAa,EAAE,EAAE;AAIhD,IAAA;;IAnBG,IACI,WAAW,CAAC,KAAU,EAAA;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;IAC/C;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;8GAlBS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAHxB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC,gEAwBzE,MAAM,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCrB,upCAgCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjBc,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,2BAA2B,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,kCAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE3F,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,aAAA,EAEpB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAA,0BAA4B,EAAE,CAAC,EAAA,OAAA,EAC3E,CAAC,WAAW,EAAE,cAAc,EAAE,2BAA2B,EAAE,eAAe,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,upCAAA,EAAA;;sBAIpG;;sBAIA;;sBAIA;;sBAWA,SAAS;uBAAC,MAAM;;;AEuEf,MAAO,iBAAqB,SAAQ,iBAAiB,CAAA;;IAoDvD,IACY,uBAAuB,CAAC,KAAwC,EAAA;QACxE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC;;AAOA,IAAA,IACc,aAAa,GAAA;AACvB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO;IAC7B;;AAgEA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AArFX;;AAEG;AAEH,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAwB;;QAmBvD,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGlH,QAAA,IAAA,CAAA,yBAAyB,GAAG,CAAA,mBAAA,EAAsB,MAAM,EAAE,EAAE;;AAGnD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,8DAAC;;QAGlC,IAAA,CAAA,mBAAmB,GAAG,kBAAkB;;QAGxC,IAAA,CAAA,cAAc,GAAG,aAAa;;AAG9B,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,sBAAsB,CAAC;;AAGxD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAG5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC;;AAGvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;;QAG1C,IAAA,CAAA,UAAU,GAAG,SAAS;;AAGZ,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,iDAAC;;QAGxD,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGxF,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGlC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAQ;;AAGxC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAGhC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;;AAGtB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;;AAG5B,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,uBAAuB,EAAE;AAClE,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAkFF,QAAA,IAAA,CAAA,0BAA0B,GAAG,CAAC,QAA+B,KAAY;AACrE,YAAA,IAAI,MAAM,GAAG,CAAA,OAAA,EAAU,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAC,SAAS,IAAI;AACzE,YAAA,IAAI,MAAM;AACV,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,eAAe,EAAE;AACxC,gBAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AAChC,gBAAA,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,UAAU,EAAE;AACtE,oBAAA,QAAQ,EAAE;gBACd;gBACA,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;YAC9D;AACA,YAAA,IAAI,MAAM,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE;AACnD,gBAAA,MAAM,GAAG,MAAM,GAAG,SAAS;YAC/B;AACA,YAAA,MAAM,GAAG,MAAM,GAAG,CAAA,KAAA,EAAQ,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAC,SAAS,EAAE;AAC1E,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE;AACjD,gBAAA,MAAM,GAAG,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;YACvD;AACA,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC;QA/FG,IAAI,CAAC,yBAAyB,CAAC;AAC1B,aAAA,IAAI,CACD,SAAS,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAC5D,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAEvC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC5B,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YAC9B,SAAS,CAAgB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS;AACzD,iBAAA,IAAI,CACD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,EACvC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC1B,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;IACN;;IAGA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;IACpB;;IAGA,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACnG,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC3C,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;YAC9D;iBAAO;gBACH,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;YACvD;AACJ,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,KAAK,IAAI,OAAO,EAAE;YAClB,IAAI,CAAC,qBAAqB,EAAE;QAChC;IACJ;;IAGA,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;QAClC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;IACvD;;IAGA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACzE;;AAGA,IAAA,0BAA0B,CAAC,KAAa,EAAA;QACpC,KAAK,EAAE,cAAc,EAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACzF;;IAGA,qBAAqB,CAAC,GAAgB,EAAE,KAAa,EAAA;QACjD,KAAK,EAAE,cAAc,EAAE;QACvB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,CAAC;IAC/F;;IAGA,cAAc,CAAC,KAAa,EAAE,MAAmB,EAAA;QAC7C,OAAO,MAAM,CAAC,IAAI;IACtB;;IAwBA,kBAAkB,CACd,KAA4B,EAC5B,KAAa,EACb,GAAgB,EAChB,MAAmB,EACnB,kBAA+B,EAAA;QAE/B,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC;AAC3D,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;IAClD;;AAGU,IAAA,mBAAmB,CAAC,MAAc,EAAE,gBAAsC,EAAE,MAAa,EAAA;AAC/F,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,IAAI,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;YACpF,MAAM,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,eAAe,EAAE;QAC1B;IACJ;;IAGQ,qBAAqB,GAAA;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC9B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;QAEnF,IAAI,CAAC,GAAG,EAAE;cACJ,IAAI,CACF,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAChE,SAAS,CAAC,OAAO,CAAC;aAErB,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AACjD,QAAA,CAAC,CAAC;IACV;;AAGQ,IAAA,UAAU,CAAC,KAAoB,EAAA;QACnC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;QACxD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC;AAEpD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;YAC5B;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CACxC,WAAW,GAAG,MAAM,GAAG,IAAI,EAC3B,KAAK,EACL,IAAI,CAAC,KAAK,EACV,KAAK,CAAC,QAAQ,GAAG,OAAO,GAAG,OAAO,CACrC;IACL;;AAGQ,IAAA,qBAAqB,CAAC,GAAgB,EAAE,MAAmB,EAAE,kBAA+B,EAAA;AAChG,QAAA,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE;AAC1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC;QACJ;;AAGA,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC;QACJ;AAEA,QAAA,IAAI,KAAa;;AAEjB,QAAA,MAAM,8BAA8B,GAChC,CAAC,MAAM,CAAC,kBAAkB;AAC1B,aAAC,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;;;AAIjG,QAAA,MAAM,2BAA2B,GAC7B,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,EAAE,IAAI,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;QAE3G,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,2BAA2B,IAAI,8BAA8B,CAAC;IAC9F;;AAGQ,IAAA,qBAAqB,CAAC,SAAsB,EAAA;QAChD,OAAO,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,iCAAiC,CAAC;IACxE;8GA3TS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,uCAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,SAAA,EA/Bf;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,SAAA,EA8Ea,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAM5B,iBAAiB,4FCvKnC,41TAuOA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9IQ,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,6BAA6B,EAAA,QAAA,EAAA,uDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,yBAAyB,wHACzB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,iBAAiB,mWACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,mCAAmC,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnC,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,0BAA0B,8GAC1B,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAOlB,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EANb,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,eAAe,+CACf,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACf,uBAAuB,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACvB,mBAAmB,mDACnB,uBAAuB,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIlB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBArC7B,SAAS;+BAEI,iBAAiB,EAAA,aAAA,EAEZ,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,sBAAsB,EAAE;qBAC3B,EAAA,OAAA,EACQ;wBACL,kBAAkB;wBAClB,6BAA6B;wBAC7B,yBAAyB;wBACzB,OAAO;wBACP,gBAAgB;wBAChB,iBAAiB;wBACjB,WAAW;wBACX,mCAAmC;wBACnC,OAAO;wBACP,0BAA0B;wBAC1B,kBAAkB;wBAClB,SAAS;wBACT,eAAe;wBACf,eAAe;wBACf,uBAAuB;wBACvB,mBAAmB;wBACnB,uBAAuB;wBACvB;AACH,qBAAA,EAAA,QAAA,EAAA,41TAAA,EAAA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAQA;;sBAIA;;sBAIA;;sBAIA;;sBAMA;;sBAIA,YAAY;uBAAC,4BAA4B;;sBAMzC,YAAY;uBAAC,iBAAiB;;sBAI9B,WAAW;uBAAC,oBAAoB;;;AE3KrC;AAkKA,IAAI,aAAa,GAAG,CAAC;AAErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AA0EG,MAAO,cACT,SAAQ,KAAQ,CAAA;;IAgEhB,IACI,iBAAiB,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACnC;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC;IACvG;;IA4GA,IACI,aAAa,CAAC,KAAyB,EAAA;AACvC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,IAAI;QACxE,IAAI,CAAC,wBAAwB,EAAE;IACnC;AAEA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc;IAC9B;AAKA;;;AAGG;IACH,IACI,kBAAkB,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;IACpC;AAEA,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,mBAAmB;IACvD;;IAGA,IACI,oBAAoB,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;QACrC,IAAI,CAAC,wBAAwB,EAAE;IACnC;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACnE,YAAA,OAAO,wBAAwB;QACnC;QAEA,OAAO,IAAI,CAAC,wBAAwB;IACxC;AAyBA;;;AAGG;IACH,IACI,wBAAwB,CAAC,KAAa,EAAA;QACtC,IAAI,CAAC,0BAA0B,EAAE;AACjC,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;IAC1C;AAEA,IAAA,IAAI,wBAAwB,GAAA;QACxB,OAAO,IAAI,CAAC,yBAAyB;IACzC;;AAyHA,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,aAAa,IAAI,EAAE;IACjD;AAEA;;;AAGG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU;QAE9B,IAAI,MAAM,EAAE;YACR,QACI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACpE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E;aAAO;AACH,YAAA,OAAO,KAAK;QAChB;IACJ;AAEA;;;;AAIG;AACH,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB;IAC7E;AAEA;;;AAGG;AACH,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;IAC/C;;AAGA,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW;IACjD;;AAGA,IAAA,IAAI,mBAAmB,GAAA;AACnB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,mBAAmB;IACzD;;AAGA,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,mBAAmB;IACnG;;AAGA,IAAA,IAAI,gCAAgC,GAAA;QAChC,OAAO,IAAI,CAAC,oBAAoB,GAAG,kCAAkC,GAAG,CAAC;IAC7E;;AAGA,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,qBAAqB;IAC7E;;AAGA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK;IAC1E;;AAGA,IAAA,IAAI,YAAY,GAAA;QACZ,QACI,IAAI,CAAC,OAAO;AACZ,aAAC,IAAI,CAAC,oBAAoB,CAAC,qBAAqB;gBAC5C,IAAI,CAAC,oBAAoB,CAAC,6BAA6B;AACvD,gBAAA,IAAI,CAAC,gBAAgB,CAAC;IAElC;AAEA;;;;AAII;AACJ,IAAA,IAAI,sBAAsB,GAAA;QACtB,QACI,IAAI,CAAC,uBAAuB;AAC5B,YAAA,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;YAC/B,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,GAAG,CAAC;IAErD;;AAGA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,OAAO,IAAI,CAAC,cAAc;QAC9B;AACA,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,mBAAmB,IAAI,IAAI;IACzD;;AA8CA,IAAA,IAAI,mBAAmB,GAAA;AACnB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAC1C;;AAwHA,IAAA,WAAA,CACqB,OAAe,EACf,IAAuB,EAC/B,aAA2B,EACnB,sBAAoD,EACrD,yBAAmD,EAC1D,sBAA8C,EAC9C,QAAkB,EACV,gBAAwC,EACxC,cAA6B,EAAA;AAE9C,QAAA,KAAK,EAAE;QAVU,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,IAAI,GAAJ,IAAI;QACZ,IAAA,CAAA,aAAa,GAAb,aAAa;QACL,IAAA,CAAA,sBAAsB,GAAtB,sBAAsB;QACvB,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QAChC,IAAA,CAAA,sBAAsB,GAAtB,sBAAsB;QACtB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACA,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,cAAc,GAAd,cAAc;;QAtoBnC,IAAA,CAAA,IAAI,GAAG,eAAe;;AAKtB,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,UAAA,EAAa,aAAa,EAAE,EAAE;;QAInC,IAAA,CAAA,gBAAgB,GAAG,IAAI;AAEvB;;;;AAIK;QAEL,IAAA,CAAA,KAAK,GAAG,IAAI;;QAWZ,IAAA,CAAA,aAAa,GAAG,KAAK;;QAGrB,IAAA,CAAA,iBAAiB,GAAG,KAAK;AACzB;;AAEG;QAEH,IAAA,CAAA,cAAc,GAAG,KAAK;;QAMtB,IAAA,CAAA,sBAAsB,GAAG,EAAE;;QAY3B,IAAA,CAAA,mBAAmB,GAAG,KAAK;;QAG3B,IAAA,CAAA,WAAW,GAAG,KAAK;;QAYX,IAAA,CAAA,kBAAkB,GAAG,KAAK;;QAIlC,IAAA,CAAA,SAAS,GAAG,KAAK;;QAGjB,IAAA,CAAA,aAAa,GAAG,KAAK;;QAIrB,IAAA,CAAA,cAAc,GAAG,KAAK;;QAGtB,IAAA,CAAA,SAAS,GAAG,KAAK;;QAGjB,IAAA,CAAA,SAAS,GAAG,KAAK;AAUjB;;;;AAIG;QAEH,IAAA,CAAA,cAAc,GAAqB,KAAK;AACxC;;AAEG;QAEH,IAAA,CAAA,qBAAqB,GAAG,KAAK;;QAG7B,IAAA,CAAA,aAAa,GAAG,KAAK;;QA4BrB,IAAA,CAAA,YAAY,GAAG,KAAK;AACpB;;;AAGG;QAEH,IAAA,CAAA,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAE;;AAOpD;;;AAGG;QAEH,IAAA,CAAA,eAAe,GAAG,KAAK;AAEvB;;;;AAIG;QAEH,IAAA,CAAA,oBAAoB,GAAG,KAAK;;AAG5B,QAAA,IAAA,CAAA,cAAc,GAAuB,aAAa,CAAC,IAAI;;QAmB/C,IAAA,CAAA,mBAAmB,GAAG,KAAK;AA8BnC;;;;;AAKG;QAEH,IAAA,CAAA,oBAAoB,GAAG,KAAK;;QAU5B,IAAA,CAAA,kBAAkB,GAAG,sBAAsB;;QAI3C,IAAA,CAAA,eAAe,GAAG,KAAK;;QAiBf,IAAA,CAAA,yBAAyB,GAAG,CAAC;;QAG7B,IAAA,CAAA,mBAAmB,GAAG,KAAK;;AAG3B,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,OAAO,EAAQ;;QAGpD,IAAA,CAAA,kBAAkB,GAAG,MAAM;;AAInC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA8B;;AAGrD,QAAA,IAAA,CAAA,kBAAkB,GAAkD,IAAI,YAAY,EAE1F;;AAGM,QAAA,IAAA,CAAA,UAAU,GAAuC,IAAI,YAAY,EAAwB;;AAGzF,QAAA,IAAA,CAAA,YAAY,GAAyC,IAAI,YAAY,EAA0B;;AAG/F,QAAA,IAAA,CAAA,WAAW,GAAwC,IAAI,YAAY,EAAyB;;AAG5F,QAAA,IAAA,CAAA,aAAa,GAA0C,IAAI,YAAY,EAA2B;;AAGlG,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAwB;;AAGrD,QAAA,IAAA,CAAA,YAAY,GAAyC,IAAI,YAAY,EAA0B;;AAG/F,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAmC;;AAGxE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B;;AAG5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA4B;;AAG1D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA4B;;AAG1D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;;AAGxC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAoB;;AAI3C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;;AAGjC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;;AAG1C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;;AAGhD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;AAG1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;;AAGlC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAO;;AAuC9C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;;AAGvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAmB,IAAI,4DAAC;AAsGjD;;;;AAIG;QACH,IAAA,CAAA,UAAU,GAAkB,EAAE;AAC9B;;;;AAIG;QACH,IAAA,CAAA,oBAAoB,GAAkB,EAAE;AACxC;;;AAGG;QACH,IAAA,CAAA,aAAa,GAAkB,EAAE;AACjC;;;;;AAKG;QACH,IAAA,CAAA,iBAAiB,GAAkB,EAAE;AACrC;;;AAGG;AACH,QAAA,IAAA,CAAA,eAAe,GAA6B,IAAI,GAAG,EAAE;AACrD;;;AAGG;AACH,QAAA,IAAA,CAAA,iBAAiB,GAAwB,IAAI,GAAG,EAAE;AAClD;;;AAGG;AACH,QAAA,IAAA,CAAA,oBAAoB,GAAwB,IAAI,GAAG,EAAE;;QAErD,IAAA,CAAA,mBAAmB,GAAG,CAAC;;AAEd,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC;;QAMnC,IAAA,CAAA,aAAa,GAAmB,KAAK;;AAErC,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAEnD,OAAO,UAAU,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AAClG,QAAA,CAAC,0DAAC;AACF;;;;AAIG;QACH,IAAA,CAAA,sCAAsC,GAAa,EAAE;;QAErD,IAAA,CAAA,wBAAwB,GAAe,EAAE;;QAEzC,IAAA,CAAA,uBAAuB,GAAG,KAAK;;QAM/B,IAAA,CAAA,qBAAqB,GAAG,CAAC;;QAIzB,IAAA,CAAA,kBAAkB,GAAG,KAAK;;AAEjB,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAA8B,wBAAwB,CAAC;;AAEpF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;;AAE1C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAoB,yBAAyB,EAAE;AACzE,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAEO,QAAA,IAAA,CAAA,uBAAuB,GAA8B,MAAM,CAChE,kCAAkC,EAClC;AACI,YAAA,QAAQ,EAAE;AACb,SAAA,CACJ;;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAiB,6BAA6B,EAAE;AAChF,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;QAOM,IAAA,CAAA,0BAA0B,GAAG,KAAK;;AAEzB,QAAA,IAAA,CAAA,8BAA8B,GAAG,MAAM,CAAC,KAAK,0EAAC;;AAE9C,QAAA,IAAA,CAAA,gCAAgC,GAAG,MAAM,CAAC,KAAK,4EAAC;;AAEhD,QAAA,IAAA,CAAA,+BAA+B,GAAG,MAAM,CAAC,KAAK,2EAAC;;AAExD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAuB,EAAE,+DAAC;;AAE7C,QAAA,IAAA,CAAA,gCAAgC,GAAG,MAAM,CAAC,KAAK,4EAAC;;AAEhD,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,KAAK,sEAAC;AAE3D;;;AAGG;QACK,IAAA,CAAA,WAAW,GAAG,KAAK;AAC3B;;;AAGG;QACK,IAAA,CAAA,WAAW,GAAG,KAAK;;AAEnB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;;QAEnC,IAAA,CAAA,cAAc,GAAG,KAAK;;QAEtB,IAAA,CAAA,WAAW,GAAQ,EAAE;;QAErB,IAAA,CAAA,gBAAgB,GAAG,KAAK;;QAExB,IAAA,CAAA,gBAAgB,GAAG,KAAK;;AAEf,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,aAAa,EAAE;;QAE7C,IAAA,CAAA,cAAc,GAA+B,EAAE;;QAE/C,IAAA,CAAA,gBAAgB,GAAG,KAAK;;QAExB,IAAA,CAAA,qBAAqB,GAAG,KAAK;;QAE7B,IAAA,CAAA,qBAAqB,GAAG,KAAK;;QAE7B,IAAA,CAAA,+BAA+B,GAAG,KAAK;;AAE9B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,2BAA2B,CAAC;;AAUzD,QAAA,IAAA,CAAA,eAAe,GAA4B,CAAC,KAAa,KAAK,KAAK;;QAGnE,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;QAGpD,IAAA,CAAA,UAAU,GAAG,0BAA0B,EAAE;AAetD,QAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,CAAC,eAAe,GAAG;AACnB,YAAA,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,WAAW;YAC9C,QAAQ,EAAE,IAAI,CAAC,8BAA8B;YAC7C,UAAU,EAAE,IAAI,CAAC,gCAAgC;YACjD,SAAS,EAAE,IAAI,CAAC,+BAA+B;YAC/C,OAAO,EAAE,IAAI,CAAC,gCAAgC;YAC9C,QAAQ,EAAE,IAAI,CAAC,0BAA0B;YACzC,aAAa,EAAE,QAAQ,CACnB,MACI,IAAI,CAAC,8BAA8B,EAAE;gBACrC,IAAI,CAAC,gCAAgC,EAAE;gBACvC,IAAI,CAAC,+BAA+B,EAAE;gBACtC,IAAI,CAAC,gCAAgC,EAAE;gBACvC,IAAI,CAAC,0BAA0B,EAAE,CACxC;YACD,cAAc,EAAE,IAAI,CAAC;SACxB;QAED,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;AAC3D,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE;AAEzE,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACnD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACpD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,CAAC,CAAC,CACL;IACL;;IAGA,wBAAwB,GAAA;QACpB,OAAO,IAAI,CAAC,sCAAsC;IACtD;AAEA;;;;AAIG;AACH,IAAA,wBAAwB,CAAC,UAAU,GAAG,CAAC,EAAE,MAAc,EAAA;QACnD,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;AAC7E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;;AAGvE,QAAA,IACI,IAAI,CAAC,uBAAuB,EAAE,aAAa;YAC3C,IAAI,CAAC,uBAAuB,EAAE,eAAe;YAC7C,IAAI,CAAC,kBAAkB,EAAE,kBAAkB;YAC3C,IAAI,CAAC,kBAAkB,EAAE,UAAU;AACnC,YAAA,IAAI,CAAC,kBAAkB,EAAE,qBAAqB,KAAK,IAAI;AACvD,YAAA,IAAI,CAAC,kBAAkB,EAAE,eAAe,KAAK,IAAI,EACnD;AACE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU;AACrD,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB;AACxE,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe;;YAG9D,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;YACpD,MAAM,8BAA8B,GAAG,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAE7E,IAAI,eAAe,IAAI,CAAC,IAAI,8BAA8B,IAAI,CAAC,EAAE;;gBAE7D,IAAI,eAAe,KAAK,cAAc,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE;AACxE,oBAAA,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;oBACnC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,UAAU,CAAC;AAE9C,oBAAA,UAAU,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAAC,CAAC;oBACpD,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,kBAAkB,CAAC;gBAC5D;YACJ;AAAO,iBAAA,IAAI,8BAA8B,GAAG,CAAC,EAAE;;AAE3C,gBAAA,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE;oBAClC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,UAAU,CAAC;oBAC9C,QAAQ,CAAC,GAAG,EAAE;oBAEd,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,kBAAkB,CAAC;oBACxD,UAAU,CAAC,GAAG,EAAE;gBACpB;qBAAO;AACH,oBAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACzB,oBAAA,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBACvC;YACJ;AAEA,YAAA,IAAI,CAAC,wBAAwB,GAAG,QAAQ;AACxC,YAAA,IAAI,CAAC,sCAAsC,GAAG,UAAU;QAC5D;aAAO;AACH,YAAA,IAAI,CAAC,wBAAwB,GAAG,QAAQ;AACxC,YAAA,IAAI,CAAC,sCAAsC,GAAG,UAAU;QAC5D;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;IAC7B;;AAGA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,SAAS,IAAI,OAAO,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;QACzD;AAEA,QAAA,IAAI,SAAS,IAAI,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW;AACZ,gBAAA,OAAO,IAAI,CAAC,OAAO,KAAK;sBAClB,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK;AACpE,sBAAE,IAAI,CAAC,eAAe;QAClC;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB;QACJ;AAEA,QAAA,IAAI,eAAe,IAAI,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC/B;QAEA,IACI,eAAe,IAAI,OAAO;AAC1B,YAAA,iBAAiB,IAAI,OAAO;AAC5B,YAAA,oBAAoB,IAAI,OAAO;YAC/B,sBAAsB,IAAI,OAAO,EACnC;YACE,IAAI,CAAC,2BAA2B,EAAE;QACtC;AAEA,QAAA,IAAI,gBAAgB,IAAI,OAAO,EAAE;YAC7B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAEtG,IAAI,CAAC,iCAAiC,EAAE;QAC5C;AAEA,QAAA,IAAI,WAAW,IAAI,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACrC;IACJ;;IAGA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,IAAI,CAAC;IACpD;;IAGA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,QAAA,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE;AAEpC,QAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,EAAE;QAEhD,IAAI,CAAC,0BAA0B,EAAE;QAEjC,IAAI,CAAC,gBAAgB,EAAE;QAEvB,IAAI,CAAC,wBAAwB,EAAE;AAE/B,QAAA,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;QAE3C,IAAI,CAAC,sBAAsB,EAAE;QAE7B,IAAI,CAAC,sBAAsB,EAAE;AAE7B,QAAA,IAAI,CAAC,uBAAuB,EAAE,qBAAqB,EAAE;QAErD,IAAI,CAAC,wBAAwB,EAAE;QAE/B,IAAI,CAAC,+BAA+B,EAAE;QAEtC,IAAI,CAAC,0BAA0B,EAAE;QAEjC,IAAI,CAAC,iCAAiC,EAAE;QAExC,IAAI,CAAC,8BAA8B,EAAE;AAErC,QAAA,IACI,CAAC,IAAI,CAAC,uBAAuB,EAAE,eAAe;YAC9C,CAAC,IAAI,CAAC,uBAAuB;AAC7B,YAAA,CAAC,IAAI,CAAC,uBAAuB,EAAE,aAAa,EAC9C;YACE,IAAI,CAAC,mBAAmB,EAAE;QAC9B;QAEA,IAAI,CAAC,0BAA0B,EAAE;AAEjC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,SAAS,EAAE;QACpB;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,eAAe,EAAE;YAChD,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,uBAAuB,EAAE;iBACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACrF,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,WAAA,EAAc,SAAS,CAAA,GAAA,CAAK;YAChF,CAAC,CAAC,CACT;QACL;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,OAAO;QAC/C;AAEA,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,eAAe,EAAE;YAC/C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;QAC3D;IACJ;;IAGA,kBAAkB,GAAA;;AAEd,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC7B;QACJ;AACA,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAK;YAClB,OAAO,CAAC,IAAI,EAAE;AAClB,QAAA,CAAC,CAAC;IACN;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,QAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE;AAC1C,QAAA,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE;IAClD;;IAGA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;IAC7C;;AAGA,IAAA,aAAa,CAAC,KAA8C,EAAA;AACxD,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,MAAM,QAAQ,GAAe,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,EAAE,KAAK,CAAC;QAC3F,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ;QACtC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5D,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;IAGA,eAAe,GAAA;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IACxC;;IAGA,sBAAsB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,EAAE;IACrC;;AAGA,IAAA,IAAI,CAAC,SAA2B,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;AAGA,IAAA,OAAO,CAAC,SAA2B,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;AAGA,IAAA,MAAM,CAAC,WAA+B,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;AAGA,IAAA,SAAS,CAAC,WAA+B,EAAA;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;AAGA,IAAA,YAAY,CAAC,MAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;AAGA,IAAA,KAAK,CAAC,MAAyB,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;AAGA,IAAA,QAAQ,CAAC,MAAyB,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,OAAiB,EAAA;AACxB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AAC3C,QAAA,MAAM,aAAa,GAA6B;AAC5C,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,EAAE;SACT;QACD;AACK,aAAA,MAAM,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;;aAEhD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,aAAA,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI;YACpB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACzB,YAAA,OAAO,GAAG;QACd,CAAC,EAAE,aAAa,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;IAGA,cAAc,CAAC,UAAkB,EAAE,GAAa,EAAA;QAC5C,GAAG,IAAI,IAAI,CAAC,kBAAkB,GAAG,UAAU,KAAK,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;QAElF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;QAC5C,IAAI,CAAC,2BAA2B,EAAE;IACtC;;IAGA,QAAQ,CAAC,UAAkB,EAAE,GAAa,EAAA;AACtC,QAAA,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,iBAAiB;QACxE,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAEnE;AACI,eAAG,IAAI,CAAC,kBAAkB,GAAG,0BAA0B;eACpD,IAAI,CAAC,eAAe,GAAG,0BAA0B,CAAC;QAEzD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,CAAC;QAC5D,IAAI,CAAC,2BAA2B,EAAE;IACtC;;IAGA,SAAS,GAAA;QACL,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC;AACtF,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE;AAC3C,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,cAAc,CAAC;QACvD;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,0CAA0C,CAAC,EAAE,CAAC;IAC/F;;IAGA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC1B,YAAA,CAAC,CAAC,QAAQ,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,CAAC,MAAM,EAAE;AACV,gBAAA,CAAC,CAAC,MAAM,GAAG,IAAI;YACnB;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,4CAA4C,CAAC,EAAE,CAAC;IACjG;;AAGA,IAAA,MAAM,CAAC,WAAwB,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;AAGA,IAAA,cAAc,CAAC,WAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;AAGA,IAAA,WAAW,CAAC,QAAgB,EAAE,eAAe,GAAG,IAAI,EAAA;QAChD,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC;IACjE;;AAGA,IAAA,yBAAyB,CAAC,gBAAyB,EAAA;AAC/C,QAAA,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC7D;;AAGA,IAAA,2BAA2B,CAAC,kBAA2B,EAAA;AACnD,QAAA,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACjE;;AAGA,IAAA,0BAA0B,CAAC,iBAA0B,EAAA;AACjD,QAAA,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC/D;;AAGA,IAAA,2BAA2B,CAAC,kBAA2B,EAAA;AACnD,QAAA,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACjE;;AAGA,IAAA,qBAAqB,CAAC,YAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,YAAY,CAAC;IACrD;;AAGA,IAAA,gCAAgC,CAAC,QAAiB,EAAA;QAC9C,IAAI,CAAC,aAAa,CAAC,+BAA+B,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpE;;IAGA,gBAAgB,CAAC,QAAgB,EAAE,cAAgC,EAAA;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,GAAG,EAAE;YACN;QACJ;QAEA,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC;QAE7D,IAAI,CAAC,iCAAiC,EAAE;AAExC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;AAEA;;;AAGG;AACH,IAAA,mBAAmB,CAAC,QAAgB,EAAA;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AAErC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,EAAE;YACjD;QACJ;QAEA,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM,EAAE;AAC7C,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC;QACxC;aAAO,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,QAAQ,EAAE;AACtD,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;QACnC;IACJ;AAEA;;;;AAIG;IACH,kBAAkB,CAAC,QAAgB,EAAE,KAAc,EAAA;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,GAAG,EAAE;YACN;QACJ;AAEA,QAAA,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QACtC;IACJ;;AAGA,IAAA,mBAAmB,CAAC,QAAgB,EAAA;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,GAAG,EAAE;YACN;QACJ;AAEA,QAAA,GAAG,CAAC,WAAW,GAAG,KAAK;QAEvB,IAAI,CAAC,iCAAiC,EAAE;AAExC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B;;IAGA,2BAA2B,GAAA;AACvB,QAAA,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,EAAE;QACtD,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QAChG,IAAI,CAAC,iBAAiB,EAAE;IAC5B;;IAGA,kCAAkC,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;AAC9B,YAAA,OAAO,CAAC;QACZ;;QAGA,MAAM,iBAAiB,GAAG,EAAE;QAE5B,OAAO,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,GAAG,iBAAiB,GAAG,CAAC;IACjF;;IAGA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,gBAAgB;IACrD;AAEA;;AAEG;IACH,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;QACtC,IAAI,CAAC,wBAAwB,EAAE;AAE/B,QAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AACpF,QAAA,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,2BAA2B;AAE/D,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAExD,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;IAGA,aAAa,GAAA;QACT,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACtB;AAEA;;AAEG;IACH,QAAQ,GAAA;AACJ,QAAA,MAAM,KAAK,GAAG,IAAI,aAAa,CAAI,MAAK;AACpC,YAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1E,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,aAAa,GAAyB,EAA0B,CAAC,MAAM,CAAC,KAAK,CAC/E,EAAE,EACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAC3D;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;;AAG1F,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAW,CAAC,CAAC;AACnD,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE;YACpC;QACJ;QAEA,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;;AAGA,IAAA,SAAS,CAAC,IAAgC,EAAA;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IAC5B;;IAGA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE;QAC/B;;QAEA,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AAC7C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;QAEzC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;;YAE3C,IACI,QAAQ,KAAK,YAAY;AACzB,iBAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC;AACrB,qBAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;oBAC/E,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EACrC;gBACE;YACJ;YAEA,aAAa,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC;AACpD,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,aAAa;IACxB;AAEA;;AAEG;IACH,cAAc,GAAA;QACV,IAAI,IAAI,CAAC,uBAAuB,EAAE,aAAa,KAAK,IAAI,EAAE;YACtD;QACJ;AACA,QAAA,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE;IAC1C;;AAGA,IAAA,cAAc,CAAC,GAAa,EAAE,QAAgB,EAAE,WAAmB,EAAA;QAC/D,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC;IACtE;AAEA;;;;;;;;;;;;;AAaG;IACH,eAAe,CAAC,GAAG,UAAoB,EAAA;QACnC,IAAI,QAAQ,GAAoB,IAAI;AACpC,QAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;YAC/B,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAE7E,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE;gBACrC;YACJ;AAEA,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAClC;IACJ;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,QAA+B,EAAA;AACrC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAiC;AAC5D,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;IACpE;AAEA;;AAEG;IACH,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,sCAAsC,GAAG,EAAE;AAChD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC;;;IAKA,uBAAuB,GAAA;QACnB,IAAI,CAAC,eAAe,CAAC,sBAAsB,CACvC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,EAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAC3B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACjC;IACL;;AAGA,IAAA,mBAAmB,CAAC,SAAkB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACrC;QACJ;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;QACjC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;IACzD;AAEA;;;AAGG;IACH,qBAAqB,CAAC,WAAqB,EAAE,KAAa,EAAA;QACtD,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,QAAQ,EAAE;AAC/C,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAChD;AACA,QAAA,MAAM,OAAO,IAAI,WAAW,CAAC,OAAO,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC;AAC5D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU;AAC5B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,WAAW,CAAC;QAE7E,MAAM,OAAO,GAAkB,EAAE;QACjC,MAAM,KAAK,GAAkB,EAAE;QAC/B,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,aAAa,EAAE,KAAqC,CAAC;QAE/F,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,GAAG,KAAI;AAChD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACrB,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE;AAC9C,gBAAA,GAAG,CAAC,OAAO,GAAG,OAAO;AACrB,gBAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBAE7C,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC;YACrD;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC;QAEjD,IAAI,CAAC,oBAAoB,EAAE;IAC/B;AAEA;;;AAGG;AACH,IAAA,0BAA0B,CAAC,WAAqB,EAAA;QAC5C,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM,EAAE;AAC7C,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAChD;AAEA,QAAA,MAAM,OAAO,IAAI,WAAW,CAAC,OAAO,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC;QAC5D,MAAM,OAAO,GAAkB,EAAE;QACjC,MAAM,KAAK,GAAkB,EAAE;;AAG/B,QAAA,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnE,YAAA,IAAI,GAAG,KAAK,WAAW,EAAE;gBACrB;YACJ;AAEA,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,gBAAA,GAAG,CAAC,OAAO,GAAG,KAAK;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AAE7D,QAAA,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC;QAEjD,IAAI,CAAC,oBAAoB,EAAE;IAC/B;AAEA;;;AAGG;AACH,IAAA,wBAAwB,CAAC,SAAkB,EAAA;QACvC,MAAM,OAAO,GAAkB,EAAE;QACjC,MAAM,KAAK,GAAkB,EAAE;AAE/B,QAAA,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnE,YAAA,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE;gBAC3B;YACJ;AACA,YAAA,GAAG,CAAC,OAAO,GAAG,SAAS;AACvB,YAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACnD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAE3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;QAEpC,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;QAEvD,IAAI,CAAC,oBAAoB,EAAE;IAC/B;AAEA;;;AAGG;AACH,IAAA,4BAA4B,CAAC,KAAiB,EAAE,OAAmB,EAAE,MAAe,KAAK,EAAA;QACrF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa;aACjE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO;aAC/B,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC;AAE9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AACzB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC;AACtC,YAAA,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC;AAC1C,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC;YACtD;AACH,SAAA,CAAC;IACN;;IAGA,YAAY,CAAC,MAAc,EAAE,GAAgB,EAAA;AACzC,QAAA,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAC7B;IACJ;;IAGA,WAAW,CAAC,GAAuB,EAAE,KAAY,EAAA;QAC7C,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE;YACjC;QACJ;AAEA,QAAA,IAAI,KAAK,IAAI,KAAK,YAAY,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAC5E,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAqB;AAC/C,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC;YAC1F,IAAI,eAAe,EAAE;gBACjB,KAAK,CAAC,cAAc,EAAE;gBACtB,eAAe,CAAC,KAAK,EAAE;gBACvB,eAAe,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;YAC1D;QACJ;QAEA,IAAI,GAAG,EAAE;YACL,MAAM,CAAC,GAAG,KAAmC;YAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO;AACtC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC;QACvC;IACJ;;IAGA,iBAAiB,CAAC,WAAmB,EAAE,GAAgB,EAAA;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAI,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACjF;;IAGA,gBAAgB,CAAC,GAAgB,EAAE,OAAgB,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB;QACJ;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAI,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACrF;AAEA;;;AAGG;AACH,IAAA,eAAe,CAAC,QAAqB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,EAAE;YAC7C;QACJ;AAEA,QAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC;QAEvC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;AACvD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACxB,IAAI,4BAA4B,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CACrF;IACL;;IAGA,gBAAgB,CAAC,GAAgB,EAAE,OAAgB,EAAA;AAC/C,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;YAClB;QACJ;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AAE7C,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;QACtC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAI,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACrF;;IAGA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC1E;;IAGA,kBAAkB,GAAA;QACd,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,uBAAuB,CAAC,0BAA0B,EAAE;QAC7D;IACJ;;AAGA,IAAA,wBAAwB,CAAC,WAAqB,EAAE,UAAU,GAAG,KAAK,EAAA;AAC9D,QAAA,WAAW,CAAC,UAAU,GAAG,UAAU;AACnC,QAAA,MAAM,QAAQ,IAAI,WAAW,CAAC,QAAQ,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC;AAE/D,QAAA,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;;YAE1D,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,GAAG,CAAC,MAAM,GAAG,IAAI;AACjB,gBAAA,GAAG,CAAC,QAAQ,GAAG,KAAK;YACxB;;YAGA,IAAI,QAAQ,EAAE;gBACV,GAAG,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC;YACpF;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE;IAC7B;;AAGA,IAAA,eAAe,CAAC,WAAoB,EAAA;QAChC,IAAI,CAAC,WAAW,EAAE;YACd;QACJ;AACA,QAAA,MAAM,EACF,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAClC,GAAG,IAAI,CAAC,aAAa,EAAE;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,IAAI,UAAU,CAAC,CAAC;AACjE,QAAA,IAAI,WAAW,IAAI,QAAQ,EAAE;YACzB;QACJ;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,CAAC,CAAC;AACxC,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;;AAQG;IACK,uBAAuB,GAAA;QAC3B,UAAU,CAAC,MAAK;AACZ,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa;YACpD,MAAM,GAAG,GAAG,SAAS,EAAE,aAAa,CAAC,0CAA0C,CAAuB;AACtG,YAAA,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE;gBACpB;YACJ;AACA,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,qBAAqB,EAAE;AACvD,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,EAAE;;;YAG3C,IAAI,OAAO,CAAC,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE;AACrC,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC9B;AACJ,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;IACvC;;IAGA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;IACnC;;IAGQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IAC5D;;AAGQ,IAAA,eAAe,CAAC,KAAa,EAAA;QACjC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChD;;AAGQ,IAAA,eAAe,CAAC,IAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACf,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;AACjB,YAAA,CAAC,CAAC,MAAM,GAAG,KAAK;AACpB,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,kBAAkB,EAAE;IAC7B;;IAGQ,sBAAsB,GAAA;QAC1B,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,oBAAoB,CAAC;aACrB,IAAI;;AAED,QAAA,GAAG,CAAC,CAAC,MAAW,KAAK,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;;QAEpE,SAAS,CAAC,CAAC,IAAgB,KACvB,IAAI,CAAC;AACD,cAAE,EAAE,CAAC,IAAI;AACT,cAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,UAAU,KACX,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAC9E,CACJ,CACV;AAEJ,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;YAChB,MAAM,cAAc,GAChB,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC;AAC/F,YAAA,IAAI,GAAG,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI;AAC5D,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;;;;;;;AAQxB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,CAAC,uBAAuB,EAAE;YAClC;QACJ,CAAC,CAAC,CACT;QAED,IAAI,CAAC,oBAAoB,CAAC;AACrB,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B;YACpD,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,KAAI;AAClC,gBAAA,MAAM,CAAC,GAAG,CACN,SAAS,EACT,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACzD,oBAAA,GAAG,CAAC,MAAM,GAAG,SAAS;oBACtB,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC;AAC/B,oBAAA,GAAG,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ;AAChC,oBAAA,OAAO,GAAG;gBACd,CAAC,CAAC,CACL;AACL,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;AAEL,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACjB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,KAAI;gBAC9B,IAAI,mBAAmB,GAAG,CAAC;gBAE3B,SAAS,mBAAmB,CAAC,MAAmB,EAAA;AAC5C,oBAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;wBACjB,mBAAmB,GAAG,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;wBAClE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;4BAC9B,mBAAmB,CAAC,KAAK,CAAC;AAC9B,wBAAA,CAAC,CAAC;oBACN;gBACJ;gBAEA,mBAAmB,CAAC,SAAS,CAAC;AAE9B,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;gBAE7E,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEhC,gBAAA,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACvE,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACV;;IAGQ,0BAA0B,GAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAK;YACjD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpD,CAAC,CAAC,CACL;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC;AACd,aAAA,IAAI,CACD,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,EAC7C,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,EAC1EK,sBAAoB,EAAE;AAEzB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACjB,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QAC3D,CAAC,CAAC,CACT;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;YAC1D,QAAQ,IAAI;AACR,gBAAA,KAAK,SAAS;oBACV,IAAI,CAAC,wBAAwB,EAAE;oBAC/B,IAAI,CAAC,2BAA2B,EAAE;AAElC,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACzF;AACJ,gBAAA,KAAK,QAAQ;AACT,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvF,oBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE;AACnC,oBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC1C;AACJ,gBAAA,KAAK,QAAQ;AACT,oBAAA,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE;AACvC,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC3F;oBACA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI;oBAC9F;AACJ,gBAAA,KAAK,QAAQ;oBACT;AACJ,gBAAA,KAAK,OAAO;oBACR,IAAI,CAAC,wBAAwB,EAAE;oBAC/B,IAAI,CAAC,2BAA2B,EAAE;AAElC,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACrF;AACJ,gBAAA,KAAK,MAAM;AACP,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACnF;AACJ,gBAAA,KAAK,MAAM;AACP,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACnF;;QAEZ,CAAC,CAAC,CACL;QAED,IAAI,CAAC,4BAA4B,EAAE;IACvC;;AAGQ,IAAA,sBAAsB,CAAC,OAA2B,EAAA;QACtD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;YACzC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAErD,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK;AACrC,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAClD;;AAGQ,IAAA,aAAa,CAAC,KAAU,EAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC7C,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB;;AAGA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACjE;AAEA,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK;aACtB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;aACzD,IAAI,CAAC,IAAI,CAAC;IACnB;;AAGQ,IAAA,iBAAiB,CAAC,UAAkB,EAAA;AACxC,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE;;IAGQ,4BAA4B,GAAA;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAK;YACzD,IAAI,CAAC,uBAAuB,EAAE;QAClC,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACpD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE;AACtC,qBAAA,gBAAgB,CAAC,GAAG,EAAE,KAAK;AAC3B,qBAAA,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,UAAU,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAChE,GAAG,CAAC,OAAO,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,EACnC,IAAI,CAAC,CAAC,CAAC;qBAEV,SAAS,CAAC,MAAK;AACZ,oBAAA,MAAM,QAAQ,GAAG;AACb,wBAAA,GAAG,KAAK;wBACR,GAAG;AACC,4BAAA,IAAI,EAAE;AACF,gCAAA,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACtE,gCAAA,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;AACxB;AACJ;qBACJ;AACD,oBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;AACrE,gBAAA,CAAC,CAAC;AACV,YAAA,CAAC,CAAC;QACN,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YACjD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC;QACzC,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC7D,YAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;QACtC,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC/C,YAAA,QAAQ,GAAG,CAAC,IAAI;AACZ,gBAAA,KAAK,WAAW;AACZ,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;oBAC7B;AACJ,gBAAA,KAAK,sBAAsB;oBACvB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;oBAC9C;AACJ,gBAAA,KAAK,2BAA2B;AAC5B,oBAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC;oBACxC;;QAEZ,CAAC,CAAC,CACL;IACL;;AAGQ,IAAA,iCAAiC,CAAC,MAAW,EAAA;AACjD,QAAA,IAAI,IAAmB;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,GAAG,IAAI,CAAC,qCAAqC,CAAC,MAAM,CAAC;QAC7D;aAAO;AACH,YAAA,IAAI,GAAG,yBAAyB,CAC5B,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,CACrB;QACL;QAEA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACvD,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACjB,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI;AACrC,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,IAAI;IACf;;AAGQ,IAAA,qCAAqC,CAAC,MAAW,EAAA;AACrD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAQ;AAE7B,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;YAClB,OAAO,6BAA6B,CAAC,MAAoB,EAAE,IAAI,CAAC,cAAc,CAAC;QACnF;AAEA,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AAClB,YAAA,OAAO,6BAA6B,CAChC,MAAM,EACN,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,kBAAkB,CAC1B;QACL;AACA,QAAA,OAAO,EAAE;IACb;;AAGQ,IAAA,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAA;AAClD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACvE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,iCAAiC,EAAE;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAE3B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QAEjC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACvC,IAAI,CAAC,2BAA2B,EAAE;AAClC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAChC;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;IAC7B;;IAGQ,0BAA0B,GAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACrE,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,aAAa,EAAE;AAC7C,YAAA,IAAI,CAAC,uBAAuB,CAAC,0BAA0B,EAAE;QAC7D;aAAO;YACH,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACnE;IACJ;;IAGQ,wBAAwB,GAAA;QAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,sBAAsB,CAAC;AACvB,aAAA,IAAI,CACD,GAAG,CAAC,MAAK;YACL,IAAI,CAAC,wBAAwB,EAAE;AACnC,QAAA,CAAC,CAAC,EACF,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EACtE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAE5C,aAAA,SAAS,CAAC,CAAC,cAAc,KAAI;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAE;AAC3F,YAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,aAAa,EAAE;gBAC7C,IAAI,CAAC,uBAAuB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;gBACvD,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AACzE,gBAAA,IAAI,CAAC,uBAAuB,CAAC,0BAA0B,EAAE;YAC7D;QACJ,CAAC,CAAC,CACT;IACL;;IAGQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACtD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC;AACvF,YAAA,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC;YAE3D,MAAM,UAAU,GAAG;AACd,iBAAA,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;iBACvE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;YACvB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO;AAEjD,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;AAE9C,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,UAAU,CAAC,CAAC;YACrD;AAEA,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAE5B,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC;YAE1F,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC;AACjC,oBAAA,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc;AAC7D,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;YACjG;AACA,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AACtC,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACK,wBAAwB,GAAA;AAC5B,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE;QAChD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;AACjD,QAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC;AAE1G,QAAA,MAAM,UAAU,GAAG,OAAO;aACrB,GAAG,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;aACtE,MAAM,CAAC,CAAC,MAAM,KAA4B,CAAC,CAAC,MAAM;AAClD,aAAA,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAE7D,QAAA,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,UAAU,CAAC,MAAM,CACtD,CAAC,GAAG,EAAE,MAAM,KAAI;AACZ,YAAA,IAAI,MAAM,CAAC,eAAe,KAAK,QAAQ,EAAE;AACrC,gBAAA,OAAO,GAAG;YACd;YACA,GAAG,CAAC,MAAM,CAAC,eAAe,KAAK,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9D,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,EACD,CAAC,EAAE,EAAE,EAAE,CAAoB,CAC9B;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC;AACpD,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC;AAEpD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;QAEzB,IAAI,CAAC,4BAA4B,EAAE;IACvC;;IAGQ,4BAA4B,GAAA;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,MAAM;AAC5D,QAAA,IAAI,CAAC,mBAAmB;AACpB,YAAA,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM;AAC7B,iBAAC,IAAI,CAAC,uBAAuB,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,iBAAC,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC;;IAGQ,iCAAiC,GAAA;QACrC,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9G;;IAGQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC;AACxF,QAAA,IAAI,CAAC,oBAAoB,GAAG,sBAAsB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC;QACjG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI;QAC9F,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC5B,YAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AACzD,YAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AACnE,QAAA,CAAC,CAAC;IACN;;IAGQ,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAA;QACrE,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF;;IAGQ,oBAAoB,GAAA;AACxB,QAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;AAC7E,QAAA,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAChG,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,KAAK;IAClF;AAEA;;;;;AAKG;AACK,IAAA,uBAAuB,CAAC,GAAa,EAAE,SAAwB,EAAE,WAA0B,EAAA;AAC/F,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B;QACJ;QACA,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC;QAC1D,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC;IAC/D;;AAGQ,IAAA,wBAAwB,CAAC,GAAa,EAAE,SAAwB,EAAE,WAA0B,EAAA;AAChG,QAAA,IAAI,UAAU,GAAG,GAAG,CAAC,MAAM;QAE3B,OAAO,UAAU,EAAE;YACf,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;YACpG,MAAM,YAAY,GAAkB,EAAE;YACtC,MAAM,kBAAkB,GAAkB,EAAE;AAC5C,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACnB,gBAAA,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE;AACpB,oBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxB;AAAO,qBAAA,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE;AAC3B,oBAAA,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9B;AACJ,YAAA,CAAC,CAAC;YACF,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;AAC1D,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;YAE1C,UAAU,CAAC,OAAO,GAAG,UAAU,GAAG,IAAI,GAAG,UAAU,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACnG,YAAA,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,KAAK;AACzC,kBAAE,SAAS,CAAC,IAAI,CAAC,UAAU;AAC3B,kBAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAElC,YAAA,UAAU,GAAG,UAAU,CAAC,MAAM;QAClC;IACJ;;AAGQ,IAAA,yBAAyB,CAAC,GAAa,EAAE,SAAwB,EAAE,WAA0B,EAAA;QACjG,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC;IAC1E;;IAGQ,sBAAsB,GAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,UAAU,KAAI;;AAE5D,YAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,eAAe,EAAE;AAChD,gBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE;AAE3C,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGlC,gBAAA,IAAI,CAAC,aAAa,EAAE,CAAC,iBAAiB,GAAG,SAAS;YACtD;QACJ,CAAC,CAAC,CACL;IACL;;IAGQ,+BAA+B,GAAA;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACnG;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CACrG;IACL;;IAGQ,0BAA0B,GAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa;AAC7C,aAAA,IAAI,CACD,GAAG,CAAC,MAAK;;YAEL,IAAI,CAAC,cAAc,EAAE;AACzB,QAAA,CAAC,CAAC,EACF,YAAY,CAAC,GAAG,CAAC;aAEpB,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,2BAA2B,EAAE;AAClC,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;AAC/D,gBAAA,IAAI,CAAC,yBAAyB,CAAC,wBAAwB,EAAE;AACzD,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAC7B;QACJ,CAAC,CAAC,CACT;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,MAAK;;YAEtD,IAAI,CAAC,cAAc,EAAE;QACzB,CAAC,CAAC,CACL;IACL;;IAGQ,iCAAiC,GAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,SAAS,CAAC,MACjE,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,CAC/C,CACJ;AACL,QAAA,CAAC,CAAC;IACN;;IAGQ,mBAAmB,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAElC,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1D;QACJ;QACA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACrE;AAEA;;;AAGG;IACK,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;QACvC,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,aAAa,EAAE;IACxB;;IAGQ,8BAA8B,GAAA;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC1F,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;oBAC3F,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;gBAC/E;AACJ,YAAA,CAAC,CAAC;QACN,CAAC,CAAC,CACL;IACL;;AAGQ,IAAA,WAAW,CAAC,QAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACvD,YAAA,QAAQ,EAAE;AACd,QAAA,CAAC,CAAC;IACN;;IAGQ,wBAAwB,GAAA;QAC5B,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACxE,IAAI,CAAC,aAAa,CAAC,iCAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC;IACnG;;IAGQ,wBAAwB,GAAA;AAC5B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAC9B,eAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC;cACnE,CAAC;IACX;;IAGQ,cAAc,GAAA;QAClB,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,GAAG,CAC/C,IAAI,CAAC,yBAAyB,CAAC,UAAU;YACrC,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,IAAI,CAAC,CAAC,CAC7G;IACL;AAEA;;;AAGG;IACK,0BAA0B,GAAA;AAC9B,QAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE;AAC1C,QAAA,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE;AAE9C,QAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,OAAO,EAAE;QAEnD,IAAI,CAAC,yBAAyB,CAAC;AAC1B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,8BAA8B,CAAC;aACnD,SAAS,CAAC,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;IAC9D;IAEQ,6BAA6B,GAAA;QACjC,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,+BAA+B,EAAE;YAC/D;QACJ;AACA,QAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,KAAK;QAC9E,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC1B,YAAA,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;AAChC,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI;AACpC,SAAA,CAAC;AACF,QAAA,MAAM,UAAU,GAAG;YACf,MAAM,EAAE,IAAI,GAAG,EAAkB;YACjC,QAAQ,EAAE,IAAI,GAAG;SACpB;QACD,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,KAAI;AAChC,YAAA,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACzG,QAAA,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AAEzD,QAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,+BAA+B,GAAG,KAAK;YAC5C;QACJ;QAEA,MAAM,eAAe,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC;AAEzF,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,eAAe;QACxG,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AAEzD,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACvC,YAAA,IAAI,CAAC,+BAA+B,GAAG,KAAK;YAC5C;QACJ;AAEA,QAAA,IAAI,UAAkB;AAEtB,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE;AACzC,YAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC7B;YACJ;AAEA,YAAA,UAAU,GAAG,cAAc,CAAC,GAAG,EAAG;YAClC,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAE;QAC9C;AAEA,QAAA,IAAI,CAAC,+BAA+B,GAAG,KAAK;AAE5C,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClE;;AAGQ,IAAA,yBAAyB,CAAC,GAAwB,EAAA;AACtD,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM;AAC3E,YAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG;QAChF;IACJ;8GAhxES,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EA8DH,gBAAgB,CAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,EAoLhB,gBAAgB,CAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,qCAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,kCAAA,EAAA,qBAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EArTzB;AACP,YAAA,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC,EAAE;YACjE,eAAe;YACf,YAAY;YACZI,cAAgB;YAChB,4BAA4B;YAC5B,wBAAwB;YACxB,sBAAsB;AACtB,YAAA,+BAA+B,CAAC;AAC5B,gBAAA,uBAAuB,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS;aAC9G,CAAC;AACF,YAAA;AACI,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiaa,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGb,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EATnB,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,SAAA,EAGX,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA1LvB,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqKvBC,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGpC,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGP,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAG/B,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAMK,UAAU,6eC/mB9C,otiBAuTA,EAAA,MAAA,EAAA,CAAA,0w8JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrEQ,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,mCAAmC,EAAA,QAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnC,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAExBC,gBAAkB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,oBAAoB,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,uBAAuB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,0BAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,KAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,iBAAiB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,6JACxB,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAIxB,2BAA2B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,oBAAoB,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,uBAAuB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EALvB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,eAAe,+CACf,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAMT,cAAc,EAAA,UAAA,EAAA,CAAA;kBAzE1B,SAAS;+BACI,WAAW,EAAA,aAAA,EAGN,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACP,wBAAA,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,cAAe,CAAC,EAAE;wBACjE,eAAe;wBACf,YAAY;wBACZF,cAAgB;wBAChB,4BAA4B;wBAC5B,wBAAwB;wBACxB,sBAAsB;AACtB,wBAAA,+BAA+B,CAAC;AAC5B,4BAAA,uBAAuB,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS;yBAC9G,CAAC;AACF,wBAAA;AACI,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,cAAA,EACe;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,wBAAwB;AACnC,4BAAA,MAAM,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;AAEzC,4BAAA,OAAO,EAAE;gCACL,wBAAwB;;gCAExB,iBAAiB;;gCAEjB,gBAAgB;gCAChB,mBAAmB;gCACnB,aAAa;gCACb;AACH;AACJ,yBAAA;wBACD;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,iCAAiC,EAAE,aAAa;AAChD,wBAAA,yCAAyC,EAAE,kCAAkC;AAC7E,wBAAA,uCAAuC,EAAE,mBAAmB;AAC5D,wBAAA,yBAAyB,EAAE;qBAC9B,EAAA,OAAA,EACQ;wBACL,gBAAgB;wBAChB,sBAAsB;wBACtB,mCAAmC;wBACnC,wBAAwB;wBACxB,sBAAsB;wBACtBE,gBAAkB;wBAClB,oBAAoB;wBACpB,uBAAuB;wBACvB,kBAAkB;wBAClB,iBAAiB;wBACjB,sBAAsB;wBACtB,iBAAiB;wBACjB,wBAAwB;wBACxB,iBAAiB;wBACjB,kBAAkB;wBAClB,iBAAiB;wBACjB,wBAAwB;wBACxB,SAAS;wBACT,eAAe;wBACf,cAAc;wBACd,2BAA2B;wBAC3B,oBAAoB;wBACpB;AACH,qBAAA,EAAA,QAAA,EAAA,otiBAAA,EAAA,MAAA,EAAA,CAAA,0w8JAAA,CAAA,EAAA;;sBAOA;;sBAIA;;sBACA,WAAW;uBAAC,SAAS;;sBAIrB;;sBAQA;;sBAIA;;sBAIA;;sBAGA;;sBAGA;;sBAKA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAGrC;;sBAaA;;sBAGA;;sBAGA,WAAW;uBAAC,kCAAkC;;sBAC9C;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAOA;;sBAKA;;sBAGA;;sBAGA;;sBAGA;;sBAOA;;sBAMA;;sBAGA;;sBAGA;;sBAGA;;sBAMA;;sBAKA;;sBAOA;;sBAQA;;sBAOA,SAAS;uBAAC,uBAAuB;;sBAIjC;;sBAkBA;;sBAUA;;sBAoBA;;sBAMA;;sBAIA;;sBAIA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAOrC;;sBAuBA;;sBAGA;;sBAKA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAIA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA,SAAS;uBAAC,iBAAiB;;sBAG3B,SAAS;uBAAC,gBAAgB;;sBAG1B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAAD,gBAAgB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAGhD,SAAS;uBAAC,4BAA4B;;sBAGtC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAG3C,SAAS;uBAAC,gBAAgB;;sBAG1B,SAAS;uBAAC,0BAA0B;;sBAGpC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAG3C,eAAe;uBAAC,WAAW;;sBAG3B,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;sBAGxD,YAAY;uBAAC,aAAa;;sBAG1B,YAAY;uBAAC,sBAAsB;;sBA4MnC;;;AErxBL,MAAM,uBAAuB,GAAG;IAC5B,cAAc;IACd,oBAAoB;IACpB,qBAAqB;IACrB,4BAA4B;IAC5B,gCAAgC;IAChC,gCAAgC;IAChC,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,wBAAwB;IACxB,mBAAmB;IACnB,2BAA2B;IAC3B,0BAA0B;IAC1B,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;IACvB,qBAAqB;IACrB,uBAAuB;IACvB,sBAAsB;IACtB,wBAAwB;IACxB,yBAAyB;IACzB,0BAA0B;IAC1B,2BAA2B;IAC3B,mBAAmB;IACnB,yBAAyB;IACzB,mCAAmC;IACnC,sBAAsB;IACtB,2BAA2B;IAC3B,0BAA0B;IAC1B,gCAAgC;IAChC,+BAA+B;IAC/B,+BAA+B;IAC/B,iBAAiB;IACjB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,yBAAyB;IACzB,2BAA2B;IAC3B;CACH;AAED;;;AAGG;MAKU,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAjD5B,cAAc;YACd,oBAAoB;YACpB,qBAAqB;YACrB,4BAA4B;YAC5B,gCAAgC;YAChC,gCAAgC;YAChC,gBAAgB;YAChB,iBAAiB;YACjB,gBAAgB;YAChB,wBAAwB;YACxB,mBAAmB;YACnB,2BAA2B;YAC3B,0BAA0B;YAC1B,qBAAqB;YACrB,oBAAoB;YACpB,uBAAuB;YACvB,qBAAqB;YACrB,uBAAuB;YACvB,sBAAsB;YACtB,wBAAwB;YACxB,yBAAyB;YACzB,0BAA0B;YAC1B,2BAA2B;YAC3B,mBAAmB;YACnB,yBAAyB;YACzB,mCAAmC;YACnC,sBAAsB;YACtB,2BAA2B;YAC3B,0BAA0B;YAC1B,gCAAgC;YAChC,+BAA+B;YAC/B,+BAA+B;YAC/B,iBAAiB;YACjB,sBAAsB;YACtB,wBAAwB;YACxB,uBAAuB;YACvB,yBAAyB;YACzB,2BAA2B;YAC3B,uBAAuB,EAQe,kBAAkB,CAAA,EAAA,OAAA,EAAA,CA9CxD,cAAc;YACd,oBAAoB;YACpB,qBAAqB;YACrB,4BAA4B;YAC5B,gCAAgC;YAChC,gCAAgC;YAChC,gBAAgB;YAChB,iBAAiB;YACjB,gBAAgB;YAChB,wBAAwB;YACxB,mBAAmB;YACnB,2BAA2B;YAC3B,0BAA0B;YAC1B,qBAAqB;YACrB,oBAAoB;YACpB,uBAAuB;YACvB,qBAAqB;YACrB,uBAAuB;YACvB,sBAAsB;YACtB,wBAAwB;YACxB,yBAAyB;YACzB,0BAA0B;YAC1B,2BAA2B;YAC3B,mBAAmB;YACnB,yBAAyB;YACzB,mCAAmC;YACnC,sBAAsB;YACtB,2BAA2B;YAC3B,0BAA0B;YAC1B,gCAAgC;YAChC,+BAA+B;YAC/B,+BAA+B;YAC/B,iBAAiB;YACjB,sBAAsB;YACtB,wBAAwB;YACxB,uBAAuB;YACvB,yBAAyB;YACzB,2BAA2B;AAC3B,YAAA,uBAAuB,EASe,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAE/C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAjD5B,cAAc;YAEd,qBAAqB;YAIrB,gBAAgB;YAChB,iBAAiB;YACjB,gBAAgB;YAChB,wBAAwB;YACxB,mBAAmB;YACnB,2BAA2B;YAC3B,0BAA0B;YAE1B,oBAAoB;YAMpB,yBAAyB;YACzB,0BAA0B;YAC1B,2BAA2B;YAC3B,mBAAmB;YACnB,yBAAyB;YAIzB,0BAA0B;YAE1B,+BAA+B;YAC/B,+BAA+B;YAC/B,iBAAiB;YAEjB,wBAAwB;YACxB,uBAAuB;YAEvB,2BAA2B,EASW,kBAAkB,EAClB,kBAAkB,CAAA,EAAA,CAAA,CAAA;;2FAE/C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,GAAG,uBAAuB,EAAE,kBAAkB,CAAC;AACzD,oBAAA,OAAO,EAAE,CAAC,GAAG,uBAAuB,EAAE,kBAAkB;AAC3D,iBAAA;;;ACnGD;;AAEG;;;;"}