{"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-selection-list.component.ts","../../../projects/ui-components/lf-selection-list/lf-selection-list.component.html","../../../projects/ui-components/lf-selection-list/lf-selection-list-types.ts","../../../projects/ui-components/lf-selection-list/lf-selection-list.module.ts","../../../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.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { DataSource, CollectionViewer } from '@angular/cdk/collections';\r\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\r\nimport { Subscription, BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { ILfSelectable } from '@laserfiche/lf-ui-components/shared';\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class GridSelectionListDataSource extends DataSource<any> {\r\n  private _data: ILfSelectable[];\r\n  private readonly visibleData: BehaviorSubject<ILfSelectable[]> = new BehaviorSubject<ILfSelectable[]>([]);\r\n\r\n  checkForData: Subject<void> = new Subject<void>();\r\n  indexChangeSub: Subscription;\r\n  currentScrollIndex: number = 0;\r\n  dataStart: number = 0;\r\n  dataEnd: number = 0;\r\n\r\n  offset = 0;\r\n  offsetChange = new BehaviorSubject(0);\r\n\r\n  extraData: number = this.pageSize / 2;\r\n  bufferToEnd: number = this.pageSize / 4;\r\n\r\n  get allData(): ILfSelectable[] {\r\n    return this._data.slice();\r\n  }\r\n\r\n  set allData(data: ILfSelectable[]) {\r\n    const existingData = this._data;\r\n    this._data = data;\r\n    this.viewport.setTotalContentSize(this.itemSize * this._data.length);\r\n    if (!existingData || existingData.length === 0) {\r\n      this.resetView();\r\n    }\r\n  }\r\n\r\n  private resetView() {\r\n    this.dataStart = 0;\r\n    this.dataEnd = this.pageSize;\r\n    this.visibleData.next(this._data.slice(this.dataStart, this.dataEnd));\r\n    this.viewport.scrollTo({ top: 0 });\r\n    this.offsetChange.next(0);\r\n  }\r\n\r\n  constructor(initialData: ILfSelectable[], private viewport: CdkVirtualScrollViewport, private itemSize: number, public pageSize: number) {\r\n    super();\r\n    this._data = initialData;\r\n    this.viewport.setTotalContentSize(this.itemSize * initialData.length);\r\n    this.dataStart = 0;\r\n    this.dataEnd = this.pageSize;\r\n    this.visibleData.next(this._data.slice(this.dataStart, this.dataEnd));\r\n\r\n    this.indexChangeSub = this.viewport.scrolledIndexChange.subscribe((currentScrollIndex) => {\r\n      const numItemsInView = this.viewport.elementRef.nativeElement.getBoundingClientRect().height / this.itemSize;\r\n      const scrollPastEndOfData = currentScrollIndex + numItemsInView > this.dataEnd - this.bufferToEnd;\r\n      const startAccountingForBuffer =\r\n        currentScrollIndex > this.bufferToEnd ? currentScrollIndex - this.bufferToEnd : 0;\r\n      const scrollBeforeStartOfData = startAccountingForBuffer < this.currentScrollIndex;\r\n      if (scrollPastEndOfData || scrollBeforeStartOfData) {\r\n        this.currentScrollIndex = currentScrollIndex;\r\n        this.dataStart = currentScrollIndex > this.extraData ? currentScrollIndex - this.extraData : 0;\r\n        const end = currentScrollIndex + numItemsInView + this.extraData;\r\n        this.dataEnd = end > this._data.length ? this._data.length : end;\r\n        const slicedData = this._data.slice(this.dataStart, this.dataEnd);\r\n        this.visibleData.next(slicedData);\r\n        this.offsetChange.next(this.dataStart * this.itemSize);\r\n      }\r\n\r\n      // If the viewport is at the end we should try and pull more data\r\n      const total = this._data.length ? this._data.length - 1 : 0;\r\n      const endOfData = this.dataEnd;\r\n      const endOfRender = currentScrollIndex + numItemsInView;\r\n      if (total > 0 && endOfData < endOfRender + this.bufferToEnd) {\r\n        this.checkForData.next();\r\n      }\r\n    });\r\n  }\r\n\r\n  connect(collectionViewer: CollectionViewer): Observable<any[] | ReadonlyArray<any>> {\r\n    return this.visibleData;\r\n  }\r\n\r\n  disconnect(collectionViewer: CollectionViewer): void {\r\n    this.indexChangeSub.unsubscribe();\r\n  }\r\n}\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\r\nimport { ColumnDef } from './lf-selection-list-types';\r\n\r\nexport const COLUMN_MIN_WIDTH: number = 100;\r\n\r\n@Directive({\r\n  selector: '[lfResizeColumn]',\r\n})\r\nexport class ResizeColumnDirective implements OnInit, OnDestroy {\r\n  @Input('lfResizeColumn') resizable: boolean = false;\r\n  @Input() columnDef?: ColumnDef;\r\n  @Output() widthChanged: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n  private column: HTMLElement;\r\n\r\n  private pressed: boolean = false;\r\n  resizePosition: number = 0;\r\n  resizedColumnInitialOffsetLeft: number = 0;\r\n  viewport?: HTMLElement;\r\n  th?: HTMLElement;\r\n  verticalResizeBar?: HTMLElement;\r\n  mouseDownListener?: () => void;\r\n  mouseMoveListener?: () => void;\r\n  mouseUpListener?: () => void;\r\n\r\n  constructor(private renderer: Renderer2, private el: ElementRef, private ref: ChangeDetectorRef) {\r\n    this.column = this.el.nativeElement;\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (this.resizable) {\r\n      this.th = this.renderer.parentNode(this.column);\r\n      const row = this.renderer.parentNode(this.th);\r\n      const thead = this.renderer.parentNode(row);\r\n      const table = this.renderer.parentNode(thead);\r\n      this.viewport = this.renderer.parentNode(table);\r\n      this.verticalResizeBar = this.renderer.createElement('div');\r\n      this.verticalResizeBar!.classList.add('repository-browser-resize-overlay');\r\n\r\n      const resizeHandle: HTMLElement = this.renderer.createElement('span');\r\n      resizeHandle.classList.add('resize-handle');\r\n      this.renderer.appendChild(this.column, resizeHandle);\r\n\r\n      this.mouseDownListener = this.renderer.listen(resizeHandle, 'mousedown', this.onMouseDown.bind(this));\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.mouseDownListener) this.mouseDownListener();\r\n    if (this.mouseMoveListener) this.mouseMoveListener();\r\n    if (this.mouseUpListener) this.mouseUpListener();\r\n  }\r\n\r\n  onMouseDown = (ev: MouseEvent) => {\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n    if (!this.viewport || !this.verticalResizeBar) {\r\n      console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseDown');\r\n      return;\r\n    }\r\n    this.pressed = true;\r\n    this.resizePosition =\r\n      ev.clientX - (this.viewport.getBoundingClientRect()?.left ?? 0) + (this.viewport.scrollLeft ?? 0);\r\n    this.viewport.appendChild(this.verticalResizeBar);\r\n    this.verticalResizeBar.style.left = this.resizePosition + 'px';\r\n    this.resizedColumnInitialOffsetLeft = this.th?.offsetLeft ?? 0;\r\n    this.mouseMoveListener = this.renderer.listen('document', 'mousemove', this.resizableMousemove.bind(this));\r\n    this.mouseUpListener = this.renderer.listen('document', 'mouseup', this.resizableMouseup.bind(this));\r\n  };\r\n\r\n  resizableMousemove = (event: MouseEvent) => {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    if (!this.viewport) {\r\n      console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseMove');\r\n      return;\r\n    }\r\n    if (this.pressed && event.buttons) {\r\n      const currentPositionWithScroll =\r\n        event.clientX - this.viewport.getBoundingClientRect().left + this.viewport.scrollLeft;\r\n      const minWidthPx = this.columnDef?.minWidthPx ?? COLUMN_MIN_WIDTH;\r\n      if (currentPositionWithScroll - this.resizedColumnInitialOffsetLeft > minWidthPx) {\r\n        this.resizePosition = currentPositionWithScroll;\r\n      } else {\r\n        this.resizePosition = this.resizedColumnInitialOffsetLeft + minWidthPx;\r\n      }\r\n      this.verticalResizeBar!.style.left = this.resizePosition + 'px';\r\n    }\r\n  };\r\n  resizableMouseup(event: MouseEvent) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    if (!this.viewport) {\r\n      console.warn('Unexpected cannot find viewport: resizeColumnDirective mouseUp');\r\n      return;\r\n    }\r\n    if (this.pressed) {\r\n      this.pressed = false;\r\n      const width = this.resizePosition - this.resizedColumnInitialOffsetLeft;\r\n      this.widthChanged.emit(width);\r\n      this.renderer.removeChild(this.viewport, this.verticalResizeBar);\r\n      this.ref.detectChanges();\r\n    }\r\n    if (this.mouseMoveListener) this.mouseMoveListener();\r\n    if (this.mouseUpListener) this.mouseUpListener();\r\n  }\r\n}\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\r\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  TemplateRef,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { MatSort, Sort } from '@angular/material/sort';\r\nimport { ILfSelectable, ItemWithId, Selectable } from '@laserfiche/lf-ui-components/shared';\r\nimport { Subscription } from 'rxjs';\r\nimport { GridSelectionListDataSource } from './lf-selection-list-data-source';\r\nimport { ColumnDef, ColumnOrderBy, SelectedItemEvent } from './lf-selection-list-types';\r\nimport { COLUMN_MIN_WIDTH } from './resize-column.directive';\r\n\r\n/** @internal */\r\nexport interface RepositoryBrowserData {\r\n  columns: Record<string, string>;\r\n}\r\n\r\nconst SELECT_COL: ColumnDef = {\r\n  id: 'select',\r\n  displayName: '',\r\n  defaultWidth: '35px',\r\n  minWidthPx: 35,\r\n  resizable: false,\r\n  sortable: false,\r\n};\r\n\r\n/** @internal */\r\n@Component({\r\n  selector: 'lf-selection-list-component',\r\n  templateUrl: './lf-selection-list.component.html',\r\n  styleUrls: ['./lf-selection-list.component.css'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LfSelectionListComponent implements AfterViewInit, OnDestroy {\r\n  @Output() scrollChanged = new EventEmitter<undefined>();\r\n  @Output() itemDoubleClicked = new EventEmitter<ItemWithId>();\r\n  @Output() itemSelected = new EventEmitter<SelectedItemEvent>();\r\n  @Output() itemFocused = new EventEmitter<ItemWithId>();\r\n  @Output() refreshData: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  @Input() itemSize: number = 42;\r\n  private _pageSize: number = 50;\r\n  @Input()\r\n  set pageSize(value: number) {\r\n    this._pageSize = value;\r\n    if (this.dataSource) {\r\n      this.dataSource.pageSize = value;\r\n    }\r\n  }\r\n  get pageSize(): number {\r\n    return this._pageSize;\r\n  }\r\n\r\n  @Input() listItemRef?: TemplateRef<unknown>;\r\n  @Input() alwaysShowHeader?: boolean;\r\n  @Input() set listItems(items: ILfSelectable[]) {\r\n    this.items = items;\r\n    if (this.dataSource) {\r\n      if (this.dataSource.allData.length < 1 && items.length > 0) {\r\n        this.setNewWidths();\r\n      }\r\n      this.dataSource.allData = this.items;\r\n    }\r\n  }\r\n\r\n  private setNewWidths() {\r\n    if (this._showHeader === true) {\r\n      this.setInitialWidth();\r\n    } else {\r\n      this.setDefaultWidths();\r\n    }\r\n  }\r\n\r\n  @Input() set uniqueIdentifier(key: string) {\r\n    this._uniqueIdentifier = key;\r\n  }\r\n\r\n  @Input() set multipleSelection(value: boolean) {\r\n    this._multipleSelectEnabled = value;\r\n    this.selectable.multiSelectable = value;\r\n  }\r\n  get multipleSelection(): boolean {\r\n    return this._multipleSelectEnabled;\r\n  }\r\n\r\n  @Input()\r\n  get columnOrderBy(): ColumnOrderBy | undefined {\r\n    return this._columnOrderBy;\r\n  }\r\n  set columnOrderBy(orderBy: ColumnOrderBy | undefined) {\r\n    if (this.sort && orderBy?.columnId && this.allColumnDefs.find((c) => c.id === orderBy.columnId)) {\r\n      this.sort.sort({ id: orderBy?.columnId, start: orderBy?.isDesc ? 'desc' : 'asc', disableClear: true });\r\n      this._columnOrderBy = orderBy;\r\n    } else {\r\n      console.debug('Unable to set new sort header');\r\n    }\r\n  }\r\n\r\n  @Input() set columns(cols: ColumnDef[]) {\r\n    if (cols.length > 1 || this.alwaysShowHeader === true) {\r\n      this._showHeader = true;\r\n    } else {\r\n      this._showHeader = false;\r\n    }\r\n    const toAdd: ColumnDef[] = [];\r\n    if (this.multipleSelection) {\r\n      toAdd.push(SELECT_COL);\r\n    }\r\n    this.allColumnDefs = toAdd.concat(cols);\r\n    this.allColumnHeaders = this.allColumnDefs.map((col) => col.id);\r\n    this.additionalColumnDefs = cols;\r\n    this.ref.detectChanges();\r\n    this.setNewWidths();\r\n  }\r\n  get columns(): ColumnDef[] {\r\n    return this.additionalColumnDefs;\r\n  }\r\n\r\n  private setDefaultWidths() {\r\n    const widths: string[] = [];\r\n    this.allColumnDefs.forEach((col) => {\r\n      widths.push(col.defaultWidth);\r\n    });\r\n\r\n    if (this.matTable) {\r\n      this.matTable.nativeElement.style.width = '100%';\r\n      const templateCOls = widths.join(' ');\r\n      this.columnsWidth = templateCOls;\r\n    }\r\n    this.ref.detectChanges();\r\n  }\r\n\r\n  /** @internal */\r\n  @ViewChild(CdkVirtualScrollViewport) viewport?: CdkVirtualScrollViewport;\r\n  /** @internal */\r\n  @ViewChild('matTable', { read: ElementRef }) matTable?: ElementRef;\r\n  /** @internal */\r\n  @ViewChild(MatSort) sort?: MatSort;\r\n\r\n  /** @internal */\r\n  private additionalColumnDefs: ColumnDef[] = [];\r\n  /** @internal */\r\n  private _uniqueIdentifier?: string;\r\n  /** @internal */\r\n  private allSubscriptions?: Subscription;\r\n  /** @internal */\r\n  private _columnOrderBy: ColumnOrderBy | undefined;\r\n  /** @internal */\r\n  private selectable: Selectable = new Selectable();\r\n  /** @internal */\r\n  private _multipleSelectEnabled: boolean = false;\r\n\r\n  /** @internal */\r\n  allColumnHeaders?: string[];\r\n  /** @internal */\r\n  dataSource?: GridSelectionListDataSource;\r\n  /** @internal */\r\n  items: ILfSelectable[] = [];\r\n  /** @internal */\r\n  allColumnDefs: ColumnDef[] = [];\r\n  /** @internal */\r\n  columnsWidth: string | undefined;\r\n  /** @internal */\r\n  resizePosition: number = 0;\r\n  /** @internal */\r\n  _showHeader: boolean = false;\r\n  /** @internal */\r\n  currentFocusIndex: number = 0;\r\n\r\n  /** @internal */\r\n  constructor(\r\n    /** @internal */\r\n    private focusMonitor: FocusMonitor,\r\n    private ref: ChangeDetectorRef\r\n  ) {}\r\n\r\n  /** @internal */\r\n  ngAfterViewInit(): void {\r\n    this.dataSource = new GridSelectionListDataSource(this.items, this.viewport!, this.itemSize, this._pageSize);\r\n    const dataSourceSub = this.dataSource.checkForData.subscribe(() => {\r\n      this.scrollChanged.emit();\r\n    });\r\n    const dataOffsetSub = this.dataSource.offsetChange.subscribe((offset) => {\r\n      this.placeholderHeight = offset;\r\n    });\r\n    this.allSubscriptions?.add(dataSourceSub);\r\n    this.allSubscriptions?.add(dataOffsetSub);\r\n\r\n    if (this.columns.length > 1 || this.alwaysShowHeader === true) {\r\n      this._showHeader = true;\r\n    } else {\r\n      this._showHeader = false;\r\n    }\r\n    if (this.viewport?.elementRef.nativeElement) {\r\n      this.focusMonitor.monitor(this.viewport?.elementRef.nativeElement, true).subscribe((origin: FocusOrigin) => {\r\n        if (!origin || document.activeElement?.nodeName.toLowerCase() === 'cdk-virtual-scroll-viewport') {\r\n          this.itemFocused.emit(undefined);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.allSubscriptions?.unsubscribe();\r\n    this.focusMonitor.stopMonitoring(this.viewport!.elementRef.nativeElement);\r\n  }\r\n\r\n  clearSelectedValues(clearCached?: boolean) {\r\n    this.selectable.clearSelectedValues(this.items, clearCached);\r\n  }\r\n\r\n  placeholderWhen(index: number, _: any) {\r\n    return index === 0;\r\n  }\r\n\r\n\r\n  focus() {\r\n    this._focus();\r\n  }\r\n\r\n  sortData(sort: Sort) {\r\n    if (!sort.active || sort.direction === '') {\r\n      return;\r\n    }\r\n    const sortState: ColumnOrderBy = { columnId: sort.active, isDesc: sort.direction === 'desc' };\r\n    this._columnOrderBy = sortState;\r\n    this.refreshData.emit();\r\n  }\r\n\r\n  focusCurrentIndex() {\r\n    if (this.currentFocusIndex >= this.items.length) {\r\n      this.currentFocusIndex = 0;\r\n    }\r\n    if (!this.items[this.currentFocusIndex] || !this.items[this.currentFocusIndex]) {\r\n      this.viewport?.scrollToIndex(this.currentFocusIndex);\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  async onClickMatListOption(event: MouseEvent, option: ILfSelectable, index: number) {\r\n    let target: HTMLElement | null = event.target as HTMLElement;\r\n    let nodeName: string | undefined;\r\n    while (target != null && nodeName !== 'lf-list-option-component' && nodeName !== 'mat-checkbox') {\r\n      target = target.parentElement;\r\n      nodeName = target?.nodeName.toLowerCase();\r\n    }\r\n    if (nodeName === 'mat-checkbox') {\r\n      this.selectable.onItemClicked(event, option, this.items, true);\r\n    } else {\r\n      this.selectable.onItemClicked(event, option, this.items);\r\n    }\r\n    this.currentFocusIndex = index;\r\n    this.ref.detectChanges();\r\n\r\n    this.itemSelected.emit({ selected: option, selectedItems: this.selectable.selectedItems });\r\n  }\r\n\r\n  /** @internal */\r\n  onDblClick(event: MouseEvent | KeyboardEvent, item: ILfSelectable) {\r\n    if (item.isSelectable && !item.isSelected) {\r\n      this.selectable.onItemClicked(event, item, this.items, true);\r\n      this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });\r\n    }\r\n    this.itemDoubleClicked.emit(item.value);\r\n  }\r\n\r\n  /** @internal */\r\n  async onItemKeyDown(event: KeyboardEvent, item: ILfSelectable) {\r\n    if (\r\n      event.key === ' ' ||\r\n      event.key === 'Enter' ||\r\n      (event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown'))\r\n    ) {\r\n      if (event.key === 'Enter') {\r\n        this.selectable.onItemClicked(event, item, this.items);\r\n        this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });\r\n        this.onDblClick(event, item);\r\n        return;\r\n      }\r\n      this.selectable.onItemClicked(\r\n        event,\r\n        item,\r\n        this.items,\r\n        false,\r\n        event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown')\r\n      );\r\n      this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  onItemKeyUp(event: KeyboardEvent, item: ILfSelectable) {\r\n    if (event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown')) {\r\n      this.selectable.onItemClicked(\r\n        event,\r\n        item,\r\n        this.items,\r\n        false,\r\n        event.shiftKey && (event.key === 'ArrowUp' || event.key === 'ArrowDown')\r\n      );\r\n      this.itemSelected.emit({ selected: item, selectedItems: this.selectable.selectedItems });\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  onFocused(index: number) {\r\n    this.currentFocusIndex = index;\r\n    this.itemFocused.emit(this.items[index]?.value);\r\n  }\r\n\r\n  /** @internal */\r\n  onViewportKeyDown(event: KeyboardEvent) {\r\n    if (event.key === ' ' || event.key === 'ArrowUp' || event.key === 'ArrowDown') {\r\n      event.preventDefault();\r\n    }\r\n    if (this.viewport == null) {\r\n      return;\r\n    }\r\n    if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\r\n      const activeElement = document.activeElement;\r\n      if (\r\n        activeElement?.nodeName.toLowerCase() !== 'cdk-virtual-scroll-viewport' &&\r\n        activeElement?.nodeName.toLowerCase() !== 'tr'\r\n      ) {\r\n        return;\r\n      }\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n      if (activeElement?.nodeName.toLowerCase() === 'cdk-virtual-scroll-viewport') {\r\n        this.focusCurrentIndex();\r\n        const ele = this.viewport.elementRef.nativeElement.querySelector(\r\n          '#lf-row-' + this.currentFocusIndex\r\n        ) as HTMLElement;\r\n        (ele?.childNodes[0] as HTMLElement).focus();\r\n      } else {\r\n        const moveDirection = event.key === 'ArrowUp' ? -1 : 1;\r\n        this.currentFocusIndex = this.currentFocusIndex + moveDirection;\r\n        // Check if currentFocusIndex is out of bounds\r\n        if (this.currentFocusIndex < 0 || this.currentFocusIndex >= this.items.length) {\r\n          this.currentFocusIndex = this.currentFocusIndex - moveDirection;\r\n        }\r\n        const ele = this.viewport.elementRef.nativeElement.querySelector(\r\n          '#lf-row-' + this.currentFocusIndex\r\n        ) as HTMLElement;\r\n        ele?.focus();\r\n      }\r\n      if (!this._checkRowInView(this.currentFocusIndex)) {\r\n        // this way even if we scroll down we go back to the section we were\r\n        this.viewport.scrollToIndex(this.currentFocusIndex);\r\n      }\r\n    }\r\n  }\r\n\r\n  setInitialWidth() {\r\n    setTimeout(() => {\r\n      if (this.allColumnDefs.length > 0) {\r\n        const repositoryBrowserData: RepositoryBrowserData | undefined = this.getRepositoryBrowserData();\r\n        const tableEl = this.matTable?.nativeElement;\r\n        const widths: string[] = [];\r\n        this.allColumnDefs.forEach((col) => {\r\n          const columnWidth = repositoryBrowserData?.columns ? repositoryBrowserData?.columns[col.id] : undefined;\r\n          if (columnWidth) {\r\n            widths.push(columnWidth);\r\n          } else {\r\n            widths.push(col.defaultWidth);\r\n          }\r\n        });\r\n\r\n        if (this.matTable) {\r\n          const templateCOls = widths.join(' ');\r\n          this.columnsWidth = templateCOls;\r\n        }\r\n        this.ref.detectChanges();\r\n\r\n        const onlyColumnWidthAuto = this.columns.length === 1 && this.columnsWidth?.includes('auto');\r\n        if (onlyColumnWidthAuto) {\r\n          this.setDefaultWidths();\r\n        } else {\r\n          const containerWidth = this.viewport?.elementRef.nativeElement.getBoundingClientRect().width;\r\n          tableEl.style.width = containerWidth + 'px';\r\n          this.ref.detectChanges();\r\n          const widthsInPixel: string[] = [];\r\n\r\n          this.allColumnDefs.forEach((col) => {\r\n            const columnEls = Array.from(\r\n              this.viewport!.elementRef.nativeElement.getElementsByClassName('mat-column-' + col.id)\r\n            );\r\n            const columnWidthOffset = Math.max(...columnEls.map((c) => (c as HTMLDivElement).offsetWidth));\r\n            const minWidthPx = col.minWidthPx ?? COLUMN_MIN_WIDTH;\r\n            const columnWidthInPixel =\r\n              col.id !== 'select' ? Math.max(columnWidthOffset, minWidthPx) + 'px' : SELECT_COL.defaultWidth;\r\n            widthsInPixel.push(columnWidthInPixel);\r\n          });\r\n\r\n          if (this.matTable) {\r\n            const templateCOls = widthsInPixel.join(' ');\r\n            this.columnsWidth = templateCOls;\r\n          }\r\n\r\n          tableEl.style.width = 'fit-content';\r\n          this.ref.detectChanges();\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  private getRepositoryBrowserData(): RepositoryBrowserData | undefined {\r\n    if (this._uniqueIdentifier) {\r\n      const repositoryBrowserData = window.localStorage.getItem(this._uniqueIdentifier);\r\n      let asJSON: RepositoryBrowserData | undefined;\r\n      if (repositoryBrowserData) {\r\n        asJSON = JSON.parse(repositoryBrowserData);\r\n      }\r\n      return asJSON;\r\n    } else {\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  async resetCachedNodesAsync() {\r\n    await this.selectable.setSelectedNodesAsync(new Map<string, ILfSelectable>(), this.items, 0);\r\n    this.ref.detectChanges();\r\n    return this.selectable.selectedItems;\r\n  }\r\n\r\n  async setSelectedNodesAsync(\r\n    nodesToSelect: ILfSelectable[] | undefined,\r\n    checkForMoreDataCallback: () => Promise<ILfSelectable[] | undefined>,\r\n    maxFetchIterations: number\r\n  ): Promise<ILfSelectable[]> {\r\n    this.selectable.callback = checkForMoreDataCallback;\r\n    const idsToSelectable: Map<string, ILfSelectable> = new Map<string, ILfSelectable>(nodesToSelect?.map(v => [v.value.id, v]));\r\n    await this.selectable.setSelectedNodesAsync(idsToSelectable, this.items, maxFetchIterations);\r\n    this.ref.detectChanges();\r\n    return this.selectable.selectedItems;\r\n  }\r\n\r\n  /** @internal */\r\n  _computeRowId(index: number) {\r\n    return 'lf-row-' + index;\r\n  }\r\n\r\n  /** @internal */\r\n  _checkFocused(rowIndex: number) {\r\n    return this.currentFocusIndex === rowIndex;\r\n  }\r\n\r\n  /** @internal */\r\n  private _checkRowInView(currentFocusIndex: number) {\r\n    // is there an easier way to do this? -- check if currentFocusIndex is in viewport indices (rendered might be greater than viewable?)\r\n    if (this.viewport == null) {\r\n      return;\r\n    }\r\n    const rowEle = document.querySelector('#lf-row-' + currentFocusIndex);\r\n    if (rowEle === null) {\r\n      return false;\r\n    }\r\n    const rowEleRect = rowEle.getBoundingClientRect();\r\n    const scrollRect = this.viewport.elementRef.nativeElement.getBoundingClientRect();\r\n    const belowTop = rowEleRect.top >= scrollRect.top + (this._showHeader ? this.itemSize : 0);\r\n    const aboveBottom = rowEleRect.bottom <= scrollRect.bottom;\r\n    return belowTop && aboveBottom;\r\n  }\r\n\r\n  /** @internal */\r\n  private _focus(tries: number = 0) {\r\n    if (tries >= 10) {\r\n      return;\r\n    }\r\n    this.focusCurrentIndex();\r\n    const ele = this.viewport?.elementRef.nativeElement.querySelector(\r\n      '#lf-row-' + this.currentFocusIndex\r\n    ) as HTMLElement;\r\n    ele?.focus();\r\n  }\r\n\r\n  // column resizing\r\n\r\n  placeholderHeight: number = 0;\r\n\r\n  onColumnWidthChanges(width: number, index: number) {\r\n    this.updateRepositoryBrowserData(width, index);\r\n    this.setColumnWidthChanges(width, index);\r\n  }\r\n\r\n  private updateRepositoryBrowserData(width: number, index: number) {\r\n    if (this._uniqueIdentifier) {\r\n      let repoData: RepositoryBrowserData | undefined = this.getRepositoryBrowserData();\r\n      const key = this.allColumnDefs[index].id;\r\n      if (!repoData) {\r\n        repoData = {\r\n          columns: {},\r\n        };\r\n      } else if (!repoData.columns) {\r\n        repoData.columns = {};\r\n      }\r\n      repoData.columns[key] = width + 'px';\r\n      localStorage.setItem(this._uniqueIdentifier, JSON.stringify(repoData));\r\n    } else {\r\n      console.warn('Unable to save lf-selection-list column widths. Need to set uniqueIdentifier on lf-selection-list');\r\n    }\r\n  }\r\n\r\n  setColumnWidthChanges(width: number, index: number) {\r\n    const widths = this.columnsWidth ?? '';\r\n    const widthsA = widths.split(' ');\r\n    widthsA[index] = width + 'px';\r\n    const stringWidths = widthsA.join(' ');\r\n    this.columnsWidth = stringWidths;\r\n    if (this.matTable) {\r\n      this.matTable.nativeElement.style.width = 'fit-content';\r\n    }\r\n    this.ref.detectChanges();\r\n  }\r\n}\r\n","<!--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","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { ILfSelectable } from '@laserfiche/lf-ui-components/shared';\r\n\r\nexport interface ColumnOrderBy {\r\n  columnId: string;\r\n  isDesc: boolean;\r\n}\r\n\r\nexport interface ColumnDef {\r\n  id: string;\r\n  displayName: string;\r\n  defaultWidth: string;\r\n  minWidthPx?: number;\r\n  sortable?: boolean;\r\n  resizable?: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport interface SelectedItemEvent {\r\n  selected: ILfSelectable;\r\n  selectedItems: ILfSelectable[] | undefined;\r\n}\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { CUSTOM_ELEMENTS_SCHEMA, Injector, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {ScrollingModule} from '@angular/cdk/scrolling';\r\n\r\nimport { LfSelectionListComponent } from './lf-selection-list.component';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { ResizeColumnDirective } from './resize-column.directive';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    LfSelectionListComponent,\r\n    ResizeColumnDirective,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    MatCheckboxModule,\r\n    ScrollingModule,\r\n    MatTableModule,\r\n    MatSortModule\r\n  ],\r\n  bootstrap: [LfSelectionListComponent, ResizeColumnDirective],\r\n  exports: [LfSelectionListComponent],\r\n})\r\n\r\n/** @internal */\r\nexport class LfSelectionListModule { }\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nexport * from './lf-selection-list.component';\r\nexport * from './lf-selection-list-types';\r\n\r\nexport * from './lf-selection-list.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './lf-selection-list-public-api';\n"],"names":["i7.ResizeColumnDirective"],"mappings":"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"}