blob: f58f0dbabe7eef2da91072f91ec3204b62235313 [file] [log] [blame]
{"version":3,"sources":["node_modules/tslib/tslib.es6.js","ng://@covalent/core/chips/chips.component.ts","ng://@covalent/core/chips/chips.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","tslib_1.__extends","TemplatePortalDirective","Directive","args","selector","TemplateRef","ViewContainerRef","TdChipDirective","templateRef","viewContainerRef","_super","call","TdAutocompleteOptionDirective","_changeDetectorRef","_TdChipsMixinBase","mixinControlValueAccessor","mixinDisabled","TdChipsBase","TdChipsComponent","defineProperty","_focused","_items","items","_setFirstOptionActive","markForCheck","_stacked","stacked","coerceBooleanProperty","_inputPosition","inputPosition","_requireMatch","requireMatch","_required","required","_chipAddition","chipAddition","_toggleInput","disabled","_chipRemoval","chipRemoval","canAddChip","placeholder","_color","color","_renderer","removeClass","_elementRef","nativeElement","addClass","_tabIndex","focusListener","event","_isMousedown","focus","preventDefault","mousedownListener","_this","timer","toPromise","then","clickListener","clickTarget","className","indexOf","stopPropagation","keydownListener","keyCode","TAB","removeFocusedState","ESCAPE","_inputChild","focused","_nativeInput","blur","_closeAutocomplete","ngOnInit","_inputValueChangesSubs","inputControl","valueChanges","pipe","debounceTime","debounce","subscribe","value","onInputChange","emit","ngAfterViewInit","_watchOutsideClick","ngDoCheck","length","_length","onChange","ngOnDestroy","_outsideClickSubs","unsubscribe","_setInternalClick","_internalClick","onDisabledChange","v","_handleAddChip","selectedOptions","_options","toArray","filter","option","active","setInactiveStyles","_autocompleteTrigger","activeOption","trim","addChip","setFocusedState","_openAutocomplete","setValue","findIndex","item","compareWith","push","onAdd","removeChip","index","removedValues","splice","_totalChips","_focusChip","onRemove","_handleChipBlur","onChipBlur","_handleChipFocus","onChipFocus","_handleFocus","_focusFirstChip","_inputKeydown","UP_ARROW","_internalActivateOption","LEFT_ARROW","DELETE","BACKSPACE","_focusLastChip","RIGHT_ARROW","_chipKeydown","canRemoveChip","DOWN_ARROW","_removeInputDisplay","panelOpen","openPanel","closePanel","_chipsChildren","enable","disable","forEach","setActiveStyles","_document","merge","fromEvent","_touchendDebounce","setTimeout","contains","onTouched","undefined","Component","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","inputs","template","changeDetection","ChangeDetectionStrategy","OnPush","ElementRef","Renderer2","Optional","type","Inject","DOCUMENT","ChangeDetectorRef","ViewChild","MatInput","MatAutocompleteTrigger","ViewChildren","MatChip","ContentChild","MatOption","Input","Output","HostBinding","HostListener","Subscription","EMPTY","FormControl","EventEmitter","o1","o2","CovalentChipsModule","NgModule","imports","ReactiveFormsModule","CommonModule","MatInputModule","MatIconModule","MatChipsModule","MatAutocompleteModule","declarations","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Component, Input, Output, forwardRef, DoCheck, ViewChild, ViewChildren, QueryList, OnInit, HostListener,\n ElementRef, Optional, Inject, Directive, TemplateRef, ViewContainerRef, ContentChild, ChangeDetectionStrategy,\n ChangeDetectorRef, AfterViewInit, OnDestroy, HostBinding, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { EventEmitter } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl } from '@angular/forms';\n\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { UP_ARROW, DOWN_ARROW, ESCAPE, LEFT_ARROW, RIGHT_ARROW, DELETE, BACKSPACE, ENTER, SPACE, TAB, HOME } from '@angular/cdk/keycodes';\nimport { MatChip } from '@angular/material/chips';\nimport { MatInput } from '@angular/material/input';\nimport { MatOption } from '@angular/material/core';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\nimport { Observable, Subscription, timer, merge, fromEvent } from 'rxjs';\nimport { filter, debounceTime } from 'rxjs/operators';\n\nimport { ICanDisable, mixinDisabled, IControlValueAccessor, mixinControlValueAccessor } from '@covalent/core/common';\n\n@Directive({\n selector: '[td-chip]ng-template',\n})\nexport class TdChipDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Directive({\n selector: '[td-autocomplete-option]ng-template',\n})\nexport class TdAutocompleteOptionDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\nexport class TdChipsBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdChipsMixinBase = mixinControlValueAccessor(mixinDisabled(TdChipsBase), []);\n\n@Component({\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdChipsComponent),\n multi: true,\n }],\n selector: 'td-chips',\n inputs: ['disabled', 'value'],\n styleUrls: ['./chips.component.scss' ],\n templateUrl: './chips.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdChipsComponent extends _TdChipsMixinBase implements IControlValueAccessor, DoCheck, OnInit, AfterViewInit, OnDestroy, ICanDisable {\n\n private _outsideClickSubs: Subscription = Subscription.EMPTY;\n private _inputValueChangesSubs: Subscription = Subscription.EMPTY;\n private _isMousedown: boolean = false;\n\n private _items: any[];\n private _length: number = 0;\n private _stacked: boolean = false;\n private _requireMatch: boolean = false;\n private _color: 'primary' | 'accent' | 'warn' = 'primary';\n private _inputPosition: 'before' | 'after' = 'after';\n private _chipAddition: boolean = true;\n private _chipRemoval: boolean = true;\n private _focused: boolean = false;\n private _required: boolean = false;\n private _tabIndex: number = 0;\n private _touchendDebounce: number = 100;\n\n _internalClick: boolean = false;\n _internalActivateOption: boolean = false;\n\n @ViewChild('input') _nativeInput: ElementRef;\n @ViewChild(MatInput) _inputChild: MatInput;\n @ViewChild(MatAutocompleteTrigger) _autocompleteTrigger: MatAutocompleteTrigger;\n @ViewChildren(MatChip) _chipsChildren: QueryList<MatChip>;\n\n @ContentChild(TdChipDirective) _chipTemplate: TdChipDirective;\n @ContentChild(TdAutocompleteOptionDirective) _autocompleteOptionTemplate: TdAutocompleteOptionDirective;\n\n @ViewChildren(MatOption) _options: QueryList<MatOption>;\n\n /**\n * Flag that is true when autocomplete is focused.\n */\n get focused(): boolean {\n return this._focused;\n }\n\n /**\n * FormControl for the matInput element.\n */\n inputControl: FormControl = new FormControl();\n\n /**\n * items?: any[]\n * Renders the `mat-autocomplete` with the provided list to display as options.\n */\n @Input('items')\n set items(items: any[]) {\n this._items = items;\n this._setFirstOptionActive();\n this._changeDetectorRef.markForCheck();\n }\n get items(): any[] {\n return this._items;\n }\n\n /**\n * stacked?: boolean\n * Set stacked or horizontal chips depending on value.\n * Defaults to false.\n */\n @Input('stacked')\n set stacked(stacked: boolean) {\n this._stacked = coerceBooleanProperty(stacked);\n }\n get stacked(): boolean {\n return this._stacked;\n }\n\n /**\n * inputPosition?: 'before' | 'after'\n * Set input position before or after the chips.\n * Defaults to 'after'.\n */\n @Input('inputPosition')\n set inputPosition(inputPosition: 'before' | 'after') {\n this._inputPosition = inputPosition;\n }\n get inputPosition(): 'before' | 'after' {\n return this._inputPosition;\n }\n\n /**\n * requireMatch?: boolean\n * Blocks custom inputs and only allows selections from the autocomplete list.\n */\n @Input('requireMatch')\n set requireMatch(requireMatch: boolean) {\n this._requireMatch = coerceBooleanProperty(requireMatch);\n }\n get requireMatch(): boolean {\n return this._requireMatch;\n }\n\n /**\n * required?: boolean\n * Value is set to true if at least one chip is needed\n * Defaults to false\n */\n @Input('required')\n set required(required: boolean) {\n this._required = coerceBooleanProperty(required);\n }\n get required(): boolean {\n return this._required;\n }\n\n /**\n * chipAddition?: boolean\n * Disables the ability to add chips. When setting disabled as true, this will be overriden.\n * Defaults to true.\n */\n @Input('chipAddition')\n set chipAddition(chipAddition: boolean) {\n this._chipAddition = chipAddition;\n this._toggleInput();\n }\n get chipAddition(): boolean {\n return this._chipAddition;\n }\n\n /**\n * Checks if not in disabled state and if chipAddition is set to 'true'\n * States if a chip can be added and if the input is available\n */\n get canAddChip(): boolean {\n return this.chipAddition && !this.disabled;\n }\n\n /**\n * chipRemoval?: boolean\n * Disables the ability to remove chips. If it doesn't exist chip remmoval defaults to true.\n * When setting disabled as true, this will be overriden to false.\n */\n @Input('chipRemoval')\n set chipRemoval(chipRemoval: boolean) {\n this._chipRemoval = chipRemoval;\n }\n get chipRemoval(): boolean {\n return this._chipRemoval;\n }\n\n /**\n * Checks if not in disabled state and if chipRemoval is set to 'true'\n * States if a chip can be removed\n */\n get canRemoveChip(): boolean {\n return this.chipRemoval && !this.disabled;\n }\n\n /**\n * returns the display placeholder\n */\n get displayPlaceHolder(): string {\n if (!this.canAddChip) {\n return '';\n }\n return (this._required) ? `${this.placeholder} *` : this.placeholder;\n }\n\n /**\n * placeholder?: string\n * Placeholder for the autocomplete input.\n */\n @Input('placeholder') placeholder: string;\n\n /**\n * debounce?: number\n * Debounce timeout between keypresses. Defaults to 200.\n */\n @Input('debounce') debounce: number = 200;\n\n /**\n * color?: 'primary' | 'accent' | 'warn'\n * Sets the color for the input and focus/selected state of the chips.\n * Defaults to 'primary'\n */\n @Input('color')\n set color(color: 'primary' | 'accent' | 'warn') {\n if (color) {\n this._renderer.removeClass(this._elementRef.nativeElement, 'mat-' + this._color);\n this._color = color;\n this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);\n }\n }\n get color(): 'primary' | 'accent' | 'warn' {\n return this._color;\n }\n\n /**\n * add?: function\n * Method to be executed when a chip is added.\n * Sends chip value as event.\n */\n @Output('add') onAdd: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * remove?: function\n * Method to be executed when a chip is removed.\n * Sends chip value as event.\n */\n @Output('remove') onRemove: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * inputChange?: function\n * Method to be executed when the value in the autocomplete input changes.\n * Sends string value as event.\n */\n @Output('inputChange') onInputChange: EventEmitter<string> = new EventEmitter<string>();\n\n /**\n * chipFocus?: function\n * Method to be executed when a chip is focused.\n * Sends chip value as event.\n */\n @Output('chipFocus') onChipFocus: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * blur?: function\n * Method to be executed when a chip is blurred.\n * Sends chip value as event.\n */\n @Output('chipBlur') onChipBlur: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Hostbinding to set the a11y of the TdChipsComponent depending on its state\n */\n @HostBinding('attr.tabindex')\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n constructor(private _elementRef: ElementRef,\n private _renderer: Renderer2,\n @Optional() @Inject(DOCUMENT) private _document: any,\n _changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);\n }\n\n /**\n * compareWith? function\n * Function used to check whether a chip value already exists.\n * Defaults to strict equality comparison ===\n */\n @Input('compareWith') compareWith: (o1: any, o2: any) => boolean = (o1: any, o2: any) => {\n return o1 === o2;\n }\n\n /**\n * Listens to host focus event to act on it\n */\n @HostListener('focus', ['$event'])\n focusListener(event: FocusEvent): void {\n // should only focus if its not via mousedown to prevent clashing with autocomplete\n if (!this._isMousedown) {\n this.focus();\n }\n event.preventDefault();\n }\n\n /**\n * Listens to host mousedown event to act on it\n */\n @HostListener('mousedown', ['$event'])\n mousedownListener(event: FocusEvent): void {\n // sets a flag to know if there was a mousedown and then it returns it back to false\n this._isMousedown = true;\n timer().toPromise().then(() => {\n this._isMousedown = false;\n });\n }\n\n /**\n * If clicking on :host or `td-chips-wrapper`, then we stop the click propagation so the autocomplete\n * doesnt close automatically.\n */\n @HostListener('click', ['$event'])\n clickListener(event: Event): void {\n const clickTarget: HTMLElement = <HTMLElement>event.target;\n if (clickTarget === this._elementRef.nativeElement ||\n clickTarget.className.indexOf('td-chips-wrapper') > -1) {\n this.focus();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * Listens to host keydown event to act on it depending on the keypress\n */\n @HostListener('keydown', ['$event'])\n keydownListener(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case TAB:\n // if tabing out, then unfocus the component\n timer().toPromise().then(() => {\n this.removeFocusedState();\n });\n break;\n case ESCAPE:\n if (this._inputChild.focused) {\n this._nativeInput.nativeElement.blur();\n this.removeFocusedState();\n this._closeAutocomplete();\n } else {\n this.focus();\n }\n break;\n default:\n // default\n }\n }\n\n ngOnInit(): void {\n this._inputValueChangesSubs = this.inputControl.valueChanges.pipe(\n debounceTime(this.debounce),\n ).subscribe((value: string) => {\n this.onInputChange.emit(value ? value : '');\n });\n this._changeDetectorRef.markForCheck();\n }\n\n ngAfterViewInit(): void {\n this._watchOutsideClick();\n this._changeDetectorRef.markForCheck();\n }\n\n ngDoCheck(): void {\n // Throw onChange event only if array changes size.\n if (this.value && this.value.length !== this._length) {\n this._length = this.value.length;\n this.onChange(this.value);\n }\n }\n\n ngOnDestroy(): void {\n this._outsideClickSubs.unsubscribe();\n this._inputValueChangesSubs.unsubscribe();\n }\n\n _setInternalClick(): void {\n this._internalClick = true;\n }\n\n /** Method executed when the disabled value changes */\n onDisabledChange(v: boolean): void {\n this._toggleInput();\n }\n\n /**\n * Method that is executed when trying to create a new chip from the autocomplete.\n * It check if [requireMatch] is enabled, and tries to add the first active option\n * else if just adds the value thats on the input\n * returns 'true' if successful, 'false' if it fails.\n */\n _handleAddChip(): boolean {\n let value: any;\n if (this.requireMatch) {\n let selectedOptions: MatOption[] = this._options.toArray().filter((option: MatOption) => {\n return option.active;\n });\n if (selectedOptions.length > 0) {\n value = selectedOptions[0].value;\n selectedOptions[0].setInactiveStyles();\n }\n if (!value) {\n return false;\n }\n } else {\n // if there is a selection, then use that\n // else use the input value as chip\n if (this._autocompleteTrigger.activeOption) {\n value = this._autocompleteTrigger.activeOption.value;\n this._autocompleteTrigger.activeOption.setInactiveStyles();\n } else {\n value = this._inputChild.value;\n if (value.trim() === '') {\n return false;\n }\n }\n }\n return this.addChip(value);\n }\n\n /**\n * Method thats exectuted when trying to add a value as chip\n * returns 'true' if successful, 'false' if it fails.\n */\n addChip(value: any): boolean {\n /**\n * add a debounce ms delay when reopening the autocomplete to give it time\n * to rerender the next list and at the correct spot\n */\n\n this._closeAutocomplete();\n timer(this.debounce).toPromise().then(() => {\n this.setFocusedState();\n this._setFirstOptionActive();\n this._openAutocomplete();\n });\n\n this.inputControl.setValue('');\n // check if value is already part of the model\n if (this.value.findIndex((item: any) => this.compareWith(item, value)) > -1) {\n return false;\n }\n\n this.value.push(value);\n this.onAdd.emit(value);\n this.onChange(this.value);\n this._changeDetectorRef.markForCheck();\n return true;\n }\n\n /**\n * Method that is executed when trying to remove a chip.\n * returns 'true' if successful, 'false' if it fails.\n */\n removeChip(index: number): boolean {\n let removedValues: any[] = this.value.splice(index, 1);\n if (removedValues.length === 0) {\n return false;\n }\n\n /**\n * Checks if deleting last single chip, to focus input afterwards\n * Else check if its not the last chip of the list to focus the next one.\n */\n if (index === (this._totalChips - 1) && index === 0) {\n this._inputChild.focus();\n } else if (index < (this._totalChips - 1)) {\n this._focusChip(index + 1);\n } else if (index > 0) {\n this._focusChip(index - 1);\n }\n\n this.onRemove.emit(removedValues[0]);\n this.onChange(this.value);\n this.inputControl.setValue('');\n this._changeDetectorRef.markForCheck();\n return true;\n }\n\n /**\n * Sets blur of chip and sends out event\n */\n _handleChipBlur(event: FocusEvent, value: any): void {\n this.onChipBlur.emit(value);\n }\n\n /**\n * Sets focus of chip and sends out event\n */\n _handleChipFocus(event: FocusEvent, value: any): void {\n this.setFocusedState();\n this.onChipFocus.emit(value);\n }\n\n _handleFocus(): boolean {\n this.setFocusedState();\n this._setFirstOptionActive();\n return true;\n }\n\n /**\n * Sets focus state of the component\n */\n setFocusedState(): void {\n if (!this.disabled) {\n this._focused = true;\n this._tabIndex = -1;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Removes focus state of the component\n */\n removeFocusedState(): void {\n this._focused = false;\n this._tabIndex = 0;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Programmatically focus the input or first chip. Since its the component entry point\n * depending if a user can add or remove chips\n */\n focus(): void {\n if (this.canAddChip) {\n this._inputChild.focus();\n } else if (!this.disabled) {\n this._focusFirstChip();\n }\n }\n\n /**\n * Passes relevant input key presses.\n */\n _inputKeydown(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case UP_ARROW:\n /**\n * Since the first item is highlighted on [requireMatch], we need to inactivate it\n * when pressing the up key\n */\n if (this.requireMatch) {\n let length: number = this._options.length;\n if (length > 1 && this._options.toArray()[0].active && this._internalActivateOption) {\n this._options.toArray()[0].setInactiveStyles();\n this._internalActivateOption = false;\n // prevent default window scrolling\n event.preventDefault();\n }\n }\n break;\n case LEFT_ARROW:\n case DELETE:\n case BACKSPACE:\n this._closeAutocomplete();\n /** Check to see if input is empty when pressing left arrow to move to the last chip */\n if (!this._inputChild.value) {\n this._focusLastChip();\n // prevent default window scrolling\n event.preventDefault();\n }\n break;\n case RIGHT_ARROW:\n this._closeAutocomplete();\n /** Check to see if input is empty when pressing right arrow to move to the first chip */\n if (!this._inputChild.value) {\n this._focusFirstChip();\n // prevent default window scrolling\n event.preventDefault();\n }\n break;\n default:\n // default\n }\n }\n\n /**\n * Passes relevant chip key presses.\n */\n _chipKeydown(event: KeyboardEvent, index: number): void {\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n /** Check to see if we can delete a chip */\n if (this.canRemoveChip) {\n this.removeChip(index);\n }\n break;\n case UP_ARROW:\n case LEFT_ARROW:\n /**\n * Check to see if left/down arrow was pressed while focusing the first chip to focus input next\n * Also check if input should be focused\n */\n if (index === 0) {\n // only try to target input if pressing left\n if (this.canAddChip && event.keyCode === LEFT_ARROW) {\n this._inputChild.focus();\n } else {\n this._focusLastChip();\n }\n } else if (index > 0) {\n this._focusChip(index - 1);\n }\n // prevent default window scrolling\n event.preventDefault();\n break;\n case DOWN_ARROW:\n case RIGHT_ARROW:\n /**\n * Check to see if right/up arrow was pressed while focusing the last chip to focus input next\n * Also check if input should be focused\n */\n if (index === (this._totalChips - 1)) {\n // only try to target input if pressing right\n if (this.canAddChip && event.keyCode === RIGHT_ARROW) {\n this._inputChild.focus();\n } else {\n this._focusFirstChip();\n }\n } else if (index < (this._totalChips - 1)) {\n this._focusChip(index + 1);\n }\n // prevent default window scrolling\n event.preventDefault();\n break;\n default:\n // default\n }\n }\n\n /**\n * Method to remove from display the value added from the autocomplete since it goes directly as chip.\n */\n _removeInputDisplay(): string {\n return '';\n }\n\n /**\n * Method to open the autocomplete manually if its not already opened\n */\n _openAutocomplete(): void {\n if (!this._autocompleteTrigger.panelOpen) {\n this._autocompleteTrigger.openPanel();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Method to close the autocomplete manually if its not already closed\n */\n _closeAutocomplete(): void {\n if (this._autocompleteTrigger.panelOpen) {\n this._autocompleteTrigger.closePanel();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Get total of chips\n */\n get _totalChips(): number {\n let chips: MatChip[] = this._chipsChildren.toArray();\n return chips.length;\n }\n\n /**\n * Method to focus a desired chip by index\n */\n private _focusChip(index: number): void {\n /** check to see if index exists in the array before focusing */\n if (index > -1 && this._totalChips > index) {\n this._chipsChildren.toArray()[index].focus();\n }\n }\n\n /** Method to focus first chip */\n private _focusFirstChip(): void {\n this._focusChip(0);\n }\n\n /** Method to focus last chip */\n private _focusLastChip(): void {\n this._focusChip(this._totalChips - 1);\n }\n\n /**\n * Method to toggle the disable state of input\n * Checks if not in disabled state and if chipAddition is set to 'true'\n */\n private _toggleInput(): void {\n if (this.canAddChip) {\n this.inputControl.enable();\n } else {\n this.inputControl.disable();\n }\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Sets first option as active to let the user know which one will be added when pressing enter\n * Only if [requireMatch] has been set\n */\n private _setFirstOptionActive(): void {\n if (this.requireMatch) {\n // need to use a timer here to wait until the autocomplete has been opened (end of queue)\n timer().toPromise().then(() => {\n if (this.focused && this._options && this._options.length > 0) {\n // clean up of previously active options\n this._options.toArray().forEach((option: MatOption) => {\n option.setInactiveStyles();\n });\n // set the first one as active\n this._options.toArray()[0].setActiveStyles();\n this._internalActivateOption = true;\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n }\n\n /**\n * Watches clicks outside of the component to remove the focus\n * The autocomplete panel is considered inside the component so we\n * need to use a flag to find out when its clicked.\n */\n private _watchOutsideClick(): void {\n if (this._document) {\n this._outsideClickSubs = merge(\n fromEvent(this._document, 'click'),\n fromEvent(this._document, 'touchend'),\n ).pipe(\n debounceTime(this._touchendDebounce),\n filter(\n (event: MouseEvent) => {\n const clickTarget: HTMLElement = <HTMLElement>event.target;\n setTimeout(() => {\n this._internalClick = false;\n });\n return this.focused &&\n (clickTarget !== this._elementRef.nativeElement) &&\n !this._elementRef.nativeElement.contains(clickTarget) && !this._internalClick;\n },\n ),\n ).subscribe(() => {\n if (this.focused) {\n this._autocompleteTrigger.closePanel();\n this.removeFocusedState();\n this.onTouched();\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n return undefined;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\n\nimport { TdChipsComponent, TdChipDirective, TdAutocompleteOptionDirective } from './chips.component';\n\n@NgModule({\n imports: [\n ReactiveFormsModule,\n CommonModule,\n MatInputModule,\n MatIconModule,\n MatChipsModule,\n MatAutocompleteModule,\n ],\n declarations: [\n TdChipsComponent,\n TdChipDirective,\n TdAutocompleteOptionDirective,\n ],\n exports: [\n TdChipsComponent,\n TdChipDirective,\n TdAutocompleteOptionDirective,\n ],\n})\nexport class CovalentChipsModule {\n\n}\n"]}