{"version":3,"file":"acorex-components-data-list.mjs","sources":["../../../../packages/components/data-list/src/lib/data-list.component.ts","../../../../packages/components/data-list/src/lib/data-list.component.html","../../../../packages/components/data-list/src/index.ts","../../../../packages/components/data-list/src/acorex-components-data-list.ts"],"sourcesContent":["import { AXDataSource, AXListDataSource, MXValueComponent } from '@acorex/cdk/common';\nimport { AXCheckBoxComponent } from '@acorex/components/check-box';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport {\n  Component,\n  computed,\n  effect,\n  EventEmitter,\n  input,\n  model,\n  OnInit,\n  Output,\n  signal,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n// Types for the component\nexport interface AXDataListItem {\n  id: string;\n  text: string;\n  description?: string;\n  disabled?: boolean;\n  tooltip?: string;\n  level?: number;\n  children?: AXDataListItem[];\n  expanded?: boolean;\n  [key: string]: any;\n}\n\nexport interface AXDataListConfig {\n  disabledField?: string;\n  tooltipField?: string;\n  textField?: string;\n  descriptionField?: string;\n  levelField?: string;\n  childrenField?: string;\n  expandedField?: string;\n}\n\nexport interface AXDataListSelectionChange {\n  selectedItems: AXDataListItem[];\n  selectedKeys: string[];\n  isMultiple: boolean;\n}\n\n@Component({\n  selector: 'ax-data-list',\n  templateUrl: './data-list.component.html',\n  styleUrls: ['./data-list.component.css'],\n\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n  imports: [CommonModule, FormsModule, ScrollingModule, AXTooltipDirective, AXCheckBoxComponent],\n})\nexport class AXDataListComponent extends MXValueComponent implements OnInit {\n  // Inputs\n  dataSource = input.required<AXDataSource<AXDataListItem>>();\n  config = input<AXDataListConfig>({});\n  multiple = input(false);\n  showCheckbox = input(true);\n  itemHeight = input(40);\n  isItemTruncated = input(true);\n  showItemTooltip = input(true);\n  disabledField = input<string>('disabled');\n  tooltipField = input<string>('tooltip');\n  textField = input<string>('text');\n  descriptionField = input<string>('description');\n  levelField = input<string>('level');\n  childrenField = input<string>('children');\n  expandedField = input<string>('expanded');\n\n  // Templates\n  itemTemplate = input<TemplateRef<any>>();\n  emptyTemplate = input<TemplateRef<any>>();\n  loadingTemplate = input<TemplateRef<any>>();\n\n  // Outputs\n  @Output() selectionChange = new EventEmitter<AXDataListSelectionChange>();\n  @Output() itemClick = new EventEmitter<AXDataListItem>();\n  @Output() itemDoubleClick = new EventEmitter<AXDataListItem>();\n  @Output() expandChange = new EventEmitter<{ item: AXDataListItem; expanded: boolean }>();\n\n  // ViewChild\n  @ViewChild(CdkVirtualScrollViewport) viewport!: CdkVirtualScrollViewport;\n\n  // Internal signals\n  protected loading = signal(false);\n  protected totalItems = signal(0);\n  protected selectedItems = signal<AXDataListItem[]>([]);\n  protected selectedKeys = signal<string[]>([]);\n  protected focusedIndex = signal(-1);\n  protected expandedItems = signal<Set<string>>(new Set());\n\n  // List data source for virtual scrolling\n  protected listDataSource: AXListDataSource<AXDataListItem> | null = null;\n\n  // Computed values\n  protected hasItems = computed(() => {\n    const dataSourceItems = this.listDataSource?.source?.cachedItems?.length > 0;\n    return dataSourceItems;\n  });\n  protected isEmpty = computed(() => {\n    const notLoading = !this.loading();\n    const noDataSourceItems = !this.listDataSource?.source?.cachedItems?.length;\n    return notLoading && noDataSourceItems;\n  });\n  protected isMultipleSelection = computed(() => this.multiple());\n  protected showCheckboxes = computed(() => this.showCheckbox());\n\n  // Selection model\n  public selectionModel = model<string | string[]>();\n\n  constructor() {\n    super();\n\n    // Effect to sync selection model with internal state\n    effect(() => {\n      const selection = this.selectionModel();\n      if (selection) {\n        if (Array.isArray(selection)) {\n          this.selectedKeys.set(selection);\n        } else {\n          this.selectedKeys.set([selection]);\n        }\n        this.updateSelectedItems();\n      }\n    });\n\n    // Effect to emit selection changes\n    effect(() => {\n      const selectedItems = this.selectedItems();\n      const selectedKeys = this.selectedKeys();\n      const isMultiple = this.isMultipleSelection();\n\n      if (selectedItems.length > 0 || selectedKeys.length > 0) {\n        this.selectionChange.emit({\n          selectedItems,\n          selectedKeys,\n          isMultiple,\n        });\n      }\n    });\n\n    // Effect to watch for dataSource changes and create listDataSource\n    effect(() => {\n      const dataSource = this.dataSource();\n      if (dataSource) {\n        this.listDataSource = new AXListDataSource<AXDataListItem>({\n          source: dataSource,\n          debounceTime: 100, // Add debounce to prevent too many page requests\n        });\n\n        // Set up subscriptions\n        this.setupDataSourceSubscription();\n      }\n    });\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    // Data loading is now handled by the effect watching dataSource changes\n  }\n\n  private setupDataSourceSubscription() {\n    if (!this.dataSource() || !this.listDataSource) return;\n\n    // Subscribe to data source changes\n    this.dataSource().onChanged.subscribe((data) => {\n      if (data && data.cachedItems) {\n        this.totalItems.set(data.totalCount || data.cachedItems.length);\n      }\n    });\n\n    this.dataSource().onLoadingChanged.subscribe((loading) => {\n      this.loading.set(loading);\n    });\n\n    // Load initial data - just trigger the first page load\n    // The AXListDataSource will handle subsequent pages automatically\n    this.dataSource().setPage(0);\n  }\n\n  // Selection management\n  protected selectItem(item: AXDataListItem, event?: Event) {\n    if (event && typeof event.stopPropagation === 'function') {\n      event.stopPropagation();\n    }\n\n    if (this.isItemDisabled(item)) return;\n\n    if (this.isMultipleSelection()) {\n      this.toggleMultipleSelection(item);\n    } else {\n      this.setSingleSelection(item);\n    }\n  }\n\n  protected toggleMultipleSelection(item: AXDataListItem) {\n    const currentKeys = this.selectedKeys();\n    const itemKey = this.getItemKey(item);\n\n    if (currentKeys.includes(itemKey)) {\n      this.selectedKeys.set(currentKeys.filter((key) => key !== itemKey));\n    } else {\n      this.selectedKeys.set([...currentKeys, itemKey]);\n    }\n\n    this.updateSelectedItems();\n  }\n\n  protected setSingleSelection(item: AXDataListItem) {\n    const itemKey = this.getItemKey(item);\n    this.selectedKeys.set([itemKey]);\n    this.updateSelectedItems();\n  }\n\n  protected deselectItem(item: AXDataListItem) {\n    const currentKeys = this.selectedKeys();\n    const itemKey = this.getItemKey(item);\n    const newKeys = currentKeys.filter((key) => key !== itemKey);\n    this.selectedKeys.set(newKeys);\n    this.updateSelectedItems();\n  }\n\n  protected updateSelectedItems() {\n    const keys = this.selectedKeys();\n    const dataSource = this.listDataSource?.source;\n    if (!dataSource) return;\n\n    const selected = dataSource.cachedItems.filter((item) => keys.includes(this.getItemKey(item)));\n    this.selectedItems.set(selected);\n\n    // Update selection model\n    if (this.isMultipleSelection()) {\n      this.selectionModel.set(keys);\n    } else {\n      this.selectionModel.set(keys[0] || '');\n    }\n  }\n\n  protected isItemSelected(item: AXDataListItem): boolean {\n    return this.selectedKeys().includes(this.getItemKey(item));\n  }\n\n  protected isItemDisabled(item: AXDataListItem): boolean {\n    const disabledField = this.disabledField();\n    if (!disabledField) return false;\n\n    const disabled = item[disabledField];\n    return Boolean(disabled);\n  }\n\n  protected getItemKey(item: AXDataListItem): string {\n    if (item.id !== undefined && item.id !== null) {\n      return String(item.id);\n    }\n\n    // Fallback to other potential key fields\n    if (item['key'] !== undefined && item['key'] !== null) {\n      return String(item['key']);\n    }\n\n    if (item['value'] !== undefined && item['value'] !== null) {\n      return String(item['value']);\n    }\n\n    // Last resort: use the item itself as a string\n    return String(item);\n  }\n\n  // Tree grouping\n  protected toggleExpanded(item: AXDataListItem, event: Event) {\n    if (event && typeof event.stopPropagation === 'function') {\n      event.stopPropagation();\n    }\n\n    if (!this.hasChildren(item)) return;\n\n    const currentExpanded = this.expandedItems();\n    const itemKey = this.getItemKey(item);\n\n    if (currentExpanded.has(itemKey)) {\n      currentExpanded.delete(itemKey);\n    } else {\n      currentExpanded.add(itemKey);\n    }\n\n    this.expandedItems.set(new Set(currentExpanded));\n    this.expandChange.emit({ item, expanded: currentExpanded.has(itemKey) });\n  }\n\n  protected hasChildren(item: AXDataListItem): boolean {\n    const childrenField = this.childrenField();\n    if (!childrenField) return false;\n\n    const children = item[childrenField];\n    return Array.isArray(children) && children.length > 0;\n  }\n\n  protected isExpanded(item: AXDataListItem): boolean {\n    const expandedField = this.expandedField();\n    if (expandedField) {\n      const expanded = item[expandedField];\n      if (expanded !== undefined && expanded !== null) {\n        return Boolean(expanded);\n      }\n    }\n\n    return this.expandedItems().has(this.getItemKey(item));\n  }\n\n  protected getItemLevel(item: AXDataListItem): number {\n    const levelField = this.levelField();\n    if (!levelField) return 0;\n\n    const level = item[levelField];\n    return level !== undefined && level !== null ? Number(level) : 0;\n  }\n\n  // Keyboard navigation\n  protected onKeyDown(event: KeyboardEvent, item: AXDataListItem, index: number) {\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        this.focusNextItem(index);\n        break;\n      case 'ArrowUp':\n        event.preventDefault();\n        this.focusPreviousItem(index);\n        break;\n      case 'Enter':\n      case ' ':\n        event.preventDefault();\n        this.selectItem(item);\n        break;\n      case 'Escape':\n        this.focusedIndex.set(-1);\n        break;\n    }\n  }\n\n  protected focusNextItem(currentIndex: number) {\n    const dataSource = this.listDataSource?.source;\n    if (!dataSource || dataSource.cachedItems.length === 0) return;\n\n    const nextIndex = Math.min(currentIndex + 1, dataSource.cachedItems.length - 1);\n    this.focusedIndex.set(nextIndex);\n    this.scrollToIndex(nextIndex);\n  }\n\n  protected focusPreviousItem(currentIndex: number) {\n    const dataSource = this.listDataSource?.source;\n    if (!dataSource || dataSource.cachedItems.length === 0) return;\n\n    const prevIndex = Math.max(currentIndex - 1, 0);\n    this.focusedIndex.set(prevIndex);\n    this.scrollToIndex(prevIndex);\n  }\n\n  protected scrollToIndex(index: number) {\n    if (this.viewport && typeof index === 'number' && index >= 0) {\n      this.viewport.scrollToIndex(index);\n    }\n  }\n\n  // Item interaction\n  protected onItemClick(item: AXDataListItem, event: Event) {\n    if (this.isItemDisabled(item)) return;\n\n    this.itemClick.emit(item);\n    this.selectItem(item, event);\n  }\n\n  protected onCheckboxChange(item: AXDataListItem, checked: boolean) {\n    if (this.isItemDisabled(item)) return;\n\n    if (checked) {\n      this.selectItem(item);\n    } else {\n      this.deselectItem(item);\n    }\n  }\n\n  protected onCheckboxClick(event: Event) {\n    if (typeof event.stopPropagation === 'function') {\n      event.stopPropagation();\n    }\n  }\n\n  protected onItemDoubleClick(item: AXDataListItem) {\n    if (this.isItemDisabled(item)) return;\n\n    this.itemDoubleClick.emit(item);\n  }\n\n  // Utility methods\n  protected getItemText(item: AXDataListItem): string {\n    const textField = this.textField();\n    if (textField) {\n      const text = item[textField];\n      if (text !== undefined && text !== null) {\n        return String(text);\n      }\n    }\n\n    return item.text || '';\n  }\n\n  protected getItemDescription(item: AXDataListItem): string {\n    const descriptionField = this.descriptionField();\n    if (descriptionField) {\n      const description = item[descriptionField];\n      if (description !== undefined && description !== null) {\n        return String(description);\n      }\n    }\n\n    return item.description || '';\n  }\n\n  protected getItemTooltip(item: AXDataListItem): string {\n    const tooltipField = this.tooltipField();\n    if (tooltipField) {\n      const tooltip = item[tooltipField];\n      if (tooltip !== undefined && tooltip !== null) {\n        return String(tooltip);\n      }\n    }\n\n    return item.tooltip || '';\n  }\n\n  protected shouldShowTooltip(item: AXDataListItem): boolean {\n    return this.showItemTooltip() && !!this.getItemTooltip(item);\n  }\n\n  // Track by function for virtual scrolling\n  protected trackByFn = (index: number, item: AXDataListItem): string => {\n    if (!item) {\n      return `loading-${index}`;\n    }\n    return this.getItemKey(item);\n  };\n}\n","<div class=\"ax-data-list\" [class.ax-data-list--loading]=\"loading()\">\n  <!-- Loading State -->\n  @if (loading()) {\n    <div class=\"ax-data-list__loading\">\n      <ng-container *ngTemplateOutlet=\"loadingTemplate() || defaultLoadingTemplate\"></ng-container>\n    </div>\n  }\n\n  <!-- Empty State -->\n  @if (isEmpty()) {\n    <div class=\"ax-data-list__empty\">\n      <ng-container *ngTemplateOutlet=\"emptyTemplate() || defaultEmptyTemplate\"></ng-container>\n    </div>\n  }\n\n  <!-- List Content -->\n  @if (hasItems() && listDataSource !== null) {\n    <div class=\"ax-data-list__content\">\n      <cdk-virtual-scroll-viewport\n        [itemSize]=\"itemHeight()\"\n        class=\"ax-data-list__viewport\"\n        [class.ax-data-list__viewport--truncated]=\"isItemTruncated()\"\n      >\n        <ng-container *cdkVirtualFor=\"let item of listDataSource; let i = index; trackBy: trackByFn\">\n          @if (item) {\n            <div\n              class=\"ax-data-list__item\"\n              [class.ax-data-list__item--selected]=\"isItemSelected(item)\"\n              [class.ax-data-list__item--disabled]=\"isItemDisabled(item)\"\n              [class.ax-data-list__item--focused]=\"focusedIndex() === i\"\n              [class]=\"'ax-data-list__item--level-' + getItemLevel(item)\"\n              [style.height.px]=\"itemHeight()\"\n              (click)=\"onItemClick(item, $event)\"\n              (dblclick)=\"onItemDoubleClick(item)\"\n              (keydown)=\"onKeyDown($event, item, i)\"\n              tabindex=\"0\"\n              role=\"listitem\"\n              [attr.aria-selected]=\"isItemSelected(item)\"\n              [attr.aria-disabled]=\"isItemDisabled(item)\"\n              [attr.aria-level]=\"getItemLevel(item) + 1\"\n            >\n              <!-- Checkbox -->\n              @if (showCheckboxes()) {\n                <div class=\"ax-data-list__checkbox\" (click)=\"onCheckboxClick($event)\">\n                  <ax-check-box\n                    [value]=\"isItemSelected(item)\"\n                    [disabled]=\"isItemDisabled(item)\"\n                    (valueChange)=\"onCheckboxChange(item, $event)\"\n                  >\n                  </ax-check-box>\n                </div>\n              }\n\n              <!-- Expand/Collapse Button for Tree Items -->\n              @if (hasChildren(item)) {\n                <div\n                  class=\"ax-data-list__expand-button\"\n                  [class.ax-data-list__expand-button--expanded]=\"isExpanded(item)\"\n                  (click)=\"toggleExpanded(item, $event)\"\n                  role=\"button\"\n                  tabindex=\"0\"\n                  [attr.aria-expanded]=\"isExpanded(item)\"\n                >\n                  <svg class=\"ax-data-list__expand-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                    <path d=\"M7 10l5 5 5-5z\" />\n                  </svg>\n                </div>\n              }\n\n              <!-- Item Content -->\n              <div class=\"ax-data-list__content-wrapper\">\n                <!-- Custom Item Template -->\n                @if (itemTemplate()) {\n                  <ng-container\n                    *ngTemplateOutlet=\"\n                      itemTemplate();\n                      context: {\n                        $implicit: item,\n                        index: i,\n                        selected: isItemSelected(item),\n                        disabled: isItemDisabled(item),\n                      }\n                    \"\n                  ></ng-container>\n                } @else {\n                  <ng-container *ngTemplateOutlet=\"defaultItemTemplate\"></ng-container>\n                }\n\n                <!-- Default Item Template -->\n                <ng-template #defaultItemTemplate>\n                  <div\n                    class=\"ax-data-list__text\"\n                    [class.ax-data-list__text--truncated]=\"isItemTruncated()\"\n                    [axTooltip]=\"shouldShowTooltip(item) ? getItemTooltip(item) : null\"\n                    [axTooltipDisabled]=\"!shouldShowTooltip(item)\"\n                  >\n                    {{ getItemText(item) }}\n                  </div>\n\n                  @if (getItemDescription(item)) {\n                    <div\n                      class=\"ax-data-list__description\"\n                      [class.ax-data-list__description--truncated]=\"isItemTruncated()\"\n                    >\n                      {{ getItemDescription(item) }}\n                    </div>\n                  }\n                </ng-template>\n              </div>\n            </div>\n          } @else {\n            <!-- Loading skeleton for null items -->\n            <div class=\"ax-data-list__item ax-data-list__item--loading\" [style.height.px]=\"itemHeight()\">\n              <div class=\"ax-data-list__loading-skeleton\">\n                <div class=\"ax-data-list__skeleton-checkbox\"></div>\n                <div class=\"ax-data-list__skeleton-content\">\n                  <div class=\"ax-data-list__skeleton-text\"></div>\n                  <div class=\"ax-data-list__skeleton-description\"></div>\n                </div>\n              </div>\n            </div>\n          }\n        </ng-container>\n      </cdk-virtual-scroll-viewport>\n    </div>\n  }\n</div>\n\n<!-- Default Loading Template -->\n<ng-template #defaultLoadingTemplate>\n  <div class=\"ax-data-list__loading-default\">\n    <div class=\"ax-data-list__loading-spinner\"></div>\n    <span>Loading...</span>\n  </div>\n</ng-template>\n\n<!-- Default Empty Template -->\n<ng-template #defaultEmptyTemplate>\n  <div class=\"ax-data-list__empty-default\">\n    <svg class=\"ax-data-list__empty-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n      <path\n        d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z\"\n      />\n    </svg>\n    <span>No items to display</span>\n  </div>\n</ng-template>\n","// Secondary entry point for @acorex/components/data-list\n\nexport * from './lib/data-list.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}