import * as i4 from '@angular/cdk/scrolling';
import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
import * as i0 from '@angular/core';
import { EventEmitter, Directive, Input, Output, ElementRef, Component, ChangeDetectionStrategy, ViewChild, NgModule } from '@angular/core';
import * as i6 from '@angular/material/sort';
import { MatSort, MatSortModule } from '@angular/material/sort';
import { Selectable } from '@laserfiche/lf-ui-components/shared';
import { DataSource } from '@angular/cdk/collections';
import { BehaviorSubject, Subject } from 'rxjs';
import * as i1 from '@angular/cdk/a11y';
import * as i2 from '@angular/common';
import { CommonModule } from '@angular/common';
import * as i3 from '@angular/material/checkbox';
import { MatCheckboxModule } from '@angular/material/checkbox';
import * as i5 from '@angular/material/table';
import { MatTableModule } from '@angular/material/table';

// Copyright (c) Laserfiche.
// Licensed under the MIT License. See LICENSE in the project root for license information.
/**
 * @internal
 */
class GridSelectionListDataSource extends DataSource {
    get allData() {
        return this._data.slice();
    }
    set allData(data) {
        const existingData = this._data;
        this._data = data;
        this.viewport.setTotalContentSize(this.itemSize * this._data.length);
        if (!existingData || existingData.length === 0) {
            this.resetView();
        }
    }
    resetView() {
        this.dataStart = 0;
        this.dataEnd = this.pageSize;
        this.visibleData.next(this._data.slice(this.dataStart, this.dataEnd));
        this.viewport.scrollTo({ top: 0 });
        this.offsetChange.next(0);
    }
    constructor(initialData, viewport, itemSize, pageSize) {
        super();
        this.viewport = viewport;
        this.itemSize = itemSize;
        this.pageSize = pageSize;
        this.visibleData = new BehaviorSubject([]);
        this.checkForData = new Subject();
        this.currentScrollIndex = 0;
        this.dataStart = 0;
        this.dataEnd = 0;
        this.offset = 0;
        this.offsetChange = new BehaviorSubject(0);
        this.extraData = this.pageSize / 2;
        this.bufferToEnd = this.pageSize / 4;
        this._data = initialData;
        this.viewport.setTotalContentSize(this.itemSize * initialData.length);
        this.dataStart = 0;
        this.dataEnd = this.pageSize;
        this.visibleData.next(this._data.slice(this.dataStart, this.dataEnd));
        this.indexChangeSub = this.viewport.scrolledIndexChange.subscribe((currentScrollIndex) => {
            const numItemsInView = this.viewport.elementRef.nativeElement.getBoundingClientRect().height / this.itemSize;
            const scrollPastEndOfData = currentScrollIndex + numItemsInView > this.dataEnd - this.bufferToEnd;
            const startAccountingForBuffer = currentScrollIndex > this.bufferToEnd ? currentScrollIndex - this.bufferToEnd : 0;
            const scrollBeforeStartOfData = startAccountingForBuffer < this.currentScrollIndex;
            if (scrollPastEndOfData || scrollBeforeStartOfData) {
                this.currentScrollIndex = currentScrollIndex;
                this.dataStart = currentScrollIndex > this.extraData ? currentScrollIndex - this.extraData : 0;
                const end = currentScrollIndex + numItemsInView + this.extraData;
                this.dataEnd = end > this._data.length ? this._data.length : end;
                const slicedData = this._data.slice(this.dataStart, this.dataEnd);
                this.visibleData.next(slicedData);
                this.offsetChange.next(this.dataStart * this.itemSize);
            }
            // If the viewport is at the end we should try and pull more data
            const total = this._data.length ? this._data.length - 1 : 0;
            const endOfData = this.dataEnd;
            const endOfRender = currentScrollIndex + numItemsInView;
            if (total > 0 && endOfData < endOfRender + this.bufferToEnd) {
                this.checkForData.next();
            }
        });
    }
    connect(collectionViewer) {
        return this.visibleData;
    }
    disconnect(collectionViewer) {
        this.indexChangeSub.unsubscribe();
    }
}

