@angular/material
Version:
Angular Material
774 lines • 93.3 kB
JavaScript
/**
* @license
* Copyright Google LLC 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 { __extends, __read, __spread } from "tslib";
import { FocusKeyManager } from '@angular/cdk/a11y';
import { Directionality } from '@angular/cdk/bidi';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { SelectionModel } from '@angular/cdk/collections';
import { BACKSPACE, END, HOME } from '@angular/cdk/keycodes';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Optional, Output, QueryList, Self, ViewEncapsulation, } from '@angular/core';
import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';
import { ErrorStateMatcher, mixinErrorState, } from '@angular/material/core';
import { MatFormFieldControl } from '@angular/material/form-field';
import { merge, Subject } from 'rxjs';
import { startWith, takeUntil } from 'rxjs/operators';
import { MatChip } from './chip';
// Boilerplate for applying mixins to MatChipList.
/** @docs-private */
var MatChipListBase = /** @class */ (function () {
function MatChipListBase(_defaultErrorStateMatcher, _parentForm, _parentFormGroup,
/** @docs-private */
ngControl) {
this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
this._parentForm = _parentForm;
this._parentFormGroup = _parentFormGroup;
this.ngControl = ngControl;
}
return MatChipListBase;
}());
var _MatChipListMixinBase = mixinErrorState(MatChipListBase);
// Increasing integer for generating unique ids for chip-list components.
var nextUniqueId = 0;
/** Change event object that is emitted when the chip list value has changed. */
var MatChipListChange = /** @class */ (function () {
function MatChipListChange(
/** Chip list that emitted the event. */
source,
/** Value of the chip list when the event was emitted. */
value) {
this.source = source;
this.value = value;
}
return MatChipListChange;
}());
export { MatChipListChange };
/**
* A material design chips component (named ChipList for its similarity to the List component).
*/
var MatChipList = /** @class */ (function (_super) {
__extends(MatChipList, _super);
function MatChipList(_elementRef, _changeDetectorRef, _dir, _parentForm, _parentFormGroup, _defaultErrorStateMatcher,
/** @docs-private */
ngControl) {
var _this = _super.call(this, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl) || this;
_this._elementRef = _elementRef;
_this._changeDetectorRef = _changeDetectorRef;
_this._dir = _dir;
_this.ngControl = ngControl;
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
_this.controlType = 'mat-chip-list';
/**
* When a chip is destroyed, we store the index of the destroyed chip until the chips
* query list notifies about the update. This is necessary because we cannot determine an
* appropriate chip that should receive focus until the array of chips updated completely.
*/
_this._lastDestroyedChipIndex = null;
/** Subject that emits when the component has been destroyed. */
_this._destroyed = new Subject();
/** Uid of the chip list */
_this._uid = "mat-chip-list-" + nextUniqueId++;
/** Tab index for the chip list. */
_this._tabIndex = 0;
/**
* User defined tab index.
* When it is not null, use user defined tab index. Otherwise use _tabIndex
*/
_this._userTabIndex = null;
/** Function when touched */
_this._onTouched = function () { };
/** Function when changed */
_this._onChange = function () { };
_this._multiple = false;
_this._compareWith = function (o1, o2) { return o1 === o2; };
_this._required = false;
_this._disabled = false;
/** Orientation of the chip list. */
_this.ariaOrientation = 'horizontal';
_this._selectable = true;
/** Event emitted when the selected chip list value has been changed by the user. */
_this.change = new EventEmitter();
/**
* Event that emits whenever the raw value of the chip-list changes. This is here primarily
* to facilitate the two-way binding for the `value` input.
* @docs-private
*/
_this.valueChange = new EventEmitter();
if (_this.ngControl) {
_this.ngControl.valueAccessor = _this;
}
return _this;
}
Object.defineProperty(MatChipList.prototype, "selected", {
/** The array of selected chips inside chip list. */
get: function () {
return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "role", {
/** The ARIA role applied to the chip list. */
get: function () { return this.empty ? null : 'listbox'; },
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "multiple", {
/** Whether the user should be allowed to select multiple chips. */
get: function () { return this._multiple; },
set: function (value) {
this._multiple = coerceBooleanProperty(value);
this._syncChipsState();
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "compareWith", {
/**
* A function to compare the option values with the selected values. The first argument
* is a value from an option. The second is a value from the selection. A boolean
* should be returned.
*/
get: function () { return this._compareWith; },
set: function (fn) {
this._compareWith = fn;
if (this._selectionModel) {
// A different comparator means the selection could change.
this._initializeSelection();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "value", {
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
get: function () { return this._value; },
set: function (value) {
this.writeValue(value);
this._value = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "id", {
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
get: function () {
return this._chipInput ? this._chipInput.id : this._uid;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "required", {
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
get: function () { return this._required; },
set: function (value) {
this._required = coerceBooleanProperty(value);
this.stateChanges.next();
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "placeholder", {
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
get: function () {
return this._chipInput ? this._chipInput.placeholder : this._placeholder;
},
set: function (value) {
this._placeholder = value;
this.stateChanges.next();
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "focused", {
/** Whether any chips or the matChipInput inside of this chip-list has focus. */
get: function () {
return (this._chipInput && this._chipInput.focused) || this._hasFocusedChip();
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "empty", {
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
get: function () {
return (!this._chipInput || this._chipInput.empty) && this.chips.length === 0;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "shouldLabelFloat", {
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
get: function () { return !this.empty || this.focused; },
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "disabled", {
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
get: function () { return this.ngControl ? !!this.ngControl.disabled : this._disabled; },
set: function (value) {
this._disabled = coerceBooleanProperty(value);
this._syncChipsState();
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "selectable", {
/**
* Whether or not this chip list is selectable. When a chip list is not selectable,
* the selected states for all the chips inside the chip list are always ignored.
*/
get: function () { return this._selectable; },
set: function (value) {
var _this = this;
this._selectable = coerceBooleanProperty(value);
if (this.chips) {
this.chips.forEach(function (chip) { return chip.chipListSelectable = _this._selectable; });
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "tabIndex", {
set: function (value) {
this._userTabIndex = value;
this._tabIndex = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "chipSelectionChanges", {
/** Combined stream of all of the child chips' selection change events. */
get: function () {
return merge.apply(void 0, __spread(this.chips.map(function (chip) { return chip.selectionChange; })));
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "chipFocusChanges", {
/** Combined stream of all of the child chips' focus change events. */
get: function () {
return merge.apply(void 0, __spread(this.chips.map(function (chip) { return chip._onFocus; })));
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "chipBlurChanges", {
/** Combined stream of all of the child chips' blur change events. */
get: function () {
return merge.apply(void 0, __spread(this.chips.map(function (chip) { return chip._onBlur; })));
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatChipList.prototype, "chipRemoveChanges", {
/** Combined stream of all of the child chips' remove change events. */
get: function () {
return merge.apply(void 0, __spread(this.chips.map(function (chip) { return chip.destroyed; })));
},
enumerable: true,
configurable: true
});
MatChipList.prototype.ngAfterContentInit = function () {
var _this = this;
this._keyManager = new FocusKeyManager(this.chips)
.withWrap()
.withVerticalOrientation()
.withHorizontalOrientation(this._dir ? this._dir.value : 'ltr');
if (this._dir) {
this._dir.change
.pipe(takeUntil(this._destroyed))
.subscribe(function (dir) { return _this._keyManager.withHorizontalOrientation(dir); });
}
this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(function () {
_this._allowFocusEscape();
});
// When the list changes, re-subscribe
this.chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(function () {
if (_this.disabled) {
// Since this happens after the content has been
// checked, we need to defer it to the next tick.
Promise.resolve().then(function () {
_this._syncChipsState();
});
}
_this._resetChips();
// Reset chips selected/deselected status
_this._initializeSelection();
// Check to see if we need to update our tab index
_this._updateTabIndex();
// Check to see if we have a destroyed chip and need to refocus
_this._updateFocusForDestroyedChips();
_this.stateChanges.next();
});
};
MatChipList.prototype.ngOnInit = function () {
this._selectionModel = new SelectionModel(this.multiple, undefined, false);
this.stateChanges.next();
};
MatChipList.prototype.ngDoCheck = function () {
if (this.ngControl) {
// We need to re-evaluate this on every change detection cycle, because there are some
// error triggers that we can't subscribe to (e.g. parent form submissions). This means
// that whatever logic is in here has to be super lean or we risk destroying the performance.
this.updateErrorState();
}
};
MatChipList.prototype.ngOnDestroy = function () {
this._destroyed.next();
this._destroyed.complete();
this.stateChanges.complete();
this._dropSubscriptions();
};
/** Associates an HTML input element with this chip list. */
MatChipList.prototype.registerInput = function (inputElement) {
this._chipInput = inputElement;
};
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
MatChipList.prototype.setDescribedByIds = function (ids) { this._ariaDescribedby = ids.join(' '); };
// Implemented as part of ControlValueAccessor.
MatChipList.prototype.writeValue = function (value) {
if (this.chips) {
this._setSelectionByValue(value, false);
}
};
// Implemented as part of ControlValueAccessor.
MatChipList.prototype.registerOnChange = function (fn) {
this._onChange = fn;
};
// Implemented as part of ControlValueAccessor.
MatChipList.prototype.registerOnTouched = function (fn) {
this._onTouched = fn;
};
// Implemented as part of ControlValueAccessor.
MatChipList.prototype.setDisabledState = function (isDisabled) {
this.disabled = isDisabled;
this.stateChanges.next();
};
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
MatChipList.prototype.onContainerClick = function (event) {
if (!this._originatesFromChip(event)) {
this.focus();
}
};
/**
* Focuses the first non-disabled chip in this chip list, or the associated input when there
* are no eligible chips.
*/
MatChipList.prototype.focus = function (options) {
if (this.disabled) {
return;
}
// TODO: ARIA says this should focus the first `selected` chip if any are selected.
// Focus on first element if there's no chipInput inside chip-list
if (this._chipInput && this._chipInput.focused) {
// do nothing
}
else if (this.chips.length > 0) {
this._keyManager.setFirstItemActive();
this.stateChanges.next();
}
else {
this._focusInput(options);
this.stateChanges.next();
}
};
/** Attempt to focus an input if we have one. */
MatChipList.prototype._focusInput = function (options) {
if (this._chipInput) {
this._chipInput.focus(options);
}
};
/**
* Pass events to the keyboard manager. Available here for tests.
*/
MatChipList.prototype._keydown = function (event) {
var target = event.target;
// If they are on an empty input and hit backspace, focus the last chip
if (event.keyCode === BACKSPACE && this._isInputEmpty(target)) {
this._keyManager.setLastItemActive();
event.preventDefault();
}
else if (target && target.classList.contains('mat-chip')) {
if (event.keyCode === HOME) {
this._keyManager.setFirstItemActive();
event.preventDefault();
}
else if (event.keyCode === END) {
this._keyManager.setLastItemActive();
event.preventDefault();
}
else {
this._keyManager.onKeydown(event);
}
this.stateChanges.next();
}
};
/**
* Check the tab index as you should not be allowed to focus an empty list.
*/
MatChipList.prototype._updateTabIndex = function () {
// If we have 0 chips, we should not allow keyboard focus
this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);
};
/**
* If the amount of chips changed, we need to update the
* key manager state and focus the next closest chip.
*/
MatChipList.prototype._updateFocusForDestroyedChips = function () {
// Move focus to the closest chip. If no other chips remain, focus the chip-list itself.
if (this._lastDestroyedChipIndex != null) {
if (this.chips.length) {
var newChipIndex = Math.min(this._lastDestroyedChipIndex, this.chips.length - 1);
this._keyManager.setActiveItem(newChipIndex);
}
else {
this.focus();
}
}
this._lastDestroyedChipIndex = null;
};
/**
* Utility to ensure all indexes are valid.
*
* @param index The index to be checked.
* @returns True if the index is valid for our list of chips.
*/
MatChipList.prototype._isValidIndex = function (index) {
return index >= 0 && index < this.chips.length;
};
MatChipList.prototype._isInputEmpty = function (element) {
if (element && element.nodeName.toLowerCase() === 'input') {
var input = element;
return !input.value;
}
return false;
};
MatChipList.prototype._setSelectionByValue = function (value, isUserInput) {
var _this = this;
if (isUserInput === void 0) { isUserInput = true; }
this._clearSelection();
this.chips.forEach(function (chip) { return chip.deselect(); });
if (Array.isArray(value)) {
value.forEach(function (currentValue) { return _this._selectValue(currentValue, isUserInput); });
this._sortValues();
}
else {
var correspondingChip = this._selectValue(value, isUserInput);
// Shift focus to the active item. Note that we shouldn't do this in multiple
// mode, because we don't know what chip the user interacted with last.
if (correspondingChip) {
if (isUserInput) {
this._keyManager.setActiveItem(correspondingChip);
}
}
}
};
/**
* Finds and selects the chip based on its value.
* @returns Chip that has the corresponding value.
*/
MatChipList.prototype._selectValue = function (value, isUserInput) {
var _this = this;
if (isUserInput === void 0) { isUserInput = true; }
var correspondingChip = this.chips.find(function (chip) {
return chip.value != null && _this._compareWith(chip.value, value);
});
if (correspondingChip) {
isUserInput ? correspondingChip.selectViaInteraction() : correspondingChip.select();
this._selectionModel.select(correspondingChip);
}
return correspondingChip;
};
MatChipList.prototype._initializeSelection = function () {
var _this = this;
// Defer setting the value in order to avoid the "Expression
// has changed after it was checked" errors from Angular.
Promise.resolve().then(function () {
if (_this.ngControl || _this._value) {
_this._setSelectionByValue(_this.ngControl ? _this.ngControl.value : _this._value, false);
_this.stateChanges.next();
}
});
};
/**
* Deselects every chip in the list.
* @param skip Chip that should not be deselected.
*/
MatChipList.prototype._clearSelection = function (skip) {
this._selectionModel.clear();
this.chips.forEach(function (chip) {
if (chip !== skip) {
chip.deselect();
}
});
this.stateChanges.next();
};
/**
* Sorts the model values, ensuring that they keep the same
* order that they have in the panel.
*/
MatChipList.prototype._sortValues = function () {
var _this = this;
if (this._multiple) {
this._selectionModel.clear();
this.chips.forEach(function (chip) {
if (chip.selected) {
_this._selectionModel.select(chip);
}
});
this.stateChanges.next();
}
};
/** Emits change event to set the model value. */
MatChipList.prototype._propagateChanges = function (fallbackValue) {
var valueToEmit = null;
if (Array.isArray(this.selected)) {
valueToEmit = this.selected.map(function (chip) { return chip.value; });
}
else {
valueToEmit = this.selected ? this.selected.value : fallbackValue;
}
this._value = valueToEmit;
this.change.emit(new MatChipListChange(this, valueToEmit));
this.valueChange.emit(valueToEmit);
this._onChange(valueToEmit);
this._changeDetectorRef.markForCheck();
};
/** When blurred, mark the field as touched when focus moved outside the chip list. */
MatChipList.prototype._blur = function () {
var _this = this;
if (!this._hasFocusedChip()) {
this._keyManager.setActiveItem(-1);
}
if (!this.disabled) {
if (this._chipInput) {
// If there's a chip input, we should check whether the focus moved to chip input.
// If the focus is not moved to chip input, mark the field as touched. If the focus moved
// to chip input, do nothing.
// Timeout is needed to wait for the focus() event trigger on chip input.
setTimeout(function () {
if (!_this.focused) {
_this._markAsTouched();
}
});
}
else {
// If there's no chip input, then mark the field as touched.
this._markAsTouched();
}
}
};
/** Mark the field as touched */
MatChipList.prototype._markAsTouched = function () {
this._onTouched();
this._changeDetectorRef.markForCheck();
this.stateChanges.next();
};
/**
* Removes the `tabindex` from the chip list and resets it back afterwards, allowing the
* user to tab out of it. This prevents the list from capturing focus and redirecting
* it back to the first chip, creating a focus trap, if it user tries to tab away.
*/
MatChipList.prototype._allowFocusEscape = function () {
var _this = this;
if (this._tabIndex !== -1) {
this._tabIndex = -1;
setTimeout(function () {
_this._tabIndex = _this._userTabIndex || 0;
_this._changeDetectorRef.markForCheck();
});
}
};
MatChipList.prototype._resetChips = function () {
this._dropSubscriptions();
this._listenToChipsFocus();
this._listenToChipsSelection();
this._listenToChipsRemoved();
};
MatChipList.prototype._dropSubscriptions = function () {
if (this._chipFocusSubscription) {
this._chipFocusSubscription.unsubscribe();
this._chipFocusSubscription = null;
}
if (this._chipBlurSubscription) {
this._chipBlurSubscription.unsubscribe();
this._chipBlurSubscription = null;
}
if (this._chipSelectionSubscription) {
this._chipSelectionSubscription.unsubscribe();
this._chipSelectionSubscription = null;
}
if (this._chipRemoveSubscription) {
this._chipRemoveSubscription.unsubscribe();
this._chipRemoveSubscription = null;
}
};
/** Listens to user-generated selection events on each chip. */
MatChipList.prototype._listenToChipsSelection = function () {
var _this = this;
this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(function (event) {
event.source.selected
? _this._selectionModel.select(event.source)
: _this._selectionModel.deselect(event.source);
// For single selection chip list, make sure the deselected value is unselected.
if (!_this.multiple) {
_this.chips.forEach(function (chip) {
if (!_this._selectionModel.isSelected(chip) && chip.selected) {
chip.deselect();
}
});
}
if (event.isUserInput) {
_this._propagateChanges();
}
});
};
/** Listens to user-generated selection events on each chip. */
MatChipList.prototype._listenToChipsFocus = function () {
var _this = this;
this._chipFocusSubscription = this.chipFocusChanges.subscribe(function (event) {
var chipIndex = _this.chips.toArray().indexOf(event.chip);
if (_this._isValidIndex(chipIndex)) {
_this._keyManager.updateActiveItem(chipIndex);
}
_this.stateChanges.next();
});
this._chipBlurSubscription = this.chipBlurChanges.subscribe(function () {
_this._blur();
_this.stateChanges.next();
});
};
MatChipList.prototype._listenToChipsRemoved = function () {
var _this = this;
this._chipRemoveSubscription = this.chipRemoveChanges.subscribe(function (event) {
var chip = event.chip;
var chipIndex = _this.chips.toArray().indexOf(event.chip);
// In case the chip that will be removed is currently focused, we temporarily store
// the index in order to be able to determine an appropriate sibling chip that will
// receive focus.
if (_this._isValidIndex(chipIndex) && chip._hasFocus) {
_this._lastDestroyedChipIndex = chipIndex;
}
});
};
/** Checks whether an event comes from inside a chip element. */
MatChipList.prototype._originatesFromChip = function (event) {
var currentElement = event.target;
while (currentElement && currentElement !== this._elementRef.nativeElement) {
if (currentElement.classList.contains('mat-chip')) {
return true;
}
currentElement = currentElement.parentElement;
}
return false;
};
/** Checks whether any of the chips is focused. */
MatChipList.prototype._hasFocusedChip = function () {
return this.chips.some(function (chip) { return chip._hasFocus; });
};
/** Syncs the list's state with the individual chips. */
MatChipList.prototype._syncChipsState = function () {
var _this = this;
if (this.chips) {
this.chips.forEach(function (chip) {
chip.disabled = _this._disabled;
chip._chipListMultiple = _this.multiple;
});
}
};
MatChipList.decorators = [
{ type: Component, args: [{
selector: 'mat-chip-list',
template: "<div class=\"mat-chip-list-wrapper\"><ng-content></ng-content></div>",
exportAs: 'matChipList',
host: {
'[attr.tabindex]': 'disabled ? null : _tabIndex',
'[attr.aria-describedby]': '_ariaDescribedby || null',
'[attr.aria-required]': 'role ? required : null',
'[attr.aria-disabled]': 'disabled.toString()',
'[attr.aria-invalid]': 'errorState',
'[attr.aria-multiselectable]': 'multiple',
'[attr.role]': 'role',
'[class.mat-chip-list-disabled]': 'disabled',
'[class.mat-chip-list-invalid]': 'errorState',
'[class.mat-chip-list-required]': 'required',
'[attr.aria-orientation]': 'ariaOrientation',
'class': 'mat-chip-list',
'(focus)': 'focus()',
'(blur)': '_blur()',
'(keydown)': '_keydown($event)',
'[id]': '_uid',
},
providers: [{ provide: MatFormFieldControl, useExisting: MatChipList }],
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".mat-chip{position:relative;overflow:hidden;box-sizing:border-box;-webkit-tap-highlight-color:transparent;transform:translateZ(0);border:none;-webkit-appearance:none;-moz-appearance:none}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:inline-flex;padding:7px 12px;border-radius:16px;align-items:center;cursor:default;min-height:32px;height:1px}._mat-animation-noopable.mat-standard-chip{transition:none;animation:none}.mat-standard-chip .mat-chip-remove.mat-icon{width:18px;height:18px}.mat-standard-chip::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;opacity:0;content:\"\";pointer-events:none;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-standard-chip:hover::after{opacity:.12}.mat-standard-chip:focus{outline:none}.mat-standard-chip:focus::after{opacity:.16}.cdk-high-contrast-active .mat-standard-chip{outline:solid 1px}.cdk-high-contrast-active .mat-standard-chip:focus{outline:dotted 2px}.mat-standard-chip.mat-chip-disabled::after{opacity:0}.mat-standard-chip.mat-chip-disabled .mat-chip-remove,.mat-standard-chip.mat-chip-disabled .mat-chip-trailing-icon{cursor:default}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:8px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:8px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:8px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:8px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:24px;height:24px;margin-right:8px;margin-left:4px}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:4px}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:8px;margin-left:0}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper input.mat-input-element,.mat-chip-list-wrapper .mat-standard-chip{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden;object-fit:cover}input.mat-chip-input{width:150px;margin:4px;flex:1 0 150px}\n"]
}] }
];
/** @nocollapse */
MatChipList.ctorParameters = function () { return [
{ type: ElementRef },
{ type: ChangeDetectorRef },
{ type: Directionality, decorators: [{ type: Optional }] },
{ type: NgForm, decorators: [{ type: Optional }] },
{ type: FormGroupDirective, decorators: [{ type: Optional }] },
{ type: ErrorStateMatcher },
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
]; };
MatChipList.propDecorators = {
errorStateMatcher: [{ type: Input }],
multiple: [{ type: Input }],
compareWith: [{ type: Input }],
value: [{ type: Input }],
required: [{ type: Input }],
placeholder: [{ type: Input }],
disabled: [{ type: Input }],
ariaOrientation: [{ type: Input, args: ['aria-orientation',] }],
selectable: [{ type: Input }],
tabIndex: [{ type: Input }],
change: [{ type: Output }],
valueChange: [{ type: Output }],
chips: [{ type: ContentChildren, args: [MatChip, {
// We need to use `descendants: true`, because Ivy will no longer match
// indirect descendants if it's left as false.
descendants: true
},] }]
};
return MatChipList;
}(_MatChipListMixinBase));
export { MatChipList };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL2NoaXBzL2NoaXAtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7O0FBRUgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQWUscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFFZixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsZUFBZSxHQUNoQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxLQUFLLEVBQWMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE9BQU8sRUFBdUMsTUFBTSxRQUFRLENBQUM7QUFJckUsa0RBQWtEO0FBQ2xELG9CQUFv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