{"version":3,"file":"ngx-chips.mjs","sources":["../../modules/core/pipes/highlight.pipe.ts","../../modules/core/constants/index.ts","../../modules/core/providers/drag-provider.ts","../../modules/defaults.ts","../../modules/core/providers/options-provider.ts","../../modules/core/accessor.ts","../../modules/core/helpers/listen.ts","../../modules/components/tag-input-form/tag-input-form.component.ts","../../modules/components/tag-input-form/tag-input-form.template.html","../../modules/components/tag/tag-ripple.component.ts","../../modules/components/icon/icon.ts","../../modules/components/icon/icon.html","../../modules/components/tag/tag.component.ts","../../modules/components/tag/tag.template.html","../../modules/components/tag-input/animations.ts","../../modules/components/dropdown/tag-input-dropdown.component.ts","../../modules/components/dropdown/tag-input-dropdown.template.html","../../modules/components/tag-input/tag-input.ts","../../modules/components/tag-input/tag-input.template.html","../../modules/tag-input.module.ts","../../modules/ngx-chips.ts"],"sourcesContent":["import {Pipe, PipeTransform} from '@angular/core';\n\nconst escape = s => s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n@Pipe({\n name: 'highlight'\n})\nexport class HighlightPipe implements PipeTransform {\n /**\n * @name transform\n * @param value {string}\n * @param arg {string}\n */\n public transform(value: string, arg: string): string {\n if (!arg.trim()) {\n return value;\n }\n\n try {\n const regex = new RegExp(`(${escape(arg)})`, 'i');\n return value.replace(regex, '$1');\n } catch (e) {\n return value;\n }\n }\n}\n","/*\n** constants and default values for \n */\n\nexport const PLACEHOLDER = '+ Tag';\nexport const SECONDARY_PLACEHOLDER = 'Enter a new tag';\nexport const KEYDOWN = 'keydown';\nexport const KEYUP = 'keyup';\nexport const FOCUS = 'focus';\nexport const MAX_ITEMS_WARNING = 'The number of items specified was greater than the property max-items.';\n\nexport const ACTIONS_KEYS = {\n DELETE: 'DELETE',\n SWITCH_PREV: 'SWITCH_PREV',\n SWITCH_NEXT: 'SWITCH_NEXT',\n TAB: 'TAB'\n};\n\nexport const KEY_PRESS_ACTIONS = {\n 8: ACTIONS_KEYS.DELETE,\n 46: ACTIONS_KEYS.DELETE,\n 37: ACTIONS_KEYS.SWITCH_PREV,\n 39: ACTIONS_KEYS.SWITCH_NEXT,\n 9: ACTIONS_KEYS.TAB\n};\n\nexport const DRAG_AND_DROP_KEY = 'Text';\nexport const NEXT = 'NEXT';\nexport const PREV = 'PREV';\n\n","import { TagInputComponent } from '../../components/tag-input/tag-input';\nimport { TagModel } from '../tag-model';\n\nimport { Injectable } from '@angular/core';\n\nexport declare interface DraggedTag {\n index: number;\n tag: TagModel;\n zone: string;\n}\n\nimport { DRAG_AND_DROP_KEY } from '../../core/constants';\n\nexport declare interface State {\n dragging: boolean;\n dropping: boolean;\n index: number | undefined;\n}\n\nexport declare type StateProperty = keyof State;\n\n@Injectable()\nexport class DragProvider {\n public sender: TagInputComponent;\n public receiver: TagInputComponent;\n\n public state: State = {\n dragging: false,\n dropping: false,\n index: undefined\n };\n\n /**\n * @name setDraggedItem\n * @param event\n * @param tag\n */\n public setDraggedItem(event: DragEvent, tag: DraggedTag): void {\n if (event && event.dataTransfer) {\n event.dataTransfer.setData(DRAG_AND_DROP_KEY, JSON.stringify(tag));\n }\n }\n\n /**\n * @name getDraggedItem\n * @param event\n */\n public getDraggedItem(event: DragEvent): DraggedTag | undefined {\n if (event && event.dataTransfer) {\n const data = event.dataTransfer.getData(DRAG_AND_DROP_KEY);\n try {\n return JSON.parse(data) as DraggedTag;\n } catch {\n return;\n }\n }\n }\n\n /**\n * @name setSender\n * @param sender\n */\n public setSender(sender: TagInputComponent): void {\n this.sender = sender;\n }\n\n /**\n * @name setReceiver\n * @param receiver\n */\n public setReceiver(receiver: TagInputComponent): void {\n this.receiver = receiver;\n }\n\n /**\n * @name onTagDropped\n * @param tag\n * @param indexDragged\n * @param indexDropped\n */\n public onTagDropped(tag: TagModel, indexDragged: number, indexDropped?: number): void {\n this.onDragEnd();\n\n this.sender.onRemoveRequested(tag, indexDragged);\n this.receiver.onAddingRequested(false, tag, indexDropped);\n }\n\n /**\n * @name setState\n * @param state\n */\n public setState(state: { [K in StateProperty]?: State[K] }): void {\n this.state = { ...this.state, ...state };\n }\n\n /**\n * @name getState\n * @param key\n */\n public getState(key?: StateProperty): State | State[StateProperty] {\n return key ? this.state[key] : this.state;\n }\n\n /**\n * @name onDragEnd\n */\n public onDragEnd(): void {\n this.setState({\n dragging: false,\n dropping: false,\n index: undefined\n });\n }\n}\n","import { Observable } from 'rxjs';\nimport { ValidatorFn, AsyncValidatorFn } from '@angular/forms';\n\nimport { SECONDARY_PLACEHOLDER, PLACEHOLDER } from './core/constants/index';\nimport { TagInputDropdown } from './components/dropdown/tag-input-dropdown.component';\nimport { TagModel } from './core/tag-model';\n\nexport interface TagInputOptions {\n separatorKeys: string[];\n separatorKeyCodes: number[];\n maxItems: number;\n placeholder: string;\n secondaryPlaceholder: string;\n validators: ValidatorFn[];\n asyncValidators: AsyncValidatorFn[];\n onlyFromAutocomplete: boolean;\n errorMessages: { [key: string]: string; };\n theme: '';\n onTextChangeDebounce: number;\n inputId: string | null;\n inputClass: string;\n clearOnBlur: boolean;\n hideForm: boolean;\n addOnBlur: boolean;\n addOnPaste: boolean;\n pasteSplitPattern: string | RegExp;\n blinkIfDupe: boolean;\n removable: boolean;\n editable: boolean;\n allowDupes: boolean;\n modelAsStrings: boolean;\n trimTags: boolean;\n ripple: boolean;\n tabIndex: string;\n disable: boolean;\n dragZone: string;\n onRemoving?: (tag: TagModel) => Observable;\n onAdding?: (tag: TagModel) => Observable;\n displayBy: string;\n identifyBy: string;\n animationDuration: {\n enter: string,\n leave: string\n };\n}\n\nexport interface TagInputDropdownOptions {\n displayBy: string;\n identifyBy: string;\n appendToBody: boolean;\n offset: string;\n focusFirstElement: boolean;\n showDropdownIfEmpty: boolean;\n minimumTextLength: number;\n limitItemsTo: number;\n keepOpen: boolean;\n zIndex: number;\n dynamicUpdate: boolean;\n matchingFn: (value: string, target: TagModel) => boolean;\n}\n\nexport const defaults = {\n tagInput: {\n separatorKeys: [],\n separatorKeyCodes: [],\n maxItems: Infinity,\n placeholder: PLACEHOLDER,\n secondaryPlaceholder: SECONDARY_PLACEHOLDER,\n validators: [],\n asyncValidators: [],\n onlyFromAutocomplete: false,\n errorMessages: {},\n theme: '',\n onTextChangeDebounce: 250,\n inputId: null,\n inputClass: '',\n clearOnBlur: false,\n hideForm: false,\n addOnBlur: false,\n addOnPaste: false,\n pasteSplitPattern: ',',\n blinkIfDupe: true,\n removable: true,\n editable: false,\n allowDupes: false,\n modelAsStrings: false,\n trimTags: true,\n ripple: true,\n tabIndex: '',\n disable: false,\n dragZone: '',\n onRemoving: undefined,\n onAdding: undefined,\n displayBy: 'display',\n identifyBy: 'value',\n animationDuration: {\n enter: '250ms',\n leave: '150ms'\n }\n },\n dropdown: {\n displayBy: 'display',\n identifyBy: 'value',\n appendToBody: true,\n offset: '50 0',\n focusFirstElement: false,\n showDropdownIfEmpty: false,\n minimumTextLength: 1,\n limitItemsTo: Infinity,\n keepOpen: true,\n dynamicUpdate: true,\n zIndex: 1000,\n matchingFn\n }\n};\n\n/**\n * @name matchingFn\n * @param this\n * @param value\n * @param target\n */\nfunction matchingFn(this: TagInputDropdown, value: string, target: TagModel): boolean {\n const targetValue = target[this.displayBy].toString();\n\n return targetValue && targetValue\n .toLowerCase()\n .indexOf(value.toLowerCase()) >= 0;\n}\n","import { defaults, TagInputOptions, TagInputDropdownOptions } from '../../defaults';\n\nexport type Options = {\n tagInput?: {\n [P in keyof TagInputOptions]?: TagInputOptions[P];\n };\n dropdown?: {\n [P in keyof TagInputDropdownOptions]?: TagInputDropdownOptions[P];\n }\n};\n\nexport class OptionsProvider {\n public static defaults = defaults;\n\n public setOptions(options: Options): void {\n OptionsProvider.defaults.tagInput = {...defaults.tagInput, ...options.tagInput};\n OptionsProvider.defaults.dropdown = {...defaults.dropdown, ...options.dropdown};\n }\n}\n\nexport { TagInputDropdownOptions, TagInputOptions };\n","import { ControlValueAccessor } from '@angular/forms';\nimport { Input, Directive } from '@angular/core';\nimport { OptionsProvider } from './providers/options-provider';\nimport { TagInputDropdown } from '../components/dropdown/tag-input-dropdown.component';\nimport { TagModel } from './tag-model';\n\nexport function isObject(obj: any): boolean {\n return obj === Object(obj);\n}\n\n@Directive()\nexport class TagInputAccessor implements ControlValueAccessor {\n private _items: TagModel[] = [];\n private _onTouchedCallback: () => void;\n private _onChangeCallback: (items: TagModel[]) => void;\n\n public dropdown: TagInputDropdown;\n\n /**\n * @name displayBy\n */\n @Input() public displayBy: string = OptionsProvider.defaults.tagInput.displayBy;\n\n /**\n * @name identifyBy\n */\n @Input() public identifyBy: string = OptionsProvider.defaults.tagInput.identifyBy;\n\n public get items(): TagModel[] {\n return this._items;\n }\n\n public set items(items: TagModel[]) {\n this._items = items;\n this._onChangeCallback(this._items);\n }\n\n public onTouched() {\n this._onTouchedCallback();\n }\n\n public writeValue(items: any[]) {\n this._items = items || [];\n }\n\n public registerOnChange(fn: any) {\n this._onChangeCallback = fn;\n }\n\n public registerOnTouched(fn: any) {\n this._onTouchedCallback = fn;\n }\n\n /**\n * @name getItemValue\n * @param item\n * @param fromDropdown\n */\n public getItemValue(item: TagModel, fromDropdown = false): string {\n const property = fromDropdown && this.dropdown ? this.dropdown.identifyBy : this.identifyBy;\n return isObject(item) ? item[property] : item;\n }\n\n /**\n * @name getItemDisplay\n * @param item\n * @param fromDropdown\n */\n public getItemDisplay(item: TagModel, fromDropdown = false): string {\n const property = fromDropdown && this.dropdown ? this.dropdown.displayBy : this.displayBy;\n return isObject(item) ? item[property] : item;\n }\n\n /**\n * @name getItemsWithout\n * @param index\n */\n protected getItemsWithout(index: number): TagModel[] {\n return this.items.filter((item, position) => position !== index);\n }\n}\n","\n/**\n * @name listen\n * @param listenerType\n * @param action\n * @param condition\n */\nexport function listen(listenerType: string, action: () => any, condition = true): void {\n // if the event provided does not exist, throw an error\n if (!this.listeners.hasOwnProperty(listenerType)) {\n throw new Error('The event entered may be wrong');\n }\n\n // if a condition is present and is false, exit early\n if (!condition) {\n return;\n }\n\n // fire listener\n this.listeners[listenerType].push(action);\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { AsyncValidatorFn, FormControl, FormGroup, ValidatorFn } from '@angular/forms';\n\n@Component({\n selector: 'tag-input-form',\n styleUrls: ['./tag-input-form.style.scss'],\n templateUrl: './tag-input-form.template.html'\n})\nexport class TagInputForm implements OnInit, OnChanges {\n /**\n * @name onSubmit\n */\n @Output() public onSubmit: EventEmitter = new EventEmitter();\n\n /**\n * @name onBlur\n */\n @Output() public onBlur: EventEmitter = new EventEmitter();\n\n /**\n * @name onFocus\n */\n @Output() public onFocus: EventEmitter = new EventEmitter();\n\n /**\n * @name onKeyup\n */\n @Output() public onKeyup: EventEmitter = new EventEmitter();\n\n /**\n * @name onKeydown\n */\n @Output() public onKeydown: EventEmitter = new EventEmitter();\n\n /**\n * @name inputTextChange\n */\n @Output() public inputTextChange: EventEmitter = new EventEmitter();\n\n // inputs\n\n /**\n * @name placeholder\n */\n @Input() public placeholder: string;\n\n /**\n * @name validators\n */\n @Input() public validators: ValidatorFn[] = [];\n\n /**\n * @name asyncValidators\n * @desc array of AsyncValidator that are used to validate the tag before it gets appended to the list\n */\n @Input() public asyncValidators: AsyncValidatorFn[] = [];\n\n /**\n * @name inputId\n */\n @Input() public inputId: string;\n\n /**\n * @name inputClass\n */\n @Input() public inputClass: string;\n\n /**\n * @name tabindex\n * @desc pass through the specified tabindex to the input\n */\n @Input() public tabindex = '';\n\n /**\n * @name disabled\n */\n @Input() public disabled = false;\n\n /**\n * @name input\n */\n @ViewChild('input') public input;\n\n /**\n * @name form\n */\n public form: FormGroup;\n\n /**\n * @name inputText\n */\n @Input()\n public get inputText(): string {\n return this.item.value;\n }\n\n /**\n * @name inputText\n * @param text {string}\n */\n public set inputText(text: string) {\n this.item.setValue(text);\n\n this.inputTextChange.emit(text);\n }\n\n private readonly item: FormControl = new FormControl({ value: '', disabled: this.disabled });\n\n ngOnInit() {\n this.item.setValidators(this.validators);\n this.item.setAsyncValidators(this.asyncValidators);\n\n // creating form\n this.form = new FormGroup({\n item: this.item\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.disabled && !changes.disabled.firstChange) {\n if (changes.disabled.currentValue) {\n this.form.controls['item'].disable();\n } else {\n this.form.controls['item'].enable();\n }\n }\n }\n\n /**\n * @name value\n */\n public get value(): FormControl {\n return this.form.get('item') as FormControl;\n }\n\n /**\n * @name isInputFocused\n */\n public isInputFocused(): boolean {\n const doc = typeof document !== 'undefined' ? document : undefined;\n return doc ? doc.activeElement === this.input.nativeElement : false;\n }\n\n /**\n * @name getErrorMessages\n * @param messages\n */\n public getErrorMessages(messages: { [key: string]: string }): string[] {\n return Object.keys(messages)\n .filter(err => this.value.hasError(err))\n .map(err => messages[err]);\n }\n\n /**\n * @name hasErrors\n */\n public hasErrors(): boolean {\n const { dirty, value, valid } = this.form;\n return dirty && value.item && !valid;\n }\n\n /**\n * @name focus\n */\n public focus(): void {\n this.input.nativeElement.focus();\n }\n\n /**\n * @name blur\n */\n public blur(): void {\n this.input.nativeElement.blur();\n }\n\n /**\n * @name getElementPosition\n */\n public getElementPosition(): ClientRect {\n return this.input.nativeElement.getBoundingClientRect();\n }\n\n /**\n * - removes input from the component\n * @name destroy\n */\n public destroy(): void {\n const input = this.input.nativeElement;\n input.parentElement.removeChild(input);\n }\n\n /**\n * @name onKeyDown\n * @param $event\n */\n public onKeyDown($event) {\n this.inputText = this.value.value;\n if ($event.key === 'Enter') {\n this.submit($event);\n } else {\n return this.onKeydown.emit($event);\n }\n }\n\n /**\n * @name onKeyUp\n * @param $event\n */\n public onKeyUp($event) {\n this.inputText = this.value.value;\n return this.onKeyup.emit($event);\n }\n\n /**\n * @name submit\n */\n public submit($event: any): void {\n $event.preventDefault();\n this.onSubmit.emit($event);\n }\n}\n","\n\n \n\n","import {\n Component,\n Input\n} from '@angular/core';\n\n\nimport {\n animate,\n trigger,\n style,\n transition,\n keyframes,\n state\n} from '@angular/animations';\n\n@Component({\n selector: 'tag-ripple',\n styles: [`\n :host {\n width: 100%;\n height: 100%;\n left: 0;\n overflow: hidden;\n position: absolute;\n }\n\n .tag-ripple {\n background: rgba(0, 0, 0, 0.1);\n top: 50%;\n left: 50%;\n height: 100%;\n transform: translate(-50%, -50%);\n position: absolute;\n }\n `],\n template: `\n \n `,\n animations: [\n trigger('ink', [\n state('none', style({width: 0, opacity: 0})),\n transition('none => clicked', [\n animate(300, keyframes([\n style({opacity: 1, offset: 0, width: '30%', borderRadius: '100%'}),\n style({opacity: 1, offset: 0.5, width: '50%'}),\n style({opacity: 0.5, offset: 1, width: '100%', borderRadius: '16px'})\n ]))\n ])\n ])\n ]\n})\nexport class TagRipple {\n @Input() public state = 'none';\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'delete-icon',\n templateUrl: './icon.html',\n styleUrls: ['./icon.scss']\n})\nexport class DeleteIconComponent {}\n","\n \n \n \n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n TemplateRef,\n ElementRef,\n HostListener,\n HostBinding,\n ViewChild,\n ChangeDetectorRef,\n Renderer2\n} from '@angular/core';\n\nimport { TagModel } from '../../core/tag-model';\nimport { TagRipple } from '../tag/tag-ripple.component';\n\n// mocking navigator\nconst navigator = typeof window !== 'undefined' ? window.navigator : {\n userAgent: 'Chrome',\n vendor: 'Google Inc'\n};\n\nconst isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n@Component({\n selector: 'tag',\n templateUrl: './tag.template.html',\n styleUrls: ['./tag-component.style.scss']\n})\nexport class TagComponent {\n /**\n * @name model {TagModel}\n */\n @Input()\n public model: TagModel;\n\n /**\n * @name removable {boolean}\n */\n @Input()\n public removable: boolean;\n\n /**\n * @name editable {boolean}\n */\n @Input()\n public editable: boolean;\n\n /**\n * @name template {TemplateRef}\n */\n @Input()\n public template: TemplateRef;\n\n /**\n * @name displayBy {string}\n */\n @Input()\n public displayBy: string;\n\n /**\n * @name identifyBy {string}\n */\n @Input()\n public identifyBy: string;\n\n /**\n * @name index {number}\n */\n @Input()\n public index: number;\n\n /**\n * @name hasRipple\n */\n @Input()\n public hasRipple: boolean;\n\n /**\n * @name disabled\n */\n @Input()\n public disabled = false;\n\n /**\n * @name canAddTag\n */\n @Input()\n public canAddTag: (tag: TagModel) => boolean;\n\n /**\n * @name onSelect\n */\n @Output()\n public onSelect: EventEmitter = new EventEmitter();\n\n /**\n * @name onRemove\n */\n @Output()\n public onRemove: EventEmitter = new EventEmitter();\n\n /**\n * @name onBlur\n */\n @Output()\n public onBlur: EventEmitter = new EventEmitter();\n\n /**\n * @name onKeyDown\n */\n @Output()\n public onKeyDown: EventEmitter = new EventEmitter();\n\n /**\n * @name onTagEdited\n */\n @Output()\n public onTagEdited: EventEmitter = new EventEmitter();\n\n /**\n * @name readonly {boolean}\n */\n public get readonly(): boolean {\n return typeof this.model !== 'string' && this.model.readonly === true;\n }\n\n /**\n * @name editing\n */\n public editing = false;\n\n /**\n * @name moving\n */\n @HostBinding('class.moving')\n public moving: boolean;\n\n /**\n * @name rippleState\n */\n public rippleState = 'none';\n\n /**\n * @name ripple {TagRipple}\n */\n @ViewChild(TagRipple)\n public ripple: TagRipple;\n\n constructor(\n public element: ElementRef,\n public renderer: Renderer2,\n private cdRef: ChangeDetectorRef\n ) {}\n\n /**\n * @name select\n */\n public select($event?: MouseEvent): void {\n if (this.readonly || this.disabled) {\n return;\n }\n\n if ($event) {\n $event.stopPropagation();\n }\n\n this.focus();\n\n this.onSelect.emit(this.model);\n }\n\n /**\n * @name remove\n */\n public remove($event: MouseEvent): void {\n $event.stopPropagation();\n this.onRemove.emit(this);\n }\n\n /**\n * @name focus\n */\n public focus(): void {\n this.element.nativeElement.focus();\n }\n\n public move(): void {\n this.moving = true;\n }\n\n /**\n * @name keydown\n * @param event\n */\n @HostListener('keydown', ['$event'])\n public keydown(event: KeyboardEvent): void {\n if (this.editing) {\n if (event.keyCode === 13) {\n return this.disableEditMode(event);\n }\n } else {\n this.onKeyDown.emit({ event, model: this.model });\n }\n }\n\n /**\n * @name blink\n */\n public blink(): void {\n const classList = this.element.nativeElement.classList;\n classList.add('blink');\n\n setTimeout(() => classList.remove('blink'), 50);\n }\n\n /**\n * @name toggleEditMode\n */\n public toggleEditMode(): void {\n if (this.editable) {\n return this.editing ? undefined : this.activateEditMode();\n }\n }\n\n /**\n * @name onBlurred\n * @param event\n */\n public onBlurred(event: any): void {\n // Checks if it is editable first before handeling the onBlurred event in order to prevent\n // a bug in IE where tags are still editable with onlyFromAutocomplete set to true\n if (!this.editable) {\n return;\n }\n\n this.disableEditMode();\n\n const value: string = event.target.innerText;\n const result =\n typeof this.model === 'string'\n ? value\n : { ...this.model, [this.displayBy]: value };\n\n this.onBlur.emit(result);\n }\n\n /**\n * @name getDisplayValue\n * @param item\n */\n public getDisplayValue(item: TagModel): string {\n return typeof item === 'string' ? item : item[this.displayBy];\n }\n\n /**\n * @desc returns whether the ripple is visible or not\n * only works in Chrome\n * @name isRippleVisible\n */\n public get isRippleVisible(): boolean {\n return !this.readonly && !this.editing && isChrome && this.hasRipple;\n }\n\n /**\n * @name disableEditMode\n * @param $event\n */\n public disableEditMode($event?: Event): void {\n const classList = this.element.nativeElement.classList;\n const input = this.getContentEditableText();\n\n this.editing = false;\n classList.remove('tag--editing');\n\n if (!input) {\n this.setContentEditableText(this.model);\n return;\n }\n\n this.storeNewValue(input);\n this.cdRef.detectChanges();\n\n if ($event) {\n $event.preventDefault();\n }\n }\n\n /**\n * @name isDeleteIconVisible\n */\n public isDeleteIconVisible(): boolean {\n return (\n !this.readonly && !this.disabled && this.removable && !this.editing\n );\n }\n\n /**\n * @name getContentEditableText\n */\n private getContentEditableText(): string {\n const input = this.getContentEditable();\n\n return input ? input.innerText.trim() : '';\n }\n\n /**\n * @name setContentEditableText\n * @param model\n */\n private setContentEditableText(model: TagModel) {\n const input = this.getContentEditable();\n const value = this.getDisplayValue(model);\n\n input.innerText = value;\n }\n\n /**\n * @name\n */\n private activateEditMode(): void {\n const classList = this.element.nativeElement.classList;\n classList.add('tag--editing');\n\n this.editing = true;\n }\n\n /**\n * @name storeNewValue\n * @param input\n */\n private storeNewValue(input: string): void {\n const exists = (tag: TagModel) => {\n return typeof tag === 'string'\n ? tag === input\n : tag[this.displayBy] === input;\n };\n\n const hasId = () => {\n return this.model[this.identifyBy] !== this.model[this.displayBy];\n };\n\n // if the value changed, replace the value in the model\n if (exists(this.model)) {\n return;\n }\n\n const model =\n typeof this.model === 'string'\n ? input\n : {\n index: this.index,\n [this.identifyBy]: hasId()\n ? this.model[this.identifyBy]\n : input,\n [this.displayBy]: input\n };\n\n if (this.canAddTag(model)) {\n this.onTagEdited.emit({ tag: model, index: this.index });\n } else {\n this.setContentEditableText(this.model);\n }\n }\n\n /**\n * @name getContentEditable\n */\n private getContentEditable(): HTMLInputElement {\n return this.element.nativeElement.querySelector('[contenteditable]');\n }\n}\n","\n\n \n \n \n \n \n\n \n \n \n {{ getDisplayValue(model) }}\n \n\n \n \n \n \n\n\n\n\n","import {\n animate,\n trigger,\n style,\n transition,\n keyframes,\n state,\n AnimationTriggerMetadata\n} from '@angular/animations';\n\n/**\n * @name animations\n */\nexport const animations = [\n trigger('animation', [\n state('in', style({\n opacity: 1\n })),\n state('out', style({\n opacity: 0\n })),\n transition(':enter', [\n animate('{{ enter }}', keyframes([\n style({opacity: 0, offset: 0, transform: 'translate(0px, 20px)'}),\n style({opacity: 0.3, offset: 0.3, transform: 'translate(0px, -10px)'}),\n style({opacity: 0.5, offset: 0.5, transform: 'translate(0px, 0px)'}),\n style({opacity: 0.75, offset: 0.75, transform: 'translate(0px, 5px)'}),\n style({opacity: 1, offset: 1, transform: 'translate(0px, 0px)'})\n ]))\n ]),\n transition(':leave', [\n animate('{{ leave }}', keyframes([\n style({opacity: 1, transform: 'translateX(0)', offset: 0}),\n style({opacity: 1, transform: 'translateX(-15px)', offset: 0.7}),\n style({opacity: 0, transform: 'translateX(100%)', offset: 1.0})\n ]))\n ])\n ])\n];\n","import {\n Component,\n ContentChildren,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n QueryList,\n TemplateRef,\n ViewChild,\n AfterViewInit\n} from '@angular/core';\n\n// rx\nimport { Observable } from 'rxjs';\nimport { filter, first, debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nimport { Ng2Dropdown, Ng2MenuItem } from 'ng2-material-dropdown';\nimport { defaults } from '../../defaults';\nimport { TagInputComponent } from '../tag-input/tag-input';\nimport {TagModel} from '../../core/tag-model';\n\n@Component({\n selector: 'tag-input-dropdown',\n templateUrl: './tag-input-dropdown.template.html'\n})\nexport class TagInputDropdown implements AfterViewInit {\n /**\n * @name dropdown\n */\n @ViewChild(Ng2Dropdown) public dropdown: Ng2Dropdown;\n\n /**\n * @name menuTemplate\n * @desc reference to the template if provided by the user\n */\n @ContentChildren(TemplateRef) public templates: QueryList>;\n\n /**\n * @name offset\n */\n @Input() public offset: string = defaults.dropdown.offset;\n\n /**\n * @name focusFirstElement\n */\n @Input() public focusFirstElement = defaults.dropdown.focusFirstElement;\n\n /**\n * - show autocomplete dropdown if the value of input is empty\n * @name showDropdownIfEmpty\n */\n @Input() public showDropdownIfEmpty = defaults.dropdown.showDropdownIfEmpty;\n\n /**\n * @description observable passed as input which populates the autocomplete items\n * @name autocompleteObservable\n */\n @Input() public autocompleteObservable: (text: string) => Observable;\n\n /**\n * - desc minimum text length in order to display the autocomplete dropdown\n * @name minimumTextLength\n */\n @Input() public minimumTextLength = defaults.dropdown.minimumTextLength;\n\n /**\n * - number of items to display in the autocomplete dropdown\n * @name limitItemsTo\n */\n @Input() public limitItemsTo: number = defaults.dropdown.limitItemsTo;\n\n /**\n * @name displayBy\n */\n @Input() public displayBy = defaults.dropdown.displayBy;\n\n /**\n * @name identifyBy\n */\n @Input() public identifyBy = defaults.dropdown.identifyBy;\n\n /**\n * @description a function a developer can use to implement custom matching for the autocomplete\n * @name matchingFn\n */\n @Input() public matchingFn: (value: string, target: TagModel) => boolean =\n defaults.dropdown.matchingFn;\n\n /**\n * @name appendToBody\n */\n @Input() public appendToBody = defaults.dropdown.appendToBody;\n\n /**\n * @name keepOpen\n * @description option to leave dropdown open when adding a new item\n */\n @Input() public keepOpen = defaults.dropdown.keepOpen;\n\n /**\n * @name dynamicUpdate\n */\n @Input() public dynamicUpdate = defaults.dropdown.dynamicUpdate;\n\n /**\n * @name zIndex\n */\n @Input() public zIndex = defaults.dropdown.zIndex;\n\n /**\n * list of items that match the current value of the input (for autocomplete)\n * @name items\n */\n public items: TagModel[] = [];\n\n /**\n * @name tagInput\n */\n public tagInput: TagInputComponent = this.injector.get(TagInputComponent);\n\n /**\n * @name _autocompleteItems\n */\n private _autocompleteItems: TagModel[] = [];\n\n /**\n * @name autocompleteItems\n * @param items\n */\n public set autocompleteItems(items: TagModel[]) {\n this._autocompleteItems = items;\n }\n\n /**\n * @name autocompleteItems\n * @desc array of items that will populate the autocomplete\n */\n @Input() public get autocompleteItems(): TagModel[] {\n const items = this._autocompleteItems;\n\n if (!items) {\n return [];\n }\n\n return items.map((item: TagModel) => {\n return typeof item === 'string'\n ? {\n [this.displayBy]: item,\n [this.identifyBy]: item\n }\n : item;\n });\n }\n\n constructor(private readonly injector: Injector) {}\n\n /**\n * @name ngAfterviewInit\n */\n ngAfterViewInit(): void {\n this.onItemClicked().subscribe((item: Ng2MenuItem) => {\n this.requestAdding(item);\n });\n\n // reset itemsMatching array when the dropdown is hidden\n this.onHide().subscribe(this.resetItems);\n\n const DEBOUNCE_TIME = 200;\n const KEEP_OPEN = this.keepOpen;\n\n this.tagInput.onTextChange\n .asObservable()\n .pipe(\n distinctUntilChanged(),\n debounceTime(DEBOUNCE_TIME),\n filter((value: string) => {\n if (KEEP_OPEN === false) {\n return value.length > 0;\n }\n\n return true;\n })\n )\n .subscribe(this.show);\n }\n\n /**\n * @name updatePosition\n */\n public updatePosition(): void {\n const position = this.tagInput.inputForm.getElementPosition();\n\n this.dropdown.menu.updatePosition(position, this.dynamicUpdate);\n }\n\n /**\n * @name isVisible\n */\n public get isVisible(): boolean {\n return this.dropdown.menu.dropdownState.menuState.isVisible;\n }\n\n /**\n * @name onHide\n */\n public onHide(): EventEmitter {\n return this.dropdown.onHide;\n }\n\n /**\n * @name onItemClicked\n */\n public onItemClicked() {\n return this.dropdown.onItemClicked;\n }\n\n /**\n * @name selectedItem\n */\n public get selectedItem(): Ng2MenuItem {\n return this.dropdown.menu.dropdownState.dropdownState.selectedItem;\n }\n\n /**\n * @name state\n */\n public get state(): any {\n return this.dropdown.menu.dropdownState;\n }\n\n /**\n *\n * @name show\n */\n public show = (): void => {\n const maxItemsReached =\n this.tagInput.items.length === this.tagInput.maxItems;\n const value = this.getFormValue();\n const hasMinimumText = value.trim().length >= this.minimumTextLength;\n const position = this.calculatePosition();\n const items = this.getMatchingItems(value);\n const hasItems = items.length > 0;\n const isHidden = this.isVisible === false;\n const showDropdownIfEmpty = this.showDropdownIfEmpty && hasItems && !value;\n const isDisabled = this.tagInput.disable;\n\n const shouldShow =\n isHidden && ((hasItems && hasMinimumText) || showDropdownIfEmpty);\n const shouldHide = this.isVisible && !hasItems;\n\n if (this.autocompleteObservable && hasMinimumText) {\n return this.getItemsFromObservable(value);\n }\n\n if (\n (!this.showDropdownIfEmpty && !value) ||\n maxItemsReached ||\n isDisabled\n ) {\n return this.dropdown.hide();\n }\n\n this.setItems(items);\n\n if (shouldShow) {\n this.dropdown.show(position);\n } else if (shouldHide) {\n this.hide();\n }\n };\n\n /**\n * @name hide\n */\n public hide(): void {\n this.resetItems();\n this.dropdown.hide();\n }\n\n /**\n * @name scrollListener\n */\n @HostListener('window:scroll')\n public scrollListener(): void {\n if (!this.isVisible || !this.dynamicUpdate) {\n return;\n }\n\n this.updatePosition();\n }\n\n /**\n * @name onWindowBlur\n */\n @HostListener('window:blur')\n public onWindowBlur(): void {\n this.dropdown.hide();\n }\n\n /**\n * @name getFormValue\n */\n private getFormValue(): string {\n const formValue = this.tagInput.formValue;\n return formValue ? formValue.toString().trim() : '';\n }\n\n /**\n * @name calculatePosition\n */\n private calculatePosition(): ClientRect {\n return this.tagInput.inputForm.getElementPosition();\n }\n\n /**\n * @name requestAdding\n * @param item {Ng2MenuItem}\n */\n private requestAdding = async (item: Ng2MenuItem) => {\n const tag = this.createTagModel(item);\n await this.tagInput.onAddingRequested(true, tag).catch(() => {});\n };\n\n /**\n * @name createTagModel\n * @param item\n */\n private createTagModel(item: Ng2MenuItem): TagModel {\n const display =\n typeof item.value === 'string' ? item.value : item.value[this.displayBy];\n const value =\n typeof item.value === 'string' ? item.value : item.value[this.identifyBy];\n\n return {\n ...item.value,\n [this.tagInput.displayBy]: display,\n [this.tagInput.identifyBy]: value\n };\n }\n\n /**\n *\n * @param value {string}\n */\n private getMatchingItems(value: string): TagModel[] {\n if (!value && !this.showDropdownIfEmpty) {\n return [];\n }\n\n const dupesAllowed = this.tagInput.allowDupes;\n\n return this.autocompleteItems.filter((item: TagModel) => {\n const hasValue = dupesAllowed\n ? false\n : this.tagInput.tags.some(tag => {\n const identifyBy = this.tagInput.identifyBy;\n const model =\n typeof tag.model === 'string' ? tag.model : tag.model[identifyBy];\n\n return model === item[this.identifyBy];\n });\n\n return this.matchingFn(value, item) && hasValue === false;\n });\n }\n\n /**\n * @name setItems\n */\n private setItems(items: TagModel[]): void {\n this.items = items.slice(0, this.limitItemsTo || items.length);\n }\n\n /**\n * @name resetItems\n */\n private resetItems = (): void => {\n this.items = [];\n };\n\n /**\n * @name populateItems\n * @param data\n */\n private populateItems(data: any): TagInputDropdown {\n this.autocompleteItems = data.map(item => {\n return typeof item === 'string'\n ? {\n [this.displayBy]: item,\n [this.identifyBy]: item\n }\n : item;\n });\n\n return this;\n }\n\n /**\n * @name getItemsFromObservable\n * @param text\n */\n private getItemsFromObservable = (text: string): void => {\n this.setLoadingState(true);\n\n const subscribeFn = (data: any[]) => {\n // hide loading animation\n this.setLoadingState(false)\n // add items\n .populateItems(data);\n\n this.setItems(this.getMatchingItems(text));\n\n if (this.items.length) {\n this.dropdown.show(this.calculatePosition());\n } else {\n this.dropdown.hide();\n }\n };\n\n this.autocompleteObservable(text)\n .pipe(first())\n .subscribe(subscribeFn, () => this.setLoadingState(false));\n };\n\n /**\n * @name setLoadingState\n * @param state\n */\n private setLoadingState(state: boolean): TagInputDropdown {\n this.tagInput.isLoading = state;\n\n return this;\n }\n}\n","\n \n \n\n \n \n\n \n \n \n \n\n","// angular\nimport {\n Component,\n forwardRef,\n HostBinding,\n Input,\n Output,\n EventEmitter,\n Renderer2,\n ViewChild,\n ViewChildren,\n ContentChildren,\n ContentChild,\n OnInit,\n TemplateRef,\n QueryList,\n AfterViewInit\n} from '@angular/core';\n\nimport {\n AsyncValidatorFn,\n FormControl,\n NG_VALUE_ACCESSOR,\n ValidatorFn\n} from '@angular/forms';\n\n// rx\nimport { Observable, debounceTime, filter, map, first } from 'rxjs';\n\n// ng2-tag-input\nimport { TagInputAccessor } from '../../core/accessor';\nimport { TagModel } from '../../core/tag-model';\n\nimport { listen } from '../../core/helpers/listen';\nimport * as constants from '../../core/constants';\n\nimport { DragProvider, DraggedTag } from '../../core/providers/drag-provider';\n\nimport { TagInputForm } from '../tag-input-form/tag-input-form.component';\nimport { TagComponent } from '../tag/tag.component';\n\nimport { animations } from './animations';\nimport { defaults } from '../../defaults';\nimport { TagInputDropdown } from '../dropdown/tag-input-dropdown.component';\n\nconst CUSTOM_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TagInputComponent),\n multi: true\n};\n\n@Component({\n selector: 'tag-input',\n providers: [CUSTOM_ACCESSOR],\n styleUrls: ['./tag-input.style.scss'],\n templateUrl: './tag-input.template.html',\n animations\n})\nexport class TagInputComponent extends TagInputAccessor implements OnInit, AfterViewInit {\n /**\n * @name separatorKeys\n * @desc keyboard keys with which a user can separate items\n */\n @Input() public separatorKeys: string[] = defaults.tagInput.separatorKeys;\n\n /**\n * @name separatorKeyCodes\n * @desc keyboard key codes with which a user can separate items\n */\n @Input() public separatorKeyCodes: number[] = defaults.tagInput.separatorKeyCodes;\n\n /**\n * @name placeholder\n * @desc the placeholder of the input text\n */\n @Input() public placeholder: string = defaults.tagInput.placeholder;\n\n /**\n * @name secondaryPlaceholder\n * @desc placeholder to appear when the input is empty\n */\n @Input() public secondaryPlaceholder: string = defaults.tagInput.secondaryPlaceholder;\n\n /**\n * @name maxItems\n * @desc maximum number of items that can be added\n */\n @Input() public maxItems: number = defaults.tagInput.maxItems;\n\n /**\n * @name validators\n * @desc array of Validators that are used to validate the tag before it gets appended to the list\n */\n @Input() public validators: ValidatorFn[] = defaults.tagInput.validators;\n\n /**\n * @name asyncValidators\n * @desc array of AsyncValidator that are used to validate the tag before it gets appended to the list\n */\n @Input() public asyncValidators: AsyncValidatorFn[] = defaults.tagInput.asyncValidators;\n\n /**\n * - if set to true, it will only possible to add items from the autocomplete\n * @name onlyFromAutocomplete\n */\n @Input() public onlyFromAutocomplete = defaults.tagInput.onlyFromAutocomplete;\n\n /**\n * @name errorMessages\n */\n @Input() public errorMessages: { [key: string]: string } = defaults.tagInput.errorMessages;\n\n /**\n * @name theme\n */\n @Input() public theme: string = defaults.tagInput.theme;\n\n /**\n * @name onTextChangeDebounce\n */\n @Input() public onTextChangeDebounce = defaults.tagInput.onTextChangeDebounce;\n\n /**\n * - custom id assigned to the input\n * @name id\n */\n @Input() public inputId = defaults.tagInput.inputId;\n\n /**\n * - custom class assigned to the input\n */\n @Input() public inputClass: string = defaults.tagInput.inputClass;\n\n /**\n * - option to clear text input when the form is blurred\n * @name clearOnBlur\n */\n @Input() public clearOnBlur: boolean = defaults.tagInput.clearOnBlur;\n\n /**\n * - hideForm\n * @name clearOnBlur\n */\n @Input() public hideForm: boolean = defaults.tagInput.hideForm;\n\n /**\n * @name addOnBlur\n */\n @Input() public addOnBlur: boolean = defaults.tagInput.addOnBlur;\n\n /**\n * @name addOnPaste\n */\n @Input() public addOnPaste: boolean = defaults.tagInput.addOnPaste;\n\n /**\n * - pattern used with the native method split() to separate patterns in the string pasted\n * @name pasteSplitPattern\n */\n @Input() public pasteSplitPattern = defaults.tagInput.pasteSplitPattern;\n\n /**\n * @name blinkIfDupe\n */\n @Input() public blinkIfDupe = defaults.tagInput.blinkIfDupe;\n\n /**\n * @name removable\n */\n @Input() public removable = defaults.tagInput.removable;\n\n /**\n * @name editable\n */\n @Input() public editable: boolean = defaults.tagInput.editable;\n\n /**\n * @name allowDupes\n */\n @Input() public allowDupes = defaults.tagInput.allowDupes;\n\n /**\n * @description if set to true, the newly added tags will be added as strings, and not objects\n * @name modelAsStrings\n */\n @Input() public modelAsStrings = defaults.tagInput.modelAsStrings;\n\n /**\n * @name trimTags\n */\n @Input() public trimTags = defaults.tagInput.trimTags;\n\n /**\n * @name inputText\n */\n @Input() public get inputText(): string {\n return this.inputTextValue;\n }\n\n /**\n * @name ripple\n */\n @Input() public ripple: boolean = defaults.tagInput.ripple;\n\n /**\n * @name tabindex\n * @desc pass through the specified tabindex to the input\n */\n @Input() public tabindex: string = defaults.tagInput.tabIndex;\n\n /**\n * @name disable\n */\n @Input() public disable: boolean = defaults.tagInput.disable;\n\n /**\n * @name dragZone\n */\n @Input() public dragZone: string = defaults.tagInput.dragZone;\n\n /**\n * @name onRemoving\n */\n @Input() public onRemoving = defaults.tagInput.onRemoving;\n\n /**\n * @name onAdding\n */\n @Input() public onAdding = defaults.tagInput.onAdding;\n\n /**\n * @name animationDuration\n */\n @Input() public animationDuration = defaults.tagInput.animationDuration;\n\n /**\n * @name onAdd\n * @desc event emitted when adding a new item\n */\n @Output() public onAdd = new EventEmitter();\n\n /**\n * @name onRemove\n * @desc event emitted when removing an existing item\n */\n @Output() public onRemove = new EventEmitter();\n\n /**\n * @name onSelect\n * @desc event emitted when selecting an item\n */\n @Output() public onSelect = new EventEmitter();\n\n /**\n * @name onFocus\n * @desc event emitted when the input is focused\n */\n @Output() public onFocus = new EventEmitter();\n\n /**\n * @name onFocus\n * @desc event emitted when the input is blurred\n */\n @Output() public onBlur = new EventEmitter();\n\n /**\n * @name onTextChange\n * @desc event emitted when the input value changes\n */\n @Output() public onTextChange = new EventEmitter();\n\n /**\n * - output triggered when text is pasted in the form\n * @name onPaste\n */\n @Output() public onPaste = new EventEmitter();\n\n /**\n * - output triggered when tag entered is not valid\n * @name onValidationError\n */\n @Output() public onValidationError = new EventEmitter();\n\n /**\n * - output triggered when tag is edited\n * @name onTagEdited\n */\n @Output() public onTagEdited = new EventEmitter();\n\n /**\n * @name dropdown\n */\n // @ContentChild(forwardRef(() => TagInputDropdown), {static: true}) dropdown: TagInputDropdown;\n @ContentChild(TagInputDropdown) public dropdown: TagInputDropdown;\n /**\n * @name template\n * @desc reference to the template if provided by the user\n */\n @ContentChildren(TemplateRef, { descendants: false }) public templates: QueryList>;\n\n /**\n * @name inputForm\n */\n @ViewChild(TagInputForm) public inputForm: TagInputForm;\n\n /**\n * @name selectedTag\n * @desc reference to the current selected tag\n */\n public selectedTag: TagModel | undefined;\n\n /**\n * @name isLoading\n */\n public isLoading = false;\n\n /**\n * @name inputText\n * @param text\n */\n public set inputText(text: string) {\n this.inputTextValue = text;\n this.inputTextChange.emit(text);\n }\n\n /**\n * @name tags\n * @desc list of Element items\n */\n @ViewChildren(TagComponent) public tags: QueryList;\n\n /**\n * @name listeners\n * @desc array of events that get fired using @fireEvents\n */\n private listeners = {\n [constants.KEYDOWN]: <{ (fun): any }[]>[],\n [constants.KEYUP]: <{ (fun): any }[]>[]\n };\n\n /**\n * @description emitter for the 2-way data binding inputText value\n * @name inputTextChange\n */\n @Output() public inputTextChange: EventEmitter = new EventEmitter();\n\n /**\n * @description private variable to bind get/set\n * @name inputTextValue\n */\n public inputTextValue = '';\n\n /**\n * @desc removes the tab index if it is set - it will be passed through to the input\n * @name tabindexAttr\n */\n @HostBinding('attr.tabindex')\n public get tabindexAttr(): string {\n return this.tabindex !== '' ? '-1' : '';\n }\n\n /**\n * @name animationMetadata\n */\n public animationMetadata: { value: string, params: object };\n\n public errors: string[] = [];\n\n public isProgressBarVisible$: Observable;\n\n constructor(private readonly renderer: Renderer2,\n public readonly dragProvider: DragProvider) {\n super();\n }\n\n /**\n * @name ngAfterViewInit\n */\n public ngAfterViewInit(): void {\n // set up listeners\n\n this.setUpKeypressListeners();\n this.setupSeparatorKeysListener();\n this.setUpInputKeydownListeners();\n\n if (this.onTextChange.observers.length) {\n this.setUpTextChangeSubscriber();\n }\n\n // if clear on blur is set to true, subscribe to the event and clear the text's form\n if (this.clearOnBlur || this.addOnBlur) {\n this.setUpOnBlurSubscriber();\n }\n\n // if addOnPaste is set to true, register the handler and add items\n if (this.addOnPaste) {\n this.setUpOnPasteListener();\n }\n\n const statusChanges$ = this.inputForm.form.statusChanges;\n\n statusChanges$.pipe(\n filter((status: string) => status !== 'PENDING')\n ).subscribe(() => {\n this.errors = this.inputForm.getErrorMessages(this.errorMessages);\n });\n\n this.isProgressBarVisible$ = statusChanges$.pipe(\n map((status: string) => {\n return status === 'PENDING' || this.isLoading;\n })\n );\n\n // if hideForm is set to true, remove the input\n if (this.hideForm) {\n this.inputForm.destroy();\n }\n }\n\n /**\n * @name ngOnInit\n */\n public ngOnInit(): void {\n // if the number of items specified in the model is > of the value of maxItems\n // degrade gracefully and let the max number of items to be the number of items in the model\n // though, warn the user.\n const hasReachedMaxItems = this.maxItems !== undefined &&\n this.items &&\n this.items.length > this.maxItems;\n\n if (hasReachedMaxItems) {\n this.maxItems = this.items.length;\n console.warn(constants.MAX_ITEMS_WARNING);\n }\n\n // Setting editable to false to fix problem with tags in IE still being editable when\n // onlyFromAutocomplete is true\n this.editable = this.onlyFromAutocomplete ? false : this.editable;\n\n this.setAnimationMetadata();\n }\n\n /**\n * @name onRemoveRequested\n * @param tag\n * @param index\n */\n public onRemoveRequested(tag: TagModel, index: number): Promise {\n return new Promise(resolve => {\n const subscribeFn = (model: TagModel) => {\n this.removeItem(model, index);\n resolve(tag);\n };\n\n this.onRemoving ?\n this.onRemoving(tag)\n .pipe(first())\n .subscribe(subscribeFn) : subscribeFn(tag);\n });\n }\n\n /**\n * @name onAddingRequested\n * @param fromAutocomplete {boolean}\n * @param tag {TagModel}\n * @param index? {number}\n * @param giveupFocus? {boolean}\n */\n public onAddingRequested(fromAutocomplete: boolean, tag: TagModel,\n index?: number, giveupFocus?: boolean): Promise {\n return new Promise((resolve, reject) => {\n const subscribeFn = (model: TagModel) => {\n return this\n .addItem(fromAutocomplete, model, index, giveupFocus)\n .then(resolve)\n .catch(reject);\n };\n\n return this.onAdding ?\n this.onAdding(tag)\n .pipe(first())\n .subscribe(subscribeFn, reject) : subscribeFn(tag);\n });\n }\n\n /**\n * @name appendTag\n * @param tag {TagModel}\n */\n public appendTag = (tag: TagModel, index = this.items.length): void => {\n const items = this.items;\n const model = this.modelAsStrings ? tag[this.identifyBy] : tag;\n\n this.items = [\n ...items.slice(0, index),\n model,\n ...items.slice(index, items.length)\n ];\n }\n\n /**\n * @name createTag\n * @param model\n */\n public createTag = (model: TagModel): TagModel => {\n const trim = (val: TagModel, key: string): TagModel => {\n return typeof val === 'string' ? val.trim() : val[key];\n };\n\n return {\n ...typeof model !== 'string' ? model : {},\n [this.displayBy]: this.trimTags ? trim(model, this.displayBy) : model,\n [this.identifyBy]: this.trimTags ? trim(model, this.identifyBy) : model\n };\n }\n\n /**\n * @name selectItem\n * @desc selects item passed as parameter as the selected tag\n * @param item\n * @param emit\n */\n public selectItem(item: TagModel | undefined, emit = true): void {\n const isReadonly = item && typeof item !== 'string' && item.readonly;\n\n if (isReadonly || this.selectedTag === item) {\n return;\n }\n\n this.selectedTag = item;\n\n if (emit) {\n this.onSelect.emit(item);\n }\n }\n\n /**\n * @name fireEvents\n * @desc goes through the list of the events for a given eventName, and fires each of them\n * @param eventName\n * @param $event\n */\n public fireEvents(eventName: string, $event?): void {\n this.listeners[eventName].forEach(listener => listener.call(this, $event));\n }\n\n /**\n * @name handleKeydown\n * @desc handles action when the user hits a keyboard key\n * @param data\n */\n public handleKeydown(data: any): void {\n const event = data.event;\n const key = event.keyCode || event.which;\n const shiftKey = event.shiftKey || false;\n\n switch (constants.KEY_PRESS_ACTIONS[key]) {\n case constants.ACTIONS_KEYS.DELETE:\n if (this.selectedTag && this.removable) {\n const index = this.items.indexOf(this.selectedTag);\n this.onRemoveRequested(this.selectedTag, index);\n }\n break;\n\n case constants.ACTIONS_KEYS.SWITCH_PREV:\n this.moveToTag(data.model, constants.PREV);\n break;\n\n case constants.ACTIONS_KEYS.SWITCH_NEXT:\n this.moveToTag(data.model, constants.NEXT);\n break;\n\n case constants.ACTIONS_KEYS.TAB:\n if (shiftKey) {\n if (this.isFirstTag(data.model)) {\n return;\n }\n\n this.moveToTag(data.model, constants.PREV);\n } else {\n if (this.isLastTag(data.model) && (this.disable || this.maxItemsReached)) {\n return;\n }\n\n this.moveToTag(data.model, constants.NEXT);\n }\n break;\n\n default:\n return;\n }\n\n // prevent default behaviour\n event.preventDefault();\n }\n\n public async onFormSubmit() {\n try {\n await this.onAddingRequested(false, this.formValue);\n } catch {\n return;\n }\n }\n\n /**\n * @name setInputValue\n * @param value\n */\n public setInputValue(value: string, emitEvent = true): void {\n const control = this.getControl();\n\n // update form value with the transformed item\n control.setValue(value, { emitEvent });\n }\n\n /**\n * @name getControl\n */\n private getControl(): FormControl {\n return this.inputForm.value as FormControl;\n }\n\n /**\n * @name focus\n * @param applyFocus\n * @param displayAutocomplete\n */\n public focus(applyFocus = false, displayAutocomplete = false): void {\n if (this.dragProvider.getState('dragging')) {\n return;\n }\n\n this.selectItem(undefined, false);\n\n if (applyFocus) {\n this.inputForm.focus();\n this.onFocus.emit(this.formValue);\n }\n }\n\n /**\n * @name blur\n */\n public blur(): void {\n this.onTouched();\n\n this.onBlur.emit(this.formValue);\n }\n\n /**\n * @name hasErrors\n */\n public hasErrors(): boolean {\n return !!this.inputForm && this.inputForm.hasErrors();\n }\n\n /**\n * @name isInputFocused\n */\n public isInputFocused(): boolean {\n return !!this.inputForm && this.inputForm.isInputFocused();\n }\n\n /**\n * - this is the one way I found to tell if the template has been passed and it is not\n * the template for the menu item\n * @name hasCustomTemplate\n */\n public hasCustomTemplate(): boolean {\n const template = this.templates ? this.templates.first : undefined;\n const menuTemplate = this.dropdown && this.dropdown.templates ?\n this.dropdown.templates.first : undefined;\n\n return Boolean(template && template !== menuTemplate);\n }\n\n /**\n * @name maxItemsReached\n */\n public get maxItemsReached(): boolean {\n return this.maxItems !== undefined &&\n this.items.length >= this.maxItems;\n }\n\n /**\n * @name formValue\n */\n public get formValue(): string {\n const form = this.inputForm.value;\n\n return form ? form.value : '';\n }\n\n /**3\n * @name onDragStarted\n * @param event\n * @param index\n */\n public onDragStarted(event: DragEvent, tag: TagModel, index: number): void {\n event.stopPropagation();\n\n const item = { zone: this.dragZone, tag, index } as DraggedTag;\n\n this.dragProvider.setSender(this);\n this.dragProvider.setDraggedItem(event, item);\n this.dragProvider.setState({ dragging: true, index });\n }\n\n /**\n * @name onDragOver\n * @param event\n */\n public onDragOver(event: DragEvent, index?: number): void {\n this.dragProvider.setState({ dropping: true });\n this.dragProvider.setReceiver(this);\n\n event.preventDefault();\n }\n\n /**\n * @name onTagDropped\n * @param event\n * @param index\n */\n public onTagDropped(event: DragEvent, index?: number): void {\n const item = this.dragProvider.getDraggedItem(event);\n\n if (!item || item.zone !== this.dragZone) {\n return;\n }\n\n this.dragProvider.onTagDropped(item.tag, item.index, index);\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * @name isDropping\n */\n public isDropping(): boolean {\n const isReceiver = this.dragProvider.receiver === this;\n const isDropping = this.dragProvider.getState('dropping');\n\n return Boolean(isReceiver && isDropping);\n }\n\n /**\n * @name onTagBlurred\n * @param changedElement {TagModel}\n * @param index {number}\n */\n public onTagBlurred(changedElement: TagModel, index: number): void {\n this.items[index] = changedElement;\n this.blur();\n }\n\n /**\n * @name trackBy\n * @param items\n */\n public trackBy(index: number, item: TagModel): string {\n return item[this.identifyBy];\n }\n\n /**\n * @name updateEditedTag\n * @param tag\n */\n public updateEditedTag(tag: TagModel): void {\n this.onTagEdited.emit(tag);\n }\n\n /**\n *\n * @param tag\n * @param isFromAutocomplete\n */\n public isTagValid = (tag: TagModel, fromAutocomplete = false): boolean => {\n const selectedItem = this.dropdown ? this.dropdown.selectedItem : undefined;\n const value = this.getItemDisplay(tag).trim();\n\n if (selectedItem && !fromAutocomplete || !value) {\n return false;\n }\n\n const dupe = this.findDupe(tag, fromAutocomplete);\n\n // if so, give a visual cue and return false\n if (!this.allowDupes && dupe && this.blinkIfDupe) {\n const model = this.tags.find(item => {\n return this.getItemValue(item.model) === this.getItemValue(dupe);\n });\n\n if (model) {\n model.blink();\n }\n }\n\n const isFromAutocomplete = fromAutocomplete && this.onlyFromAutocomplete;\n\n const assertions = [\n // 1. there must be no dupe OR dupes are allowed\n !dupe || this.allowDupes,\n\n // 2. check max items has not been reached\n !this.maxItemsReached,\n\n // 3. check item comes from autocomplete or onlyFromAutocomplete is false\n ((isFromAutocomplete) || !this.onlyFromAutocomplete)\n ];\n\n return assertions.filter(Boolean).length === assertions.length;\n }\n\n /**\n * @name moveToTag\n * @param item\n * @param direction\n */\n private moveToTag(item: TagModel, direction: string): void {\n const isLast = this.isLastTag(item);\n const isFirst = this.isFirstTag(item);\n const stopSwitch = (direction === constants.NEXT && isLast) ||\n (direction === constants.PREV && isFirst);\n\n if (stopSwitch) {\n this.focus(true);\n return;\n }\n\n const offset = direction === constants.NEXT ? 1 : -1;\n const index = this.getTagIndex(item) + offset;\n const tag = this.getTagAtIndex(index);\n\n return tag.select.call(tag);\n }\n\n /**\n * @name isFirstTag\n * @param item {TagModel}\n */\n private isFirstTag(item: TagModel): boolean {\n return this.tags.first.model === item;\n }\n\n /**\n * @name isLastTag\n * @param item {TagModel}\n */\n private isLastTag(item: TagModel): boolean {\n return this.tags.last.model === item;\n }\n\n /**\n * @name getTagIndex\n * @param item\n */\n private getTagIndex(item: TagModel): number {\n const tags = this.tags.toArray();\n\n return tags.findIndex(tag => tag.model === item);\n }\n\n /**\n * @name getTagAtIndex\n * @param index\n */\n private getTagAtIndex(index: number) {\n const tags = this.tags.toArray();\n\n return tags[index];\n }\n\n /**\n * @name removeItem\n * @desc removes an item from the array of the model\n * @param tag {TagModel}\n * @param index {number}\n */\n public removeItem(tag: TagModel, index: number): void {\n this.items = this.getItemsWithout(index);\n\n // if the removed tag was selected, set it as undefined\n if (this.selectedTag === tag) {\n this.selectItem(undefined, false);\n }\n\n // focus input\n this.focus(true, false);\n\n // emit remove event\n this.onRemove.emit(tag);\n }\n\n /**\n * @name addItem\n * @desc adds the current text model to the items array\n * @param fromAutocomplete {boolean}\n * @param item {TagModel}\n * @param index? {number}\n * @param giveupFocus? {boolean}\n */\n private addItem(fromAutocomplete = false, item: TagModel, index?: number, giveupFocus?: boolean):\n Promise {\n const display = this.getItemDisplay(item);\n const tag = this.createTag(item);\n\n if (fromAutocomplete) {\n this.setInputValue(this.getItemValue(item, true));\n }\n\n return new Promise((resolve, reject) => {\n /**\n * @name reset\n */\n const reset = (): void => {\n // reset control and focus input\n this.setInputValue('');\n\n if (giveupFocus) {\n this.focus(false, false);\n } else {\n // focus input\n this.focus(true, false);\n }\n\n resolve(display);\n };\n\n const appendItem = (): void => {\n this.appendTag(tag, index);\n\n // emit event\n this.onAdd.emit(tag);\n\n if (!this.dropdown) {\n return;\n }\n\n this.dropdown.hide();\n\n if (this.dropdown.showDropdownIfEmpty) {\n this.dropdown.show();\n }\n };\n\n const status = this.inputForm.form.status;\n const isTagValid = this.isTagValid(tag, fromAutocomplete);\n\n const onValidationError = () => {\n this.onValidationError.emit(tag);\n return reject();\n };\n\n if (status === 'VALID' && isTagValid) {\n appendItem();\n return reset();\n }\n\n if (status === 'INVALID' || !isTagValid) {\n reset();\n return onValidationError();\n }\n\n if (status === 'PENDING') {\n const statusUpdate$ = this.inputForm.form.statusChanges;\n\n return statusUpdate$\n .pipe(\n filter(statusUpdate => statusUpdate !== 'PENDING'),\n first()\n )\n .subscribe((statusUpdate) => {\n if (statusUpdate === 'VALID' && isTagValid) {\n appendItem();\n return reset();\n } else {\n reset();\n return onValidationError();\n }\n });\n }\n });\n }\n\n /**\n * @name setupSeparatorKeysListener\n */\n private setupSeparatorKeysListener(): void {\n const useSeparatorKeys = this.separatorKeyCodes.length > 0 || this.separatorKeys.length > 0;\n const listener = ($event) => {\n const hasKeyCode = this.separatorKeyCodes.indexOf($event.keyCode) >= 0;\n const hasKey = this.separatorKeys.indexOf($event.key) >= 0;\n // the keyCode of keydown event is 229 when IME is processing the key event.\n const isIMEProcessing = $event.keyCode === 229;\n\n if (hasKeyCode || (hasKey && !isIMEProcessing)) {\n $event.preventDefault();\n this.onAddingRequested(false, this.formValue)\n .catch(() => { });\n }\n };\n\n listen.call(this, constants.KEYDOWN, listener, useSeparatorKeys);\n }\n\n /**\n * @name setUpKeypressListeners\n */\n private setUpKeypressListeners(): void {\n const listener = ($event) => {\n const isCorrectKey = $event.keyCode === 37 || $event.keyCode === 8;\n\n if (isCorrectKey &&\n !this.formValue &&\n this.items.length) {\n this.tags.last.select.call(this.tags.last);\n }\n };\n\n // setting up the keypress listeners\n listen.call(this, constants.KEYDOWN, listener);\n }\n\n /**\n * @name setUpKeydownListeners\n */\n private setUpInputKeydownListeners(): void {\n this.inputForm.onKeydown.subscribe(event => {\n if (event.key === 'Backspace' && this.formValue.trim() === '') {\n event.preventDefault();\n }\n });\n }\n\n /**\n * @name setUpOnPasteListener\n */\n private setUpOnPasteListener() {\n const input = this.inputForm.input.nativeElement;\n\n // attach listener to input\n this.renderer.listen(input, 'paste', (event) => {\n this.onPasteCallback(event);\n\n event.preventDefault();\n return true;\n });\n }\n\n /**\n * @name setUpTextChangeSubscriber\n */\n private setUpTextChangeSubscriber(): void {\n this.inputForm.form\n .valueChanges\n .pipe(\n debounceTime(this.onTextChangeDebounce)\n )\n .subscribe((value: { item: string }) => {\n this.onTextChange.emit(value.item);\n });\n }\n\n /**\n * @name setUpOnBlurSubscriber\n */\n private setUpOnBlurSubscriber(): void {\n const filterFn = (): boolean => {\n const isVisible = this.dropdown && this.dropdown.isVisible;\n return !isVisible && !!this.formValue;\n };\n\n this.inputForm\n .onBlur\n .pipe(\n debounceTime(100),\n filter(filterFn)\n )\n .subscribe(() => {\n const reset = () => this.setInputValue('');\n\n if (this.addOnBlur) {\n return this\n .onAddingRequested(false, this.formValue, undefined, true)\n .then(reset)\n .catch(reset);\n }\n\n reset();\n });\n }\n\n /**\n * @name findDupe\n * @param tag\n * @param isFromAutocomplete\n */\n private findDupe(tag: TagModel, isFromAutocomplete: boolean): TagModel | undefined {\n const identifyBy = isFromAutocomplete ? this.dropdown.identifyBy : this.identifyBy;\n const id = tag[identifyBy];\n\n return this.items.find(item => this.getItemValue(item) === id);\n }\n\n /**\n * @name onPasteCallback\n * @param data\n */\n private onPasteCallback = async (data: ClipboardEvent) => {\n interface IEWindow extends Window {\n clipboardData: DataTransfer;\n }\n\n const getText = (): string => {\n const isIE = Boolean((window as IEWindow & typeof globalThis).clipboardData);\n const clipboardData = isIE ? (\n (window as IEWindow & typeof globalThis).clipboardData\n ) : data.clipboardData;\n const type = isIE ? 'Text' : 'text/plain';\n return clipboardData === null ? '' : clipboardData.getData(type) || '';\n };\n\n const text = getText();\n\n const requests = text\n .split(this.pasteSplitPattern)\n .map(item => {\n const tag = this.createTag(item);\n this.setInputValue(tag[this.displayBy]);\n return this.onAddingRequested(false, tag);\n });\n\n const resetInput = () => setTimeout(() => this.setInputValue(''), 50);\n\n Promise.all(requests).then(() => {\n this.onPaste.emit(text);\n resetInput();\n })\n .catch(resetInput);\n }\n\n /**\n * @name setAnimationMetadata\n */\n private setAnimationMetadata(): void {\n this.animationMetadata = {\n value: 'in',\n params: { ...this.animationDuration }\n };\n }\n}\n","\n\n \n \n \n \n\n \n \n \n\n \n\n\n\n\n \n {{ error }}\n \n\n\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule, FormsModule, COMPOSITION_BUFFER_MODE } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { Ng2DropdownModule } from 'ng2-material-dropdown';\nimport { HighlightPipe } from './core/pipes/highlight.pipe';\nimport { DragProvider } from './core/providers/drag-provider';\nimport { OptionsProvider, Options } from './core/providers/options-provider';\nimport { TagInputComponent } from './components/tag-input/tag-input';\nimport { DeleteIconComponent } from './components/icon/icon';\nimport { TagInputForm } from './components/tag-input-form/tag-input-form.component';\nimport { TagComponent } from './components/tag/tag.component';\nimport { TagInputDropdown } from './components/dropdown/tag-input-dropdown.component';\nimport { TagRipple } from './components/tag/tag-ripple.component';\n\nconst optionsProvider = new OptionsProvider();\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n Ng2DropdownModule\n ],\n declarations: [\n TagInputComponent,\n DeleteIconComponent,\n TagInputForm,\n TagComponent,\n HighlightPipe,\n TagInputDropdown,\n TagRipple\n ],\n exports: [\n TagInputComponent,\n DeleteIconComponent,\n TagInputForm,\n TagComponent,\n HighlightPipe,\n TagInputDropdown,\n TagRipple\n ],\n providers: [\n DragProvider,\n { provide: COMPOSITION_BUFFER_MODE, useValue: false },\n ]\n})\nexport class TagInputModule {\n /**\n * @name withDefaults\n * @param options {Options}\n */\n public static withDefaults(options: Options): void {\n optionsProvider.setOptions(options);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["constants.KEYDOWN","constants.KEYUP","filter","constants.MAX_ITEMS_WARNING","first","constants.KEY_PRESS_ACTIONS","constants.ACTIONS_KEYS","constants.PREV","constants.NEXT","debounceTime"],"mappings":"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"}
\n {{ error }}\n