import * as _shival99_angular_virtual from '@shival99/angular-virtual'; import * as _angular_core from '@angular/core'; import { TemplateRef, Signal, OnInit, ElementRef, PipeTransform } from '@angular/core'; import { ControlValueAccessor } from '@angular/forms'; import { ZIcon } from '@shival99/z-ui/components/z-icon'; import { ZPopoverPosition, ZPopoverControl } from '@shival99/z-ui/components/z-popover'; import { ZAsyncOptionsConfig, ZEvent } from '@shival99/z-ui/utils'; import { ClassValue } from 'clsx'; import { Observable } from 'rxjs'; import * as class_variance_authority_types from 'class-variance-authority/types'; declare class ZSelectOptionDirective { readonly templateRef: TemplateRef; static ɵfac: _angular_core.ɵɵFactoryDeclaration, never>; static ɵdir: _angular_core.ɵɵDirectiveDeclaration, "[z-select-option], [zSelectOption]", never, {}, {}, never, never, true, never>; } declare class ZSelectSelectedDirective { readonly templateRef: TemplateRef; static ɵfac: _angular_core.ɵɵFactoryDeclaration, never>; static ɵdir: _angular_core.ɵɵDirectiveDeclaration, "[z-select-selected], [zSelectSelected]", never, {}, {}, never, never, true, never>; } interface ZSelectControl { /** Trigger validation and return true if valid */ valid: () => boolean; /** * Trigger validation and return true if has error. * @deprecated Use `valid()` for boolean form-submit checks. */ validate: () => boolean; /** Reset component to initial state */ reset: () => void; /** Focus the select trigger */ focus: () => void; /** Blur the select trigger */ blur: () => void; /** Set custom error message (useful for server-side validation). Pass null to clear. */ setErrorMessage: (message: string | null) => void; /** Signal indicating if component has validation error */ hasError: Signal; /** Signal indicating if async validation is in progress */ isValidating: Signal; /** Signal indicating if dropdown is open */ isOpen: Signal; /** Signal with current value */ value: Signal; /** Signal with selected options. Single mode returns an empty or one-item array. */ selected: Signal[]>; /** Signal with current error message */ errorMessage: Signal; } type ZSelectMode = 'single' | 'multiple' | 'tags'; type ZSelectSize = 'sm' | 'default' | 'lg'; type ZSelectAsyncValidateOn = 'change' | 'blur'; interface ZSelectOption { label: string; value: T; disabled?: boolean; group?: string; icon?: string; } interface ZSelectConfig { /** Số ký tự tối thiểu trước khi gọi async.load khi người dùng search. */ minLength: number; /** Debounce search tính bằng mili giây, ưu tiên hơn zDebounce khi được truyền trong zConfig. */ debounceTime: number; /** Config để component tự search, load-more, loading và append options. */ async?: ZAsyncOptionsConfig>; } declare const Z_SELECT_DEFAULT_CONFIG: Omit; interface ZSelectAsyncValidator { error: string; message: string; validate: (value: ZSelectOption | ZSelectOption[] | null) => Promise | Observable; } interface ZSelectValidator { error: string; message: string; validate: (value: ZSelectOption | ZSelectOption[] | null) => boolean; } interface ZSelectOptionGroup { label: string; options: ZSelectOption[]; } interface ZSelectLoadMoreEvent { currentCount: number; scrollTop: number; } type ZSelectLabelTemplate = TemplateRef<{ $implicit: ZSelectOption; }>; type ZSelectOptionTemplate = TemplateRef<{ $implicit: ZSelectOption; selected: boolean; }>; interface ZSelectTagColor { bg: string; text: string; border: string; } declare const TAG_COLORS: ZSelectTagColor[]; declare class ZSelectComponent implements OnInit, ControlValueAccessor { private readonly _injector; private readonly _destroyRef; private readonly _zTranslate; protected readonly triggerRef: _angular_core.Signal | undefined>; protected readonly searchInputRef: _angular_core.Signal | undefined>; protected readonly dropdownTpl: _angular_core.Signal | undefined>; protected readonly optionsContainerRef: _angular_core.Signal | undefined>; protected readonly virtualScrollRef: _angular_core.Signal | undefined>; protected readonly loadMoreSentinelRef: _angular_core.Signal | undefined>; protected readonly virtualOptionElements: _angular_core.Signal[]>; protected readonly customSelectedDirective: _angular_core.Signal | undefined>; protected readonly customOptionDirective: _angular_core.Signal | undefined>; readonly zOnSearch: _angular_core.OutputEmitterRef; readonly zOnLoadMore: _angular_core.OutputEmitterRef; readonly zOnBlur: _angular_core.OutputEmitterRef; readonly zOnFocus: _angular_core.OutputEmitterRef; readonly zControl: _angular_core.OutputEmitterRef>; readonly zEvent: _angular_core.OutputEmitterRef; readonly class: _angular_core.InputSignal; readonly zMode: _angular_core.InputSignal; readonly zSize: _angular_core.InputSignal; readonly zLabel: _angular_core.InputSignal; readonly zLabelClass: _angular_core.InputSignal; readonly zPlaceholder: _angular_core.InputSignal; readonly zRequired: _angular_core.InputSignalWithTransform; readonly zDisabled: _angular_core.InputSignalWithTransform; readonly zReadonly: _angular_core.InputSignalWithTransform; readonly zLoading: _angular_core.InputSignalWithTransform; readonly zLoadingOutline: _angular_core.InputSignalWithTransform; readonly zPrefix: _angular_core.InputSignal<"" | ZIcon>; readonly zAllowClear: _angular_core.InputSignalWithTransform; readonly zShowCheck: _angular_core.InputSignalWithTransform; readonly zWrap: _angular_core.InputSignalWithTransform; readonly zShowSearch: _angular_core.InputSignalWithTransform; readonly zPlaceholderSearch: _angular_core.InputSignal; readonly zDebounce: _angular_core.InputSignal; readonly zNotFoundText: _angular_core.InputSignal; readonly zEmptyText: _angular_core.InputSignal; readonly zEmptyIcon: _angular_core.InputSignal; readonly zMaxTagCount: _angular_core.InputSignal; readonly zDropdownMaxHeight: _angular_core.InputSignal; readonly zOptionHeight: _angular_core.InputSignal; readonly zVirtualScroll: _angular_core.InputSignalWithTransform; readonly zDynamicSize: _angular_core.InputSignalWithTransform; readonly zShowAction: _angular_core.InputSignalWithTransform; readonly zOptions: _angular_core.InputSignal[]>; readonly zConfig: _angular_core.InputSignal>>; readonly zTranslateLabels: _angular_core.InputSignalWithTransform; readonly zKey: _angular_core.InputSignal; readonly zSearchServer: _angular_core.InputSignalWithTransform; readonly zLoadingMore: _angular_core.InputSignalWithTransform; readonly zEnableLoadMore: _angular_core.InputSignalWithTransform; readonly zScrollDistance: _angular_core.InputSignal; readonly zMaxVisible: _angular_core.InputSignal; readonly zScrollClose: _angular_core.InputSignalWithTransform; readonly zSticky: _angular_core.InputSignalWithTransform; readonly zPosition: _angular_core.InputSignal; readonly zSelectedTemplate: _angular_core.InputSignal | null>; readonly zOptionTemplate: _angular_core.InputSignal | null>; readonly zActionTemplate: _angular_core.InputSignal | null>; readonly zAsyncValidators: _angular_core.InputSignal[]>; readonly zAsyncDebounce: _angular_core.InputSignal; readonly zAsyncValidateOn: _angular_core.InputSignal; readonly zValidators: _angular_core.InputSignal[]>; private readonly _value; private readonly _disabled; private readonly _formControl; private readonly _formStateVersion; private readonly _popoverControl; private readonly _allKnownOptions; private readonly _asyncErrors; private readonly _customError; private readonly _asyncOptions; private readonly _asyncKeyword; private readonly _asyncPage; private readonly _asyncHasMore; private readonly _asyncLoading; private readonly _asyncLoadingMore; protected readonly uiState: _angular_core.WritableSignal<{ isOpen: boolean; hasScrollShadow: boolean; isFocused: boolean; isValidating: boolean; touched: boolean; dirty: boolean; }>; protected readonly selectId: string; protected readonly dropdownId: string; protected readonly searchText: _angular_core.WritableSignal; protected readonly dropdownWidth: _angular_core.WritableSignal; protected readonly currentValue: _angular_core.Signal; protected readonly config: _angular_core.Signal>; protected readonly hasAsyncOptions: _angular_core.Signal; protected readonly sourceOptions: _angular_core.Signal[]>; protected readonly asyncSelectedOptions: _angular_core.Signal[]>; protected readonly isLoading: _angular_core.Signal; protected readonly isLoadingMore: _angular_core.Signal; protected readonly canLoadMore: _angular_core.Signal; protected readonly effectiveDebounceTime: _angular_core.Signal; protected readonly virtualizer: _shival99_angular_virtual.AngularVirtualizer; private readonly _measureVirtualItems; protected readonly isDisabled: _angular_core.Signal; protected readonly isReadonly: _angular_core.Signal; protected readonly isInteractionDisabled: _angular_core.Signal; protected readonly effectivePlaceholder: _angular_core.Signal; protected readonly effectivePlaceholderSearch: _angular_core.Signal; protected readonly effectiveNotFoundText: _angular_core.Signal; protected readonly effectiveEmptyText: _angular_core.Signal; protected readonly effectiveSelectAllText: _angular_core.Signal; protected readonly effectiveClearAllText: _angular_core.Signal; protected readonly effectiveRequiredErrorText: _angular_core.Signal; protected readonly translatedOptions: _angular_core.Signal[]>; protected readonly translatedAsyncSelectedOptions: _angular_core.Signal[]>; protected readonly isMultipleMode: _angular_core.Signal; protected readonly isTagsMode: _angular_core.Signal; protected readonly effectiveSelectedTemplate: _angular_core.Signal | null>; protected readonly effectiveOptionTemplate: _angular_core.Signal | null>; protected readonly knownOptions: _angular_core.Signal[]>; protected readonly shouldUseVirtualScroll: _angular_core.Signal; protected readonly selectedOption: _angular_core.Signal | null>; protected readonly selectedOptions: _angular_core.Signal[]>; protected readonly selected: _angular_core.Signal[]>; protected readonly displayedTags: _angular_core.Signal[]>; protected readonly remainingCount: _angular_core.Signal; protected readonly hasValue: _angular_core.Signal; protected readonly isAllSelected: _angular_core.Signal; protected readonly filteredOptions: _angular_core.Signal<{ label: string; value: T; disabled?: boolean; }[]>; protected readonly isEmptyData: _angular_core.Signal; protected readonly isNoSearchResults: _angular_core.Signal; protected readonly optionsMaxHeight: _angular_core.Signal; protected readonly currentStatus: _angular_core.Signal<"default" | "disabled" | "readonly" | "open" | "error">; private readonly _shouldShowValidation; protected readonly hasError: _angular_core.Signal; protected readonly errorMessage: _angular_core.Signal; protected readonly selectClasses: _angular_core.Signal; private readonly _searchSubject; private readonly _asyncCancelSubject; private readonly _asyncValidationSubject; private _loadMoreObserver; private _virtualScrollListener; private _asyncLoadSubscription; private _asyncRequestId; private _asyncValidationAbortController; private _onChange; private _onTouched; private _ngControl; private readonly _isNgModel; constructor(); ngOnInit(): void; writeValue(value: T | T[] | null): void; registerOnChange(fn: (value: T | T[] | null) => void): void; registerOnTouched(fn: () => void): void; setDisabledState(isDisabled: boolean): void; reset(): void; focus(): void; blur(): void; /** @deprecated Use `valid()` for boolean form-submit checks. */ validate(): boolean; valid(): boolean; setErrorMessage(message: string | null): void; protected onTriggerKeydown(event: KeyboardEvent): void; protected onTriggerMousedown(): void; protected toggleDropdown(): void; protected onPopoverControl(control: ZPopoverControl): void; protected onPopoverShow(): void; private _focusSearchInputWhenReady; private _focusWithoutScroll; protected onPopoverHideStart(): void; protected onPopoverHideEnd(): void; protected onSearchChange(value: string): void; protected checkScrollShadow(): void; protected selectOption(option: ZSelectOption, closeFn?: () => void): void; protected removeOption(event: MouseEvent, option: ZSelectOption): void; protected clearAll(event: MouseEvent): void; protected selectAll(): void; protected removeAll(): void; protected toggleSelectAllAction(): void; protected trackByValue: (_index: number, option: ZSelectOption) => unknown; private _findOptionByValue; private _getOptionKey; private _isValueEqual; private _emitControl; private _loadAsyncOptionsOnFocus; private _loadAsyncOptions; private _handleAsyncOptionsError; private _getAsyncOptionsScrollTop; private _restoreAsyncOptionsScrollTop; private _resetOptionsScrollTop; private _getOptionsScrollElement; private _resetAsyncOptions; private _setupLoadMoreObserver; private _cleanupLoadMoreObserver; private _setupVirtualScrollLoadMore; private _cleanupVirtualScrollListener; private _handleLoadMore; private _getValidationErrors; private _runAsyncValidation; private _cancelAsyncValidation; private _triggerAsyncValidation; static ɵfac: _angular_core.ɵɵFactoryDeclaration, never>; static ɵcmp: _angular_core.ɵɵComponentDeclaration, "z-select", ["zSelect"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zMode": { "alias": "zMode"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zLabel": { "alias": "zLabel"; "required": false; "isSignal": true; }; "zLabelClass": { "alias": "zLabelClass"; "required": false; "isSignal": true; }; "zPlaceholder": { "alias": "zPlaceholder"; "required": false; "isSignal": true; }; "zRequired": { "alias": "zRequired"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zReadonly": { "alias": "zReadonly"; "required": false; "isSignal": true; }; "zLoading": { "alias": "zLoading"; "required": false; "isSignal": true; }; "zLoadingOutline": { "alias": "zLoadingOutline"; "required": false; "isSignal": true; }; "zPrefix": { "alias": "zPrefix"; "required": false; "isSignal": true; }; "zAllowClear": { "alias": "zAllowClear"; "required": false; "isSignal": true; }; "zShowCheck": { "alias": "zShowCheck"; "required": false; "isSignal": true; }; "zWrap": { "alias": "zWrap"; "required": false; "isSignal": true; }; "zShowSearch": { "alias": "zShowSearch"; "required": false; "isSignal": true; }; "zPlaceholderSearch": { "alias": "zPlaceholderSearch"; "required": false; "isSignal": true; }; "zDebounce": { "alias": "zDebounce"; "required": false; "isSignal": true; }; "zNotFoundText": { "alias": "zNotFoundText"; "required": false; "isSignal": true; }; "zEmptyText": { "alias": "zEmptyText"; "required": false; "isSignal": true; }; "zEmptyIcon": { "alias": "zEmptyIcon"; "required": false; "isSignal": true; }; "zMaxTagCount": { "alias": "zMaxTagCount"; "required": false; "isSignal": true; }; "zDropdownMaxHeight": { "alias": "zDropdownMaxHeight"; "required": false; "isSignal": true; }; "zOptionHeight": { "alias": "zOptionHeight"; "required": false; "isSignal": true; }; "zVirtualScroll": { "alias": "zVirtualScroll"; "required": false; "isSignal": true; }; "zDynamicSize": { "alias": "zDynamicSize"; "required": false; "isSignal": true; }; "zShowAction": { "alias": "zShowAction"; "required": false; "isSignal": true; }; "zOptions": { "alias": "zOptions"; "required": false; "isSignal": true; }; "zConfig": { "alias": "zConfig"; "required": false; "isSignal": true; }; "zTranslateLabels": { "alias": "zTranslateLabels"; "required": false; "isSignal": true; }; "zKey": { "alias": "zKey"; "required": false; "isSignal": true; }; "zSearchServer": { "alias": "zSearchServer"; "required": false; "isSignal": true; }; "zLoadingMore": { "alias": "zLoadingMore"; "required": false; "isSignal": true; }; "zEnableLoadMore": { "alias": "zEnableLoadMore"; "required": false; "isSignal": true; }; "zScrollDistance": { "alias": "zScrollDistance"; "required": false; "isSignal": true; }; "zMaxVisible": { "alias": "zMaxVisible"; "required": false; "isSignal": true; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zSticky": { "alias": "zSticky"; "required": false; "isSignal": true; }; "zPosition": { "alias": "zPosition"; "required": false; "isSignal": true; }; "zSelectedTemplate": { "alias": "zSelectedTemplate"; "required": false; "isSignal": true; }; "zOptionTemplate": { "alias": "zOptionTemplate"; "required": false; "isSignal": true; }; "zActionTemplate": { "alias": "zActionTemplate"; "required": false; "isSignal": true; }; "zAsyncValidators": { "alias": "zAsyncValidators"; "required": false; "isSignal": true; }; "zAsyncDebounce": { "alias": "zAsyncDebounce"; "required": false; "isSignal": true; }; "zAsyncValidateOn": { "alias": "zAsyncValidateOn"; "required": false; "isSignal": true; }; "zValidators": { "alias": "zValidators"; "required": false; "isSignal": true; }; }, { "zOnSearch": "zOnSearch"; "zOnLoadMore": "zOnLoadMore"; "zOnBlur": "zOnBlur"; "zOnFocus": "zOnFocus"; "zControl": "zControl"; "zEvent": "zEvent"; }, ["customSelectedDirective", "customOptionDirective"], never, true, never>; } declare class ZIsSelectedPipe implements PipeTransform { transform(option: ZSelectOption, value: T | T[] | null, isMultipleMode: boolean, zKey?: string): boolean; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵpipe: _angular_core.ɵɵPipeDeclaration; } declare class ZOptionClassesPipe implements PipeTransform { transform(isSelected: boolean, isDisabled?: boolean, customTemplate?: boolean): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵpipe: _angular_core.ɵɵPipeDeclaration; } declare class ZTagClassesPipe implements PipeTransform { transform(option: ZSelectOption, size: ZSelectSize, isTagsMode: boolean): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵpipe: _angular_core.ɵɵPipeDeclaration; } declare const zSelectVariants: (props?: ({ zSize?: "sm" | "default" | "lg" | null | undefined; zStatus?: "default" | "open" | "error" | "disabled" | "readonly" | null | undefined; } & class_variance_authority_types.ClassProp) | undefined) => string; declare const zSelectTagVariants: (props?: ({ zSize?: "sm" | "default" | "lg" | null | undefined; } & class_variance_authority_types.ClassProp) | undefined) => string; declare const zSelectOptionVariants: (props?: ({ customTemplate?: boolean | null | undefined; selected?: boolean | null | undefined; disabled?: boolean | null | undefined; } & class_variance_authority_types.ClassProp) | undefined) => string; declare function getTagColor(value: unknown): ZSelectTagColor; declare function filterOptions(options: { label: string; value: T; disabled?: boolean; }[], searchText: string): { label: string; value: T; disabled?: boolean; }[]; export { TAG_COLORS, ZIsSelectedPipe, ZOptionClassesPipe, ZSelectComponent, ZSelectOptionDirective, ZSelectSelectedDirective, ZTagClassesPipe, Z_SELECT_DEFAULT_CONFIG, filterOptions, getTagColor, zSelectOptionVariants, zSelectTagVariants, zSelectVariants }; export type { ZSelectAsyncValidateOn, ZSelectAsyncValidator, ZSelectConfig, ZSelectControl, ZSelectLabelTemplate, ZSelectLoadMoreEvent, ZSelectMode, ZSelectOption, ZSelectOptionGroup, ZSelectOptionTemplate, ZSelectSize, ZSelectTagColor, ZSelectValidator };