{"version":3,"file":"shival99-z-ui-components-z-select.mjs","sources":["../../../../libs/core-ui/components/z-select/directives/z-select-option.directive.ts","../../../../libs/core-ui/components/z-select/directives/z-select-selected.directive.ts","../../../../libs/core-ui/components/z-select/z-select.types.ts","../../../../libs/core-ui/components/z-select/z-select.utils.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-is-selected.pipe.ts","../../../../libs/core-ui/components/z-select/z-select.variants.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-option-classes.pipe.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-tag.pipe.ts","../../../../libs/core-ui/components/z-select/z-select.component.ts","../../../../libs/core-ui/components/z-select/z-select.component.html","../../../../libs/core-ui/components/z-select/shival99-z-ui-components-z-select.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\nimport { ZSelectOptionContext } from '../z-select.types';\n\n@Directive({\n  selector: '[z-select-option], [zSelectOption]',\n  standalone: true,\n})\nexport class ZSelectOptionDirective<T = unknown> {\n  public readonly templateRef = inject(TemplateRef<ZSelectOptionContext<T>>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { ZSelectSelectedContext } from '../z-select.types';\n\n@Directive({\n  selector: '[z-select-selected], [zSelectSelected]',\n  standalone: true,\n})\nexport class ZSelectSelectedDirective<T = unknown> {\n  public readonly templateRef = inject(TemplateRef<ZSelectSelectedContext<T>>);\n}\n","import type { Signal, TemplateRef } from '@angular/core';\nimport type { ZAsyncOptionsConfig } from '@shival99/z-ui/utils';\nimport type { Observable } from 'rxjs';\n\nexport interface ZSelectState {\n  focused: boolean;\n  touched: boolean;\n  blurred: boolean;\n  dirty: boolean;\n  disabled: boolean;\n  readonly: boolean;\n  open: boolean;\n}\n\nexport interface ZSelectControl<T = unknown> {\n  /** Trigger validation and return true if valid */\n  valid: () => boolean;\n  /**\n   * Trigger validation and return true if has error.\n   * @deprecated Use `valid()` for boolean form-submit checks.\n   */\n  validate: () => boolean;\n  /** Reset component to initial state */\n  reset: () => void;\n  /** Focus the select trigger */\n  focus: () => void;\n  /** Blur the select trigger */\n  blur: () => void;\n  /** Set custom error message (useful for server-side validation). Pass null to clear. */\n  setErrorMessage: (message: string | null) => void;\n  /** Signal indicating if component has validation error */\n  hasError: Signal<boolean>;\n  /** Signal indicating if async validation is in progress */\n  isValidating: Signal<boolean>;\n  /** Signal indicating if dropdown is open */\n  isOpen: Signal<boolean>;\n  /** Signal with current value */\n  value: Signal<T | T[] | null>;\n  /** Signal with selected options. Single mode returns an empty or one-item array. */\n  selected: Signal<ZSelectOption<T>[]>;\n  /** Signal with current error message */\n  errorMessage: Signal<string>;\n}\n\nexport type ZSelectMode = 'single' | 'multiple' | 'tags';\nexport type ZSelectSize = 'sm' | 'default' | 'lg';\nexport type ZSelectAsyncValidateOn = 'change' | 'blur';\n\nexport interface ZSelectOption<T = unknown> {\n  label: string;\n  value: T;\n  disabled?: boolean;\n  group?: string;\n  icon?: string;\n}\n\nexport interface ZSelectConfig<T = unknown> {\n  /** Số ký tự tối thiểu trước khi gọi async.load khi người dùng search. */\n  minLength: number;\n  /** Debounce search tính bằng mili giây, ưu tiên hơn zDebounce khi được truyền trong zConfig. */\n  debounceTime: number;\n  /** Config để component tự search, load-more, loading và append options. */\n  async?: ZAsyncOptionsConfig<ZSelectOption<T>>;\n}\n\nexport const Z_SELECT_DEFAULT_CONFIG: Omit<ZSelectConfig, 'async'> = {\n  minLength: 0,\n  debounceTime: 300,\n};\n\nexport interface ZSelectSelectedContext<T = unknown> {\n  $implicit: ZSelectOption<T>;\n}\n\nexport interface ZSelectOptionContext<T = unknown> {\n  $implicit: ZSelectOption<T>;\n  selected: boolean;\n}\n\nexport interface ZSelectAsyncValidator<T = unknown> {\n  error: string;\n  message: string;\n  validate: (value: ZSelectOption<T> | ZSelectOption<T>[] | null) => Promise<boolean> | Observable<boolean>;\n}\n\nexport interface ZSelectValidator<T = unknown> {\n  error: string;\n  message: string;\n  validate: (value: ZSelectOption<T> | ZSelectOption<T>[] | null) => boolean;\n}\n\nexport interface ZSelectOptionGroup<T = unknown> {\n  label: string;\n  options: ZSelectOption<T>[];\n}\n\nexport interface ZSelectLoadMoreEvent {\n  currentCount: number;\n  scrollTop: number;\n}\n\nexport type ZSelectLabelTemplate<T = unknown> = TemplateRef<{ $implicit: ZSelectOption<T> }>;\nexport type ZSelectOptionTemplate<T = unknown> = TemplateRef<{ $implicit: ZSelectOption<T>; selected: boolean }>;\n\nexport interface ZSelectTagColor {\n  bg: string;\n  text: string;\n  border: string;\n}\n\nexport const TAG_COLORS: ZSelectTagColor[] = [\n  {\n    bg: 'bg-blue-100 dark:bg-blue-950',\n    text: 'text-blue-700 dark:text-blue-300',\n    border: 'border-blue-300 dark:border-blue-800',\n  },\n  {\n    bg: 'bg-green-100 dark:bg-green-950',\n    text: 'text-green-700 dark:text-green-300',\n    border: 'border-green-300 dark:border-green-800',\n  },\n  {\n    bg: 'bg-purple-100 dark:bg-purple-950',\n    text: 'text-purple-700 dark:text-purple-300',\n    border: 'border-purple-300 dark:border-purple-800',\n  },\n  {\n    bg: 'bg-orange-100 dark:bg-orange-950',\n    text: 'text-orange-700 dark:text-orange-300',\n    border: 'border-orange-300 dark:border-orange-800',\n  },\n  {\n    bg: 'bg-pink-100 dark:bg-pink-950',\n    text: 'text-pink-700 dark:text-pink-300',\n    border: 'border-pink-300 dark:border-pink-800',\n  },\n  {\n    bg: 'bg-cyan-100 dark:bg-cyan-950',\n    text: 'text-cyan-700 dark:text-cyan-300',\n    border: 'border-cyan-300 dark:border-cyan-800',\n  },\n  {\n    bg: 'bg-yellow-100 dark:bg-yellow-950',\n    text: 'text-yellow-700 dark:text-yellow-300',\n    border: 'border-yellow-300 dark:border-yellow-800',\n  },\n  {\n    bg: 'bg-red-100 dark:bg-red-950',\n    text: 'text-red-700 dark:text-red-300',\n    border: 'border-red-300 dark:border-red-800',\n  },\n  {\n    bg: 'bg-indigo-100 dark:bg-indigo-950',\n    text: 'text-indigo-700 dark:text-indigo-300',\n    border: 'border-indigo-300 dark:border-indigo-800',\n  },\n  {\n    bg: 'bg-teal-100 dark:bg-teal-950',\n    text: 'text-teal-700 dark:text-teal-300',\n    border: 'border-teal-300 dark:border-teal-800',\n  },\n];\n","import { zRemoveVietnamese } from '@shival99/z-ui/utils';\nimport { TAG_COLORS, type ZSelectTagColor } from './z-select.types';\n\nconst colorCache = new Map<string, ZSelectTagColor>();\n\nexport function getTagColor(value: unknown): ZSelectTagColor {\n  const key = String(value);\n  const cached = colorCache.get(key);\n  if (cached) {\n    return cached;\n  }\n\n  let hash = 0;\n  for (let i = 0; i < key.length; i++) {\n    hash = (hash << 5) - hash + key.charCodeAt(i);\n    hash = hash & hash;\n  }\n\n  const index = Math.abs(hash) % TAG_COLORS.length;\n  const color = TAG_COLORS[index];\n  colorCache.set(key, color);\n  return color;\n}\n\nexport function filterOptions<T>(\n  options: { label: string; value: T; disabled?: boolean }[],\n  searchText: string\n): { label: string; value: T; disabled?: boolean }[] {\n  const query = searchText.trim();\n  if (!query) {\n    return options;\n  }\n\n  const normalizedQuery = zRemoveVietnamese(query.toLowerCase());\n  return options.filter(opt => {\n    const normalizedLabel = zRemoveVietnamese(opt.label.toLowerCase());\n    return normalizedLabel.includes(normalizedQuery);\n  });\n}\n\nexport function zGetSelectValueKey(value: unknown, key: string): unknown {\n  if (!key) {\n    return value;\n  }\n\n  if (zIsRecord(value) && key in value) {\n    return value[key];\n  }\n\n  return value;\n}\n\nexport function zIsSelectValueEqual(left: unknown, right: unknown, key: string): boolean {\n  return zGetSelectValueKey(left, key) === zGetSelectValueKey(right, key);\n}\n\nfunction zIsRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZSelectOption } from '../z-select.types';\nimport { zIsSelectValueEqual } from '../z-select.utils';\n\n@Pipe({\n  name: 'zIsSelected',\n  standalone: true,\n  pure: true,\n})\nexport class ZIsSelectedPipe implements PipeTransform {\n  transform<T>(option: ZSelectOption<T>, value: T | T[] | null, isMultipleMode: boolean, zKey = ''): boolean {\n    if (isMultipleMode) {\n      const current = (value as T[]) ?? [];\n      return current.some(currentValue => zIsSelectValueEqual(currentValue, option.value, zKey));\n    }\n\n    return zIsSelectValueEqual(value, option.value, zKey);\n  }\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zSelectVariants = cva(\n  [\n    'flex w-full items-center rounded-sm border border-input bg-white shadow-xs cursor-pointer',\n    'transition-[border-color,box-shadow,background-color,color,opacity] 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: 'min-h-8 px-2 py-1 gap-2 text-sm',\n        default: 'min-h-9 px-2 py-1.5 gap-2 text-sm',\n        lg: 'min-h-10 px-2 py-1.5 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 ring-ring/50 ring-[3px]',\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 ZSelectVariants = VariantProps<typeof zSelectVariants>;\n\nexport const zSelectTagVariants = cva(\n  'inline-flex items-center gap-1 rounded-sm border px-1.5 text-sm font-medium transition-colors',\n  {\n    variants: {\n      zSize: {\n        sm: 'text-[0.75rem] px-1 h-5',\n        default: 'text-[0.875rem] px-1.5 h-[1.375rem]',\n        lg: 'text-[0.875rem] px-2 py-[1.5px]',\n      },\n    },\n    defaultVariants: {\n      zSize: 'default',\n    },\n  }\n);\n\nexport const zSelectOptionVariants = 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      selected: {\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      selected: false,\n      disabled: false,\n    },\n  }\n);\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { zSelectOptionVariants } from '../z-select.variants';\n\n@Pipe({\n  name: 'zOptionClasses',\n  standalone: true,\n  pure: true,\n})\nexport class ZOptionClassesPipe implements PipeTransform {\n  transform(isSelected: boolean, isDisabled?: boolean, customTemplate = false): string {\n    return zSelectOptionVariants({\n      customTemplate,\n      selected: isSelected,\n      disabled: isDisabled ?? false,\n    });\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ZSelectOption, ZSelectSize } from '../z-select.types';\nimport { getTagColor } from '../z-select.utils';\nimport { zSelectTagVariants } from '../z-select.variants';\n\n@Pipe({\n  name: 'zTagClasses',\n  standalone: true,\n  pure: true,\n})\nexport class ZTagClassesPipe implements PipeTransform {\n  transform<T>(option: ZSelectOption<T>, size: ZSelectSize, isTagsMode: boolean): string {\n    const baseClasses = zSelectTagVariants({ zSize: size });\n\n    if (isTagsMode) {\n      const color = getTagColor(option.value);\n      return zMergeClasses(baseClasses, color.bg, color.text, color.border);\n    }\n\n    return zMergeClasses(baseClasses, 'bg-muted text-foreground border-border');\n  }\n}\n","import { 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  viewChild,\n  viewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  type AbstractControl,\n  ControlValueAccessor,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  NgModel,\n  PristineChangeEvent,\n  TouchedChangeEvent,\n} from '@angular/forms';\nimport { injectVirtualizer } from '@shival99/angular-virtual';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\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 { ZTranslateService } from '@shival99/z-ui/services';\nimport {\n  zUuid,\n  zMergeClasses,\n  zTransform,\n  zCreateEvent,\n  zMergeAsyncOptions,\n  zResolveAsyncOptionsHasMore,\n  zResolveAsyncSelectedOptions,\n  zToAsyncOptionsObservable,\n  zIsMobileViewport,\n  Z_ASYNC_OPTIONS_DEFAULT_PAGE_SIZE,\n  type ZEvent,\n} from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport {\n  catchError,\n  debounceTime,\n  filter,\n  finalize,\n  firstValueFrom,\n  isObservable,\n  merge,\n  of,\n  Subject,\n  takeUntil,\n  type Subscription,\n} from 'rxjs';\nimport { ZSelectOptionDirective } from './directives/z-select-option.directive';\nimport { ZSelectSelectedDirective } from './directives/z-select-selected.directive';\nimport { ZIsSelectedPipe } from './pipes/z-select-is-selected.pipe';\nimport { ZOptionClassesPipe } from './pipes/z-select-option-classes.pipe';\nimport { ZTagClassesPipe } from './pipes/z-select-tag.pipe';\nimport type {\n  ZSelectAsyncValidateOn,\n  ZSelectAsyncValidator,\n  ZSelectConfig,\n  ZSelectControl,\n  ZSelectLabelTemplate,\n  ZSelectLoadMoreEvent,\n  ZSelectMode,\n  ZSelectOption,\n  ZSelectOptionTemplate,\n  ZSelectSize,\n  ZSelectValidator,\n} from './z-select.types';\nimport { Z_SELECT_DEFAULT_CONFIG } from './z-select.types';\nimport { filterOptions, zGetSelectValueKey, zIsSelectValueEqual } from './z-select.utils';\nimport { zSelectVariants } from './z-select.variants';\n\n@Component({\n  selector: 'z-select',\n  imports: [\n    FormsModule,\n    ZIconComponent,\n    ZPopoverDirective,\n    NgTemplateOutlet,\n    ZButtonComponent,\n    ZEmptyComponent,\n    ZTooltipDirective,\n    ZIsSelectedPipe,\n    ZOptionClassesPipe,\n    ZTagClassesPipe,\n    ZLoadingComponent,\n    ZHighlightPipe,\n    ZSafeHtmlPipe,\n  ],\n  standalone: true,\n  templateUrl: './z-select.component.html',\n  styleUrl: './z-select.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ZSelectComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  exportAs: 'zSelect',\n})\nexport class ZSelectComponent<T = unknown> implements OnInit, ControlValueAccessor {\n  private readonly _injector = inject(Injector);\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _zTranslate = inject(ZTranslateService);\n\n  protected readonly triggerRef = viewChild<ElementRef<HTMLDivElement>>('triggerEl');\n  protected readonly searchInputRef = viewChild<ElementRef<HTMLInputElement>>('dropdownSearchInput');\n  protected readonly dropdownTpl = viewChild<TemplateRef<unknown>>('dropdownTpl');\n  protected readonly optionsContainerRef = viewChild<ElementRef<HTMLDivElement>>('optionsContainer');\n  protected readonly virtualScrollRef = viewChild<ElementRef<HTMLDivElement>>('virtualScrollElement');\n  protected readonly loadMoreSentinelRef = viewChild<ElementRef<HTMLDivElement>>('loadMoreSentinel');\n  protected readonly virtualOptionElements = viewChildren<ElementRef<HTMLDivElement>>('virtualOptionEl');\n\n  protected readonly customSelectedDirective = contentChild(ZSelectSelectedDirective<T>);\n  protected readonly customOptionDirective = contentChild(ZSelectOptionDirective<T>);\n\n  public readonly zOnSearch = output<string>();\n  public readonly zOnLoadMore = output<ZSelectLoadMoreEvent>();\n  public readonly zOnBlur = output<FocusEvent>();\n  public readonly zOnFocus = output<FocusEvent>();\n  public readonly zControl = output<ZSelectControl<T>>();\n  public readonly zEvent = output<ZEvent>();\n\n  public readonly class = input<ClassValue>('');\n  public readonly zMode = input<ZSelectMode>('single');\n  public readonly zSize = input<ZSelectSize>('default');\n  public readonly zLabel = input<string>('');\n  public readonly zLabelClass = input<string>('');\n  public readonly zPlaceholder = input<string>('');\n  public readonly zRequired = input(false, { transform: zTransform });\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 zPrefix = input<ZIcon | ''>('');\n  public readonly zAllowClear = input(false, { transform: zTransform });\n  public readonly zShowCheck = input(true, { transform: zTransform });\n  public readonly zWrap = input(true, { transform: zTransform });\n  public readonly zShowSearch = input(true, { transform: zTransform });\n  public readonly zPlaceholderSearch = input<string>('');\n  public readonly zDebounce = input<number>(300);\n  public readonly zNotFoundText = input<string>('');\n  public readonly zEmptyText = input<string>('');\n  public readonly zEmptyIcon = input<ZIcon>('lucideInbox');\n  public readonly zMaxTagCount = input<number>(3);\n  public readonly zDropdownMaxHeight = input<number>(256);\n  public readonly zOptionHeight = input<number>(32);\n  public readonly zVirtualScroll = input(false, { transform: zTransform });\n  public readonly zDynamicSize = input(false, { transform: zTransform });\n  public readonly zShowAction = input(false, { transform: zTransform });\n  public readonly zOptions = input<ZSelectOption<T>[]>([]);\n  public readonly zConfig = input<Partial<ZSelectConfig<T>>>({});\n  public readonly zTranslateLabels = input(true, { transform: zTransform });\n  public readonly zKey = input<string>('');\n  public readonly zSearchServer = input(false, { transform: zTransform });\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 zMaxVisible = input<number | null>(null);\n  public readonly zScrollClose = input(false, { transform: zTransform });\n  public readonly zSticky = input(false, { transform: zTransform });\n  public readonly zPosition = input<ZPopoverPosition>('bottom');\n\n  public readonly zSelectedTemplate = input<ZSelectLabelTemplate<T> | null>(null);\n  public readonly zOptionTemplate = input<ZSelectOptionTemplate<T> | null>(null);\n  public readonly zActionTemplate = input<TemplateRef<unknown> | null>(null);\n\n  public readonly zAsyncValidators = input<ZSelectAsyncValidator<T>[]>([]);\n  public readonly zAsyncDebounce = input<number>(300);\n  public readonly zAsyncValidateOn = input<ZSelectAsyncValidateOn>('change');\n  public readonly zValidators = input<ZSelectValidator<T>[]>([]);\n\n  private readonly _value = signal<T | T[] | null>(null);\n  private readonly _disabled = signal(false);\n  private readonly _formControl = signal<AbstractControl | null>(null);\n  private readonly _formStateVersion = signal(0);\n  private readonly _popoverControl = signal<ZPopoverControl | null>(null);\n  private readonly _allKnownOptions = signal<ZSelectOption<T>[]>([]);\n  private readonly _asyncErrors = signal<Map<string, string>>(new Map());\n  private readonly _customError = signal<string | null>(null);\n  private readonly _asyncOptions = signal<ZSelectOption<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    hasScrollShadow: false,\n    isFocused: false,\n    isValidating: false,\n    touched: false,\n    dirty: false,\n  });\n\n  protected readonly selectId = zUuid('z-select');\n  protected readonly dropdownId = `${this.selectId}-dropdown`;\n  protected readonly searchText = signal('');\n  protected readonly dropdownWidth = signal(0);\n  protected readonly currentValue = this._value.asReadonly();\n\n  protected readonly config = computed<ZSelectConfig<T>>(() => ({\n    ...Z_SELECT_DEFAULT_CONFIG,\n    ...this.zConfig(),\n  }));\n\n  protected readonly hasAsyncOptions = computed(() => !!this.config().async?.load);\n  protected readonly sourceOptions = computed(() => (this.hasAsyncOptions() ? this._asyncOptions() : this.zOptions()));\n  protected readonly asyncSelectedOptions = computed(() => zResolveAsyncSelectedOptions(this.config().async));\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 effectiveDebounceTime = computed(() => this.zConfig().debounceTime ?? this.zDebounce());\n\n  protected readonly virtualizer = injectVirtualizer(() => ({\n    scrollElement: this.virtualScrollRef(),\n    count: this.filteredOptions().length,\n    estimateSize: () => this.zOptionHeight(),\n    measureElement: (element: Element) => element.getBoundingClientRect().height,\n    gap: 3,\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 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 effectivePlaceholder = computed(() => {\n    this._zTranslate.currentLang();\n    return this.zPlaceholder() || this._zTranslate.instant('i18n_z_ui_select_placeholder');\n  });\n\n  protected readonly effectivePlaceholderSearch = computed(() => {\n    this._zTranslate.currentLang();\n    return this.zPlaceholderSearch() || this._zTranslate.instant('i18n_z_ui_select_search');\n  });\n\n  protected readonly effectiveNotFoundText = computed(() => {\n    this._zTranslate.currentLang();\n    return this.zNotFoundText() || this._zTranslate.instant('i18n_z_ui_select_no_results');\n  });\n\n  protected readonly effectiveEmptyText = computed(() => {\n    this._zTranslate.currentLang();\n    return this.zEmptyText() || this._zTranslate.instant('i18n_z_ui_select_no_options');\n  });\n\n  protected readonly effectiveSelectAllText = computed(() => {\n    this._zTranslate.currentLang();\n    return this._zTranslate.instant('i18n_z_ui_select_select_all');\n  });\n\n  protected readonly effectiveClearAllText = computed(() => {\n    this._zTranslate.currentLang();\n    return this._zTranslate.instant('i18n_z_ui_select_clear_all');\n  });\n\n  protected readonly effectiveRequiredErrorText = computed(() => {\n    this._zTranslate.currentLang();\n    return this._zTranslate.instant('i18n_z_ui_select_required');\n  });\n\n  protected readonly translatedOptions = computed<ZSelectOption<T>[]>(() => {\n    this._zTranslate.currentLang();\n    const options = this.sourceOptions();\n    if (!this.zTranslateLabels()) {\n      return options;\n    }\n    return options.map(opt => ({\n      ...opt,\n      label: this._zTranslate.instant(opt.label),\n    }));\n  });\n\n  protected readonly translatedAsyncSelectedOptions = computed<ZSelectOption<T>[]>(() => {\n    this._zTranslate.currentLang();\n    const options = this.asyncSelectedOptions();\n    if (!this.zTranslateLabels()) {\n      return options;\n    }\n\n    return options.map(opt => ({\n      ...opt,\n      label: this._zTranslate.instant(opt.label),\n    }));\n  });\n\n  protected readonly isMultipleMode = computed(() => {\n    const mode = this.zMode();\n    return mode === 'multiple' || mode === 'tags';\n  });\n\n  protected readonly isTagsMode = computed(() => this.zMode() === 'tags');\n\n  protected readonly effectiveSelectedTemplate = computed(() => {\n    const directive = this.customSelectedDirective();\n    if (directive) {\n      return directive.templateRef;\n    }\n    return this.zSelectedTemplate();\n  });\n\n  protected readonly effectiveOptionTemplate = computed(() => {\n    const directive = this.customOptionDirective();\n    if (directive) {\n      return directive.templateRef;\n    }\n    return this.zOptionTemplate();\n  });\n\n  protected readonly knownOptions = computed(() => {\n    if (this.zSearchServer() || this.hasAsyncOptions()) {\n      return zMergeAsyncOptions(\n        this._allKnownOptions(),\n        this.translatedAsyncSelectedOptions(),\n        this.config().async?.dedupeBy\n      );\n    }\n\n    return this.translatedOptions();\n  });\n\n  protected readonly shouldUseVirtualScroll = computed(() => {\n    if (this.zVirtualScroll()) {\n      return true;\n    }\n\n    const maxVisible = this.zMaxVisible();\n    if (maxVisible !== null && this.sourceOptions().length > maxVisible) {\n      return true;\n    }\n\n    if (this.canLoadMore()) {\n      return false;\n    }\n\n    return this.sourceOptions().length > 50;\n  });\n\n  protected readonly selectedOption = computed<ZSelectOption<T> | null>(() => {\n    this._zTranslate.currentLang();\n    if (this.isMultipleMode()) {\n      return null;\n    }\n\n    const value = this._value();\n    if (value === null || value === undefined) {\n      return null;\n    }\n\n    const options = this.knownOptions();\n    return this._findOptionByValue(options, value as T) ?? null;\n  });\n\n  protected readonly selectedOptions = computed<ZSelectOption<T>[]>(() => {\n    this._zTranslate.currentLang();\n    if (!this.isMultipleMode()) {\n      return [];\n    }\n\n    const value = this._value();\n    if (!Array.isArray(value)) {\n      return [];\n    }\n\n    const options = this.knownOptions();\n    return value\n      .map(v => this._findOptionByValue(options, v))\n      .filter((opt): opt is ZSelectOption<T> => opt !== undefined);\n  });\n\n  protected readonly selected = computed<ZSelectOption<T>[]>(() => {\n    if (this.isMultipleMode()) {\n      return this.selectedOptions();\n    }\n\n    const option = this.selectedOption();\n    if (!option) {\n      return [];\n    }\n\n    return [option];\n  });\n\n  protected readonly displayedTags = computed(() => {\n    const selected = this.selectedOptions();\n    const max = this.zMaxTagCount();\n    return selected.slice(0, max);\n  });\n\n  protected readonly remainingCount = computed(() => {\n    const selected = this.selectedOptions();\n    const max = this.zMaxTagCount();\n    return Math.max(0, selected.length - max);\n  });\n\n  protected readonly hasValue = computed(() => {\n    if (this.isMultipleMode()) {\n      return this.selectedOptions().length > 0;\n    }\n\n    return this.selectedOption() !== null;\n  });\n\n  protected readonly isAllSelected = computed(() => {\n    if (!this.isMultipleMode()) {\n      return false;\n    }\n\n    const enabledValues = this.translatedOptions()\n      .filter(option => !option.disabled)\n      .map(option => option.value);\n\n    if (enabledValues.length === 0) {\n      return false;\n    }\n\n    const selectedValues = this._value();\n    if (!Array.isArray(selectedValues)) {\n      return false;\n    }\n\n    return enabledValues.every(value => selectedValues.some(selectedValue => this._isValueEqual(selectedValue, value)));\n  });\n\n  protected readonly filteredOptions = computed(() => {\n    if (this.zSearchServer() || this.hasAsyncOptions()) {\n      return this.translatedOptions();\n    }\n\n    return filterOptions(this.translatedOptions(), this.searchText());\n  });\n\n  protected readonly isEmptyData = computed(() => {\n    if ((this.zSearchServer() || this.hasAsyncOptions()) && this.searchText().trim()) {\n      return false;\n    }\n\n    return this.translatedOptions().length === 0;\n  });\n\n  protected readonly isNoSearchResults = computed(() => {\n    if ((this.zSearchServer() || this.hasAsyncOptions()) && this.searchText().trim()) {\n      return this.translatedOptions().length === 0;\n    }\n    const noFiltered = this.filteredOptions().length === 0;\n    const hasOptions = this.translatedOptions().length > 0;\n    const hasSearch = this.searchText().trim() !== '';\n    return noFiltered && hasOptions && hasSearch;\n  });\n\n  protected readonly optionsMaxHeight = computed(() => {\n    const total = this.zDropdownMaxHeight();\n    const searchHeight = this.zShowSearch() ? 44 : 0;\n    const hasActionBar = this.zShowAction() && (!!this.zActionTemplate() || this.isMultipleMode());\n    const actionHeight = hasActionBar ? 40 : 0;\n    return total - searchHeight - actionHeight;\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    if (this.hasError()) {\n      return 'error';\n    }\n\n    return 'default';\n  });\n\n  private readonly _shouldShowValidation = computed(() => {\n    const control = this._formControl();\n    this._formStateVersion();\n\n    // For NgModel, use internal state (same as z-input)\n    if (this._isNgModel()) {\n      return this.uiState().dirty || this.uiState().touched;\n    }\n\n    if (control) {\n      return control.dirty;\n    }\n\n    return this.uiState().dirty || this.uiState().touched;\n  });\n\n  protected readonly hasError = computed(() => {\n    // Check custom error first (from setErrorMessage)\n    if (this._customError()) {\n      return true;\n    }\n\n    const asyncErrors = this._asyncErrors();\n    if (asyncErrors.size > 0 && this._shouldShowValidation()) {\n      return true;\n    }\n\n    const customErrors = this._getValidationErrors();\n    if (customErrors.length > 0) {\n      return true;\n    }\n\n    const control = this._formControl();\n    this._formStateVersion();\n\n    if (!control) {\n      return false;\n    }\n\n    return control.invalid && this._shouldShowValidation();\n  });\n\n  protected readonly errorMessage = computed(() => {\n    // Check custom error first (from setErrorMessage)\n    const customError = this._customError();\n    if (customError) {\n      return customError;\n    }\n\n    const asyncErrors = this._asyncErrors();\n    if (asyncErrors.size > 0) {\n      return asyncErrors.values().next().value as string;\n    }\n\n    const customErrors = this._getValidationErrors();\n    if (customErrors.length > 0) {\n      return customErrors[0];\n    }\n\n    const control = this._formControl();\n    const errors = control?.errors;\n\n    if (!errors) {\n      return '';\n    }\n\n    const validators = this.zValidators();\n    for (const validator of validators) {\n      if (errors[validator.error]) {\n        return validator.message;\n      }\n    }\n\n    if (errors['required']) {\n      return this.effectiveRequiredErrorText();\n    }\n\n    return '';\n  });\n\n  protected readonly selectClasses = computed(() =>\n    zMergeClasses(\n      zSelectVariants({\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      // prettier-ignore\n      !this.zWrap() &&\n        this.isMultipleMode() && {\n        'h-8': this.zSize() === 'sm',\n        'h-9': this.zSize() === 'default',\n        'h-10': this.zSize() === 'lg',\n      },\n      this.class()\n    )\n  );\n\n  private readonly _searchSubject = new Subject<string>();\n  private readonly _asyncCancelSubject = new Subject<void>();\n  private readonly _asyncValidationSubject = new Subject<ZSelectOption<T> | ZSelectOption<T>[] | 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 _asyncValidationAbortController: AbortController | null = null;\n  private _onChange: (value: T | T[] | null) => void = () => void 0;\n  private _onTouched: () => void = () => void 0;\n  private _ngControl: NgControl | null = null;\n  private readonly _isNgModel = signal(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      if (!this.zSearchServer() && !this.hasAsyncOptions()) {\n        return;\n      }\n\n      const newOpts = this.sourceOptions();\n      const known = this._allKnownOptions();\n      const merged = zMergeAsyncOptions(known, newOpts, this.config().async?.dedupeBy);\n\n      if (merged.length > known.length) {\n        this._allKnownOptions.set(merged);\n      }\n    });\n\n    effect(() => {\n      const { isOpen } = this.uiState();\n      const useVirtual = this.shouldUseVirtualScroll();\n\n      if (!isOpen) {\n        return;\n      }\n\n      const getScrollElement = (): HTMLElement | null => {\n        if (useVirtual) {\n          return this.virtualScrollRef()?.nativeElement ?? null;\n        }\n\n        return this.optionsContainerRef()?.nativeElement ?? null;\n      };\n\n      const handleScroll = () => {\n        const el = getScrollElement();\n        if (!el) {\n          return;\n        }\n\n        const isScrollable = el.scrollHeight > el.clientHeight;\n        this.uiState.update(s => ({ ...s, hasScrollShadow: isScrollable }));\n      };\n\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          handleScroll();\n\n          const el = getScrollElement();\n          if (el) {\n            el.addEventListener('scroll', handleScroll);\n          }\n        });\n      });\n\n      return () => {\n        const el = getScrollElement();\n        if (el) {\n          el.removeEventListener('scroll', handleScroll);\n        }\n      };\n    });\n\n    effect(() => {\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\n    effect(() => {\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  }\n\n  ngOnInit(): void {\n    this._searchSubject\n      .pipe(debounceTime(this.effectiveDebounceTime()), takeUntilDestroyed(this._destroyRef))\n      .subscribe(value => {\n        this.searchText.set(value);\n        this.zOnSearch.emit(value);\n\n        if (this.hasAsyncOptions()) {\n          this._loadAsyncOptions(value, false);\n        }\n      });\n\n    const asyncValidators = this.zAsyncValidators();\n    if (asyncValidators.length > 0) {\n      const debounceMs = this.zAsyncDebounce() || 300;\n      this._asyncValidationSubject\n        .pipe(debounceTime(debounceMs), takeUntilDestroyed(this._destroyRef))\n        .subscribe(value => {\n          void this._runAsyncValidation(value);\n        });\n    }\n\n    queueMicrotask(() => {\n      try {\n        this._ngControl = this._injector.get(NgControl, null);\n        this._isNgModel.set(this._ngControl instanceof NgModel);\n\n        if (!this._ngControl?.control) {\n          return;\n        }\n\n        const { control } = this._ngControl;\n        this._formControl.set(control);\n        merge(\n          control.statusChanges,\n          control.valueChanges,\n          control.events.pipe(\n            filter(event => event instanceof PristineChangeEvent || event instanceof TouchedChangeEvent)\n          )\n        )\n          .pipe(takeUntilDestroyed(this._destroyRef))\n          .subscribe(() => {\n            this._formStateVersion.update(v => v + 1);\n          });\n      } catch {\n        this._ngControl = null;\n      }\n    });\n\n    setTimeout(() => this._emitControl());\n  }\n\n  public writeValue(value: T | T[] | null): void {\n    const fieldKey = this.zKey();\n    if (!fieldKey) {\n      this._value.set(value);\n      return;\n    }\n\n    if (value === null || value === undefined) {\n      this._value.set(value);\n      return;\n    }\n\n    if (Array.isArray(value)) {\n      const extractedValues = value.map(item => {\n        if (typeof item === 'object' && item !== null && fieldKey in item) {\n          return (item as Record<string, T>)[fieldKey];\n        }\n        return item as T;\n      });\n\n      this._value.set(extractedValues as T[]);\n      return;\n    }\n\n    if (typeof value === 'object' && value !== null && fieldKey in value) {\n      const extractedValue = (value as Record<string, T>)[fieldKey];\n      this._value.set(extractedValue);\n      return;\n    }\n\n    this._value.set(value);\n  }\n\n  public registerOnChange(fn: (value: T | T[] | null) => 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  public reset(): void {\n    this._customError.set(null);\n\n    if (this.isMultipleMode()) {\n      this._value.set([]);\n      this._onChange([]);\n    }\n\n    if (!this.isMultipleMode()) {\n      this._value.set(null);\n      this._onChange(null);\n    }\n\n    this.uiState.update(s => ({ ...s, touched: false, dirty: false }));\n    this.searchText.set('');\n\n    if (!this._ngControl?.control) {\n      return;\n    }\n\n    this._ngControl.control.markAsPristine();\n    this._ngControl.control.markAsUntouched();\n  }\n\n  public focus(): void {\n    const triggerEl = this.triggerRef()?.nativeElement;\n    if (!triggerEl) {\n      return;\n    }\n\n    this._focusWithoutScroll(triggerEl);\n  }\n\n  public blur(): void {\n    this.triggerRef()?.nativeElement.blur();\n  }\n\n  /** @deprecated Use `valid()` for boolean form-submit checks. */\n  public validate(): boolean {\n    this.uiState.update(s => ({ ...s, touched: true, dirty: true }));\n    this._onTouched();\n\n    if (this._ngControl?.control) {\n      this._ngControl.control.markAsDirty();\n      this._ngControl.control.markAsTouched();\n    }\n\n    return this.hasError();\n  }\n\n  public valid(): boolean {\n    return !this.validate();\n  }\n\n  public setErrorMessage(message: string | null): void {\n    this._customError.set(message);\n    if (message) {\n      this.uiState.update(s => ({ ...s, touched: true, dirty: true }));\n    }\n  }\n\n  protected onTriggerKeydown(event: KeyboardEvent): void {\n    if (this.isInteractionDisabled()) {\n      return;\n    }\n\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault();\n      this.toggleDropdown();\n      return;\n    }\n\n    if (event.key === 'Escape' && this.uiState().isOpen) {\n      this._popoverControl()?.close();\n    }\n  }\n\n  protected onTriggerMousedown(): void {\n    const triggerEl = this.triggerRef()?.nativeElement;\n    if (triggerEl) {\n      this.dropdownWidth.set(triggerEl.getBoundingClientRect().width);\n    }\n  }\n\n  protected toggleDropdown(): void {\n    this.onTriggerMousedown();\n    this._popoverControl()?.toggle();\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, isFocused: true }));\n    this._resetOptionsScrollTop();\n    this.searchText.set('');\n    this.zOnSearch.emit('');\n    this._loadAsyncOptionsOnFocus();\n    const triggerEl = this.triggerRef()?.nativeElement;\n\n    if (triggerEl) {\n      this.dropdownWidth.set(triggerEl.getBoundingClientRect().width);\n      const focusEvent = new FocusEvent('focus', { relatedTarget: triggerEl });\n      this.zOnFocus.emit(focusEvent);\n      this.zEvent.emit(zCreateEvent('focus', focusEvent));\n    }\n\n    if (this.zShowSearch()) {\n      this._focusSearchInputWhenReady();\n    }\n  }\n\n  private _focusSearchInputWhenReady(attempt = 0): void {\n    if (zIsMobileViewport() || attempt > 3) {\n      return;\n    }\n\n    requestAnimationFrame(() => {\n      const searchInput = this.searchInputRef()?.nativeElement;\n      if (!searchInput) {\n        this._focusSearchInputWhenReady(attempt + 1);\n        return;\n      }\n\n      this._focusWithoutScroll(searchInput);\n      this._popoverControl()?.updatePosition();\n    });\n  }\n\n  private _focusWithoutScroll(element: HTMLElement): void {\n    const { scrollX } = window;\n    const { scrollY } = window;\n    element.focus({ preventScroll: true });\n\n    if (zIsMobileViewport()) {\n      return;\n    }\n\n    requestAnimationFrame(() => {\n      if (window.scrollX === scrollX && window.scrollY === scrollY) {\n        return;\n      }\n\n      window.scrollTo(scrollX, scrollY);\n    });\n  }\n\n  protected onPopoverHideStart(): void {\n    this.uiState.update(s => ({ ...s, isOpen: false, isFocused: false, hasScrollShadow: false }));\n    this._cleanupVirtualScrollListener();\n\n    if (this.uiState().dirty) {\n      this.uiState.update(s => ({ ...s, touched: true }));\n    }\n\n    this._onTouched();\n\n    const triggerEl = this.triggerRef()?.nativeElement;\n    if (triggerEl) {\n      const blurEvent = new FocusEvent('blur', { relatedTarget: triggerEl });\n      this.zOnBlur.emit(blurEvent);\n      this.zEvent.emit(zCreateEvent('blur', blurEvent));\n    }\n\n    triggerEl?.blur();\n  }\n\n  protected onPopoverHideEnd(): void {\n    if (this.zSearchServer() || this.hasAsyncOptions()) {\n      this.searchText.set('');\n    }\n  }\n\n  protected onSearchChange(value: string): void {\n    this._searchSubject.next(value);\n\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\n        this.checkScrollShadow();\n      });\n    });\n  }\n\n  protected checkScrollShadow(): void {\n    const container = this.optionsContainerRef()?.nativeElement;\n    if (!container) {\n      this.uiState.update(s => ({ ...s, hasScrollShadow: false }));\n      return;\n    }\n\n    const isScrollable = container.scrollHeight > container.clientHeight;\n    this.uiState.update(s => ({ ...s, hasScrollShadow: isScrollable }));\n  }\n\n  protected selectOption(option: ZSelectOption<T>, closeFn?: () => void): void {\n    if (option.disabled) {\n      return;\n    }\n\n    if (this.isMultipleMode()) {\n      const current = (this._value() as T[]) ?? [];\n      const isSelected = current.some(value => this._isValueEqual(value, option.value));\n      const newValue = isSelected\n        ? current.filter(value => !this._isValueEqual(value, option.value))\n        : [...current, option.value];\n\n      this._value.set(newValue);\n      this.uiState.update(s => ({ ...s, dirty: true }));\n      this._onChange(newValue);\n      this._triggerAsyncValidation(\n        newValue\n          .map(value => this._findOptionByValue(this.knownOptions(), value))\n          .filter((o): o is ZSelectOption<T> => o !== undefined)\n      );\n      return;\n    }\n\n    this._value.set(option.value);\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this._onChange(option.value);\n    this._triggerAsyncValidation(option);\n    this._popoverControl()?.close();\n\n    if (closeFn) {\n      closeFn();\n    }\n  }\n\n  protected removeOption(event: MouseEvent, option: ZSelectOption<T>): void {\n    event.stopPropagation();\n\n    const current = (this._value() as T[]) ?? [];\n    const newValue = current.filter(value => !this._isValueEqual(value, option.value));\n    this._value.set(newValue);\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this._onChange(newValue);\n  }\n\n  protected clearAll(event: MouseEvent): void {\n    event.stopPropagation();\n\n    if (this.isMultipleMode()) {\n      this._value.set([]);\n      this.uiState.update(s => ({ ...s, dirty: true }));\n      this._onChange([]);\n      return;\n    }\n\n    this._value.set(null);\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this._onChange(null);\n  }\n\n  protected selectAll(): void {\n    if (!this.isMultipleMode()) {\n      return;\n    }\n\n    const enabledOptions = this.translatedOptions().filter(opt => !opt.disabled);\n    const allValues = enabledOptions.map(opt => opt.value);\n\n    this._value.set(allValues);\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this._onChange(allValues);\n  }\n\n  protected removeAll(): void {\n    if (!this.isMultipleMode()) {\n      return;\n    }\n\n    this._value.set([]);\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this._onChange([]);\n  }\n\n  protected toggleSelectAllAction(): void {\n    if (this.isAllSelected()) {\n      this.removeAll();\n      return;\n    }\n\n    this.selectAll();\n  }\n\n  protected trackByValue = (_index: number, option: ZSelectOption<T>): unknown => this._getOptionKey(option);\n\n  private _findOptionByValue(options: ZSelectOption<T>[], value: T): ZSelectOption<T> | undefined {\n    return options.find(option => this._isValueEqual(option.value, value));\n  }\n\n  private _getOptionKey(option: ZSelectOption<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    return zGetSelectValueKey(option.value, key);\n  }\n\n  private _isValueEqual(left: unknown, right: unknown): boolean {\n    return zIsSelectValueEqual(left, right, this.zKey());\n  }\n\n  private _emitControl(): void {\n    this.zControl.emit({\n      valid: () => this.valid(),\n      validate: () => this.validate(),\n      reset: () => this.reset(),\n      focus: () => this.focus(),\n      blur: () => this.blur(),\n      setErrorMessage: (message: string | null) => this.setErrorMessage(message),\n      hasError: this.hasError,\n      isValidating: computed(() => this.uiState().isValidating),\n      isOpen: computed(() => this.uiState().isOpen),\n      value: this._value.asReadonly(),\n      selected: this.selected,\n      errorMessage: this.errorMessage,\n    });\n  }\n\n  private _loadAsyncOptionsOnFocus(): void {\n    const asyncConfig = this.config().async;\n    if (!asyncConfig?.loadOnFocus) {\n      return;\n    }\n\n    if (this._asyncKeyword() === '' && this._asyncOptions().length > 0) {\n      return;\n    }\n\n    this._loadAsyncOptions('', 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('ZSelect 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 _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      this._loadMoreObserver.disconnect();\n      this._loadMoreObserver = null;\n    }\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 scrollDistance = this.zScrollDistance();\n      const threshold = clientHeight * scrollDistance;\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      this._virtualScrollListener();\n      this._virtualScrollListener = null;\n    }\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 _getValidationErrors(): string[] {\n    const validators = this.zValidators();\n    const errors: string[] = [];\n\n    if (!this._shouldShowValidation()) {\n      return errors;\n    }\n\n    const selectedValue = this.isMultipleMode() ? this.selectedOptions() : this.selectedOption();\n    const isRequired = this.zRequired() || this._formControl()?.errors?.['required'];\n    if (isRequired && !this.hasValue()) {\n      errors.push(this.effectiveRequiredErrorText());\n    }\n\n    for (const validator of validators) {\n      if (!validator.validate(selectedValue)) {\n        errors.push(validator.message);\n      }\n    }\n\n    return errors;\n  }\n\n  private async _runAsyncValidation(value: ZSelectOption<T> | ZSelectOption<T>[] | null): Promise<void> {\n    const asyncValidators = this.zAsyncValidators();\n    if (asyncValidators.length === 0) {\n      return;\n    }\n\n    if (value === null || value === undefined) {\n      this._asyncErrors.set(new Map());\n      this.uiState.update(s => ({ ...s, isValidating: false }));\n      return;\n    }\n\n    this._cancelAsyncValidation();\n    this._asyncValidationAbortController = new AbortController();\n    const { signal } = this._asyncValidationAbortController;\n\n    this.uiState.update(s => ({ ...s, isValidating: true }));\n    const errors = new Map<string, string>();\n\n    try {\n      const validationPromises = asyncValidators.map(async validator => {\n        if (signal.aborted) {\n          return null;\n        }\n\n        try {\n          const result = validator.validate(value);\n          if (!isObservable(result)) {\n            const isValid = await result;\n            if (signal.aborted) {\n              return null;\n            }\n            return { validator, isValid };\n          }\n\n          const safeResult$ = result.pipe(\n            takeUntil(this._asyncCancelSubject),\n            catchError(err => {\n              console.error(`Async validation error for ${validator.error}:`, err);\n              return of(false);\n            })\n          );\n\n          const isValid = await firstValueFrom(safeResult$);\n          if (signal.aborted) {\n            return null;\n          }\n          return { validator, isValid };\n        } catch (error) {\n          if (!signal.aborted) {\n            console.error(`Async validation error for ${validator.error}:`, error);\n            return { validator, isValid: false };\n          }\n          return null;\n        }\n      });\n\n      const results = await Promise.all(validationPromises);\n\n      if (signal.aborted) {\n        return;\n      }\n\n      for (const result of results) {\n        if (result && !result.isValid) {\n          errors.set(result.validator.error, result.validator.message);\n        }\n      }\n\n      this._asyncErrors.set(errors);\n    } catch (error) {\n      if (!signal.aborted) {\n        console.error('Async validation error:', error);\n      }\n    } finally {\n      if (!signal.aborted) {\n        this.uiState.update(s => ({ ...s, isValidating: false }));\n      }\n    }\n  }\n\n  private _cancelAsyncValidation(): void {\n    if (this._asyncValidationAbortController) {\n      this._asyncValidationAbortController.abort();\n      this._asyncValidationAbortController = null;\n    }\n\n    this._asyncCancelSubject.next();\n  }\n\n  private _triggerAsyncValidation(value: ZSelectOption<T> | ZSelectOption<T>[] | null): void {\n    if (this.zAsyncValidators().length > 0 && this.zAsyncValidateOn() === 'change') {\n      this._asyncValidationSubject.next(value);\n    }\n  }\n}\n","<div class=\"z-select-wrapper relative flex w-full flex-col gap-2\">\n  @if (zLabel()) {\n    <label [for]=\"selectId\" 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 class=\"relative\">\n    <div\n      #triggerEl\n      [id]=\"selectId\"\n      z-popover\n      [zPopoverContent]=\"dropdownTpl\"\n      [zOffset]=\"6\"\n      [zDisabled]=\"isInteractionDisabled()\"\n      [zScrollClose]=\"zScrollClose()\"\n      [zSticky]=\"zSticky()\"\n      [zKeyboardSafe]=\"zShowSearch()\"\n      zPopoverWidth=\"trigger\"\n      zTrigger=\"click\"\n      [zPosition]=\"zPosition()\"\n      zClass=\"border-0 shadow-none p-0\"\n      (zControl)=\"onPopoverControl($event)\"\n      (zShow)=\"onPopoverShow()\"\n      (zHideStart)=\"onPopoverHideStart()\"\n      (zHide)=\"onPopoverHideEnd()\"\n      class=\"z-select-trigger cursor-pointer\"\n      [class]=\"selectClasses()\"\n      [class.z-select-open]=\"uiState().isOpen\"\n      (mousedown)=\"onTriggerMousedown()\"\n      (keydown)=\"onTriggerKeydown($event)\"\n      tabindex=\"0\"\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() || 'lucideChevronDown'\" zSize=\"18\" class=\"text-muted-foreground shrink-0\" />\n      }\n\n      <div\n        class=\"z-select-tags-wrapper flex min-w-0 flex-1 items-center gap-1\"\n        [class.flex-wrap]=\"zWrap()\"\n        [class.overflow-hidden]=\"!zWrap()\">\n        @if (isMultipleMode()) {\n          @if (selectedOptions().length === 0) {\n            <span class=\"text-muted-foreground min-w-0 flex-1 truncate whitespace-nowrap\">\n              {{ effectivePlaceholder() }}\n            </span>\n          } @else {\n            @for (opt of displayedTags(); track opt.value) {\n              <span\n                #tagEl\n                [class]=\"opt | zTagClasses: zSize() : isTagsMode()\"\n                class=\"z-select-tag\"\n                [class.min-w-0]=\"!zWrap()\"\n                [class.shrink]=\"!zWrap()\">\n                @if (effectiveSelectedTemplate()) {\n                  <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: opt }\" />\n                } @else {\n                  <span\n                    class=\"truncate\"\n                    [class.max-w-25]=\"zWrap()\"\n                    z-tooltip\n                    [zContent]=\"opt.label\"\n                    [zTooltipDisabled]=\"uiState().isOpen\"\n                    zTooltipPosition=\"top\"\n                    [zTooltipHideDelay]=\"0\"\n                    [zTooltipOffset]=\"6\"\n                    [zTriggerElement]=\"tagEl\">\n                    {{ opt.label }}\n                  </span>\n                }\n                @if (zAllowClear() && !isDisabled()) {\n                  <button\n                    type=\"button\"\n                    class=\"-mr-0.5 flex size-3.5 shrink-0 items-center justify-center rounded-sm transition-colors hover:bg-black/10\"\n                    (click)=\"removeOption($event, opt)\"\n                    tabindex=\"-1\">\n                    <z-icon zType=\"lucideX\" zSize=\"10\" />\n                  </button>\n                }\n              </span>\n            }\n            @if (remainingCount() > 0) {\n              <span\n                class=\"z-select-remaining text-muted-foreground bg-muted rounded-sm px-1.5 py-0.5 text-xs font-medium\">\n                +{{ remainingCount() }}\n              </span>\n            }\n          }\n        } @else {\n          @if (selectedOption()) {\n            @if (effectiveSelectedTemplate()) {\n              <ng-container\n                *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: selectedOption() }\" />\n            } @else {\n              <span\n                class=\"truncate\"\n                z-tooltip\n                [zContent]=\"selectedOption()!.label\"\n                [zTooltipDisabled]=\"uiState().isOpen\"\n                zTooltipPosition=\"top\"\n                [zTooltipHideDelay]=\"0\"\n                [zTooltipOffset]=\"10\">\n                {{ selectedOption()!.label }}\n              </span>\n            }\n          } @else {\n            <span class=\"text-muted-foreground min-w-0 flex-1 truncate whitespace-nowrap\">\n              {{ effectivePlaceholder() }}\n            </span>\n          }\n        }\n      </div>\n\n      @if (isLoading() || isLoadingMore()) {\n        <z-icon zType=\"lucideLoaderCircle\" zSize=\"18\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n      }\n\n      @if (!isLoading() && zAllowClear() && hasValue() && !isDisabled() && !isReadonly()) {\n        <button\n          type=\"button\"\n          class=\"text-muted-foreground hover:text-foreground flex shrink-0 items-center justify-center transition-colors\"\n          (click)=\"clearAll($event)\"\n          tabindex=\"-1\">\n          <z-icon zType=\"lucideX\" zSize=\"18\" />\n        </button>\n      }\n\n      @if (uiState().isValidating) {\n        <z-icon zType=\"lucideLoader2\" zSize=\"18\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n      }\n\n      <z-icon\n        zType=\"lucideChevronDown\"\n        zSize=\"18\"\n        class=\"text-muted-foreground shrink-0 transition-transform duration-200\"\n        [class.rotate-180]=\"uiState().isOpen\" />\n    </div>\n\n    @if (hasError()) {\n      <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 pt-2 text-xs duration-200\">\n        {{ errorMessage() }}\n      </p>\n    }\n  </div>\n\n  <ng-template #dropdownTpl let-close=\"close\">\n    <div\n      [id]=\"dropdownId\"\n      class=\"z-select-dropdown bg-popover border-border rounded-sm border shadow-[var(--z-popover-shadow)]\"\n      [style.width.px]=\"dropdownWidth()\"\n      [style.min-width.px]=\"dropdownWidth()\">\n      @if (zShowSearch()) {\n        <div class=\"border-border flex items-center border-b px-3\">\n          <z-icon zType=\"lucideSearch\" zSize=\"18\" class=\"text-muted-foreground/50 mr-2 shrink-0\" />\n          <input\n            #dropdownSearchInput\n            type=\"text\"\n            class=\"placeholder:text-muted-foreground text-foreground flex h-10 w-full min-w-0 overflow-hidden bg-transparent py-3 text-sm text-ellipsis whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n            [placeholder]=\"effectivePlaceholderSearch()\"\n            [ngModel]=\"searchText()\"\n            (ngModelChange)=\"onSearchChange($event)\"\n            autocomplete=\"off\"\n            autocorrect=\"off\"\n            spellcheck=\"false\" />\n        </div>\n      }\n\n      @if (isLoading()) {\n        <div class=\"flex items-center justify-center\" [style.height.px]=\"optionsMaxHeight()\">\n          <z-loading [zLoading]=\"true\" zSize=\"default\" />\n        </div>\n      } @else {\n        @if (filteredOptions().length > 0) {\n          @if (shouldUseVirtualScroll()) {\n            <div\n              #virtualScrollElement\n              class=\"z-select-options z-select-virtual-scroll overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n              [style.height.px]=\"optionsMaxHeight()\">\n              <div class=\"z-select-virtual-inner relative\" [style.height.px]=\"virtualizer.getTotalSize()\">\n                @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n                  @let opt = filteredOptions()[virtualItem.index];\n                  <div\n                    #virtualOptionEl\n                    #optionEl\n                    [class]=\"\n                      'z-select-option absolute right-0 left-0 min-w-0 ' +\n                      (opt\n                        | zIsSelected: currentValue() : isMultipleMode() : zKey()\n                        | zOptionClasses: opt.disabled : !!effectiveOptionTemplate())\n                    \"\n                    [attr.data-index]=\"virtualItem.index\"\n                    [style.display]=\"effectiveOptionTemplate() ? 'block' : null\"\n                    [style.height.px]=\"zDynamicSize() ? null : zOptionHeight()\"\n                    [style.minHeight.px]=\"zDynamicSize() ? zOptionHeight() : null\"\n                    [style.overflow]=\"effectiveOptionTemplate() ? 'visible' : null\"\n                    [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\"\n                    (click)=\"selectOption(opt, close)\">\n                    @if (effectiveOptionTemplate()) {\n                      @let selected = opt | zIsSelected: currentValue() : isMultipleMode() : zKey();\n                      <div class=\"flex min-w-0 items-start gap-2\">\n                        <div class=\"min-w-0 flex-1\">\n                          <ng-container\n                            *ngTemplateOutlet=\"\n                              effectiveOptionTemplate()!;\n                              context: {\n                                $implicit: opt,\n                                selected: selected,\n                              }\n                            \" />\n                        </div>\n                        @if (zShowCheck() && selected) {\n                          <z-icon\n                            zType=\"lucideCheck\"\n                            zSize=\"16\"\n                            [zStrokeWidth]=\"4\"\n                            class=\"text-primary mt-2 shrink-0\" />\n                        }\n                      </div>\n                    } @else {\n                      <span\n                        class=\"min-w-0 flex-1 truncate\"\n                        z-tooltip\n                        [zContent]=\"opt.label\"\n                        zPosition=\"top\"\n                        [zHideDelay]=\"0\"\n                        [zOffset]=\"5\"\n                        [zArrow]=\"false\"\n                        [zTriggerElement]=\"optionEl\"\n                        [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n                      @if (zShowCheck() && (opt | zIsSelected: currentValue() : isMultipleMode() : zKey())) {\n                        <z-icon\n                          zType=\"lucideCheck\"\n                          zSize=\"16\"\n                          [zStrokeWidth]=\"4\"\n                          class=\"text-primary ml-auto shrink-0\" />\n                      }\n                    }\n                  </div>\n                }\n              </div>\n              @if (isLoadingMore()) {\n                <div\n                  class=\"bg-popover/80 absolute right-0 bottom-0 left-0 flex items-center justify-center py-2\"\n                  [style.transform]=\"'translateY(' + virtualizer.getTotalSize() + 'px)'\">\n                  <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n                </div>\n              }\n            </div>\n          } @else {\n            <div\n              #optionsContainer\n              class=\"z-select-options flex flex-col gap-0.75 overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n              [style.maxHeight.px]=\"optionsMaxHeight()\">\n              @for (opt of filteredOptions(); track opt.value) {\n                <div\n                  #optionEl2\n                  [class]=\"\n                    'z-select-option relative min-w-0 ' +\n                    (opt\n                      | zIsSelected: currentValue() : isMultipleMode() : zKey()\n                      | zOptionClasses: opt.disabled : !!effectiveOptionTemplate())\n                  \"\n                  [style.display]=\"effectiveOptionTemplate() ? 'block' : null\"\n                  [style.minHeight.px]=\"effectiveOptionTemplate() ? null : zOptionHeight()\"\n                  [style.overflow]=\"effectiveOptionTemplate() ? 'visible' : null\"\n                  (click)=\"selectOption(opt, close)\">\n                  @if (effectiveOptionTemplate()) {\n                    @let selected = opt | zIsSelected: currentValue() : isMultipleMode() : zKey();\n                    <div class=\"flex min-w-0 items-start gap-2\">\n                      <div class=\"min-w-0 flex-1\">\n                        <ng-container\n                          *ngTemplateOutlet=\"\n                            effectiveOptionTemplate()!;\n                            context: {\n                              $implicit: opt,\n                              selected: selected,\n                            }\n                          \" />\n                      </div>\n                      @if (zShowCheck() && selected) {\n                        <z-icon zType=\"lucideCheck\" zSize=\"18\" [zStrokeWidth]=\"4\" class=\"text-primary mt-2 shrink-0\" />\n                      }\n                    </div>\n                  } @else {\n                    <span\n                      class=\"min-w-0 flex-1 truncate\"\n                      z-tooltip\n                      [zContent]=\"opt.label\"\n                      zPosition=\"top\"\n                      [zArrow]=\"false\"\n                      [zOffset]=\"5\"\n                      [zHideDelay]=\"0\"\n                      [zTriggerElement]=\"optionEl2\"\n                      [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n                    @if (zShowCheck() && (opt | zIsSelected: currentValue() : isMultipleMode() : zKey())) {\n                      <z-icon zType=\"lucideCheck\" zSize=\"18\" [zStrokeWidth]=\"4\" class=\"text-primary ml-auto shrink-0\" />\n                    }\n                  }\n                </div>\n              }\n              @if (canLoadMore()) {\n                <div #loadMoreSentinel class=\"h-px w-full shrink-0\"></div>\n              }\n            </div>\n          }\n        } @else {\n          <div class=\"flex items-center justify-center p-1\" [style.height.px]=\"optionsMaxHeight()\">\n            @if (isEmptyData()) {\n              <z-empty [zIcon]=\"zEmptyIcon()\" zSize=\"sm\" [zMessage]=\"effectiveEmptyText()\" />\n            } @else {\n              <z-empty zIcon=\"lucideSearchX\" zSize=\"sm\" [zMessage]=\"effectiveNotFoundText()\" />\n            }\n          </div>\n        }\n\n        @if (isLoadingMore()) {\n          <div class=\"z-select-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\n      @if (zShowAction() && (zActionTemplate() || isMultipleMode())) {\n        <div class=\"border-border flex items-center gap-2 border-t px-2 py-1.5\">\n          @if (zActionTemplate()) {\n            <ng-container *ngTemplateOutlet=\"zActionTemplate()!\" />\n          } @else {\n            <z-button\n              zSize=\"xs\"\n              [zType]=\"isAllSelected() ? 'ghost-error' : 'ghost-info'\"\n              class=\"min-w-0 flex-1\"\n              (click)=\"toggleSelectAllAction()\"\n              [zWave]=\"false\">\n              <z-icon [zType]=\"isAllSelected() ? 'lucideX' : 'lucideCheckCheck'\" zSize=\"18\" class=\"shrink-0\" />\n              <span class=\"truncate\">{{ isAllSelected() ? effectiveClearAllText() : effectiveSelectAllText() }}</span>\n            </z-button>\n          }\n        </div>\n      }\n    </div>\n  </ng-template>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}