@angular/material
Version:
Angular Material
157 lines (156 loc) • 6.91 kB
TypeScript
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { ElementRef, NgZone, OnDestroy, ViewContainerRef, ChangeDetectorRef } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { Overlay } from '../core';
import { MdAutocomplete } from './autocomplete';
import { Observable } from 'rxjs/Observable';
import { MdOptionSelectionChange, MdOption } from '../core/option/option';
import { Dir } from '../core/rtl/dir';
import { MdInputContainer } from '../input/input-container';
import 'rxjs/add/observable/merge';
import 'rxjs/add/observable/fromEvent';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/switchMap';
/**
* The following style constants are necessary to save here in order
* to properly calculate the scrollTop of the panel. Because we are not
* actually focusing the active item, scroll must be handled manually.
*/
/** The height of each autocomplete option. */
export declare const AUTOCOMPLETE_OPTION_HEIGHT = 48;
/** The total height of the autocomplete panel. */
export declare const AUTOCOMPLETE_PANEL_HEIGHT = 256;
/**
* Provider that allows the autocomplete to register as a ControlValueAccessor.
* @docs-private
*/
export declare const MD_AUTOCOMPLETE_VALUE_ACCESSOR: any;
/**
* Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.
*/
export declare function getMdAutocompleteMissingPanelError(): Error;
export declare class MdAutocompleteTrigger implements ControlValueAccessor, OnDestroy {
private _element;
private _overlay;
private _viewContainerRef;
private _changeDetectorRef;
private _dir;
private _zone;
private _inputContainer;
private _document;
private _overlayRef;
private _portal;
private _panelOpen;
/** The subscription to positioning changes in the autocomplete panel. */
private _panelPositionSubscription;
/** Strategy that is used to position the panel. */
private _positionStrategy;
/** Whether or not the placeholder state is being overridden. */
private _manuallyFloatingPlaceholder;
/** View -> model callback called when value changes */
_onChange: (value: any) => void;
/** View -> model callback called when autocomplete has been touched */
_onTouched: () => void;
autocomplete: MdAutocomplete;
/** Property with mat- prefix for no-conflict mode. */
_matAutocomplete: MdAutocomplete;
constructor(_element: ElementRef, _overlay: Overlay, _viewContainerRef: ViewContainerRef, _changeDetectorRef: ChangeDetectorRef, _dir: Dir, _zone: NgZone, _inputContainer: MdInputContainer, _document: any);
ngOnDestroy(): void;
readonly panelOpen: boolean;
/** Opens the autocomplete suggestion panel. */
openPanel(): void;
/** Closes the autocomplete suggestion panel. */
closePanel(): void;
/**
* A stream of actions that should close the autocomplete panel, including
* when an option is selected, on blur, and when TAB is pressed.
*/
readonly panelClosingActions: Observable<MdOptionSelectionChange>;
/** Stream of autocomplete option selections. */
readonly optionSelections: Observable<MdOptionSelectionChange>;
/** The currently active option, coerced to MdOption type. */
readonly activeOption: MdOption;
/** Stream of clicks outside of the autocomplete panel. */
private readonly _outsideClickStream;
/**
* Sets the autocomplete's value. Part of the ControlValueAccessor interface
* required to integrate with Angular's core forms API.
*
* @param value New value to be written to the model.
*/
writeValue(value: any): void;
/**
* Saves a callback function to be invoked when the autocomplete's value
* changes from user input. Part of the ControlValueAccessor interface
* required to integrate with Angular's core forms API.
*
* @param fn Callback to be triggered when the value changes.
*/
registerOnChange(fn: (value: any) => {}): void;
/**
* Saves a callback function to be invoked when the autocomplete is blurred
* by the user. Part of the ControlValueAccessor interface required
* to integrate with Angular's core forms API.
*
* @param fn Callback to be triggered when the component has been touched.
*/
registerOnTouched(fn: () => {}): void;
_handleKeydown(event: KeyboardEvent): void;
_handleInput(event: KeyboardEvent): void;
/**
* In "auto" mode, the placeholder will animate down as soon as focus is lost.
* This causes the value to jump when selecting an option with the mouse.
* This method manually floats the placeholder until the panel can be closed.
*/
private _floatPlaceholder();
/** If the placeholder has been manually elevated, return it to its normal state. */
private _resetPlaceholder();
/**
* Given that we are not actually focusing active options, we must manually adjust scroll
* to reveal options below the fold. First, we find the offset of the option from the top
* of the panel. The new scrollTop will be that offset - the panel height + the option
* height, so the active option will be just visible at the bottom of the panel.
*/
private _scrollToOption();
/**
* This method listens to a stream of panel closing actions and resets the
* stream every time the option list changes.
*/
private _subscribeToClosingActions();
/** Destroys the autocomplete suggestion panel. */
private _destroyPanel();
private _setTriggerValue(value);
/**
* This method closes the panel, and if a value is specified, also sets the associated
* control to that value. It will also mark the control as dirty if this interaction
* stemmed from the user.
*/
private _setValueAndClose(event);
/**
* Clear any previous selected option and emit a selection change event for this option
*/
private _clearPreviousSelectedOption(skip);
private _createOverlay();
private _getOverlayConfig();
private _getOverlayPosition();
/**
* This method subscribes to position changes in the autocomplete panel, so the panel's
* y-offset can be adjusted to match the new position.
*/
private _subscribeToPositionChanges(strategy);
/** Returns the width of the input element, so the panel width can match it. */
private _getHostWidth();
/** Reset active item to null so arrow events will activate the correct options.*/
private _resetActiveItem();
/**
* Resets the active item and re-calculates alignment of the panel in case its size
* has changed due to fewer or greater number of options.
*/
private _resetPanel();
}