// Copyright (c) Laserfiche.
// Licensed under the MIT License. See LICENSE in the project root for license information.
const COLUMN_MIN_WIDTH = 100;
class ResizeColumnDirective {
    constructor(renderer, el, ref) {
        this.renderer = renderer;
        this.el = el;
        this.ref = ref;
        this.resizable = false;
        this.widthChanged = new EventEmitter();
        this.pressed = false;
        this.resizePosition = 0;
        this.resizedColumnInitialOffsetLeft = 0;
        this.onMouseDown = (ev) => {
            ev.preventDefault();
            ev.stopPropagation();
            if (!this.viewport || !this.verticalResizeBar) {
                console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseDown');
                return;
            }
            this.pressed = true;
            this.resizePosition =
                ev.clientX - (this.viewport.getBoundingClientRect()?.left ?? 0) + (this.viewport.scrollLeft ?? 0);
            this.viewport.appendChild(this.verticalResizeBar);
            this.verticalResizeBar.style.left = this.resizePosition + 'px';
            this.resizedColumnInitialOffsetLeft = this.th?.offsetLeft ?? 0;
            this.mouseMoveListener = this.renderer.listen('document', 'mousemove', this.resizableMousemove.bind(this));
            this.mouseUpListener = this.renderer.listen('document', 'mouseup', this.resizableMouseup.bind(this));
        };
        this.resizableMousemove = (event) => {
            event.preventDefault();
            event.stopPropagation();
            if (!this.viewport) {
                console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseMove');
                return;
            }
            if (this.pressed && event.buttons) {
                const currentPositionWithScroll = event.clientX - this.viewport.getBoundingClientRect().left + this.viewport.scrollLeft;
                const minWidthPx = this.columnDef?.minWidthPx ?? COLUMN_MIN_WIDTH;
                if (currentPositionWithScroll - this.resizedColumnInitialOffsetLeft > minWidthPx) {
                    this.resizePosition = currentPositionWithScroll;
                }
                else {
                    this.resizePosition = this.resizedColumnInitialOffsetLeft + minWidthPx;
                }
                this.verticalResizeBar.style.left = this.resizePosition + 'px';
            }
        };
        this.column = this.el.nativeElement;
    }
    ngOnInit() {
        if (this.resizable) {
            this.th = this.renderer.parentNode(this.column);
            const row = this.renderer.parentNode(this.th);
            const thead = this.renderer.parentNode(row);
            const table = this.renderer.parentNode(thead);
            this.viewport = this.renderer.parentNode(table);
            this.verticalResizeBar = this.renderer.createElement('div');
            this.verticalResizeBar.classList.add('repository-browser-resize-overlay');
            const resizeHandle = this.renderer.createElement('span');
            resizeHandle.classList.add('resize-handle');
            this.renderer.appendChild(this.column, resizeHandle);
            this.mouseDownListener = this.renderer.listen(resizeHandle, 'mousedown', this.onMouseDown.bind(this));
        }
    }
    ngOnDestroy() {
        if (this.mouseDownListener)
            this.mouseDownListener();
        if (this.mouseMoveListener)
            this.mouseMoveListener();
        if (this.mouseUpListener)
            this.mouseUpListener();
    }
    resizableMouseup(event) {
        event.preventDefault();
        event.stopPropagation();
        if (!this.viewport) {
            console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseUp');
            return;
        }
        if (this.pressed) {
            this.pressed = false;
            const width = this.resizePosition - this.resizedColumnInitialOffsetLeft;
            this.widthChanged.emit(width);
            this.renderer.removeChild(this.viewport, this.verticalResizeBar);
            this.ref.detectChanges();
        }
        if (this.mouseMoveListener)
            this.mouseMoveListener();
        if (this.mouseUpListener)
            this.mouseUpListener();
    }
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ResizeColumnDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ResizeColumnDirective, selector: "[lfResizeColumn]", inputs: { resizable: ["lfResizeColumn", "resizable"], columnDef: "columnDef" }, outputs: { widthChanged: "widthChanged" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ResizeColumnDirective, decorators: [{
            type: Directive,
            args: [{
                    selector: '[lfResizeColumn]',
                }]
        }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { resizable: [{
                type: Input,
                args: ['lfResizeColumn']
            }], columnDef: [{
                type: Input
            }], widthChanged: [{
                type: Output
            }] } });

const SELECT_COL = {
    id: 'select',
    displayName: '',
    defaultWidth: '35px',
    minWidthPx: 35,
    resizable: false,
    sortable: false,
};
/** @internal */
class LfSelectionListComponent {
    set pageSize(value) {
        this._pageSize = value;
        if (this.dataSource) {
            this.dataSource.pageSize = value;
        }
    }
    get pageSize() {
        return this._pageSize;
    }
    set listItems(items) {
        this.items = items;
        if (this.dataSource) {
            if (this.dataSource.allData.length < 1 && items.length > 0) {
                this.setNewWidths();
            }
            this.dataSource.allData = this.items;
        }
    }
    setNewWidths() {
        if (this._showHeader === true) {
            this.setInitialWidth();
        }
        else {
            this.setDefaultWidths();
        }
    }
    set uniqueIdentifier(key) {
        this._uniqueIdentifier = key;
    }
    set multipleSelection(value) {
        this._multipleSelectEnabled = value;
        this.selectable.multiSelectable = value;
    }
    get multipleSelection() {
        return this._multipleSelectEnabled;
    }
    get columnOrderBy() {
        return this._columnOrderBy;
    }
    set columnOrderBy(orderBy) {
        if (this.sort && orderBy?.columnId && this.allColumnDefs.find((c) => c.id === orderBy.columnId)) {
            this.sort.sort({ id: orderBy?.columnId, start: orderBy?.isDesc ? 'desc' : 'asc', disableClear: true });
            this._columnOrderBy = orderBy;
        }
        else {
            console.debug('Unable to set new sort header');
        }
    }
    set columns(cols) {
        if (cols.length > 1 || this.alwaysShowHeader === true) {
            this._showHeader = true;
        }
        else {
            this._showHeader = false;
        }
        const toAdd = [];
        if (this.multipleSelection) {
            toAdd.push(SELECT_COL);
        }
        this.allColumnDefs = toAdd.concat(cols);
        this.allColumnHeaders = this.allColumnDefs.map((col) => col.id);
        this.additionalColumnDefs = cols;
        this.ref.detectChanges();
        this.setNewWidths();
    }
    get columns() {
        return this.additionalColumnDefs;
    }
    setDefaultWidths() {
        const widths = [];
        this.allColumnDefs.forEach((col) => {
            widths.push(col.defaultWidth);
        });
        if (this.matTable) {
            this.matTable.nativeElement.style.width = '100%';
            const templateCOls = widths.join(' ');
            this.columnsWidth = templateCOls;
        }
        this.ref.detectChanges();
    }
    /** @internal */
    constructor(
    /** @internal */
    focusMonitor, ref) {
        this.focusMonitor = focusMonitor;
        this.ref = ref;
        this.scrollChanged = new EventEmitter();
        this.itemDoubleClicked = new EventEmitter();
        this.itemSelected = new EventEmitter();
        this.itemFocused = new EventEmitter();
        this.refreshData = new EventEmitter();
        this.itemSize = 42;
        this._pageSize = 50;
        /** @internal */
        this.additionalColumnDefs = [];
        /** @internal */
        this.selectable = new Selectable();
        /** @internal */
        this._multipleSelectEnabled = false;
        /** @internal */
        this.items = [];
        /** @internal */
        this.allColumnDefs = [];
        /** @internal */
        this.resizePosition = 0;
        /** @internal */
        this._showHeader = false;
        /** @internal */
        this.currentFocusIndex = 0;
        // column resizing
        this.placeholderHeight = 0;
    }
    /** @internal */
    ngAfterViewInit() {
        this.dataSource = new GridSelectionListDataSource(this.items, this.viewport, this.itemSize, this._pageSize);
        const dataSourceSub = this.dataSource.checkForData.subscribe(() => {
            this.scrollChanged.emit();
        });
        const dataOffsetSub = this.dataSource.offsetChange.subscribe((offset) => {
            this.placeholderHeight = offset;
        });
        this.allSubscriptions?.add(dataSourceSub);
        this.allSubscriptions?.add(dataOffsetSub);
        if (this.columns.length > 1 || this.alwaysShowHeader === true) {
            this._showHeader = true;
        }
        else {
            this._showHeader = false;
        }
        if (this.viewport?.elementRef.nativeElement) {
            this.focusMonitor.monitor(this.viewport?.elementRef.nativeElement, true).subscribe((origin) => {
                if (!origin || document.activeElement?.nodeName.toLowerCase() === 'cdk-virtual-scroll-viewport') {
                    this.itemFocused.emit(undefined);
                }
            });
        }
    }
    ngOnDestroy() {
        this.allSubscriptions?.unsubscribe();
        this.focusMonitor.stopMonitoring(this.viewport.elementRef.nativeElement);
    }
    clearSelectedValues(clearCached) {
        this.selectable.clearSelectedValues(this.items, clearCached);
    }
    placeholderWhen(index, _) {
        return index === 0;
    }
    focus() {
        this._focus();
    }
    sortData(sort) {
        if (!sort.active || sort.direction === '') {
            return;
        }
        const sortState = { columnId: sort.active, isDesc: sort.direction === 'desc' };
        this._columnOrderBy = sortState;
        this.refreshData.emit();
    }
    focusCurrentIndex() {
        if (this.currentFocusIndex >= this.items.length) {
            this.currentFocusIndex = 0;
        }
        if (!this.items[this.currentFocusIndex] || !this.items[this.currentFocusIndex]) {
            this.viewport?.scrollToIndex(this.currentFocusIndex);
        }
    }
    /** @internal */
    async onClickMatListOption(event, option, index) {
        let target = event.target;
        let nodeName;
        while (target != null && nodeName !== 'lf-list-option-component' && nodeName !== 'mat-checkbox') {
            target = target.parentElement;
            nodeName = target?.nodeName.toLowerCase();
        }
        if (nodeName === 'mat-checkbox') {
            this.selectable.onItemClicked(event, option, this.items, true);
        }
        else {
            this.selectable.onItemClicked(event, option, this.items);
        }
        this.currentFocusIndex = index;
        this.ref.detectChanges();
        this.itemSelected.emit({ selected: option, selectedItems: this.selectable.selectedItems });
    }
    /** @internal */
    onDblClick(event, item) {
        if (item.isSelectable && !item.isSelected) {
            this.selectable.onItemClicked(event, item, this.items, true);
            this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });
        }
        this.itemDoubleClicked.emit(item.value);
    }
    /** @internal */
    async onItemKeyDown(event, item) {
        if (event.key === ' ' ||
            event.key === 'Enter' ||
            (event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown'))) {
            if (event.key === 'Enter') {
                this.selectable.onItemClicked(event, item, this.items);
                this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });
                this.onDblClick(event, item);
                return;
            }
            this.selectable.onItemClicked(event, item, this.items, false, event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown'));
            this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });
        }
    }
    /** @internal */
    onItemKeyUp(event, item) {
        if (event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown')) {
            this.selectable.onItemClicked(event, item, this.items, false, event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown'));
            this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });
        }
    }
    /** @internal */
    onFocused(index) {
        this.currentFocusIndex = index;
        this.itemFocused.emit(this.items[index]?.value);
    }
    /** @internal */
    onViewportKeyDown(event) {
        if (event.key === ' ' || event.key === 'ArrowUp' || event.key === 'ArrowDown') {
            event.preventDefault();
        }
        if (this.viewport == null) {
            return;
        }
        if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
            const activeElement = document.activeElement;
            if (activeElement?.nodeName.toLowerCase() !== 'cdk-virtual-scroll-viewport' &&
                activeElement?.nodeName.toLowerCase() !== 'tr') {
                return;
            }
            event.preventDefault();
            event.stopPropagation();
            if (activeElement?.nodeName.toLowerCase() === 'cdk-virtual-scroll-viewport') {
                this.focusCurrentIndex();
                const ele = this.viewport.elementRef.nativeElement.querySelector('#lf-row-' + this.currentFocusIndex);
                (ele?.childNodes[0]).focus();
            }
            else {
                const moveDirection = event.key === 'ArrowUp' ? -1 : 1;
                this.currentFocusIndex = this.currentFocusIndex + moveDirection;
                // Check if currentFocusIndex is out of bounds
                if (this.currentFocusIndex < 0 || this.currentFocusIndex >= this.items.length) {
                    this.currentFocusIndex = this.currentFocusIndex - moveDirection;
                }
                const ele = this.viewport.elementRef.nativeElement.querySelector('#lf-row-' + this.currentFocusIndex);
                ele?.focus();
            }
            if (!this._checkRowInView(this.currentFocusIndex)) {
                // this way even if we scroll down we go back to the section we were
                this.viewport.scrollToIndex(this.currentFocusIndex);
            }
        }
    }
    setInitialWidth() {
        setTimeout(() => {
            if (this.allColumnDefs.length > 0) {
                const repositoryBrowserData = this.getRepositoryBrowserData();
                const tableEl = this.matTable?.nativeElement;
                const widths = [];
                this.allColumnDefs.forEach((col) => {
                    const columnWidth = repositoryBrowserData?.columns ? repositoryBrowserData?.columns[col.id] : undefined;
                    if (columnWidth) {
                        widths.push(columnWidth);
                    }
                    else {
                        widths.push(col.defaultWidth);
                    }
                });
                if (this.matTable) {
                    const templateCOls = widths.join(' ');
                    this.columnsWidth = templateCOls;
                }
                this.ref.detectChanges();
                const onlyColumnWidthAuto = this.columns.length === 1 && this.columnsWidth?.includes('auto');
                if (onlyColumnWidthAuto) {
                    this.setDefaultWidths();
                }
                else {
                    const containerWidth = this.viewport?.elementRef.nativeElement.getBoundingClientRect().width;
                    tableEl.style.width = containerWidth + 'px';
                    this.ref.detectChanges();
                    const widthsInPixel = [];
                    this.allColumnDefs.forEach((col) => {
                        const columnEls = Array.from(this.viewport.elementRef.nativeElement.getElementsByClassName('mat-column-' + col.id));
                        const columnWidthOffset = Math.max(...columnEls.map((c) => c.offsetWidth));
                        const minWidthPx = col.minWidthPx ?? COLUMN_MIN_WIDTH;
                        const columnWidthInPixel = col.id !== 'select' ? Math.max(columnWidthOffset, minWidthPx) + 'px' : SELECT_COL.defaultWidth;
                        widthsInPixel.push(columnWidthInPixel);
                    });
                    if (this.matTable) {
                        const templateCOls = widthsInPixel.join(' ');
                        this.columnsWidth = templateCOls;
                    }
                    tableEl.style.width = 'fit-content';
                    this.ref.detectChanges();
                }
            }
        });
    }
    getRepositoryBrowserData() {
        if (this._uniqueIdentifier) {
            const repositoryBrowserData = window.localStorage.getItem(this._uniqueIdentifier);
            let asJSON;
            if (repositoryBrowserData) {
                asJSON = JSON.parse(repositoryBrowserData);
            }
            return asJSON;
        }
        else {
            return undefined;
        }
    }
    async resetCachedNodesAsync() {
        await this.selectable.setSelectedNodesAsync(new Map(), this.items, 0);
        this.ref.detectChanges();
        return this.selectable.selectedItems;
    }
    async setSelectedNodesAsync(nodesToSelect, checkForMoreDataCallback, maxFetchIterations) {
        this.selectable.callback = checkForMoreDataCallback;
        const idsToSelectable = new Map(nodesToSelect?.map(v => [v.value.id, v]));
        await this.selectable.setSelectedNodesAsync(idsToSelectable, this.items, maxFetchIterations);
        this.ref.detectChanges();
        return this.selectable.selectedItems;
    }
    /** @internal */
    _computeRowId(index) {
        return 'lf-row-' + index;
    }
    /** @internal */
    _checkFocused(rowIndex) {
        return this.currentFocusIndex === rowIndex;
    }
    /** @internal */
    _checkRowInView(currentFocusIndex) {
        // is there an easier way to do this? -- check if currentFocusIndex is in viewport indices (rendered might be greater than viewable?)
        if (this.viewport == null) {
            return;
        }
        const rowEle = document.querySelector('#lf-row-' + currentFocusIndex);
        if (rowEle === null) {
            return false;
        }
        const rowEleRect = rowEle.getBoundingClientRect();
        const scrollRect = this.viewport.elementRef.nativeElement.getBoundingClientRect();
        const belowTop = rowEleRect.top >= scrollRect.top + (this._showHeader ? this.itemSize : 0);
        const aboveBottom = rowEleRect.bottom <= scrollRect.bottom;
        return belowTop && aboveBottom;
    }
    /** @internal */
    _focus(tries = 0) {
        if (tries >= 10) {
            return;
        }
        this.focusCurrentIndex();
        const ele = this.viewport?.elementRef.nativeElement.querySelector('#lf-row-' + this.currentFocusIndex);
        ele?.focus();
    }
    onColumnWidthChanges(width, index) {
        this.updateRepositoryBrowserData(width, index);
        this.setColumnWidthChanges(width, index);
    }
    updateRepositoryBrowserData(width, index) {
        if (this._uniqueIdentifier) {
            let repoData = this.getRepositoryBrowserData();
            const key = this.allColumnDefs[index].id;
            if (!repoData) {
                repoData = {
                    columns: {},
                };
            }
            else if (!repoData.columns) {
                repoData.columns = {};
            }
            repoData.columns[key] = width + 'px';
            localStorage.setItem(this._uniqueIdentifier, JSON.stringify(repoData));
        }
        else {
            console.warn('Unable to save lf-selection-list column widths. Need to set uniqueIdentifier on lf-selection-list');
        }
    }
    setColumnWidthChanges(width, index) {
        const widths = this.columnsWidth ?? '';
        const widthsA = widths.split(' ');
        widthsA[index] = width + 'px';
        const stringWidths = widthsA.join(' ');
        this.columnsWidth = stringWidths;
        if (this.matTable) {
            this.matTable.nativeElement.style.width = 'fit-content';
        }
        this.ref.detectChanges();
    }
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LfSelectionListComponent, deps: [{ token: i1.FocusMonitor }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LfSelectionListComponent, selector: "lf-selection-list-component", inputs: { itemSize: "itemSize", pageSize: "pageSize", listItemRef: "listItemRef", alwaysShowHeader: "alwaysShowHeader", listItems: "listItems", uniqueIdentifier: "uniqueIdentifier", multipleSelection: "multipleSelection", columnOrderBy: "columnOrderBy", columns: "columns" }, outputs: { scrollChanged: "scrollChanged", itemDoubleClicked: "itemDoubleClicked", itemSelected: "itemSelected", itemFocused: "itemFocused", refreshData: "refreshData" }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "matTable", first: true, predicate: ["matTable"], descendants: true, read: ElementRef }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<!--Copyright Laserfiche.\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\n\n<cdk-virtual-scroll-viewport\n  #viewport\n  id=\"lf-list-viewport\"\n  tabindex=\"-1\"\n  [itemSize]=\"itemSize\"\n  (keydown)=\"onViewportKeyDown($event)\"\n>\n  <table\n    #matTable\n    role=\"grid\"\n    mat-table\n    [dataSource]=\"dataSource\"\n    class=\"lf-table-selection-list\"\n    matSort\n    (matSortChange)=\"sortData($event)\"\n    multiTemplateDataRows=\"true\"\n  >\n    <ng-container [matColumnDef]=\"column.id\" *ngFor=\"let column of allColumnDefs; let i = index\">\n      <ng-container [ngSwitch]=\"column.id\">\n        <ng-container *ngSwitchCase=\"'name'\">\n          <th mat-header-cell *matHeaderCellDef class=\"lf-ellipsis-label\">\n            <div\n              class=\"lf-resize-wrapper-div\"\n              [lfResizeColumn]=\"column.resizable\"\n              [columnDef]=\"column\"\n              (widthChanged)=\"onColumnWidthChanges($event, i)\"\n            >\n              <div\n                class=\"column-text-div\"\n                [ngStyle]=\"{ height: itemSize + 'px' }\"\n                mat-sort-header\n                [disabled]=\"!column.sortable\"\n              >\n                <div class=\"lf-ellipsis-label\">\n                  {{ column.displayName }}\n                </div>\n              </div>\n            </div>\n          </th>\n          <td mat-cell *matCellDef=\"let item\">\n            <div class=\"lf-name-col-container\">\n              <ng-container *ngIf=\"listItemRef; else defaultItem\">\n                <ng-container *ngTemplateOutlet=\"listItemRef; context: item\"></ng-container>\n              </ng-container>\n              <ng-template #defaultItem\n                ><span class=\"lf-ellipsis-label\">{{ item.value.name ?? item.value.id }}</span></ng-template\n              >\n            </div>\n          </td></ng-container\n        >\n        <ng-container *ngSwitchCase=\"'select'\">\n          <th mat-header-cell *matHeaderCellDef></th>\n          <td mat-cell class=\"multiselect-column\" *matCellDef=\"let row\">\n            <mat-checkbox\n              class=\"lf-checkbox multiselect-indicator lf-no-ripple\"\n              *ngIf=\"multipleSelection && row?.isSelectable\"\n              tabindex=\"-1\"\n              [checked]=\"row?.isSelected\"\n              color=\"primary\"\n              disableRipple\n            >\n            </mat-checkbox>\n          </td>\n        </ng-container>\n        <ng-container *ngSwitchDefault>\n          <th mat-header-cell *matHeaderCellDef class=\"lf-ellipsis-label\">\n            <div\n              class=\"lf-resize-wrapper-div\"\n              [lfResizeColumn]=\"column.resizable\"\n              [columnDef]=\"column\"\n              (widthChanged)=\"onColumnWidthChanges($event, i)\"\n            >\n              <div\n                class=\"column-text-div\"\n                [ngStyle]=\"{ height: itemSize + 'px' }\"\n                mat-sort-header\n                [disabled]=\"!column.sortable\"\n              >\n                <div class=\"lf-ellipsis-label\">\n                  {{ column.displayName }}\n                </div>\n              </div>\n            </div>\n          </th>\n          <td mat-cell *matCellDef=\"let row\">\n            <div class=\"column-text-div\" [ngStyle]=\"{ height: itemSize + 'px' }\">\n              <div class=\"lf-ellipsis-label\">\n                {{ row.value.attributes?.get(column.id)?.displayValue }}\n              </div>\n            </div>\n          </td>\n        </ng-container>\n      </ng-container>\n    </ng-container>\n\n    <tr\n      class=\"lf-selection-list-header-row\"\n      [ngClass]=\"{ 'lf-hidden-column-header': !_showHeader }\"\n      [ngStyle]=\"{ height: itemSize + 'px' }\"\n      mat-header-row\n      tabindex=\"-1\"\n      [style.gridTemplateColumns]=\"columnsWidth\"\n      *matHeaderRowDef=\"allColumnHeaders\"\n    ></tr>\n\n    <tr\n      [style.height.px]=\"placeholderHeight\"\n      mat-row\n      *matRowDef=\"let row; let index = index; columns: []; when: placeholderWhen\"\n    ></tr>\n    <tr\n      mat-row\n      *matRowDef=\"let row; let i = dataIndex; columns: allColumnHeaders\"\n      [tabindex]=\"i === currentFocusIndex ? 0 : -1\"\n      class=\"item-holder\"\n      [ngStyle]=\"{\n        height: itemSize + 'px',\n        'min-height': itemSize + 'px',\n        'max-height': itemSize + 'px'\n      }\"\n      [ngClass]=\"{\n        'non-selectable-option': !row.isSelectable,\n        'selectable-option': row.isSelectable,\n        'node-selected': row.isSelected,\n        'lf-row-border-top': !_showHeader\n      }\"\n      [attr.id]=\"_computeRowId(i + (dataSource?.dataStart ?? 0))\"\n      (click)=\"onClickMatListOption($event, row, i + (dataSource?.dataStart ?? 0))\"\n      (dblclick)=\"onDblClick($event, row)\"\n      (focusin)=\"onFocused(i + (dataSource?.dataStart ?? 0))\"\n      (keydown)=\"onItemKeyDown($event, row)\"\n      (keyup)=\"onItemKeyUp($event, row)\"\n      [style.gridTemplateColumns]=\"columnsWidth\"\n    ></tr>\n  </table>\n</cdk-virtual-scroll-viewport>\n", styles: [":root{display:block;height:100%}#lf-list-viewport{height:100%}::ng-deep .mat-mdc-table.lf-table-selection-list .mat-mdc-header-row,::ng-deep .mat-mdc-table.lf-table-selection-list .mat-mdc-row{font-family:Open Sans}.lf-name-col-container{display:flex;align-items:center;height:100%}.item-holder{color:var(--lf-body-text-color, #333333)}.node-selected.item-holder,.node-selected.item-holder:focus{background-color:var(--lf-menu-item-selected-color, #eaf5ff)}.item-holder:hover{background-color:var(--lf-menu-item-hover-color, #f5fbff)}.item-holder:focus{outline:var(--lf-menu-item-active-outline-color, #1783d6) auto 2px;background-color:var(--lf-menu-item-hover-color, #f5fbff)}::ng-deep mat-checkbox.lf-no-ripple .mat-mdc-checkbox-layout .mat-checkbox-inner-container .mat-checkbox-ripple{width:0;height:0}.multiselect-column .multiselect-indicator{padding-right:8px;display:inline-grid}:host .lf-table-selection-list th.mat-mdc-header-cell:has(.mat-sort-header-sorted){background-color:#e2e2e2}:host .lf-table-selection-list th.mat-mdc-header-cell{border-left-color:#0000001f;border-left-width:1px;border-left-style:solid}:host .lf-table-selection-list th.mat-mdc-header-cell,:host .lf-table-selection-list td.mat-mdc-cell,:host .lf-table-selection-list td.mat-mdc-footer-cell{border-bottom:none;padding:0 10px;box-sizing:border-box}:host .lf-table-selection-list tr.item-holder#lf-row-0.lf-row-border-top{border-top:1px solid rgb(0,0,0,.12)}:host .lf-table-selection-list tr.item-holder{border-bottom:1px solid rgb(0,0,0,.12)}:host .lf-table-selection-list th.mat-mdc-header-cell.multiselect-column,:host .lf-table-selection-list td.mat-mdc-cell.multiselect-column,:host .lf-table-selection-list td.mat-mdc-footer-cell.multiselect-column{padding:0}::ng-deep .lf-table-selection-list .lf-ellipsis-label .mat-sort-header-content{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:block}::ng-deep .lf-table-selection-list .lf-ellipsis-label .mat-sort-header-container{width:100%;justify-content:space-between}:host .lf-table-selection-list th.mat-mdc-header-cell{background-color:#f3f3f3}:host .lf-table-selection-list th.mat-mdc-header-cell:last-of-type{border-right-color:#0000001f;border-right-width:1px;border-right-style:solid}::ng-deep .lf-table-selection-list th.mat-mdc-header-cell{overflow:visible}.repository-browser-resize-overlay{position:absolute;top:0;height:100%;width:1px;background-color:#aeaeae;-webkit-user-select:none;user-select:none;z-index:1;cursor:col-resize}.lf-resize-wrapper-div{width:100%;position:relative}::ng-deep cdk-virtual-scroll-viewport#lf-list-viewport .cdk-virtual-scroll-content-wrapper .lf-table-selection-list{display:flex;flex-direction:column;width:fit-content}::ng-deep .lf-table-selection-list tr{display:grid}::ng-deep .lf-table-selection-list thead{position:sticky;top:0;z-index:1}.lf-table-selection-list .column-text-div{display:flex;align-items:center;-webkit-user-select:none;user-select:none}::ng-deep #lf-list-viewport.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{transform:translateY(0)!important;width:fit-content;min-height:100%}.lf-table-selection-list th .resize-handle:hover{opacity:1;background:linear-gradient(#000,#000) no-repeat center/2px 100%}.lf-table-selection-list .resize-handle{display:inline-block;position:absolute;top:0;height:100%;cursor:col-resize;opacity:0;width:15px;right:-17.5px}.lf-hidden-column-header{height:0px!important}.lf-hidden-column-header .mat-mdc-header-cell{font-size:0;border-bottom-style:hidden}.lf-hidden-column-header .mat-sort-header{display:none}.multiselect-column.mat-column-select{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i4.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i6.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i6.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: ResizeColumnDirective, selector: "[lfResizeColumn]", inputs: ["lfResizeColumn", "columnDef"], outputs: ["widthChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LfSelectionListComponent, decorators: [{
            type: Component,
            args: [{ selector: 'lf-selection-list-component', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--Copyright Laserfiche.\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\n\n<cdk-virtual-scroll-viewport\n  #viewport\n  id=\"lf-list-viewport\"\n  tabindex=\"-1\"\n  [itemSize]=\"itemSize\"\n  (keydown)=\"onViewportKeyDown($event)\"\n>\n  <table\n    #matTable\n    role=\"grid\"\n    mat-table\n    [dataSource]=\"dataSource\"\n    class=\"lf-table-selection-list\"\n    matSort\n    (matSortChange)=\"sortData($event)\"\n    multiTemplateDataRows=\"true\"\n  >\n    <ng-container [matColumnDef]=\"column.id\" *ngFor=\"let column of allColumnDefs; let i = index\">\n      <ng-container [ngSwitch]=\"column.id\">\n        <ng-container *ngSwitchCase=\"'name'\">\n          <th mat-header-cell *matHeaderCellDef class=\"lf-ellipsis-label\">\n            <div\n              class=\"lf-resize-wrapper-div\"\n              [lfResizeColumn]=\"column.resizable\"\n              [columnDef]=\"column\"\n              (widthChanged)=\"onColumnWidthChanges($event, i)\"\n            >\n              <div\n                class=\"column-text-div\"\n                [ngStyle]=\"{ height: itemSize + 'px' }\"\n                mat-sort-header\n                [disabled]=\"!column.sortable\"\n              >\n                <div class=\"lf-ellipsis-label\">\n                  {{ column.displayName }}\n                </div>\n              </div>\n            </div>\n          </th>\n          <td mat-cell *matCellDef=\"let item\">\n            <div class=\"lf-name-col-container\">\n              <ng-container *ngIf=\"listItemRef; else defaultItem\">\n                <ng-container *ngTemplateOutlet=\"listItemRef; context: item\"></ng-container>\n              </ng-container>\n              <ng-template #defaultItem\n                ><span class=\"lf-ellipsis-label\">{{ item.value.name ?? item.value.id }}</span></ng-template\n              >\n            </div>\n          </td></ng-container\n        >\n        <ng-container *ngSwitchCase=\"'select'\">\n          <th mat-header-cell *matHeaderCellDef></th>\n          <td mat-cell class=\"multiselect-column\" *matCellDef=\"let row\">\n            <mat-checkbox\n              class=\"lf-checkbox multiselect-indicator lf-no-ripple\"\n              *ngIf=\"multipleSelection && row?.isSelectable\"\n              tabindex=\"-1\"\n              [checked]=\"row?.isSelected\"\n              color=\"primary\"\n              disableRipple\n            >\n            </mat-checkbox>\n          </td>\n        </ng-container>\n        <ng-container *ngSwitchDefault>\n          <th mat-header-cell *matHeaderCellDef class=\"lf-ellipsis-label\">\n            <div\n              class=\"lf-resize-wrapper-div\"\n              [lfResizeColumn]=\"column.resizable\"\n              [columnDef]=\"column\"\n              (widthChanged)=\"onColumnWidthChanges($event, i)\"\n            >\n              <div\n                class=\"column-text-div\"\n                [ngStyle]=\"{ height: itemSize + 'px' }\"\n                mat-sort-header\n                [disabled]=\"!column.sortable\"\n              >\n                <div class=\"lf-ellipsis-label\">\n                  {{ column.displayName }}\n                </div>\n              </div>\n            </div>\n          </th>\n          <td mat-cell *matCellDef=\"let row\">\n            <div class=\"column-text-div\" [ngStyle]=\"{ height: itemSize + 'px' }\">\n              <div class=\"lf-ellipsis-label\">\n                {{ row.value.attributes?.get(column.id)?.displayValue }}\n              </div>\n            </div>\n          </td>\n        </ng-container>\n      </ng-container>\n    </ng-container>\n\n    <tr\n      class=\"lf-selection-list-header-row\"\n      [ngClass]=\"{ 'lf-hidden-column-header': !_showHeader }\"\n      [ngStyle]=\"{ height: itemSize + 'px' }\"\n      mat-header-row\n      tabindex=\"-1\"\n      [style.gridTemplateColumns]=\"columnsWidth\"\n      *matHeaderRowDef=\"allColumnHeaders\"\n    ></tr>\n\n    <tr\n      [style.height.px]=\"placeholderHeight\"\n      mat-row\n      *matRowDef=\"let row; let index = index; columns: []; when: placeholderWhen\"\n    ></tr>\n    <tr\n      mat-row\n      *matRowDef=\"let row; let i = dataIndex; columns: allColumnHeaders\"\n      [tabindex]=\"i === currentFocusIndex ? 0 : -1\"\n      class=\"item-holder\"\n      [ngStyle]=\"{\n        height: itemSize + 'px',\n        'min-height': itemSize + 'px',\n        'max-height': itemSize + 'px'\n      }\"\n      [ngClass]=\"{\n        'non-selectable-option': !row.isSelectable,\n        'selectable-option': row.isSelectable,\n        'node-selected': row.isSelected,\n        'lf-row-border-top': !_showHeader\n      }\"\n      [attr.id]=\"_computeRowId(i + (dataSource?.dataStart ?? 0))\"\n      (click)=\"onClickMatListOption($event, row, i + (dataSource?.dataStart ?? 0))\"\n      (dblclick)=\"onDblClick($event, row)\"\n      (focusin)=\"onFocused(i + (dataSource?.dataStart ?? 0))\"\n      (keydown)=\"onItemKeyDown($event, row)\"\n      (keyup)=\"onItemKeyUp($event, row)\"\n      [style.gridTemplateColumns]=\"columnsWidth\"\n    ></tr>\n  </table>\n</cdk-virtual-scroll-viewport>\n", styles: [":root{display:block;height:100%}#lf-list-viewport{height:100%}::ng-deep .mat-mdc-table.lf-table-selection-list .mat-mdc-header-row,::ng-deep .mat-mdc-table.lf-table-selection-list .mat-mdc-row{font-family:Open Sans}.lf-name-col-container{display:flex;align-items:center;height:100%}.item-holder{color:var(--lf-body-text-color, #333333)}.node-selected.item-holder,.node-selected.item-holder:focus{background-color:var(--lf-menu-item-selected-color, #eaf5ff)}.item-holder:hover{background-color:var(--lf-menu-item-hover-color, #f5fbff)}.item-holder:focus{outline:var(--lf-menu-item-active-outline-color, #1783d6) auto 2px;background-color:var(--lf-menu-item-hover-color, #f5fbff)}::ng-deep mat-checkbox.lf-no-ripple .mat-mdc-checkbox-layout .mat-checkbox-inner-container .mat-checkbox-ripple{width:0;height:0}.multiselect-column .multiselect-indicator{padding-right:8px;display:inline-grid}:host .lf-table-selection-list th.mat-mdc-header-cell:has(.mat-sort-header-sorted){background-color:#e2e2e2}:host .lf-table-selection-list th.mat-mdc-header-cell{border-left-color:#0000001f;border-left-width:1px;border-left-style:solid}:host .lf-table-selection-list th.mat-mdc-header-cell,:host .lf-table-selection-list td.mat-mdc-cell,:host .lf-table-selection-list td.mat-mdc-footer-cell{border-bottom:none;padding:0 10px;box-sizing:border-box}:host .lf-table-selection-list tr.item-holder#lf-row-0.lf-row-border-top{border-top:1px solid rgb(0,0,0,.12)}:host .lf-table-selection-list tr.item-holder{border-bottom:1px solid rgb(0,0,0,.12)}:host .lf-table-selection-list th.mat-mdc-header-cell.multiselect-column,:host .lf-table-selection-list td.mat-mdc-cell.multiselect-column,:host .lf-table-selection-list td.mat-mdc-footer-cell.multiselect-column{padding:0}::ng-deep .lf-table-selection-list .lf-ellipsis-label .mat-sort-header-content{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:block}::ng-deep .lf-table-selection-list .lf-ellipsis-label .mat-sort-header-container{width:100%;justify-content:space-between}:host .lf-table-selection-list th.mat-mdc-header-cell{background-color:#f3f3f3}:host .lf-table-selection-list th.mat-mdc-header-cell:last-of-type{border-right-color:#0000001f;border-right-width:1px;border-right-style:solid}::ng-deep .lf-table-selection-list th.mat-mdc-header-cell{overflow:visible}.repository-browser-resize-overlay{position:absolute;top:0;height:100%;width:1px;background-color:#aeaeae;-webkit-user-select:none;user-select:none;z-index:1;cursor:col-resize}.lf-resize-wrapper-div{width:100%;position:relative}::ng-deep cdk-virtual-scroll-viewport#lf-list-viewport .cdk-virtual-scroll-content-wrapper .lf-table-selection-list{display:flex;flex-direction:column;width:fit-content}::ng-deep .lf-table-selection-list tr{display:grid}::ng-deep .lf-table-selection-list thead{position:sticky;top:0;z-index:1}.lf-table-selection-list .column-text-div{display:flex;align-items:center;-webkit-user-select:none;user-select:none}::ng-deep #lf-list-viewport.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{transform:translateY(0)!important;width:fit-content;min-height:100%}.lf-table-selection-list th .resize-handle:hover{opacity:1;background:linear-gradient(#000,#000) no-repeat center/2px 100%}.lf-table-selection-list .resize-handle{display:inline-block;position:absolute;top:0;height:100%;cursor:col-resize;opacity:0;width:15px;right:-17.5px}.lf-hidden-column-header{height:0px!important}.lf-hidden-column-header .mat-mdc-header-cell{font-size:0;border-bottom-style:hidden}.lf-hidden-column-header .mat-sort-header{display:none}.multiselect-column.mat-column-select{display:flex;align-items:center}\n"] }]
        }], ctorParameters: () => [{ type: i1.FocusMonitor }, { type: i0.ChangeDetectorRef }], propDecorators: { scrollChanged: [{
                type: Output
            }], itemDoubleClicked: [{
                type: Output
            }], itemSelected: [{
                type: Output
            }], itemFocused: [{
                type: Output
            }], refreshData: [{
                type: Output
            }], itemSize: [{
                type: Input
            }], pageSize: [{
                type: Input
            }], listItemRef: [{
                type: Input
            }], alwaysShowHeader: [{
                type: Input
            }], listItems: [{
                type: Input
            }], uniqueIdentifier: [{
                type: Input
            }], multipleSelection: [{
                type: Input
            }], columnOrderBy: [{
                type: Input
            }], columns: [{
                type: Input
            }], viewport: [{
                type: ViewChild,
                args: [CdkVirtualScrollViewport]
            }], matTable: [{
                type: ViewChild,
                args: ['matTable', { read: ElementRef }]
            }], sort: [{
                type: ViewChild,
                args: [MatSort]
            }] } });

