@blox/material
Version:
Material Components for Angular
702 lines • 94.2 kB
JavaScript
import { ContentChildren, Directive, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, ChangeDetectorRef, HostListener, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { MDCChipFoundation, MDCChipSetFoundation } from '@material/chips';
import { announce } from '../../utils/thirdparty.announce';
import { AbstractMdcRipple } from '../ripple/abstract.mdc.ripple';
import { MdcEventRegistry } from '../../utils/mdc.event.registry';
import { asBoolean } from '../../utils/value.utils';
export var ChipEventSource;
(function (ChipEventSource) {
ChipEventSource[ChipEventSource["primary"] = 0] = "primary";
ChipEventSource[ChipEventSource["trailing"] = 1] = "trailing";
ChipEventSource[ChipEventSource["none"] = 2] = "none";
})(ChipEventSource || (ChipEventSource = {}));
;
/**
* Directive for the (optional) leading or trailing icon of an `mdcChip`.
* Depending on the position within the `mdcChip` the icon will determine
* whether it is a leading or trailing icon.
* Trailing icons must implement the functionality to remove the chip from the set, and
* must only be added to input chips (`mdcChipSet="input"`). Chips with a trailing
* icon must implement the `remove` event. Trailing icons should be wrapped
* inside an `mdcChipCell`.
*/
export class MdcChipIconDirective {
constructor(_elm, _rndr, _cdRef) {
this._elm = _elm;
this._rndr = _rndr;
this._cdRef = _cdRef;
/** @internal */
this._cls = true;
/** @internal */
this._leading = false;
/**
* Event emitted for trailing icon user interactions. Please note that chip removal should be
* handled by the `remove` output of the chip, *not* by a handler for this output.
*/
this.interact = new EventEmitter();
/** @internal */
this._trailing = false;
this._originalTabindex = null;
this.__tabindex = -1;
this.__role = null;
/** @internal */
this._chip = null;
this.__role = _elm.nativeElement.getAttribute('role');
let tabIndex = _elm.nativeElement.getAttribute('tabindex');
if (tabIndex) {
this._originalTabindex = +tabIndex;
this.__tabindex = +tabIndex;
}
}
ngOnDestroy() {
this._chip = null;
}
/** @internal */
get _tabindex() {
return this._trailing ? this.__tabindex : this._originalTabindex;
}
/** @internal */
set _tabindex(val) {
this.__tabindex = val == null ? -1 : val;
}
/** @internal */
get _role() {
if (this.__role)
return this.__role;
return this._trailing ? 'button' : null;
}
/** @internal */
_handleClick(event) {
var _a;
if (this._chip && this._trailing)
(_a = this._chip._foundation) === null || _a === void 0 ? void 0 : _a.handleTrailingIconInteraction(event);
}
/** @internal */
_handleInteraction(event) {
var _a;
if (this._chip && this._trailing)
(_a = this._chip._foundation) === null || _a === void 0 ? void 0 : _a.handleTrailingIconInteraction(event);
}
}
MdcChipIconDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcChipIcon]'
},] }
];
MdcChipIconDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: ChangeDetectorRef }
];
MdcChipIconDirective.propDecorators = {
_cls: [{ type: HostBinding, args: ['class.mdc-chip__icon',] }],
_leading: [{ type: HostBinding, args: ['class.mdc-chip__icon--leading',] }],
interact: [{ type: Output }],
_trailing: [{ type: HostBinding, args: ['class.mdc-chip__icon--trailing',] }],
_tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }],
_role: [{ type: HostBinding, args: ['attr.role',] }],
_handleClick: [{ type: HostListener, args: ['click', ['$event'],] }],
_handleInteraction: [{ type: HostListener, args: ['keydown', ['$event'],] }]
};
/**
* Directive for the text of an `mdcChip`. Must be contained in an `mdcChipPrimaryAction`
* directive.
*/
export class MdcChipTextDirective {
constructor(_elm) {
this._elm = _elm;
this._cls = true;
}
}
MdcChipTextDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcChipText]'
},] }
];
MdcChipTextDirective.ctorParameters = () => [
{ type: ElementRef }
];
MdcChipTextDirective.propDecorators = {
_cls: [{ type: HostBinding, args: ['class.mdc-chip__text',] }]
};
/**
* Directive for the primary action element of a chip. The `mdcChipPrimaryAction` must
* contain the `mdcChipText` directive, and be contained by an `mdcChipCell` directive.
*/
export class MdcChipPrimaryActionDirective {
constructor(_elm) {
this._elm = _elm;
/** @internal */
this._cls = true;
this.__tabindex = -1;
/** @internal */
this.__role = 'button';
this.__tabindex = +(this._elm.nativeElement.getAttribute('tabindex') || -1);
}
/** @internal */
get _role() {
return this.__role;
}
/** @internal */
get _tabindex() {
return this.__tabindex;
}
/** @internal */
set _tabindex(val) {
this.__tabindex = val;
}
}
MdcChipPrimaryActionDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcChipPrimaryAction]'
},] }
];
MdcChipPrimaryActionDirective.ctorParameters = () => [
{ type: ElementRef }
];
MdcChipPrimaryActionDirective.propDecorators = {
_cls: [{ type: HostBinding, args: ['class.mdc-chip__primary-action',] }],
_role: [{ type: HostBinding, args: ['attr.role',] }],
_tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }]
};
/**
* Directive for the main content of a chip, or for an optional trailing
* action on `input` chips. This directive must contain an
* `mdcChipPrimaryActione` or an `mdcChipIcon` (when used for the trailing action).
* An `mdcChipCell` must always be the direct child of an `mdcChip`.
*/
export class MdcChipCellDirective {
constructor(_elm) {
this._elm = _elm;
/** @internal */
this._role = 'gridcell';
}
}
MdcChipCellDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcChipCell]'
},] }
];
MdcChipCellDirective.ctorParameters = () => [
{ type: ElementRef }
];
MdcChipCellDirective.propDecorators = {
_role: [{ type: HostBinding, args: ['attr.role',] }]
};
/**
* Directive for a chip. Chips must be child elements of an `mdcChipSet`,
* and must contain an `mdcChipCell`, and may additionally contain an `mdcChipIcon` for
* the leading icon. An optional trailing icon must be wrapped in a second `mdcChipCell`.
*/
export class MdcChipDirective extends AbstractMdcRipple {
constructor(_elm, rndr, registry, doc) {
super(_elm, rndr, registry, doc);
this._elm = _elm;
/** @internal */
this._cls = true;
/** @internal */
this._role = 'row';
this.initialized = false;
this.selectedMem = false;
this.removableMem = true;
this._value = null;
/**
* Event emitted for user interaction with the chip.
*/
this.interact = new EventEmitter();
/**
* Event emitted when the user has removed (by clicking the trailing icon) the chip.
* This event must be implemented when the `removable` property is set, and the chip
* has a trailing icon. The implementation must remove the chip from the set.
* Without such implementation the directive will animate the chip out of vision,
* but will not remove the chip from the DOM.
*/
this.remove = new EventEmitter();
/**
* Event emitted when a navigation event has occured.
*/
this.navigation = new EventEmitter();
/**
* Event emitted when the chip changes from not-selected to selected state or vice versa
* (for filter and choice chips).
*/
this.selectedChange = new EventEmitter();
// Like selectedChange, but only the events that should go to the chipset (i.e. not including the ones initiated by the chipset)
/** @internal */
this._selectedForChipSet = new EventEmitter();
/** @internal */
this._notifyRemoval = new EventEmitter();
/** @internal */
this._set = null;
this._checkmark = null;
this._leadingIcon = null;
this._trailingIcon = null;
this._adapter = {
addClass: (className) => {
const hasClass = this._elm.nativeElement.classList.contains(className);
this._renderer.addClass(this._elm.nativeElement, className);
if (!hasClass && className === 'mdc-chip--selected') {
this.selectedMem = true;
this.selectedChange.emit(true);
}
},
removeClass: (className) => {
const hasClass = this._elm.nativeElement.classList.contains(className);
this._renderer.removeClass(this._elm.nativeElement, className);
if (hasClass && className === 'mdc-chip--selected') {
this.selectedMem = false;
this.selectedChange.emit(false);
}
},
hasClass: (className) => this._elm.nativeElement.classList.contains(className),
addClassToLeadingIcon: (className) => this._leadingIcon && this._renderer.addClass(this._leadingIcon._elm.nativeElement, className),
removeClassFromLeadingIcon: (className) => this._leadingIcon && this._renderer.removeClass(this._leadingIcon._elm.nativeElement, className),
eventTargetHasClass: (target, className) => !!target && target.classList.contains(className),
getAttribute: (attr) => this._elm.nativeElement.getAttribute(attr),
notifyInteraction: () => this.interact.emit(),
notifySelection: (selected, chipSetShouldIgnore) => {
if (!chipSetShouldIgnore)
this._selectedForChipSet.emit(selected);
},
notifyTrailingIconInteraction: () => this._trailingIcon.interact.emit(),
notifyRemoval: (removedAnnouncement) => this._notifyRemoval.emit({ removedAnnouncement }),
notifyNavigation: (key, source) => this.navigation.emit({ key, source: source }),
getComputedStyleValue: (propertyName) => getComputedStyle(this._elm.nativeElement).getPropertyValue(propertyName),
setStyleProperty: (style, value) => this._renderer.setStyle(this._elm.nativeElement, style, value),
hasLeadingIcon: () => !!this._leadingIcon,
getRootBoundingClientRect: () => this._elm.nativeElement.getBoundingClientRect(),
getCheckmarkBoundingClientRect: () => { var _a; return ((_a = this._checkmark) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) || null; },
setPrimaryActionAttr: (attr, value) => this._primaryAction && this._renderer.setAttribute(this._primaryAction._elm.nativeElement, attr, value),
focusPrimaryAction: () => { var _a; return (_a = this._primaryAction) === null || _a === void 0 ? void 0 : _a._elm.nativeElement.focus(); },
hasTrailingAction: () => !!this._trailingIcon,
setTrailingActionAttr: (attr, value) => this._trailingIcon && this._renderer.setAttribute(this._trailingIcon._elm.nativeElement, attr, value),
focusTrailingAction: () => { var _a; return (_a = this._trailingIcon) === null || _a === void 0 ? void 0 : _a._elm.nativeElement.focus(); },
isRTL: () => getComputedStyle(this._elm.nativeElement).getPropertyValue('direction') === 'rtl'
};
/** @internal */
this._foundation = new MDCChipFoundation(this._adapter);
this._uniqueValue = `mdc-chip-${MdcChipDirective.nextValue++}`;
}
ngAfterContentInit() {
this.initActions();
this.initIcons();
this._icons.changes.subscribe(() => this._reInit());
this._texts.changes.subscribe(() => this._reInit());
this._primaryActions.changes.subscribe(() => this._reInit());
this._chipCells.changes.subscribe(() => this._reInit());
this.addRippleSurface('mdc-chip__ripple');
this.initCheckMark();
this.initRipple();
this._foundation.init();
if (this.selectedMem)
// triggers setting the foundation selected state (and possibly for other [choice] chips too):
this.selected = this.selectedMem;
if (!this.removableMem)
this._foundation.setShouldRemoveOnTrailingIconClick(this.removableMem);
this.initialized = true;
}
ngOnDestroy() {
this.destroyRipple();
this._foundation.destroy();
}
/** @internal */
_reInit() {
// if icons have changed, the foundation must be reinitialized, because
// trailingIconInteractionHandler might have to be removed and/or attached
// to another icon:
this._foundation.destroy();
this._foundation = new MDCChipFoundation(this._adapter);
this.initActions();
this.initIcons();
this.initCheckMark();
this._foundation.init();
if (!this.removableMem)
this._foundation.setShouldRemoveOnTrailingIconClick(this.removableMem);
// no need to call setSelected again, as the previous state will still be available via
// the mdc-chip--selected class
}
initActions() {
if (this._set) {
let role = 'button';
if (this._set._type === 'choice')
role = 'radio';
else if (this._set._type === 'filter')
role = 'checkbox';
this._primaryActions.forEach(action => {
action.__role = role;
});
}
}
initIcons() {
let newLeading = this.computeLeadingIcon();
let newTrailing = this.computeTrailingIcon(newLeading);
if (newLeading !== this._leadingIcon || newTrailing !== this._trailingIcon) {
this._leadingIcon = newLeading;
this._trailingIcon = newTrailing;
this._icons.forEach(icon => {
icon._chip = this;
let leading = icon === this._leadingIcon;
let trailing = icon === this._trailingIcon;
let changed = leading !== icon._leading || trailing !== icon._trailing;
icon._leading = icon === this._leadingIcon;
icon._trailing = icon === this._trailingIcon;
if (changed) // if we don't do this we get ExpressionChangedAfterItHasBeenCheckedError:
icon._cdRef.detectChanges();
});
this.removeCheckMark(); // checkmark may have changed position, will be readded later (for filter chips)
}
}
get _text() {
var _a;
return (_a = this._texts) === null || _a === void 0 ? void 0 : _a.first;
}
get _primaryAction() {
var _a;
return (_a = this._primaryActions) === null || _a === void 0 ? void 0 : _a.first;
}
get _chipCell() {
var _a;
return (_a = this._chipCells) === null || _a === void 0 ? void 0 : _a.first;
}
computeLeadingIcon() {
if (this._icons && this._icons.length > 0) {
let icon = this._icons.first;
let prev = this.previousElement(icon._elm.nativeElement);
let last = icon._elm.nativeElement;
while (true) {
// if it is contained in another element, check the siblings of the container too:
if (prev == null && last != null && last.parentElement !== this._elm.nativeElement)
prev = last.parentElement;
// no more elements before, must be the leading icon:
if (prev == null)
return icon;
// comes after the text, so it's not the leading icon:
if (this._text && (prev === this._text._elm.nativeElement || prev.contains(this._text._elm.nativeElement)))
return null;
last = prev;
prev = this.previousElement(prev);
}
}
return null;
}
computeTrailingIcon(leading) {
if (this._icons.length > 0) {
let icon = this._icons.last;
if (icon === leading)
return null;
// if not the leading icon, it must be the trailing icon:
return icon;
}
return null;
}
previousElement(el) {
let result = el.previousSibling;
while (result != null && !(result instanceof Element))
result = result.previousSibling;
return result;
}
initCheckMark() {
if (this._set && this._set._type === 'filter')
this.addCheckMark();
else
this.removeCheckMark();
}
addCheckMark() {
if (!this._checkmark && this._chipCell) {
let path = this._renderer.createElement('path', 'svg');
this._renderer.addClass(path, 'mdc-chip__checkmark-path');
this._renderer.setAttribute(path, 'fill', 'none');
this._renderer.setAttribute(path, 'stroke', 'black');
this._renderer.setAttribute(path, 'd', 'M1.73,12.91 8.1,19.28 22.79,4.59');
let svg = this._renderer.createElement('svg', 'svg');
this._renderer.appendChild(svg, path);
this._renderer.addClass(svg, 'mdc-chip__checkmark-svg');
this._renderer.setAttribute(svg, 'viewBox', '-2 -3 30 30');
this._checkmark = this._renderer.createElement('div');
this._renderer.appendChild(this._checkmark, svg);
this._renderer.addClass(this._checkmark, 'mdc-chip__checkmark');
this._renderer.insertBefore(this._elm.nativeElement, this._checkmark, this._chipCell._elm.nativeElement);
}
}
removeCheckMark() {
if (this._checkmark) {
this._checkmark.parentElement.removeChild(this._checkmark);
this._checkmark = null;
}
}
/**
* The value the chip represents. The value must be unique for the `mdcChipSet`. If you do not provide a value
* a unique value will be computed automatically.
*/
get value() {
return this._value ? this._value : this._uniqueValue;
}
set value(val) {
this._value = val;
}
/**
* The 'selected' state of the chip. Filter and choice chips are either selected or
* not selected. Making a choice chip selected, will make all other chips in that set
* not selected.
*/
get selected() {
return this.initialized ? this._foundation.isSelected() : this.selectedMem;
}
set selected(val) {
let value = asBoolean(val);
this.selectedMem = value;
if (this.initialized && value !== this._foundation.isSelected())
this._foundation.setSelected(value);
// when not initialized the selectedChange will be emitted via the foundation after
// initialization
}
/**
* If set to a value other than `false`, clicking the trailing icon will animate the
* chip out of view, and then emit the `remove` output.
*/
get removable() {
return this.initialized ? this._foundation.getShouldRemoveOnTrailingIconClick() : this.removableMem;
}
set removable(val) {
let value = asBoolean(val);
this.removableMem = value;
if (this.initialized && value !== this._foundation.getShouldRemoveOnTrailingIconClick())
this._foundation.setShouldRemoveOnTrailingIconClick(value);
// when not initialized the removable change will be set on the foundation after
// initialization
}
/** @docs-private */
computeRippleBoundingRect() {
return this._foundation.getDimensions();
}
/** @internal */
_handleInteraction(event) {
var _a;
(_a = this._foundation) === null || _a === void 0 ? void 0 : _a.handleInteraction(event);
}
/** @internal */
_handleTransitionEnd(event) {
var _a;
(_a = this._foundation) === null || _a === void 0 ? void 0 : _a.handleTransitionEnd(event);
}
/** @internal */
_handleKeydown(event) {
var _a, _b;
(_a = this._foundation) === null || _a === void 0 ? void 0 : _a.handleKeydown(event);
(_b = this._foundation) === null || _b === void 0 ? void 0 : _b.handleInteraction(event);
}
/** @internal */
_untabbable() {
if (this._primaryAction)
this._primaryAction._tabindex = -1;
if (this._trailingIcon)
this._trailingIcon._tabindex = -1;
}
/** @internal */
_allowtabbable() {
let result = !!this._primaryAction && this._primaryAction._tabindex !== -1;
if (result && this._trailingIcon)
this._trailingIcon._tabindex = -1;
if (!result)
result = !!this._trailingIcon && this._trailingIcon._tabindex != null && this._trailingIcon._tabindex !== -1;
return result;
}
/** @internal */
_forceTabbable() {
if (this._primaryAction)
this._primaryAction._tabindex = 0;
else if (this._trailingIcon)
this._trailingIcon._tabindex = 0;
}
}
/** @internal */
MdcChipDirective.nextValue = 1; // for computing a unique value, if no value was provided
MdcChipDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcChip]'
},] }
];
MdcChipDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: MdcEventRegistry },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
];
MdcChipDirective.propDecorators = {
_cls: [{ type: HostBinding, args: ['class.mdc-chip',] }],
_role: [{ type: HostBinding, args: ['attr.role',] }],
interact: [{ type: Output }],
remove: [{ type: Output }],
navigation: [{ type: Output }],
selectedChange: [{ type: Output }],
_selectedForChipSet: [{ type: Output }],
_notifyRemoval: [{ type: Output }],
_icons: [{ type: ContentChildren, args: [MdcChipIconDirective, { descendants: true },] }],
_texts: [{ type: ContentChildren, args: [MdcChipTextDirective, { descendants: true },] }],
_primaryActions: [{ type: ContentChildren, args: [MdcChipPrimaryActionDirective, { descendants: true },] }],
_chipCells: [{ type: ContentChildren, args: [MdcChipCellDirective,] }],
value: [{ type: Input }],
selected: [{ type: Input }],
removable: [{ type: HostBinding, args: ['class.mdc-chip--deletable',] }, { type: Input }],
_handleInteraction: [{ type: HostListener, args: ['click', ['$event'],] }],
_handleTransitionEnd: [{ type: HostListener, args: ['transitionend', ['$event'],] }],
_handleKeydown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
};
/**
* Directive for a chip-set (a collection of <code>mdcChip</code>).
*/
export class MdcChipSetDirective {
constructor(_elm, cdRef) {
this._elm = _elm;
this.cdRef = cdRef;
/** @internal */
this._cls = true;
/** @internal */
this._role = 'grid';
this._subscriptions = [];
this._initialized = false;
/** @internal */
this._type = 'action';
/** @internal */
this._adapter = {
hasClass: (className) => this._elm.nativeElement.classList.contains(className),
removeChipAtIndex: (index) => {
this.chip(index).remove.emit();
// needed so that when focusChipTrailingActionAtIndex is called the
// chip has already been removed from the DOM:
this.cdRef.detectChanges();
},
selectChipAtIndex: (index, selected, shouldNotifyClients) => {
var _a;
(_a = this.chip(index)) === null || _a === void 0 ? void 0 : _a._foundation.setSelectedFromChipSet(selected, shouldNotifyClients);
},
getIndexOfChipById: (chipValue) => this.findChipIndex(chipValue),
focusChipPrimaryActionAtIndex: (index) => { var _a; return (_a = this.chip(index)) === null || _a === void 0 ? void 0 : _a._foundation.focusPrimaryAction(); },
focusChipTrailingActionAtIndex: (index) => { var _a; return (_a = this.chip(index)) === null || _a === void 0 ? void 0 : _a._foundation.focusTrailingAction(); },
removeFocusFromChipAtIndex: (index) => { var _a; return (_a = this.chip(index)) === null || _a === void 0 ? void 0 : _a._foundation.removeFocus(); },
isRTL: () => getComputedStyle(this._elm.nativeElement).getPropertyValue('direction') === 'rtl',
getChipListCount: () => this._chips.length,
announceMessage: (message) => announce(message)
};
/** @internal */
this._foundation = new MDCChipSetFoundation(this._adapter);
}
ngAfterContentInit() {
this._chips.changes.subscribe(() => {
this.initSubscriptions();
this.initChips();
this.cdRef.detectChanges();
});
this.initSubscriptions();
this.initChips();
this._foundation.init();
this._initialized = true;
this.cdRef.detectChanges();
}
ngOnDestroy() {
var _a;
(_a = this._foundation) === null || _a === void 0 ? void 0 : _a.destroy();
this._foundation = null;
this.destroySubscriptions();
this._initialized = false;
}
/**
* Chip sets by default contain 'action' chips. Set this value to <code>choice</code>,
* <code>filter</code>, <code>input</code>, or <code>action</code> to determine the kind
* of chips that are contained in the chip set.
*/
get mdcChipSet() {
return this._type;
}
set mdcChipSet(value) {
if (value !== this._type) {
if (value === 'choice' || value === 'filter' || value === 'input')
this._type = value;
else
this._type = 'action';
if (this._initialized)
this.initChips(true);
}
}
initChips(force = false) {
let hasTabbableItem = false;
this._chips.forEach(chip => {
if (force || chip._set !== this) {
chip._set = this;
chip._reInit();
}
if (hasTabbableItem)
chip._untabbable();
else
hasTabbableItem = chip._allowtabbable();
});
if (!hasTabbableItem && this._chips.length > 0)
this._chips.first._forceTabbable();
}
destroySubscriptions() {
try {
this._subscriptions.forEach(sub => sub.unsubscribe());
}
finally {
this._subscriptions = [];
}
}
initSubscriptions() {
this.destroySubscriptions();
this._subscriptions = [];
this._chips.forEach(chip => {
this._subscriptions.push(chip.interact.subscribe(() => this._foundation.handleChipInteraction({ chipId: chip.value })));
this._subscriptions.push(chip._selectedForChipSet.subscribe((selected) => this._foundation.handleChipSelection({ chipId: chip.value, selected, shouldIgnore: false })));
this._subscriptions.push(chip._notifyRemoval.subscribe(({ removedAnnouncement }) => this._foundation.handleChipRemoval({ chipId: chip.value, removedAnnouncement })));
this._subscriptions.push(chip.navigation.subscribe(({ key, source }) => this._foundation.handleChipNavigation({ chipId: chip.value, key, source })));
});
}
chip(index) {
if (index < 0 || index >= this._chips.length)
return null;
return this._chips.toArray()[index];
}
findChipIndex(chipValue) {
return this._chips.toArray().findIndex(chip => chip.value === chipValue);
}
/** @internal */
get _choice() {
return this._type === 'choice';
}
/** @internal */
get _filter() {
return this._type === 'filter';
}
/** @internal */
get _input() {
return this._type === 'input';
}
}
MdcChipSetDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcChipSet]'
},] }
];
MdcChipSetDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: ChangeDetectorRef }
];
MdcChipSetDirective.propDecorators = {
_cls: [{ type: HostBinding, args: ['class.mdc-chip-set',] }],
_role: [{ type: HostBinding, args: ['attr.role',] }],
_chips: [{ type: ContentChildren, args: [MdcChipDirective, { descendants: true },] }],
mdcChipSet: [{ type: Input }],
_choice: [{ type: HostBinding, args: ['class.mdc-chip-set--choice',] }],
_filter: [{ type: HostBinding, args: ['class.mdc-chip-set--filter',] }],
_input: [{ type: HostBinding, args: ['class.mdc-chip-set--input',] }]
};
export const CHIP_DIRECTIVES = [
MdcChipIconDirective,
MdcChipTextDirective,
MdcChipPrimaryActionDirective,
MdcChipCellDirective,
MdcChipDirective,
MdcChipSetDirective
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRjLmNoaXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2hpcHMvbWRjLmNoaXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsZUFBZSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQ3JGLE1BQU0sRUFBYSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFxQyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHcEQsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN2QiwyREFBNkIsQ0FBQTtJQUM3Qiw2REFBK0IsQ0FBQTtJQUMvQixxREFBdUIsQ0FBQTtBQUMzQixDQUFDLEVBSlcsZUFBZSxLQUFmLGVBQWUsUUFJMUI7QUFBQSxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBa0I3QixZQUFtQixJQUFnQixFQUFVLEtBQWdCLEVBQVMsTUFBeUI7UUFBNUUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQVc7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQWpCL0YsZ0JBQWdCO1FBQzhCLFNBQUksR0FB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