{"version":3,"file":"laserfiche-lf-ui-components-lf-selection-list.mjs","sources":["../../../projects/ui-components/lf-selection-list/lf-selection-list-data-source.ts","../../../projects/ui-components/lf-selection-list/resize-column.directive.ts","../../../projects/ui-components/lf-selection-list/lf-managed-virtual-scroll.directive.ts","../../../projects/ui-components/lf-selection-list/lf-selection-list.component.ts","../../../projects/ui-components/lf-selection-list/lf-selection-list.component.html","../../../projects/ui-components/lf-selection-list/lf-selection-list-public-api.ts","../../../projects/ui-components/lf-selection-list/laserfiche-lf-ui-components-lf-selection-list.ts"],"sourcesContent":["// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { DataSource, CollectionViewer } from '@angular/cdk/collections';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { Subscription, BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { ILfSelectable } from '@laserfiche/lf-ui-components/shared';\n\n/**\n * @internal\n */\nexport class GridSelectionListDataSource extends DataSource<any> {\n  private _data: ILfSelectable[];\n  private readonly visibleData: BehaviorSubject<ILfSelectable[]> = new BehaviorSubject<ILfSelectable[]>([]);\n  private requestedDataLength?: number;\n  private totalContentSizeSyncQueued = false;\n  private suppressScrollEvents = false;\n\n  checkForData: Subject<void> = new Subject<void>();\n  indexChangeSub: Subscription;\n  currentScrollIndex: number = 0;\n  dataStart: number = 0;\n  dataEnd: number = 0;\n\n  offset = 0;\n  offsetChange = new BehaviorSubject(0);\n\n  extraData!: number;\n  bufferToEnd!: number;\n\n  get allData(): ILfSelectable[] {\n    return this._data.slice();\n  }\n\n  set allData(data: ILfSelectable[]) {\n    const existingData = this._data;\n    const existingLength = existingData?.length ?? 0;\n    this._data = data;\n    this.requestedDataLength = undefined;\n    this.viewport.setTotalContentSize(this.itemSize * this._data.length);\n    if (!existingData || existingLength === 0) {\n      this.resetView();\n      return;\n    }\n\n    this.refreshViewAtCurrentIndex();\n\n    if (this.shouldRequestMoreData()) {\n      this.checkForData.next();\n    }\n  }\n\n  private resetView() {\n    this.dataStart = 0;\n    this.dataEnd = Math.min(this.pageSize, this._data.length);\n    const renderedItems = this._data.slice(this.dataStart, this.dataEnd);\n    this.visibleData.next(renderedItems);\n    this.viewport.setRenderedRange({ start: 0, end: renderedItems.length });\n    this.viewport.scrollTo({ top: 0 });\n    this.offsetChange.next(0);\n    this.scheduleViewportSync();\n  }\n\n  constructor(\n    initialData: ILfSelectable[],\n    private viewport: CdkVirtualScrollViewport,\n    private itemSize: number,\n    public pageSize: number\n  ) {\n    super();\n    this.extraData = Math.ceil(this.pageSize / 2);\n    this.bufferToEnd = Math.ceil(this.pageSize / 4);\n    this._data = initialData;\n    this.viewport.setTotalContentSize(this.itemSize * initialData.length);\n    this.dataStart = 0;\n    this.dataEnd = Math.min(this.pageSize, initialData.length);\n    const renderedItems = this._data.slice(this.dataStart, this.dataEnd);\n    this.visibleData.next(renderedItems);\n    this.viewport.setRenderedRange({ start: 0, end: renderedItems.length });\n    this.scheduleViewportSync();\n\n    this.indexChangeSub = this.viewport.scrolledIndexChange.subscribe((currentScrollIndex) => {\n      if (this.suppressScrollEvents) {\n        return;\n      }\n\n      this.currentScrollIndex = currentScrollIndex;\n      const numItemsInView = this.getNumItemsInView();\n      const scrollPastEndOfData = currentScrollIndex + numItemsInView > this.dataEnd - this.bufferToEnd;\n      const startAccountingForBuffer =\n        currentScrollIndex > this.bufferToEnd ? currentScrollIndex - this.bufferToEnd : 0;\n      const scrollBeforeStartOfData = startAccountingForBuffer < this.dataStart;\n      if (scrollPastEndOfData || scrollBeforeStartOfData) {\n        this.refreshViewAtIndex(currentScrollIndex, numItemsInView);\n      } else {\n        // Always re-assert the rendered range and content offset so CDK's\n        // FixedSizeVirtualScrollStrategy (which sees dataLength = 0 because we\n        // don't use CdkVirtualForOf) cannot pin the slice to {0,0}/offset 0\n        // during rapid scrolling.\n        this.reassertViewportLayout();\n      }\n\n      // If the viewport is at the end we should try and pull more data\n      const needMore = this.shouldRequestMoreData(numItemsInView);\n      if (needMore && this.requestedDataLength !== this._data.length) {\n        this.requestedDataLength = this._data.length;\n        this.checkForData.next();\n      }\n    });\n  }\n\n  private reassertViewportLayout() {\n    const slicedLength = this.dataEnd - this.dataStart;\n    this.viewport.setRenderedRange({ start: 0, end: slicedLength });\n    this.offsetChange.next(this.dataStart * this.itemSize);\n  }\n\n  private getNumItemsInView(): number {\n    const viewportHeight = this.viewport.elementRef.nativeElement.getBoundingClientRect().height;\n    return Math.max(1, Math.ceil(viewportHeight / this.itemSize));\n  }\n\n  private refreshViewAtCurrentIndex() {\n    this.refreshViewAtIndex(this.getCurrentViewportIndex(), this.getNumItemsInView());\n  }\n\n  private getCurrentViewportIndex(): number {\n    const viewportElement = this.viewport.elementRef.nativeElement;\n    const scrollTop = viewportElement?.scrollTop;\n\n    if (typeof scrollTop === 'number' && Number.isFinite(scrollTop)) {\n      return Math.floor(scrollTop / this.itemSize);\n    }\n\n    return this.currentScrollIndex;\n  }\n\n  private refreshViewAtIndex(currentScrollIndex: number, numItemsInView: number) {\n    this.currentScrollIndex = currentScrollIndex;\n    const renderScrollIndex = this.getRenderableScrollIndex(currentScrollIndex, numItemsInView);\n    const maxRenderableIndex = Math.max(this._data.length - Math.ceil(numItemsInView), 0);\n    let nextDataStart = renderScrollIndex > this.extraData ? renderScrollIndex - this.extraData : 0;\n    const end = renderScrollIndex + numItemsInView + this.extraData;\n    const nextDataEnd = end > this._data.length ? this._data.length : end;\n    if (renderScrollIndex === maxRenderableIndex && nextDataEnd === this._data.length) {\n      const desiredWindowSize = Math.min(this._data.length, Math.ceil(numItemsInView) + this.extraData * 2);\n      nextDataStart = Math.max(0, nextDataEnd - desiredWindowSize);\n    }\n    const sliceUnchanged = nextDataStart === this.dataStart && nextDataEnd === this.dataEnd;\n    if (sliceUnchanged) {\n      this.reassertViewportLayout();\n      return;\n    }\n    this.dataStart = nextDataStart;\n    this.dataEnd = nextDataEnd;\n    const slicedData = this._data.slice(this.dataStart, this.dataEnd);\n    this.visibleData.next(slicedData);\n    this.viewport.setRenderedRange({ start: 0, end: slicedData.length });\n    this.offsetChange.next(this.dataStart * this.itemSize);\n    this.scheduleViewportSync();\n  }\n\n  private getRenderableScrollIndex(currentScrollIndex: number, numItemsInView: number): number {\n    const maxRenderableIndex = Math.max(this._data.length - Math.ceil(numItemsInView), 0);\n    return Math.max(0, Math.min(currentScrollIndex, maxRenderableIndex));\n  }\n\n  private shouldRequestMoreData(numItemsInView: number = this.getNumItemsInView()): boolean {\n    const total = this._data.length ? this._data.length - 1 : 0;\n    const endOfData = this.dataEnd;\n    const endOfRender = this.currentScrollIndex + numItemsInView;\n    return total > 0 && endOfData < endOfRender + this.bufferToEnd;\n  }\n\n  private scheduleViewportSync() {\n    if (this.totalContentSizeSyncQueued) {\n      return;\n    }\n\n    this.totalContentSizeSyncQueued = true;\n    queueMicrotask(() => {\n      this.totalContentSizeSyncQueued = false;\n      this.suppressScrollEvents = true;\n      this.viewport.setTotalContentSize(this.itemSize * this._data.length);\n      queueMicrotask(() => {\n        this.suppressScrollEvents = false;\n      });\n    });\n  }\n\n  connect(collectionViewer: CollectionViewer): Observable<any[] | ReadonlyArray<any>> {\n    return this.visibleData;\n  }\n\n  disconnect(collectionViewer: CollectionViewer): void {\n    this.indexChangeSub.unsubscribe();\n  }\n}\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  inject,\n} from '@angular/core';\nimport { ColumnDef } from './lf-selection-list-types';\n\nexport const COLUMN_MIN_WIDTH: number = 100;\n\n@Directive({\n  selector: '[lfResizeColumn]',\n  standalone: true,\n})\nexport class ResizeColumnDirective implements OnInit, OnDestroy {\n  private renderer = inject(Renderer2);\n  private el = inject(ElementRef);\n  private ref = inject(ChangeDetectorRef);\n\n  @Input('lfResizeColumn') resizable: boolean = false;\n  @Input() columnDef?: ColumnDef;\n  @Output() widthChanged: EventEmitter<number> = new EventEmitter<number>();\n\n  private column: HTMLElement;\n\n  private pressed: boolean = false;\n  resizePosition: number = 0;\n  resizedColumnInitialOffsetLeft: number = 0;\n  viewport?: HTMLElement;\n  th?: HTMLElement;\n  verticalResizeBar?: HTMLElement;\n  mouseDownListener?: () => void;\n  mouseMoveListener?: () => void;\n  mouseUpListener?: () => void;\n\n  constructor() {\n    this.column = this.el.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.resizable) {\n      this.th = this.renderer.parentNode(this.column);\n      const row = this.renderer.parentNode(this.th);\n      const thead = this.renderer.parentNode(row);\n      const table = this.renderer.parentNode(thead);\n      this.viewport = this.renderer.parentNode(table);\n      this.verticalResizeBar = this.renderer.createElement('div');\n      this.verticalResizeBar!.classList.add('repository-browser-resize-overlay');\n\n      const resizeHandle: HTMLElement = this.renderer.createElement('span');\n      resizeHandle.classList.add('resize-handle');\n      this.renderer.appendChild(this.column, resizeHandle);\n\n      this.mouseDownListener = this.renderer.listen(resizeHandle, 'mousedown', this.onMouseDown.bind(this));\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.mouseDownListener) this.mouseDownListener();\n    if (this.mouseMoveListener) this.mouseMoveListener();\n    if (this.mouseUpListener) this.mouseUpListener();\n  }\n\n  onMouseDown = (ev: MouseEvent) => {\n    ev.preventDefault();\n    ev.stopPropagation();\n    if (!this.viewport || !this.verticalResizeBar) {\n      console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseDown');\n      return;\n    }\n    this.pressed = true;\n    this.resizePosition =\n      ev.clientX - (this.viewport.getBoundingClientRect()?.left ?? 0) + (this.viewport.scrollLeft ?? 0);\n    this.viewport.appendChild(this.verticalResizeBar);\n    this.verticalResizeBar.style.left = this.resizePosition + 'px';\n    this.resizedColumnInitialOffsetLeft = this.th?.offsetLeft ?? 0;\n    this.mouseMoveListener = this.renderer.listen('document', 'mousemove', this.resizableMousemove.bind(this));\n    this.mouseUpListener = this.renderer.listen('document', 'mouseup', this.resizableMouseup.bind(this));\n  };\n\n  resizableMousemove = (event: MouseEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n    if (!this.viewport) {\n      console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseMove');\n      return;\n    }\n    if (this.pressed && event.buttons) {\n      const currentPositionWithScroll =\n        event.clientX - this.viewport.getBoundingClientRect().left + this.viewport.scrollLeft;\n      const minWidthPx = this.columnDef?.minWidthPx ?? COLUMN_MIN_WIDTH;\n      if (currentPositionWithScroll - this.resizedColumnInitialOffsetLeft > minWidthPx) {\n        this.resizePosition = currentPositionWithScroll;\n      } else {\n        this.resizePosition = this.resizedColumnInitialOffsetLeft + minWidthPx;\n      }\n      this.verticalResizeBar!.style.left = this.resizePosition + 'px';\n    }\n  };\n  resizableMouseup(event: MouseEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    if (!this.viewport) {\n      console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseUp');\n      return;\n    }\n    if (this.pressed) {\n      this.pressed = false;\n      const width = this.resizePosition - this.resizedColumnInitialOffsetLeft;\n      this.widthChanged.emit(width);\n      this.renderer.removeChild(this.viewport, this.verticalResizeBar);\n      this.ref.detectChanges();\n    }\n    if (this.mouseMoveListener) this.mouseMoveListener();\n    if (this.mouseUpListener) this.mouseUpListener();\n  }\n}\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { Directive, Input, Renderer2, forwardRef, inject, numberAttribute } from '@angular/core';\nimport { CdkVirtualScrollViewport, VIRTUAL_SCROLL_STRATEGY, VirtualScrollStrategy } from '@angular/cdk/scrolling';\nimport { Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n/**\n * A no-op `VirtualScrollStrategy` that lets the consumer manage the rendered\n * range and content offset themselves.\n *\n * CDK's built-in `FixedSizeVirtualScrollStrategy` reads `viewport.getDataLength()`\n * inside `_updateRenderedRange` to decide what window to render. When the viewport\n * is driven by a custom `DataSource` (as opposed to `CdkVirtualForOf`), data length\n * stays at 0 and the strategy clamps the rendered range and content offset back to\n * `{0, 0}` / `0` on every scroll tick, which fights any manual layout the consumer\n * applies. This strategy reports scroll index changes but never touches the rendered\n * range or offset, leaving the consumer in full control.\n *\n * @internal\n */\nexport class LfManagedVirtualScrollStrategy implements VirtualScrollStrategy {\n  private readonly _scrolledIndexChange = new Subject<number>();\n  readonly scrolledIndexChange: Observable<number> = this._scrolledIndexChange.pipe(distinctUntilChanged());\n\n  private _viewport: CdkVirtualScrollViewport | null = null;\n  private _contentWrapper: HTMLElement | null = null;\n\n  constructor(\n    private readonly getItemSize: () => number,\n    private readonly renderer: Renderer2\n  ) {}\n\n  attach(viewport: CdkVirtualScrollViewport): void {\n    this._viewport = viewport;\n    this._contentWrapper = viewport.elementRef.nativeElement.querySelector(\n      '.cdk-virtual-scroll-content-wrapper'\n    ) as HTMLElement | null;\n  }\n\n  detach(): void {\n    this._scrolledIndexChange.complete();\n    this._viewport = null;\n    this._contentWrapper = null;\n  }\n\n  /**\n   * Writes `style.transform` on the CDK content wrapper synchronously via `Renderer2`.\n   *\n   * CDK 21 regression: `_markChangeDetectionNeeded` skips re-scheduling when\n   * `_changeDetectionNeeded` is already `true`, so rapid `offsetChange` emissions\n   * can miss the async DOM update. Call this after `setRenderedContentOffset` to\n   * guarantee the transform is applied regardless of CDK's internal signal state.\n   * TODO: remove once https://github.com/angular/components/issues/33484 is resolved.\n   *\n   * Note: RTL negation for horizontal viewports is not replicated here — this\n   * component always uses the default vertical orientation.\n   */\n  applyRenderedOffset(offset: number): void {\n    if (!this._contentWrapper || !this._viewport) {\n      return;\n    }\n    const axis = this._viewport.orientation === 'horizontal' ? 'X' : 'Y';\n    this.renderer.setStyle(this._contentWrapper, 'transform', `translate${axis}(${offset}px)`);\n  }\n\n  onContentScrolled(): void {\n    const viewport = this._viewport;\n    if (!viewport) {\n      return;\n    }\n    const itemSize = this.getItemSize();\n    if (!itemSize || itemSize <= 0) {\n      return;\n    }\n    const scrollOffset = viewport.measureScrollOffset();\n    this._scrolledIndexChange.next(Math.floor(scrollOffset / itemSize));\n  }\n\n  onDataLengthChanged(): void {\n    // The consumer manages the total content size via `setTotalContentSize`.\n  }\n\n  onContentRendered(): void {\n    // No-op: the consumer is responsible for rendering.\n  }\n\n  onRenderedOffsetChanged(): void {\n    // No-op: avoid re-entering `_updateRenderedRange`, which would fight the\n    // consumer-managed rendered range / offset.\n  }\n\n  scrollToIndex(index: number, behavior: ScrollBehavior): void {\n    const viewport = this._viewport;\n    if (!viewport) {\n      return;\n    }\n    const itemSize = this.getItemSize();\n    if (!itemSize || itemSize <= 0) {\n      return;\n    }\n    viewport.scrollToOffset(index * itemSize, behavior);\n  }\n}\n\n/**\n * Attaches a no-op `VirtualScrollStrategy` to a `cdk-virtual-scroll-viewport`,\n * replacing CDK's default `FixedSizeVirtualScrollStrategy`. Use this when the\n * rendered slice and content offset are managed manually (for example, by\n * `GridSelectionListDataSource`).\n *\n * @internal\n */\n@Directive({\n  selector: 'cdk-virtual-scroll-viewport[lfManagedItemSize]',\n  standalone: true,\n  providers: [\n    {\n      provide: VIRTUAL_SCROLL_STRATEGY,\n      useFactory: (directive: LfManagedVirtualScrollDirective) => directive.scrollStrategy,\n      deps: [forwardRef(() => LfManagedVirtualScrollDirective)],\n    },\n  ],\n})\nexport class LfManagedVirtualScrollDirective {\n  @Input({ alias: 'lfManagedItemSize', transform: numberAttribute }) itemSize = 42;\n\n  readonly scrollStrategy: LfManagedVirtualScrollStrategy;\n\n  constructor() {\n    this.scrollStrategy = new LfManagedVirtualScrollStrategy(() => this.itemSize, inject(Renderer2));\n  }\n}\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  QueryList,\n  TemplateRef,\n  ViewChild,\n  ViewChildren,\n  inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSort, Sort, MatSortModule } from '@angular/material/sort';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { ILfSelectable, ItemWithId, Selectable } from '@laserfiche/lf-ui-components/shared';\nimport { Subscription } from 'rxjs';\nimport { GridSelectionListDataSource } from './lf-selection-list-data-source';\nimport { ColumnDef, ColumnOrderBy, SelectedItemEvent } from './lf-selection-list-types';\nimport { COLUMN_MIN_WIDTH, ResizeColumnDirective } from './resize-column.directive';\nimport { LfManagedVirtualScrollDirective } from './lf-managed-virtual-scroll.directive';\n\n/** @internal */\nexport interface RepositoryBrowserData {\n  columns: Record<string, string>;\n}\n\nconst SELECT_COL: ColumnDef = {\n  id: 'select',\n  displayName: '',\n  defaultWidth: '35px',\n  minWidthPx: 35,\n  resizable: false,\n  sortable: false,\n};\n\n/** @internal */\n@Component({\n  selector: 'lf-selection-list-component',\n  templateUrl: './lf-selection-list.component.html',\n  styleUrls: ['./lf-selection-list.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    CommonModule,\n    ScrollingModule,\n    MatCheckboxModule,\n    MatTableModule,\n    MatSortModule,\n    ResizeColumnDirective,\n    LfManagedVirtualScrollDirective,\n  ],\n})\nexport class LfSelectionListComponent implements AfterViewInit, OnDestroy {\n  /**@internal */\n  private focusMonitor = inject(FocusMonitor);\n  /**@internal */\n  private ref = inject(ChangeDetectorRef);\n\n  @Output() scrollChanged = new EventEmitter<undefined>();\n  @Output() itemDoubleClicked = new EventEmitter<ItemWithId>();\n  @Output() itemSelected = new EventEmitter<SelectedItemEvent>();\n  @Output() itemFocused = new EventEmitter<ItemWithId>();\n  @Output() refreshData: EventEmitter<void> = new EventEmitter<void>();\n\n  @Input() itemSize: number = 42;\n  private _pageSize: number = 50;\n  @Input()\n  set pageSize(value: number) {\n    this._pageSize = value;\n    if (this.dataSource) {\n      this.dataSource.pageSize = value;\n    }\n  }\n  get pageSize(): number {\n    return this._pageSize;\n  }\n\n  @Input() listItemRef?: TemplateRef<unknown>;\n  @Input() alwaysShowHeader?: boolean;\n  @Input() set listItems(items: ILfSelectable[]) {\n    this.items = items;\n    if (this.dataSource) {\n      if (this.dataSource.allData.length < 1 && items.length > 0) {\n        this.setNewWidths();\n      }\n      this.dataSource.allData = this.items;\n      this.ref.markForCheck();\n    }\n  }\n\n  private setNewWidths() {\n    if (this._showHeader === true) {\n      this.setInitialWidth();\n    } else {\n      this.setDefaultWidths();\n    }\n  }\n\n  @Input() set uniqueIdentifier(key: string) {\n    this._uniqueIdentifier = key;\n  }\n\n  @Input() set multipleSelection(value: boolean) {\n    this._multipleSelectEnabled = value;\n    this.selectable.multiSelectable = value;\n  }\n  get multipleSelection(): boolean {\n    return this._multipleSelectEnabled;\n  }\n\n  @Input()\n  get columnOrderBy(): ColumnOrderBy | undefined {\n    return this._columnOrderBy;\n  }\n  set columnOrderBy(orderBy: ColumnOrderBy | undefined) {\n    if (this.sort && orderBy?.columnId && this.allColumnDefs.find((c) => c.id === orderBy.columnId)) {\n      this.sort.sort({ id: orderBy?.columnId, start: orderBy?.isDesc ? 'desc' : 'asc', disableClear: true });\n      this._columnOrderBy = orderBy;\n    } else {\n      console.debug('Unable to set new sort header');\n    }\n  }\n\n  @Input() set columns(cols: ColumnDef[]) {\n    if (cols.length > 1 || this.alwaysShowHeader === true) {\n      this._showHeader = true;\n    } else {\n      this._showHeader = false;\n    }\n    const toAdd: ColumnDef[] = [];\n    if (this.multipleSelection) {\n      toAdd.push(SELECT_COL);\n    }\n    this.allColumnDefs = toAdd.concat(cols);\n    this.allColumnHeaders = this.allColumnDefs.map((col) => col.id);\n    this.additionalColumnDefs = cols;\n    this.ref.detectChanges();\n    this.setNewWidths();\n  }\n  get columns(): ColumnDef[] {\n    return this.additionalColumnDefs;\n  }\n\n  private setDefaultWidths() {\n    const widths: string[] = [];\n    this.allColumnDefs.forEach((col) => {\n      widths.push(col.defaultWidth);\n    });\n\n    if (this.matTable) {\n      this.matTable.nativeElement.style.width = '100%';\n      this.headerTable?.nativeElement.style.setProperty('width', '100%');\n      const templateCOls = widths.join(' ');\n      this.columnsWidth = templateCOls;\n    }\n    this.ref.detectChanges();\n  }\n\n  /** @internal */\n  @ViewChild(CdkVirtualScrollViewport) viewport?: CdkVirtualScrollViewport;\n  /** @internal */\n  @ViewChild(LfManagedVirtualScrollDirective) private scrollDirective?: LfManagedVirtualScrollDirective;\n  /** @internal */\n  @ViewChild('matTable', { read: ElementRef }) matTable?: ElementRef;\n  /** @internal */\n  @ViewChildren(MatTable) matTables?: QueryList<MatTable<ILfSelectable>>;\n  /** @internal */\n  @ViewChild('headerTable', { read: ElementRef }) headerTable?: ElementRef;\n  /** @internal */\n  @ViewChild(MatSort) sort?: MatSort;\n\n  /** @internal */\n  private additionalColumnDefs: ColumnDef[] = [];\n  /** @internal */\n  private _uniqueIdentifier?: string;\n  /** @internal */\n  private allSubscriptions?: Subscription;\n  /** @internal */\n  private _columnOrderBy: ColumnOrderBy | undefined;\n  /** @internal */\n  private selectable: Selectable = new Selectable();\n  /** @internal */\n  private _multipleSelectEnabled: boolean = false;\n\n  /** @internal */\n  allColumnHeaders?: string[];\n  /** @internal */\n  dataSource?: GridSelectionListDataSource;\n  /** @internal */\n  items: ILfSelectable[] = [];\n  /** @internal */\n  allColumnDefs: ColumnDef[] = [];\n  /** @internal */\n  columnsWidth: string | undefined;\n  /** @internal */\n  resizePosition: number = 0;\n  /** @internal */\n  _showHeader: boolean = false;\n  /** @internal */\n  currentFocusIndex: number = 0;\n\n  /** @internal */\n  ngAfterViewInit(): void {\n    this.allSubscriptions = new Subscription();\n    this.dataSource = new GridSelectionListDataSource(this.items, this.viewport!, this.itemSize, this._pageSize);\n    const dataSourceSub = this.dataSource.checkForData.subscribe(() => {\n      this.scrollChanged.emit();\n    });\n    const dataRenderSub = this.dataSource.connect({} as never).subscribe(() => {\n      this.matTables?.last?.renderRows();\n      this.ref.detectChanges();\n    });\n    const dataOffsetSub = this.dataSource.offsetChange.subscribe((offset) => {\n      this.viewport?.setRenderedContentOffset(offset);\n      this.scrollDirective?.scrollStrategy.applyRenderedOffset(offset);\n      this.ref.detectChanges();\n    });\n    this.allSubscriptions?.add(dataSourceSub);\n    this.allSubscriptions?.add(dataRenderSub);\n    this.allSubscriptions?.add(dataOffsetSub);\n\n    if (this.columns.length > 1 || this.alwaysShowHeader === true) {\n      this._showHeader = true;\n    } else {\n      this._showHeader = false;\n    }\n    if (this.viewport?.elementRef.nativeElement) {\n      this.focusMonitor.monitor(this.viewport?.elementRef.nativeElement, true).subscribe((origin: FocusOrigin) => {\n        if (!origin || document.activeElement?.nodeName.toLowerCase() === 'cdk-virtual-scroll-viewport') {\n          this.itemFocused.emit(undefined);\n        }\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    this.allSubscriptions?.unsubscribe();\n    this.focusMonitor.stopMonitoring(this.viewport!.elementRef.nativeElement);\n  }\n\n  clearSelectedValues(clearCached?: boolean) {\n    this.selectable.clearSelectedValues(this.items, clearCached);\n  }\n\n  placeholderWhen(index: number, _: any) {\n    return index === 0;\n  }\n\n  focus() {\n    this._focus();\n  }\n\n  sortData(sort: Sort) {\n    if (!sort.active || sort.direction === '') {\n      return;\n    }\n    const sortState: ColumnOrderBy = { columnId: sort.active, isDesc: sort.direction === 'desc' };\n    this._columnOrderBy = sortState;\n    this.refreshData.emit();\n  }\n\n  focusCurrentIndex() {\n    if (this.currentFocusIndex >= this.items.length) {\n      this.currentFocusIndex = 0;\n    }\n    const currentRow = this.viewport?.elementRef.nativeElement.querySelector('#lf-row-' + this.currentFocusIndex);\n    if (!currentRow) {\n      this.viewport?.scrollToIndex(this.currentFocusIndex);\n    }\n  }\n\n  /** @internal */\n  async onClickMatListOption(event: MouseEvent, option: ILfSelectable, index: number) {\n    let target: HTMLElement | null = event.target as HTMLElement;\n    let nodeName: string | undefined;\n    while (target != null && nodeName !== 'lf-list-option-component' && nodeName !== 'mat-checkbox') {\n      target = target.parentElement;\n      nodeName = target?.nodeName.toLowerCase();\n    }\n    if (nodeName === 'mat-checkbox') {\n      this.selectable.onItemClicked(event, option, this.items, true);\n    } else {\n      this.selectable.onItemClicked(event, option, this.items);\n    }\n    this.currentFocusIndex = index;\n    this.ref.detectChanges();\n\n    this.itemSelected.emit({ selected: option, selectedItems: this.selectable.selectedItems });\n  }\n\n  /** @internal */\n  onDblClick(event: MouseEvent | KeyboardEvent, item: ILfSelectable) {\n    if (item.isSelectable && !item.isSelected) {\n      this.selectable.onItemClicked(event, item, this.items, true);\n      this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });\n    }\n    this.itemDoubleClicked.emit(item.value);\n  }\n\n  /** @internal */\n  async onItemKeyDown(event: KeyboardEvent, item: ILfSelectable) {\n    if (\n      event.key === ' ' ||\n      event.key === 'Enter' ||\n      (event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown'))\n    ) {\n      if (event.key === 'Enter') {\n        this.selectable.onItemClicked(event, item, this.items);\n        this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });\n        this.onDblClick(event, item);\n        return;\n      }\n      this.selectable.onItemClicked(\n        event,\n        item,\n        this.items,\n        false,\n        event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown')\n      );\n      this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });\n    }\n  }\n\n  /** @internal */\n  onItemKeyUp(event: KeyboardEvent, item: ILfSelectable) {\n    if (event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown')) {\n      this.selectable.onItemClicked(\n        event,\n        item,\n        this.items,\n        false,\n        event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown')\n      );\n      this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });\n    }\n  }\n\n  /** @internal */\n  onFocused(index: number) {\n    this.currentFocusIndex = index;\n    this.itemFocused.emit(this.items[index]?.value);\n  }\n\n  /** @internal */\n  onViewportKeyDown(event: KeyboardEvent) {\n    if (event.key === ' ' || event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n      event.preventDefault();\n    }\n    if (this.viewport == null) {\n      return;\n    }\n    if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n      const activeElement = document.activeElement;\n      if (\n        activeElement?.nodeName.toLowerCase() !== 'cdk-virtual-scroll-viewport' &&\n        activeElement?.nodeName.toLowerCase() !== 'tr'\n      ) {\n        return;\n      }\n      event.preventDefault();\n      event.stopPropagation();\n      if (activeElement?.nodeName.toLowerCase() === 'cdk-virtual-scroll-viewport') {\n        this.focusCurrentIndex();\n        const ele = this.viewport.elementRef.nativeElement.querySelector(\n          '#lf-row-' + this.currentFocusIndex\n        ) as HTMLElement;\n        (ele?.childNodes[0] as HTMLElement).focus();\n      } else {\n        const moveDirection = event.key === 'ArrowUp' ? -1 : 1;\n        this.currentFocusIndex = this.currentFocusIndex + moveDirection;\n        // Check if currentFocusIndex is out of bounds\n        if (this.currentFocusIndex < 0 || this.currentFocusIndex >= this.items.length) {\n          this.currentFocusIndex = this.currentFocusIndex - moveDirection;\n        }\n        const ele = this.viewport.elementRef.nativeElement.querySelector(\n          '#lf-row-' + this.currentFocusIndex\n        ) as HTMLElement;\n        ele?.focus();\n      }\n      if (!this._checkRowInView(this.currentFocusIndex)) {\n        // this way even if we scroll down we go back to the section we were\n        this.viewport.scrollToIndex(this.currentFocusIndex);\n      }\n    }\n  }\n\n  setInitialWidth() {\n    setTimeout(() => {\n      if (this.allColumnDefs.length > 0) {\n        const repositoryBrowserData: RepositoryBrowserData | undefined = this.getRepositoryBrowserData();\n        const tableEl = this.matTable?.nativeElement;\n        const widths: string[] = [];\n        this.allColumnDefs.forEach((col) => {\n          const columnWidth = repositoryBrowserData?.columns ? repositoryBrowserData?.columns[col.id] : undefined;\n          if (columnWidth) {\n            widths.push(columnWidth);\n          } else {\n            widths.push(col.defaultWidth);\n          }\n        });\n\n        if (this.matTable) {\n          const templateCOls = widths.join(' ');\n          this.columnsWidth = templateCOls;\n        }\n        this.ref.detectChanges();\n\n        const onlyColumnWidthAuto = this.columns.length === 1 && this.columnsWidth?.includes('auto');\n        if (onlyColumnWidthAuto) {\n          this.setDefaultWidths();\n        } else {\n          const containerWidth = this.viewport?.elementRef.nativeElement.getBoundingClientRect().width;\n          tableEl.style.width = containerWidth + 'px';\n          this.headerTable?.nativeElement.style.setProperty('width', containerWidth + 'px');\n          this.ref.detectChanges();\n          const widthsInPixel: string[] = [];\n\n          this.allColumnDefs.forEach((col) => {\n            const columnEls = Array.from(\n              this.viewport!.elementRef.nativeElement.getElementsByClassName('mat-column-' + col.id)\n            );\n            const headerColumnEls = this.headerTable\n              ? Array.from(this.headerTable.nativeElement.getElementsByClassName('mat-column-' + col.id))\n              : [];\n            const columnWidthOffset = Math.max(...columnEls.map((c) => (c as HTMLDivElement).offsetWidth));\n            const headerWidthOffset = headerColumnEls.length\n              ? Math.max(...headerColumnEls.map((c) => (c as HTMLDivElement).offsetWidth))\n              : 0;\n            const minWidthPx = col.minWidthPx ?? COLUMN_MIN_WIDTH;\n            const columnWidthInPixel =\n              col.id !== 'select'\n                ? Math.max(columnWidthOffset, headerWidthOffset, minWidthPx) + 'px'\n                : SELECT_COL.defaultWidth;\n            widthsInPixel.push(columnWidthInPixel);\n          });\n\n          if (this.matTable) {\n            const templateCOls = widthsInPixel.join(' ');\n            this.columnsWidth = templateCOls;\n          }\n\n          tableEl.style.width = 'fit-content';\n          this.headerTable?.nativeElement.style.setProperty('width', 'fit-content');\n          this.ref.detectChanges();\n        }\n      }\n    });\n  }\n\n  private getRepositoryBrowserData(): RepositoryBrowserData | undefined {\n    if (this._uniqueIdentifier) {\n      const repositoryBrowserData = window.localStorage.getItem(this._uniqueIdentifier);\n      let asJSON: RepositoryBrowserData | undefined;\n      if (repositoryBrowserData) {\n        asJSON = JSON.parse(repositoryBrowserData);\n      }\n      return asJSON;\n    } else {\n      return undefined;\n    }\n  }\n\n  async resetCachedNodesAsync() {\n    await this.selectable.setSelectedNodesAsync(new Map<string, ILfSelectable>(), this.items, 0);\n    this.ref.detectChanges();\n    return this.selectable.selectedItems;\n  }\n\n  async setSelectedNodesAsync(\n    nodesToSelect: ILfSelectable[] | undefined,\n    checkForMoreDataCallback: () => Promise<ILfSelectable[] | undefined>,\n    maxFetchIterations: number\n  ): Promise<ILfSelectable[]> {\n    this.selectable.callback = checkForMoreDataCallback;\n    const idsToSelectable: Map<string, ILfSelectable> = new Map<string, ILfSelectable>(\n      nodesToSelect?.map((v) => [v.value.id, v])\n    );\n    await this.selectable.setSelectedNodesAsync(idsToSelectable, this.items, maxFetchIterations);\n    this.ref.detectChanges();\n    return this.selectable.selectedItems;\n  }\n\n  /** @internal */\n  _computeRowId(index: number) {\n    return 'lf-row-' + index;\n  }\n\n  /** @internal */\n  _checkFocused(rowIndex: number) {\n    return this.currentFocusIndex === rowIndex;\n  }\n\n  /** @internal */\n  private _checkRowInView(currentFocusIndex: number) {\n    // is there an easier way to do this? -- check if currentFocusIndex is in viewport indices (rendered might be greater than viewable?)\n    if (this.viewport == null) {\n      return;\n    }\n    const rowEle = document.querySelector('#lf-row-' + currentFocusIndex);\n    if (rowEle === null) {\n      return false;\n    }\n    const rowEleRect = rowEle.getBoundingClientRect();\n    const scrollRect = this.viewport.elementRef.nativeElement.getBoundingClientRect();\n    const belowTop = rowEleRect.top >= scrollRect.top;\n    const aboveBottom = rowEleRect.bottom <= scrollRect.bottom;\n    return belowTop && aboveBottom;\n  }\n\n  /** @internal */\n  private _focus(tries: number = 0) {\n    if (tries >= 10) {\n      return;\n    }\n    this.focusCurrentIndex();\n    const ele = this.viewport?.elementRef.nativeElement.querySelector(\n      '#lf-row-' + this.currentFocusIndex\n    ) as HTMLElement;\n    if (ele) {\n      ele.focus();\n      return;\n    }\n\n    setTimeout(() => {\n      this._focus(tries + 1);\n    });\n  }\n\n  // column resizing\n\n  placeholderHeight: number = 0;\n\n  onColumnWidthChanges(width: number, index: number) {\n    this.updateRepositoryBrowserData(width, index);\n    this.setColumnWidthChanges(width, index);\n  }\n\n  private updateRepositoryBrowserData(width: number, index: number) {\n    if (this._uniqueIdentifier) {\n      let repoData: RepositoryBrowserData | undefined = this.getRepositoryBrowserData();\n      const key = this.allColumnDefs[index].id;\n      if (!repoData) {\n        repoData = {\n          columns: {},\n        };\n      } else if (!repoData.columns) {\n        repoData.columns = {};\n      }\n      repoData.columns[key] = width + 'px';\n      localStorage.setItem(this._uniqueIdentifier, JSON.stringify(repoData));\n    } else {\n      console.warn('Unable to save lf-selection-list column widths. Need to set uniqueIdentifier on lf-selection-list');\n    }\n  }\n\n  setColumnWidthChanges(width: number, index: number) {\n    const widths = this.columnsWidth ?? '';\n    const widthsA = widths.split(' ');\n    widthsA[index] = width + 'px';\n    const stringWidths = widthsA.join(' ');\n    this.columnsWidth = stringWidths;\n    if (this.matTable) {\n      this.matTable.nativeElement.style.width = 'fit-content';\n    }\n    this.ref.detectChanges();\n  }\n}\n","<!--Copyright Laserfiche.\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\n\n<div class=\"lf-selection-list-scroll-shell\">\n  @if (_showHeader) {\n    <table\n      #headerTable\n      role=\"presentation\"\n      mat-table\n      [dataSource]=\"[]\"\n      class=\"lf-table-selection-list lf-table-selection-list-header\"\n      matSort\n      (matSortChange)=\"sortData($event)\"\n    >\n      @for (column of allColumnDefs; track column; let i = $index) {\n        <ng-container [matColumnDef]=\"column.id\">\n          @switch (column.id) {\n            @case (\"name\") {\n              <th mat-header-cell *matHeaderCellDef class=\"lf-ellipsis-label\">\n                <div\n                  class=\"lf-resize-wrapper-div\"\n                  [lfResizeColumn]=\"column.resizable ?? false\"\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            }\n            @case (\"select\") {\n              <th mat-header-cell *matHeaderCellDef></th>\n            }\n            @default {\n              <th mat-header-cell *matHeaderCellDef class=\"lf-ellipsis-label\">\n                <div\n                  class=\"lf-resize-wrapper-div\"\n                  [lfResizeColumn]=\"column.resizable ?? false\"\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            }\n          }\n        </ng-container>\n      }\n\n      <tr\n        class=\"lf-selection-list-header-row\"\n        [ngStyle]=\"{ height: itemSize + 'px' }\"\n        mat-header-row\n        tabindex=\"-1\"\n        [style.gridTemplateColumns]=\"columnsWidth\"\n        *matHeaderRowDef=\"allColumnHeaders\"\n      ></tr>\n    </table>\n  }\n\n  <cdk-virtual-scroll-viewport\n    #viewport\n    id=\"lf-list-viewport\"\n    tabindex=\"-1\"\n    [lfManagedItemSize]=\"itemSize\"\n    (keydown)=\"onViewportKeyDown($event)\"\n  >\n    <table #matTable role=\"grid\" mat-table [dataSource]=\"dataSource!\" class=\"lf-table-selection-list\">\n      @for (column of allColumnDefs; track column; let i = $index) {\n        <ng-container [matColumnDef]=\"column.id\">\n          @switch (column.id) {\n            @case (\"name\") {\n              <th mat-header-cell *matHeaderCellDef class=\"lf-ellipsis-label\">\n                <div\n                  class=\"lf-resize-wrapper-div\"\n                  [lfResizeColumn]=\"column.resizable ?? false\"\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                  @if (listItemRef) {\n                    <ng-container *ngTemplateOutlet=\"listItemRef; context: item\"></ng-container>\n                  } @else {\n                    <span class=\"lf-ellipsis-label\">{{ item.value.name ?? item.value.id }}</span>\n                  }\n                </div>\n              </td>\n            }\n            @case (\"select\") {\n              <th mat-header-cell *matHeaderCellDef></th>\n              <td mat-cell class=\"multiselect-column\" *matCellDef=\"let row\">\n                @if (multipleSelection && row?.isSelectable) {\n                  <mat-checkbox\n                    class=\"lf-checkbox multiselect-indicator lf-no-ripple\"\n                    tabindex=\"-1\"\n                    [checked]=\"row?.isSelected\"\n                    color=\"primary\"\n                    disableRipple\n                  >\n                  </mat-checkbox>\n                }\n              </td>\n            }\n            @default {\n              <th mat-header-cell *matHeaderCellDef class=\"lf-ellipsis-label\">\n                <div\n                  class=\"lf-resize-wrapper-div\"\n                  [lfResizeColumn]=\"column.resizable ?? false\"\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            }\n          }\n        </ng-container>\n      }\n\n      <tr\n        mat-row\n        *matRowDef=\"let row; let i = index; 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</div>\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nexport { RepositoryBrowserData, LfSelectionListComponent } from './lf-selection-list.component';\nexport { ColumnOrderBy, ColumnDef, SelectedItemEvent } from './lf-selection-list-types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './lf-selection-list-public-api';\n"],"names":[],"mappings":"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"}