// Copyright (c) Laserfiche.
// Licensed under the MIT License. See LICENSE in the project root for license information.

// Copyright (c) Laserfiche.
// Licensed under the MIT License. See LICENSE in the project root for license information.
/** @internal */
class LfSelectionListModule {
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LfSelectionListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: LfSelectionListModule, bootstrap: [LfSelectionListComponent, ResizeColumnDirective], declarations: [LfSelectionListComponent,
            ResizeColumnDirective], imports: [CommonModule,
            MatCheckboxModule,
            ScrollingModule,
            MatTableModule,
            MatSortModule], exports: [LfSelectionListComponent] }); }
    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LfSelectionListModule, imports: [CommonModule,
            MatCheckboxModule,
            ScrollingModule,
            MatTableModule,
            MatSortModule] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LfSelectionListModule, decorators: [{
            type: NgModule,
            args: [{
                    declarations: [
                        LfSelectionListComponent,
                        ResizeColumnDirective,
                    ],
                    imports: [
                        CommonModule,
                        MatCheckboxModule,
                        ScrollingModule,
                        MatTableModule,
                        MatSortModule
                    ],
                    bootstrap: [LfSelectionListComponent, ResizeColumnDirective],
                    exports: [LfSelectionListComponent],
                }]
        }] });

// Copyright (c) Laserfiche.
// Licensed under the MIT License. See LICENSE in the project root for license information.

/**
 * Generated bundle index. Do not edit.
 */

export { LfSelectionListComponent, LfSelectionListModule };
//# sourceMappingURL=laserfiche-lf-ui-components-lf-selection-list.mjs.map
