{"version":3,"file":"shival99-z-ui-components-z-autocomplete.mjs","sources":["../../../../libs/core-ui/components/z-autocomplete/directives/z-autocomplete-option.directive.ts","../../../../libs/core-ui/components/z-autocomplete/z-autocomplete.types.ts","../../../../libs/core-ui/components/z-autocomplete/z-autocomplete.variants.ts","../../../../libs/core-ui/components/z-autocomplete/z-autocomplete.component.ts","../../../../libs/core-ui/components/z-autocomplete/z-autocomplete.component.html","../../../../libs/core-ui/components/z-autocomplete/shival99-z-ui-components-z-autocomplete.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\nimport { ZAutocompleteOptionContext } from '../z-autocomplete.types';\n\n@Directive({\n  selector: '[z-autocomplete-option], [zAutocompleteOption]',\n  standalone: true,\n})\nexport class ZAutocompleteOptionDirective<T = unknown> {\n  public readonly templateRef = inject(TemplateRef<ZAutocompleteOptionContext<T>>);\n}\n","import type { Signal, TemplateRef } from '@angular/core';\nimport type { ZIcon } from '@shival99/z-ui/components/z-icon';\nimport type { ZAsyncOptionsConfig } from '@shival99/z-ui/utils';\n\nexport interface ZAutocompleteOption<T = unknown> {\n  label: string;\n  value: T;\n  disabled?: boolean;\n  description?: string;\n  icon?: ZIcon;\n}\n\nexport interface ZAutocompleteConfig<T = unknown> {\n  /** Số ký tự tối thiểu trước khi bắt đầu search hoặc gọi async.load. */\n  minLength: number;\n  /** Thời gian chờ sau khi người dùng ngừng nhập rồi mới phát zOnSearch/call async.load, tính bằng mili giây. */\n  debounceTime: number;\n  /** Giới hạn số option hiển thị sau khi filter; đặt 0 để không giới hạn. */\n  maxDisplayed: number;\n  /** Bật highlight phần text khớp với keyword trong label của option. */\n  highlightMatch: boolean;\n  /** i18n key hoặc text hiển thị khi đã nhập keyword nhưng không có kết quả. */\n  emptyMessage: string;\n  /** i18n key hoặc text hiển thị khi chưa có dữ liệu ban đầu. */\n  noDataMessage: string;\n  /** Tự đóng dropdown sau khi chọn option. */\n  closeOnSelect: boolean;\n  /** Chiều cao mặc định của một option, dùng cho virtual scroll và layout dropdown. */\n  optionHeight: number;\n  /** Chiều cao tối đa của dropdown, tính bằng pixel. */\n  dropdownMaxHeight: number;\n  /** Bỏ filter local khi options đã được xử lý từ server qua zOnSearch. */\n  serverSearch: boolean;\n  /** Config để component tự search, load-more, loading và append options. */\n  async?: ZAsyncOptionsConfig<ZAutocompleteOption<T>>;\n}\n\nexport const Z_AUTOCOMPLETE_DEFAULT_CONFIG: Omit<ZAutocompleteConfig, 'async'> = {\n  minLength: 1,\n  debounceTime: 0,\n  maxDisplayed: 0,\n  highlightMatch: true,\n  emptyMessage: 'i18n_z_ui_autocomplete_no_results',\n  noDataMessage: 'i18n_z_ui_autocomplete_no_data',\n  closeOnSelect: true,\n  optionHeight: 36,\n  dropdownMaxHeight: 280,\n  serverSearch: false,\n};\n\nexport type ZAutocompleteSize = 'sm' | 'default' | 'lg';\n\nexport type ZAutocompleteType = 'default' | 'address_bar';\n\nexport interface ZAutocompleteState {\n  focused: boolean;\n  touched: boolean;\n  dirty: boolean;\n  disabled: boolean;\n  readonly: boolean;\n  open: boolean;\n}\n\nexport interface ZAutocompleteCommitEvent {\n  value: string;\n  source: 'enter' | 'blur';\n}\n\nexport interface ZAutocompleteLoadMoreEvent {\n  currentCount: number;\n  scrollTop: number;\n}\n\nexport interface ZAutocompleteOptionContext<T = unknown> {\n  $implicit: ZAutocompleteOption<T>;\n  active: boolean;\n}\n\nexport interface ZAutocompleteControl<T = unknown> {\n  focus: () => void;\n  blur: () => void;\n  clear: () => void;\n  reset: () => void;\n  open: () => void;\n  close: () => void;\n  setValue: (value: string) => void;\n  value: Signal<string>;\n  /** Signal with selected options. Autocomplete returns an empty or one-item array. */\n  selected: Signal<ZAutocompleteOption<T>[]>;\n  /**\n   * @deprecated Use individual event outputs (zOnFocus, zOnBlur, etc.) instead.\n   * Will be removed in a future version.\n   */\n  state: Signal<ZAutocompleteState>;\n}\n\nexport type ZAutocompleteOptionTemplate<T = unknown> = TemplateRef<ZAutocompleteOptionContext<T>>;\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zAutocompleteInputVariants = cva(\n  [\n    'flex w-full items-center rounded-sm border border-input bg-white shadow-xs',\n    'transition-[border-color,box-shadow,background-color,color,opacity,border-radius] duration-200',\n    'dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n    'outline-none',\n    'text-sm',\n  ],\n  {\n    variants: {\n      zSize: {\n        sm: 'h-8 px-2 gap-2 text-sm',\n        default: 'h-9 px-2.5 gap-2 text-sm',\n        lg: 'h-10 px-3 gap-2.5 text-sm',\n      },\n      zStatus: {\n        default: 'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n        open: 'border-ring',\n        error:\n          'border-destructive! ring-destructive/20 ring-[3px] focus-within:border-destructive! focus-within:ring-destructive/30',\n        disabled: 'opacity-50 cursor-not-allowed bg-muted! text-muted-foreground',\n        readonly: 'cursor-default bg-muted/50 text-muted-foreground',\n      },\n    },\n    defaultVariants: {\n      zSize: 'default',\n      zStatus: 'default',\n    },\n  }\n);\n\nexport type ZAutocompleteInputVariants = VariantProps<typeof zAutocompleteInputVariants>;\n\nexport const zAutocompleteOptionVariants = cva(\n  'px-2 py-1.5 cursor-pointer transition-colors text-sm rounded-sm outline-none',\n  {\n    variants: {\n      customTemplate: {\n        true: 'block h-auto whitespace-normal',\n        false: 'flex items-center gap-2 whitespace-nowrap',\n      },\n      active: {\n        true: 'bg-primary/15 text-primary',\n        false: 'hover:bg-primary/10 hover:text-foreground',\n      },\n      disabled: {\n        true: 'opacity-50 cursor-not-allowed pointer-events-none',\n        false: '',\n      },\n    },\n    defaultVariants: {\n      customTemplate: false,\n      active: false,\n      disabled: false,\n    },\n  }\n);\n\nexport type ZAutocompleteOptionVariants = VariantProps<typeof zAutocompleteOptionVariants>;\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChild,\n  DestroyRef,\n  effect,\n  ElementRef,\n  forwardRef,\n  inject,\n  Injector,\n  input,\n  type OnInit,\n  output,\n  signal,\n  TemplateRef,\n  untracked,\n  viewChild,\n  viewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { type AbstractControl, ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { injectVirtualizer } from '@shival99/angular-virtual';\nimport { ZEmptyComponent } from '@shival99/z-ui/components/z-empty';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport type { ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZLoadingComponent } from '@shival99/z-ui/components/z-loading';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport type { ZPopoverControl, ZPopoverPosition } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZHighlightPipe, ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport {\n  zUuid,\n  zMergeClasses,\n  zTransform,\n  zRemoveVietnamese,\n  zCreateEvent,\n  zMergeAsyncOptions,\n  zResolveAsyncOptionsHasMore,\n  zResolveAsyncSelectedOptions,\n  zToAsyncOptionsObservable,\n  Z_ASYNC_OPTIONS_DEFAULT_PAGE_SIZE,\n  type ZEvent,\n} from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { debounceTime, distinctUntilChanged, finalize, Subject, type Subscription } from 'rxjs';\nimport { ZAutocompleteOptionDirective } from './directives/z-autocomplete-option.directive';\nimport type {\n  ZAutocompleteOption,\n  ZAutocompleteConfig,\n  ZAutocompleteSize,\n  ZAutocompleteType,\n  ZAutocompleteState,\n  ZAutocompleteControl,\n  ZAutocompleteOptionTemplate,\n  ZAutocompleteCommitEvent,\n  ZAutocompleteLoadMoreEvent,\n} from './z-autocomplete.types';\nimport { Z_AUTOCOMPLETE_DEFAULT_CONFIG } from './z-autocomplete.types';\nimport { zAutocompleteInputVariants, zAutocompleteOptionVariants } from './z-autocomplete.variants';\n\n@Component({\n  selector: 'z-autocomplete',\n  imports: [\n    FormsModule,\n    NgClass,\n    NgTemplateOutlet,\n    ZIconComponent,\n    ZLoadingComponent,\n    ZPopoverDirective,\n    ZTooltipDirective,\n    ZEmptyComponent,\n    ZHighlightPipe,\n    ZSafeHtmlPipe,\n  ],\n  standalone: true,\n  templateUrl: './z-autocomplete.component.html',\n  styleUrl: './z-autocomplete.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ZAutocompleteComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  exportAs: 'zAutocomplete',\n})\nexport class ZAutocompleteComponent<T = unknown> implements OnInit, ControlValueAccessor {\n  private readonly _injector = inject(Injector);\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _query$ = new Subject<string>();\n\n  protected readonly triggerRef = viewChild<ElementRef<HTMLDivElement>>('triggerEl');\n  protected readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n  protected readonly dropdownTpl = viewChild<TemplateRef<unknown>>('dropdownTpl');\n  protected readonly virtualScrollRef = viewChild<ElementRef<HTMLDivElement>>('virtualScrollElement');\n  protected readonly optionsContainerRef = viewChild<ElementRef<HTMLDivElement>>('optionsContainer');\n  protected readonly loadMoreSentinelRef = viewChild<ElementRef<HTMLDivElement>>('loadMoreSentinel');\n  protected readonly virtualOptionElements = viewChildren<ElementRef<HTMLDivElement>>('virtualOptionEl');\n  protected readonly customOptionDirective = contentChild(ZAutocompleteOptionDirective<T>);\n\n  public readonly class = input<ClassValue>('');\n  public readonly zOptions = input<ZAutocompleteOption<T>[]>([]);\n  public readonly zConfig = input<Partial<ZAutocompleteConfig<T>>>({});\n  public readonly zSize = input<ZAutocompleteSize>('default');\n  public readonly zType = input<ZAutocompleteType>('default');\n  public readonly zLabel = input<string>('');\n  public readonly zLabelClass = input<string>('');\n  public readonly zPlaceholder = input('');\n  public readonly zDisabled = input(false, { transform: zTransform });\n  public readonly zReadonly = input(false, { transform: zTransform });\n  public readonly zLoading = input(false, { transform: zTransform });\n  public readonly zLoadingOutline = input(false, { transform: zTransform });\n  public readonly zRequired = input(false, { transform: zTransform });\n  public readonly zPrefix = input<ZIcon | ''>('');\n  public readonly zSuffix = input<ZIcon | ''>('');\n  public readonly zAllowClear = input(true, { transform: zTransform });\n  public readonly zVirtualScroll = input(false, { transform: zTransform });\n  public readonly zDynamicSize = input(true, { transform: zTransform });\n  public readonly zOptionHeight = input<number>(36);\n  public readonly zHeightExpand = input<number>(280);\n  public readonly zMaxVisible = input<number | null>(null);\n  public readonly zResetOnSelect = input(true, { transform: zTransform });\n  public readonly zEmptyText = input<string>('');\n  public readonly zEmptyIcon = input<ZIcon>('lucideSearchX');\n  public readonly zNoDataText = input<string>('');\n  public readonly zNoDataIcon = input<ZIcon>('lucidePackageOpen');\n  public readonly zAllowCustomValue = input(false, { transform: zTransform });\n  public readonly zDebounceTime = input<number>(200);\n  public readonly zLoadingMore = input(false, { transform: zTransform });\n  public readonly zEnableLoadMore = input(false, { transform: zTransform });\n  public readonly zScrollDistance = input<number>(2);\n  public readonly zKey = input<string>('');\n  public readonly zOptionTemplate = input<ZAutocompleteOptionTemplate<T> | null>(null);\n\n  public readonly zOnSearch = output<string>();\n  public readonly zOnLoadMore = output<ZAutocompleteLoadMoreEvent>();\n  public readonly zOnSelect = output<ZAutocompleteOption<T>>();\n  public readonly zOnEnter = output<string>();\n  public readonly zOnCommit = output<ZAutocompleteCommitEvent>();\n  public readonly zValueChange = output<string>();\n  public readonly zOnBlur = output<FocusEvent>();\n  public readonly zOnFocus = output<FocusEvent>();\n  public readonly zControl = output<ZAutocompleteControl<T>>();\n  public readonly zEvent = output<ZEvent>();\n\n  private readonly _value = signal<string>('');\n  private readonly _disabled = signal(false);\n  private readonly _formControl = signal<AbstractControl | null>(null);\n  private readonly _popoverControl = signal<ZPopoverControl | null>(null);\n  private readonly _selectedOption = signal<ZAutocompleteOption<T> | null>(null);\n  private readonly _asyncOptions = signal<ZAutocompleteOption<T>[]>([]);\n  private readonly _asyncKeyword = signal('');\n  private readonly _asyncPage = signal(1);\n  private readonly _asyncHasMore = signal(false);\n  private readonly _asyncLoading = signal(false);\n  private readonly _asyncLoadingMore = signal(false);\n\n  protected readonly uiState = signal({\n    isOpen: false,\n    isFocused: false,\n    touched: false,\n    dirty: false,\n  });\n\n  protected readonly actualPosition = signal<ZPopoverPosition>('bottom');\n  protected readonly autocompleteId = zUuid('z-autocomplete');\n  protected readonly dropdownId = `${this.autocompleteId}-dropdown`;\n  protected readonly inputValue = signal('');\n  protected readonly debouncedQuery = signal('');\n  protected readonly searchQuery = signal('');\n  protected readonly activeIndex = signal(-1);\n  protected readonly dropdownWidth = signal(0);\n\n  private readonly _pendingSearch = signal(false);\n  private _localLoadingTimeout: ReturnType<typeof setTimeout> | null = null;\n  private _loadMoreObserver: IntersectionObserver | null = null;\n  private _virtualScrollListener: (() => void) | null = null;\n  private _asyncLoadSubscription: Subscription | null = null;\n  private _asyncRequestId = 0;\n  private _lastFilteredOptionsLength = 0;\n  private _shouldScrollActiveOption = false;\n\n  /** Stores input value before keyboard navigation for ESC revert */\n  private _valueBeforeNavigation: string | null = null;\n\n  protected readonly virtualizer = injectVirtualizer(() => ({\n    scrollElement: this.virtualScrollRef(),\n    count: this.filteredOptions().length,\n    estimateSize: () => this.effectiveOptionHeight(),\n    measureElement: (element: Element) => element.getBoundingClientRect().height,\n    overscan: 5,\n  }));\n\n  private readonly _measureVirtualItems = effect(() => {\n    if (!this.zDynamicSize()) {\n      return;\n    }\n\n    const elements = this.virtualOptionElements();\n    for (const el of elements) {\n      this.virtualizer.measureElement(el.nativeElement);\n    }\n  });\n\n  protected readonly config = computed<ZAutocompleteConfig<T>>(() => ({\n    ...Z_AUTOCOMPLETE_DEFAULT_CONFIG,\n    ...this.zConfig(),\n  }));\n\n  protected readonly hasAsyncOptions = computed(() => !!this.config().async?.load);\n  protected readonly asyncSelectedOptions = computed(() => zResolveAsyncSelectedOptions(this.config().async));\n  protected readonly sourceOptions = computed(() => {\n    if (!this.hasAsyncOptions()) {\n      return this.zOptions();\n    }\n\n    return zMergeAsyncOptions(this._asyncOptions(), this.asyncSelectedOptions(), this.config().async?.dedupeBy);\n  });\n\n  protected readonly isLoading = computed(() => this.zLoading() || this._asyncLoading());\n  protected readonly isLoadingMore = computed(() => this.zLoadingMore() || this._asyncLoadingMore());\n  protected readonly canLoadMore = computed(() =>\n    this.hasAsyncOptions() ? this._asyncHasMore() : this.zEnableLoadMore()\n  );\n\n  protected readonly isDisabled = computed(() => this._disabled() || this.zDisabled());\n  protected readonly isReadonly = computed(() => this.zReadonly());\n  protected readonly isInteractionDisabled = computed(() => this.isDisabled() || this.isReadonly() || this.zLoading());\n\n  protected readonly effectiveOptionHeight = computed(() => this.zOptionHeight() || this.config().optionHeight);\n  protected readonly effectiveHeightExpand = computed(() => this.zHeightExpand() || this.config().dropdownMaxHeight);\n\n  protected readonly effectiveEmptyText = computed(() => this.zEmptyText() || this.config().emptyMessage);\n  protected readonly effectiveNoDataText = computed(() => this.zNoDataText() || this.config().noDataMessage);\n\n  protected readonly effectiveDebounceTime = computed(() => this.zConfig().debounceTime ?? this.zDebounceTime());\n  protected readonly effectiveOptionTemplate = computed(() => {\n    const directive = this.customOptionDirective();\n    if (directive) {\n      return directive.templateRef;\n    }\n\n    return this.zOptionTemplate();\n  });\n\n  protected readonly hasCustomOptionTemplate = computed(() => this.effectiveOptionTemplate() !== null);\n\n  protected readonly selected = computed<ZAutocompleteOption<T>[]>(() => {\n    const option = this._selectedOption();\n    if (!option) {\n      return [];\n    }\n\n    return [option];\n  });\n\n  protected readonly highlightQuery = computed(() =>\n    this.zType() === 'address_bar' ? this.searchQuery() : this.debouncedQuery()\n  );\n\n  /**\n   * Local-mode loading state after debounce to avoid quick flicker.\n   * Server mode relies only on zLoading from parent.\n   */\n  protected readonly isLoadingState = computed(() => {\n    if (this.config().serverSearch || this.hasAsyncOptions()) {\n      return false;\n    }\n\n    const hasInput = this.inputValue().trim() !== '';\n    return hasInput && this._pendingSearch();\n  });\n\n  protected readonly isPositionTop = computed(() => {\n    const pos = this.actualPosition();\n    return pos.startsWith('top');\n  });\n\n  protected readonly shouldUseVirtualScroll = computed(() => {\n    if (this.zVirtualScroll()) {\n      return true;\n    }\n\n    if (this.hasCustomOptionTemplate()) {\n      return false;\n    }\n\n    if (this.canLoadMore()) {\n      return false;\n    }\n\n    const maxVisible = this.zMaxVisible();\n    if (maxVisible !== null && this.sourceOptions().length > maxVisible) {\n      return true;\n    }\n\n    return this.sourceOptions().length > 50;\n  });\n\n  protected readonly filteredOptions = computed(() => {\n    const options = this.sourceOptions();\n    const cfg = this.config();\n    const allowCustom = this.zAllowCustomValue();\n    const query = this.zType() === 'address_bar' ? this.searchQuery() : this.debouncedQuery();\n\n    // If server search is enabled, skip local filtering - just apply maxDisplayed limit\n    if (cfg.serverSearch || this.hasAsyncOptions()) {\n      let result = options;\n      if (cfg.maxDisplayed && options.length > cfg.maxDisplayed) {\n        result = options.slice(0, cfg.maxDisplayed);\n      }\n\n      // Allow custom value: if no results from server, show typed text as option\n      if (allowCustom && result.length === 0 && query.trim() !== '') {\n        return [{ label: query.trim(), value: query.trim() as T }];\n      }\n\n      return result;\n    }\n\n    if (!query || query.trim() === '') {\n      if (cfg.maxDisplayed && options.length > cfg.maxDisplayed) {\n        return options.slice(0, cfg.maxDisplayed);\n      }\n      return options;\n    }\n\n    const normalizedQuery = zRemoveVietnamese(query.toLowerCase());\n    let filtered = options.filter(opt => {\n      const normalizedLabel = zRemoveVietnamese(opt.label.toLowerCase());\n      return normalizedLabel.includes(normalizedQuery);\n    });\n\n    if (cfg.maxDisplayed && filtered.length > cfg.maxDisplayed) {\n      filtered = filtered.slice(0, cfg.maxDisplayed);\n    }\n\n    if (allowCustom && filtered.length === 0 && query.trim() !== '') {\n      return [{ label: query.trim(), value: query.trim() as T }];\n    }\n\n    return filtered;\n  });\n\n  protected readonly optionViews = computed(() =>\n    this.filteredOptions().map((option, index) => ({\n      option,\n      index,\n      trackKey: `${String(this._getOptionKey(option))}::${index}`,\n    }))\n  );\n\n  protected readonly hasValue = computed(() => {\n    const value = this.inputValue();\n    return value !== null && value !== undefined && value.trim() !== '';\n  });\n\n  protected readonly currentStatus = computed(() => {\n    if (this.isDisabled()) {\n      return 'disabled';\n    }\n\n    if (this.isReadonly()) {\n      return 'readonly';\n    }\n\n    if (this.uiState().isOpen) {\n      return 'open';\n    }\n\n    return 'default';\n  });\n\n  protected readonly inputClasses = computed(() =>\n    zMergeClasses(\n      zAutocompleteInputVariants({\n        zSize: this.zSize(),\n        zStatus: this.currentStatus() as 'default' | 'open' | 'error' | 'disabled' | 'readonly',\n      }),\n      this.zLoading() && this.zLoadingOutline() ? 'z-loading-outline-active !ring-ring/50 !ring-[3px]' : '',\n      this.class()\n    )\n  );\n\n  public readonly state = computed<ZAutocompleteState>(() => ({\n    focused: this.uiState().isFocused,\n    touched: this.uiState().touched,\n    dirty: this.uiState().dirty,\n    disabled: this.isDisabled(),\n    readonly: this.isReadonly(),\n    open: this.uiState().isOpen,\n  }));\n\n  private _onChange: (value: string) => void = () => void 0;\n  private _onTouched: () => void = () => void 0;\n  private _ngControl: NgControl | null = null;\n  private _isNavigationFilling = false;\n\n  constructor() {\n    effect(onCleanup => {\n      const triggerEl = this.triggerRef()?.nativeElement;\n      if (!triggerEl) {\n        return;\n      }\n\n      const observer = new ResizeObserver(() => {\n        this.dropdownWidth.set(triggerEl.getBoundingClientRect().width);\n      });\n\n      observer.observe(triggerEl);\n      this.dropdownWidth.set(triggerEl.getBoundingClientRect().width);\n\n      onCleanup(() => {\n        observer.disconnect();\n      });\n    });\n\n    effect(() => {\n      const options = this.filteredOptions();\n      const { isOpen } = this.uiState();\n\n      if (!isOpen || options.length === 0) {\n        this._lastFilteredOptionsLength = options.length;\n        return;\n      }\n\n      const previousLength = this._lastFilteredOptionsLength;\n      const currentIndex = untracked(() => this.activeIndex());\n      this._lastFilteredOptionsLength = options.length;\n\n      if (currentIndex < 0 || currentIndex >= options.length || options.length <= previousLength) {\n        this.activeIndex.set(0);\n      }\n    });\n\n    effect(() => {\n      const idx = this.activeIndex();\n      const { isOpen } = this.uiState();\n\n      if (!isOpen || idx < 0) {\n        return;\n      }\n\n      if (!this._shouldScrollActiveOption || this.shouldUseVirtualScroll() || this.canLoadMore()) {\n        return;\n      }\n\n      this._shouldScrollActiveOption = false;\n\n      const container = this.optionsContainerRef()?.nativeElement;\n      if (!container) {\n        return;\n      }\n\n      const options = container.querySelectorAll('.z-autocomplete-option');\n      const activeOption = options[idx] as HTMLElement;\n      if (activeOption) {\n        activeOption.scrollIntoView({ block: 'nearest' });\n      }\n    });\n\n    effect(onCleanup => {\n      const sentinel = this.loadMoreSentinelRef();\n      const { isOpen } = this.uiState();\n      const optionsCount = this.filteredOptions().length;\n\n      if (!sentinel || !isOpen || optionsCount === 0 || !this.canLoadMore()) {\n        this._cleanupLoadMoreObserver();\n        return;\n      }\n\n      this._setupLoadMoreObserver();\n\n      onCleanup(() => {\n        this._cleanupLoadMoreObserver();\n      });\n    });\n\n    effect(onCleanup => {\n      const { isOpen } = this.uiState();\n      const useVirtual = this.shouldUseVirtualScroll();\n      const optionsCount = this.filteredOptions().length;\n\n      if (!isOpen || !useVirtual || optionsCount === 0) {\n        this._cleanupVirtualScrollListener();\n        return;\n      }\n\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          this._setupVirtualScrollLoadMore();\n        });\n      });\n\n      onCleanup(() => {\n        this._cleanupVirtualScrollListener();\n      });\n    });\n  }\n\n  ngOnInit(): void {\n    this._setupDebounce();\n    this._emitControl();\n    queueMicrotask(() => {\n      try {\n        this._ngControl = this._injector.get(NgControl, null);\n        if (this._ngControl?.control) {\n          this._formControl.set(this._ngControl.control);\n        }\n      } catch {\n        this._ngControl = null;\n      }\n    });\n  }\n\n  public writeValue(value: string): void {\n    this._value.set(value ?? '');\n    this.inputValue.set(value ?? '');\n    this.debouncedQuery.set(value ?? '');\n    if (this.zType() === 'address_bar') {\n      this.searchQuery.set(value ?? '');\n    }\n  }\n\n  public registerOnChange(fn: (value: string) => void): void {\n    this._onChange = fn;\n  }\n\n  public registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  public setDisabledState(isDisabled: boolean): void {\n    this._disabled.set(isDisabled);\n  }\n\n  protected onInput(event: Event): void {\n    const { value } = event.target as HTMLInputElement;\n    this._clearLocalLoadingTimer();\n    this._pendingSearch.set(false);\n    this.inputValue.set(value);\n    this._value.set(value);\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this._onChange(value);\n    if (!this._isNavigationFilling) {\n      this._query$.next(value);\n    }\n\n    this.zValueChange.emit(value);\n\n    if (!this.uiState().isOpen) {\n      this._openPanel();\n    }\n\n    this._selectedOption.set(null);\n  }\n\n  protected onFocus(event: FocusEvent): void {\n    if (this.isReadonly()) {\n      (event.target as HTMLInputElement).blur();\n      return;\n    }\n\n    this.uiState.update(s => ({ ...s, isFocused: true }));\n    this.zOnFocus.emit(event);\n    this.zEvent.emit(zCreateEvent('focus', event));\n    this._openPanel();\n  }\n\n  protected onInputClick(): void {\n    if (this.uiState().isOpen) {\n      return;\n    }\n    this._openPanel();\n  }\n\n  protected onBlur(event: FocusEvent): void {\n    this.uiState.update(s => ({ ...s, isFocused: false }));\n    this.zOnBlur.emit(event);\n    this.zEvent.emit(zCreateEvent('blur', event));\n\n    if (this.uiState().dirty) {\n      this.uiState.update(s => ({ ...s, touched: true }));\n    }\n\n    this._onTouched();\n    const currentValue = this.inputValue();\n    this.zOnCommit.emit({ value: currentValue, source: 'blur' });\n  }\n\n  protected onKeydown(event: KeyboardEvent): void {\n    if (this.isInteractionDisabled()) {\n      return;\n    }\n\n    const { isOpen } = this.uiState();\n    const options = this.filteredOptions();\n    const currentValue = this.inputValue();\n    const isAddressBarMode = this.zType() === 'address_bar';\n\n    if (event.key === 'Enter') {\n      event.preventDefault();\n\n      if (!isOpen) {\n        this._openPanel();\n        return;\n      }\n\n      this._handleEnterKey(options, currentValue);\n      return;\n    }\n\n    if (!isOpen) {\n      if (event.key === 'ArrowDown') {\n        event.preventDefault();\n        this._openPanel();\n      }\n      return;\n    }\n\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        if (this._valueBeforeNavigation === null) {\n          this._valueBeforeNavigation = currentValue;\n        }\n        this._shouldScrollActiveOption = true;\n        this.activeIndex.update(i => (i < options.length - 1 ? i + 1 : 0));\n        if (isAddressBarMode) {\n          this._fillInputFromActiveOption();\n        }\n        break;\n\n      case 'ArrowUp':\n        event.preventDefault();\n        if (this._valueBeforeNavigation === null) {\n          this._valueBeforeNavigation = currentValue;\n        }\n        this._shouldScrollActiveOption = true;\n        this.activeIndex.update(i => (i > 0 ? i - 1 : options.length - 1));\n        if (isAddressBarMode) {\n          this._fillInputFromActiveOption();\n        }\n        break;\n\n      case 'Escape':\n        event.preventDefault();\n        if (isAddressBarMode && this._valueBeforeNavigation !== null) {\n          this._revertToValueBeforeNavigation();\n        }\n        this._valueBeforeNavigation = null;\n        this._closePanel();\n        break;\n\n      case 'Tab':\n        this._valueBeforeNavigation = null;\n        this._closePanel();\n        break;\n    }\n  }\n\n  private _handleEnterKey(options: ZAutocompleteOption<T>[], currentValue: string): void {\n    const trimmedValue = currentValue.trim();\n    this._valueBeforeNavigation = null;\n    this.zOnCommit.emit({ value: trimmedValue, source: 'enter' });\n\n    if (this.zType() === 'address_bar') {\n      this._closePanel();\n      return;\n    }\n\n    const idx = this.activeIndex();\n    if (options.length > 0) {\n      const selectedIdx = idx >= 0 && idx < options.length ? idx : 0;\n      this.selectOption(options[selectedIdx]);\n      return;\n    }\n\n    if (this.zAllowCustomValue() && trimmedValue) {\n      this.zOnEnter.emit(trimmedValue);\n      this._resetInput();\n    }\n  }\n\n  private _fillInputFromActiveOption(): void {\n    const idx = this.activeIndex();\n    const options = this.filteredOptions();\n\n    if (idx < 0 || idx >= options.length) {\n      return;\n    }\n\n    const option = options[idx];\n    this._isNavigationFilling = true;\n    this.inputValue.set(option.label);\n    this._value.set(option.label);\n    this._onChange(option.label);\n    this.zValueChange.emit(option.label);\n\n    const inputEl = this.inputRef()?.nativeElement;\n    if (inputEl) {\n      inputEl.value = option.label;\n    }\n\n    setTimeout(() => {\n      this._isNavigationFilling = false;\n    }, 0);\n  }\n\n  private _revertToValueBeforeNavigation(): void {\n    if (this._valueBeforeNavigation === null) {\n      return;\n    }\n\n    const value = this._valueBeforeNavigation;\n    this._isNavigationFilling = true;\n    this.inputValue.set(value);\n    this._value.set(value);\n    this._onChange(value);\n    this.zValueChange.emit(value);\n\n    if (this.zType() === 'address_bar') {\n      this.searchQuery.set(value);\n    }\n\n    const inputEl = this.inputRef()?.nativeElement;\n    if (inputEl) {\n      inputEl.value = value;\n    }\n\n    this._valueBeforeNavigation = null;\n    setTimeout(() => {\n      this._isNavigationFilling = false;\n    }, 0);\n  }\n\n  private _resetInput(): void {\n    if (!this.zResetOnSelect()) {\n      this._closePanel();\n      this.activeIndex.set(-1);\n      return;\n    }\n\n    this.inputValue.set('');\n    this._value.set('');\n    this._onChange('');\n    this.zValueChange.emit('');\n    if (!this.hasAsyncOptions()) {\n      this._query$.next('');\n    }\n    this._closePanel();\n    this.activeIndex.set(-1);\n  }\n\n  protected onPopoverControl(control: ZPopoverControl): void {\n    this._popoverControl.set(control);\n  }\n\n  protected onPopoverShow(): void {\n    this.uiState.update(s => ({ ...s, isOpen: true }));\n    this._resetOptionsScrollTop();\n    this._loadAsyncOptionsOnFocus();\n\n    setTimeout(() => {\n      this.inputRef()?.nativeElement.focus();\n    }, 50);\n  }\n\n  protected onPopoverHideStart(): void {\n    this.uiState.update(s => ({ ...s, isOpen: false }));\n    this.activeIndex.set(-1);\n    this._clearLocalLoadingTimer();\n    this._pendingSearch.set(false);\n    this.debouncedQuery.set('');\n    if (!this.hasAsyncOptions()) {\n      this._query$.next('');\n    }\n  }\n\n  protected onPopoverHideEnd(): void {\n    this.actualPosition.set('bottom');\n  }\n\n  protected onPositionChange(position: ZPopoverPosition): void {\n    this.actualPosition.set(position);\n  }\n\n  protected selectOption(option: ZAutocompleteOption<T>): void {\n    if (option.disabled) {\n      return;\n    }\n\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this.zOnSelect.emit(option);\n    this._selectedOption.set(option);\n\n    const newValue = this.zResetOnSelect() ? '' : option.label;\n    this.inputValue.set(newValue);\n    this._value.set(newValue);\n    this.debouncedQuery.set(newValue);\n    this._onChange(newValue);\n    this.zValueChange.emit(newValue);\n    this._valueBeforeNavigation = null;\n\n    if (this.config().closeOnSelect) {\n      this._closePanel();\n    }\n\n    this.activeIndex.set(-1);\n  }\n\n  protected clearInput(event: MouseEvent): void {\n    event.stopPropagation();\n    event.preventDefault();\n\n    this.inputValue.set('');\n    this._value.set('');\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this._onChange('');\n    this.zValueChange.emit('');\n    this._selectedOption.set(null);\n    this._closePanel();\n    this._clearLocalLoadingTimer();\n    this._pendingSearch.set(false);\n    this.debouncedQuery.set('');\n\n    if (this.zType() === 'address_bar') {\n      this.searchQuery.set('');\n    }\n\n    if (!this.hasAsyncOptions()) {\n      this._query$.next('');\n    }\n    this.zOnCommit.emit({ value: '', source: 'blur' });\n    this._resetAsyncOptions();\n    setTimeout(() => {\n      this.inputRef()?.nativeElement.focus();\n    });\n  }\n\n  protected getOptionClasses(option: ZAutocompleteOption<T>, index: number): string {\n    return zAutocompleteOptionVariants({\n      customTemplate: this.hasCustomOptionTemplate(),\n      active: this.activeIndex() === index,\n      disabled: option.disabled ?? false,\n    });\n  }\n\n  protected trackByValue = (index: number, option: ZAutocompleteOption<T>): unknown => {\n    const key = this._getOptionKey(option);\n    return `${String(key)}::${index}`;\n  };\n\n  public focus(): void {\n    this.inputRef()?.nativeElement.focus();\n  }\n\n  public blur(): void {\n    this.inputRef()?.nativeElement.blur();\n  }\n\n  public clear(): void {\n    this.inputValue.set('');\n    this._value.set('');\n    this.debouncedQuery.set('');\n    this._onChange('');\n    this.zValueChange.emit('');\n    this._selectedOption.set(null);\n    this._closePanel();\n    this._clearLocalLoadingTimer();\n    this._pendingSearch.set(false);\n    this._resetAsyncOptions();\n    if (this.zType() === 'address_bar') {\n      this.searchQuery.set('');\n    }\n  }\n\n  public reset(): void {\n    this.clear();\n    this.uiState.update(s => ({ ...s, touched: false, dirty: false }));\n  }\n\n  public open(): void {\n    this._openPanel();\n  }\n\n  public close(): void {\n    this._closePanel();\n  }\n\n  public setValue(value: string): void {\n    this._value.set(value);\n    this.inputValue.set(value);\n    this.debouncedQuery.set(value);\n    this._selectedOption.set(null);\n    this._onChange(value);\n    if (this.zType() === 'address_bar') {\n      this.searchQuery.set(value);\n    }\n  }\n\n  private _openPanel(): void {\n    if (this.isInteractionDisabled()) {\n      return;\n    }\n\n    this._popoverControl()?.show();\n  }\n\n  private _closePanel(): void {\n    this._popoverControl()?.close();\n  }\n\n  private _setupDebounce(): void {\n    this._query$\n      .pipe(debounceTime(this.effectiveDebounceTime()), distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))\n      .subscribe(query => {\n        if (this.zType() === 'address_bar') {\n          this.searchQuery.set(query);\n        }\n\n        this.debouncedQuery.set(query);\n        this.zOnSearch.emit(query);\n\n        if (this.hasAsyncOptions()) {\n          this._loadAsyncOptions(query, false);\n          return;\n        }\n\n        if (this.config().serverSearch) {\n          return;\n        }\n\n        this._clearLocalLoadingTimer();\n        this._pendingSearch.set(true);\n        this._localLoadingTimeout = setTimeout(() => {\n          this._pendingSearch.set(false);\n          this._localLoadingTimeout = null;\n        }, 100);\n      });\n  }\n\n  private _loadAsyncOptionsOnFocus(): void {\n    const asyncConfig = this.config().async;\n    if (!asyncConfig?.loadOnFocus) {\n      return;\n    }\n\n    const keyword = this.inputValue().trim();\n    if (this._asyncKeyword() === keyword && this._asyncOptions().length > 0) {\n      return;\n    }\n\n    this._loadAsyncOptions(keyword, false);\n  }\n\n  private _loadAsyncOptions(keyword: string, append: boolean): void {\n    const asyncConfig = this.config().async;\n    if (!asyncConfig) {\n      return;\n    }\n\n    const normalizedKeyword = keyword.trim();\n    const pageSize = asyncConfig.pageSize ?? Z_ASYNC_OPTIONS_DEFAULT_PAGE_SIZE;\n    const { minLength } = this.config();\n    const canLoadEmptyOnFocus = asyncConfig.loadOnFocus && normalizedKeyword.length === 0;\n\n    if (!append && normalizedKeyword.length < minLength && !canLoadEmptyOnFocus) {\n      this._resetAsyncOptions();\n      return;\n    }\n\n    if (append && (!this._asyncHasMore() || this._asyncLoading() || this._asyncLoadingMore())) {\n      return;\n    }\n\n    const page = append ? this._asyncPage() + 1 : 1;\n    const requestId = ++this._asyncRequestId;\n    const scrollTopBeforeAppend = append ? this._getAsyncOptionsScrollTop() : null;\n\n    if (!append) {\n      this._asyncLoadSubscription?.unsubscribe();\n      this._asyncKeyword.set(normalizedKeyword);\n      this._asyncLoading.set(true);\n      this._asyncHasMore.set(false);\n    } else {\n      this._asyncLoadingMore.set(true);\n    }\n\n    let result: ReturnType<typeof asyncConfig.load>;\n    try {\n      result = asyncConfig.load({\n        keyword: normalizedKeyword,\n        page,\n        pageSize,\n      });\n    } catch (error) {\n      this._handleAsyncOptionsError(error, append);\n      return;\n    }\n\n    this._asyncLoadSubscription = zToAsyncOptionsObservable(result)\n      .pipe(\n        finalize(() => {\n          if (requestId !== this._asyncRequestId) {\n            return;\n          }\n\n          this._asyncLoading.set(false);\n          this._asyncLoadingMore.set(false);\n        }),\n        takeUntilDestroyed(this._destroyRef)\n      )\n      .subscribe({\n        next: response => {\n          if (requestId !== this._asyncRequestId) {\n            return;\n          }\n\n          const nextItems = response.items ?? [];\n          const previousCount = this._asyncOptions().length;\n          const mergedOptions = append\n            ? zMergeAsyncOptions(this._asyncOptions(), nextItems, asyncConfig.dedupeBy)\n            : zMergeAsyncOptions([], nextItems, asyncConfig.dedupeBy);\n          const hasNewItems = mergedOptions.length > previousCount;\n\n          if (append && !hasNewItems) {\n            this._asyncHasMore.set(false);\n            this._restoreAsyncOptionsScrollTop(scrollTopBeforeAppend);\n            return;\n          }\n\n          this._asyncOptions.set(mergedOptions);\n          this._asyncPage.set(page);\n          this._asyncHasMore.set(\n            append && !hasNewItems ? false : zResolveAsyncOptionsHasMore(response, pageSize, mergedOptions.length)\n          );\n          if (append) {\n            this._restoreAsyncOptionsScrollTop(scrollTopBeforeAppend);\n            return;\n          }\n\n          this._resetOptionsScrollTop();\n        },\n        error: error => {\n          if (requestId !== this._asyncRequestId) {\n            return;\n          }\n\n          this._handleAsyncOptionsError(error, append);\n        },\n      });\n  }\n\n  private _handleAsyncOptionsError(error: unknown, append: boolean): void {\n    console.error('ZAutocomplete async options load failed:', error);\n    if (!append) {\n      this._asyncOptions.set([]);\n      this._asyncPage.set(1);\n    }\n    this._asyncHasMore.set(false);\n    this._asyncLoading.set(false);\n    this._asyncLoadingMore.set(false);\n  }\n\n  private _getAsyncOptionsScrollTop(): number | null {\n    return this._getOptionsScrollElement()?.scrollTop ?? null;\n  }\n\n  private _restoreAsyncOptionsScrollTop(scrollTop: number | null): void {\n    if (scrollTop === null) {\n      return;\n    }\n\n    requestAnimationFrame(() => {\n      const scrollElement = this._getOptionsScrollElement();\n\n      if (scrollElement) {\n        scrollElement.scrollTop = scrollTop;\n      }\n    });\n  }\n\n  private _resetOptionsScrollTop(attempt = 0): void {\n    requestAnimationFrame(() => {\n      const scrollElement = this._getOptionsScrollElement();\n      if (!scrollElement && attempt < 3) {\n        this._resetOptionsScrollTop(attempt + 1);\n        return;\n      }\n\n      if (!scrollElement) {\n        return;\n      }\n\n      if (this.shouldUseVirtualScroll()) {\n        this.virtualizer.scrollToOffset(0);\n      }\n\n      scrollElement.scrollTop = 0;\n    });\n  }\n\n  private _getOptionsScrollElement(): HTMLElement | null {\n    if (this.shouldUseVirtualScroll()) {\n      return this.virtualScrollRef()?.nativeElement ?? null;\n    }\n\n    return this.optionsContainerRef()?.nativeElement ?? null;\n  }\n\n  private _resetAsyncOptions(): void {\n    this._asyncLoadSubscription?.unsubscribe();\n    this._asyncRequestId++;\n    this._asyncOptions.set([]);\n    this._asyncKeyword.set('');\n    this._asyncPage.set(1);\n    this._asyncHasMore.set(false);\n    this._asyncLoading.set(false);\n    this._asyncLoadingMore.set(false);\n  }\n\n  private _clearLocalLoadingTimer(): void {\n    if (!this._localLoadingTimeout) {\n      return;\n    }\n\n    clearTimeout(this._localLoadingTimeout);\n    this._localLoadingTimeout = null;\n  }\n\n  private _setupLoadMoreObserver(): void {\n    this._cleanupLoadMoreObserver();\n\n    const sentinel = this.loadMoreSentinelRef()?.nativeElement;\n    const container = this.optionsContainerRef()?.nativeElement;\n\n    if (!sentinel || !container) {\n      return;\n    }\n\n    this._loadMoreObserver = new IntersectionObserver(\n      entries => {\n        const entry = entries[0];\n        if (entry?.isIntersecting && !this.isLoadingMore()) {\n          this._handleLoadMore(container.scrollTop);\n        }\n      },\n      {\n        root: container,\n        rootMargin: '100px',\n        threshold: 0,\n      }\n    );\n\n    this._loadMoreObserver.observe(sentinel);\n  }\n\n  private _cleanupLoadMoreObserver(): void {\n    if (!this._loadMoreObserver) {\n      return;\n    }\n\n    this._loadMoreObserver.disconnect();\n    this._loadMoreObserver = null;\n  }\n\n  private _setupVirtualScrollLoadMore(): void {\n    this._cleanupVirtualScrollListener();\n\n    const scrollElement = this.virtualScrollRef()?.nativeElement;\n    if (!scrollElement) {\n      return;\n    }\n\n    const handleScroll = () => {\n      if (this.isLoadingMore()) {\n        return;\n      }\n\n      const { scrollTop, scrollHeight, clientHeight } = scrollElement;\n      const threshold = clientHeight * this.zScrollDistance();\n      const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n\n      if (distanceFromBottom <= threshold) {\n        this._handleLoadMore(scrollTop);\n      }\n    };\n\n    scrollElement.addEventListener('scroll', handleScroll);\n    this._virtualScrollListener = () => {\n      scrollElement.removeEventListener('scroll', handleScroll);\n    };\n  }\n\n  private _cleanupVirtualScrollListener(): void {\n    if (!this._virtualScrollListener) {\n      return;\n    }\n\n    this._virtualScrollListener();\n    this._virtualScrollListener = null;\n  }\n\n  private _handleLoadMore(scrollTop: number): void {\n    if (this.hasAsyncOptions()) {\n      if (!this.canLoadMore()) {\n        return;\n      }\n\n      this._loadAsyncOptions(this._asyncKeyword(), true);\n      return;\n    }\n\n    this.zOnLoadMore.emit({\n      currentCount: this.filteredOptions().length,\n      scrollTop,\n    });\n  }\n\n  private _emitControl(): void {\n    this.zControl.emit({\n      focus: () => this.focus(),\n      blur: () => this.blur(),\n      clear: () => this.clear(),\n      reset: () => this.reset(),\n      open: () => this.open(),\n      close: () => this.close(),\n      setValue: (val: string) => this.setValue(val),\n      value: this._value.asReadonly(),\n      selected: this.selected,\n      state: this.state,\n    });\n  }\n\n  private _getOptionKey(option: ZAutocompleteOption<T>): unknown {\n    const key = this.zKey();\n    if (key && key in option) {\n      return (option as unknown as Record<string, unknown>)[key];\n    }\n\n    if (key && typeof option.value === 'object' && option.value !== null && key in option.value) {\n      return (option.value as Record<string, unknown>)[key];\n    }\n\n    return option.value;\n  }\n}\n","<div class=\"z-autocomplete-wrapper relative flex w-full flex-col gap-2\">\n  @if (zLabel()) {\n    <label [for]=\"autocompleteId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n      {{ zLabel() }}\n      @if (zRequired()) {\n        <span class=\"text-destructive! ml-0.5\">*</span>\n      }\n    </label>\n  }\n\n  <div\n    #triggerEl\n    z-popover\n    [zPopoverContent]=\"dropdownTpl\"\n    [zOffset]=\"0\"\n    [zDisabled]=\"isInteractionDisabled()\"\n    zPopoverWidth=\"trigger\"\n    zPopoverTrigger=\"manual\"\n    zPosition=\"bottom\"\n    zClass=\"border-0 shadow-none bg-transparent p-0\"\n    (zControl)=\"onPopoverControl($event)\"\n    (zShow)=\"onPopoverShow()\"\n    (zHideStart)=\"onPopoverHideStart()\"\n    (zHide)=\"onPopoverHideEnd()\"\n    (zPositionChange)=\"onPositionChange($event)\"\n    class=\"z-autocomplete-trigger\"\n    [class]=\"inputClasses()\"\n    z-tooltip\n    [zContent]=\"inputValue()\"\n    zTooltipTrigger=\"hover\"\n    zTooltipPosition=\"top\"\n    [zTooltipDisabled]=\"uiState().isFocused || uiState().isOpen || !hasValue()\"\n    [zTriggerElement]=\"inputEl\"\n    [class.z-autocomplete-open]=\"uiState().isOpen\"\n    [class.z-autocomplete-open-top]=\"uiState().isOpen && isPositionTop()\"\n    [class.z-autocomplete-open-bottom]=\"uiState().isOpen && !isPositionTop()\"\n    role=\"combobox\"\n    [attr.aria-expanded]=\"uiState().isOpen\"\n    [attr.aria-haspopup]=\"'listbox'\"\n    [attr.aria-controls]=\"dropdownId\">\n    @if (zPrefix()) {\n      <z-icon [zType]=\"zPrefix() || 'lucideSearch'\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n    }\n\n    <input\n      #inputEl\n      [id]=\"autocompleteId\"\n      type=\"text\"\n      class=\"z-autocomplete-input placeholder:text-muted-foreground min-w-0 flex-1 overflow-hidden bg-transparent text-ellipsis whitespace-nowrap outline-none\"\n      [class.text-sm]=\"zSize() === 'sm' || zSize() === 'default'\"\n      [placeholder]=\"zPlaceholder()\"\n      [disabled]=\"isDisabled()\"\n      [readOnly]=\"isReadonly()\"\n      [value]=\"inputValue()\"\n      (mousedown)=\"isReadonly() && $event.preventDefault()\"\n      (input)=\"onInput($event)\"\n      (focus)=\"onFocus($event)\"\n      (blur)=\"onBlur($event)\"\n      (click)=\"onInputClick()\"\n      (keydown)=\"onKeydown($event)\"\n      autocomplete=\"off\"\n      autocorrect=\"off\"\n      spellcheck=\"false\" />\n\n    @if (isLoading() || isLoadingState() || isLoadingMore()) {\n      <z-icon zType=\"lucideLoaderCircle\" zSize=\"16\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n    } @else {\n      @if (zAllowClear() && hasValue() && !isDisabled() && !isReadonly()) {\n        <button\n          type=\"button\"\n          class=\"text-muted-foreground hover:text-foreground flex shrink-0 cursor-pointer items-center justify-center transition-colors\"\n          (mousedown)=\"clearInput($event)\"\n          tabindex=\"-1\">\n          <z-icon zType=\"lucideX\" zSize=\"18\" class=\"cursor-pointer!\" />\n        </button>\n      }\n\n      @if (zSuffix()) {\n        <z-icon [zType]=\"zSuffix() || 'lucideSearch'\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n      }\n    }\n  </div>\n</div>\n\n<ng-template #dropdownTpl let-close=\"close\">\n  <div\n    [id]=\"dropdownId\"\n    class=\"z-autocomplete-dropdown bg-popover border-ring overflow-hidden border shadow-[var(--z-popover-shadow)]\"\n    [class.z-autocomplete-dropdown-bottom]=\"!isPositionTop()\"\n    [class.rounded-b-sm]=\"!isPositionTop()\"\n    [class.rounded-t-sm]=\"isPositionTop()\"\n    [class.border-t-0]=\"!isPositionTop()\"\n    [class.border-b-0]=\"isPositionTop()\"\n    [style.width.px]=\"dropdownWidth()\"\n    role=\"listbox\"\n    (mousedown)=\"$event.preventDefault()\">\n    @if (isLoading() || isLoadingState()) {\n      <div\n        class=\"z-autocomplete-content-state flex flex-col items-center justify-center\"\n        [style.minHeight.px]=\"effectiveHeightExpand()\">\n        <z-loading [zLoading]=\"true\" zSize=\"default\" />\n      </div>\n    } @else {\n      @if (filteredOptions().length === 0) {\n        <!-- Empty State -->\n        <div\n          class=\"z-autocomplete-content-state flex flex-col items-center justify-center p-1\"\n          [style.minHeight.px]=\"effectiveHeightExpand()\">\n          @if (inputValue().trim() !== '') {\n            <!-- Searched but no results -->\n            <z-empty [zIcon]=\"zEmptyIcon()\" zSize=\"sm\" [zMessage]=\"effectiveEmptyText()\" />\n          } @else {\n            <!-- No data initially -->\n            <z-empty [zIcon]=\"zNoDataIcon()\" zSize=\"sm\" [zMessage]=\"effectiveNoDataText()\" />\n          }\n        </div>\n      } @else if (shouldUseVirtualScroll()) {\n        <!-- Virtual Scroll Mode -->\n        <div\n          #virtualScrollElement\n          class=\"z-autocomplete-content-state z-autocomplete-options z-autocomplete-virtual-scroll relative overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n          [style.height.px]=\"effectiveHeightExpand()\">\n          <div class=\"z-autocomplete-virtual-inner relative\" [style.height.px]=\"virtualizer.getTotalSize()\">\n            @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n              @let opt = filteredOptions()[virtualItem.index];\n              @let isActive = activeIndex() === virtualItem.index;\n              <div\n                #virtualOptionEl\n                class=\"z-autocomplete-option absolute right-0 left-0 min-w-0\"\n                [ngClass]=\"getOptionClasses(opt, virtualItem.index)\"\n                [attr.data-index]=\"virtualItem.index\"\n                [style.display]=\"hasCustomOptionTemplate() ? 'block' : null\"\n                [style.height.px]=\"zDynamicSize() ? null : effectiveOptionHeight()\"\n                [style.minHeight.px]=\"zDynamicSize() ? effectiveOptionHeight() : null\"\n                [style.overflow]=\"hasCustomOptionTemplate() ? 'visible' : null\"\n                [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\"\n                [attr.aria-selected]=\"isActive\"\n                role=\"option\"\n                (mouseenter)=\"activeIndex.set(virtualItem.index)\"\n                (click)=\"selectOption(opt)\">\n                @if (effectiveOptionTemplate()) {\n                  <ng-container\n                    *ngTemplateOutlet=\"effectiveOptionTemplate()!; context: { $implicit: opt, active: isActive }\" />\n                } @else {\n                  @if (opt.icon) {\n                    <z-icon [zType]=\"opt.icon\" zSize=\"16\" class=\"shrink-0\" />\n                  }\n                  <div class=\"min-w-0 flex-1\">\n                    <span\n                      class=\"block min-w-0 truncate\"\n                      z-tooltip\n                      [zContent]=\"opt.label\"\n                      zPosition=\"top\"\n                      [zHideDelay]=\"0\"\n                      [zOffset]=\"5\"\n                      [zArrow]=\"false\"\n                      [zTriggerElement]=\"virtualOptionEl\"\n                      [innerHTML]=\"\n                        config().highlightMatch ? (opt.label | zHighlight: highlightQuery() | zSafeHtml) : opt.label\n                      \"></span>\n                    @if (opt.description) {\n                      <span class=\"text-muted-foreground block min-w-0 truncate text-xs\">{{ opt.description }}</span>\n                    }\n                  </div>\n                }\n              </div>\n            }\n          </div>\n        </div>\n      } @else {\n        <!-- Normal Scroll Mode -->\n        <div\n          #optionsContainer\n          class=\"z-autocomplete-content-state z-autocomplete-options flex flex-col gap-0.75 overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n          [style.minHeight.px]=\"effectiveHeightExpand()\"\n          [style.maxHeight.px]=\"effectiveHeightExpand()\">\n          @for (item of optionViews(); track item.trackKey) {\n            @let opt = item.option;\n            @let i = item.index;\n            @let isActive = activeIndex() === i;\n            <div\n              #optionEl2\n              class=\"z-autocomplete-option relative min-w-0\"\n              [ngClass]=\"getOptionClasses(opt, i)\"\n              [style.display]=\"hasCustomOptionTemplate() ? 'block' : null\"\n              [style.minHeight.px]=\"hasCustomOptionTemplate() ? null : effectiveOptionHeight()\"\n              [style.overflow]=\"hasCustomOptionTemplate() ? 'visible' : null\"\n              [attr.aria-selected]=\"isActive\"\n              role=\"option\"\n              (mouseenter)=\"activeIndex.set(i)\"\n              (click)=\"selectOption(opt)\">\n              @if (effectiveOptionTemplate()) {\n                <ng-container\n                  *ngTemplateOutlet=\"effectiveOptionTemplate()!; context: { $implicit: opt, active: isActive }\" />\n              } @else {\n                @if (opt.icon) {\n                  <z-icon [zType]=\"opt.icon\" zSize=\"16\" class=\"shrink-0\" />\n                }\n                <div class=\"min-w-0 flex-1\">\n                  <span\n                    class=\"block min-w-0 truncate\"\n                    z-tooltip\n                    [zContent]=\"opt.label\"\n                    zPosition=\"top\"\n                    [zHideDelay]=\"0\"\n                    [zOffset]=\"5\"\n                    [zArrow]=\"false\"\n                    [zTriggerElement]=\"optionEl2\"\n                    [innerHTML]=\"\n                      config().highlightMatch ? (opt.label | zHighlight: highlightQuery() | zSafeHtml) : opt.label\n                    \"></span>\n                  @if (opt.description) {\n                    <span class=\"text-muted-foreground block min-w-0 truncate text-xs\">{{ opt.description }}</span>\n                  }\n                </div>\n              }\n            </div>\n          }\n          @if (canLoadMore()) {\n            <div #loadMoreSentinel class=\"h-px w-full shrink-0\"></div>\n          }\n        </div>\n      }\n\n      @if (isLoadingMore()) {\n        <div class=\"z-autocomplete-loading-more border-border/50 flex items-center justify-center border-t py-1.5\">\n          <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n        </div>\n      }\n    }\n  </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}