{"version":3,"file":"_mehrad-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/_mehrad-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, '<b>$1</b>');\n        } catch (e) {\n            return value;\n        }\n    }\n}\n","/*\n** constants and default values for <tag-input>\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<TagModel>;\n    onAdding?: (tag: TagModel) => Observable<TagModel>;\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: <TagInputOptions>{\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: <TagInputDropdownOptions>{\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, UntypedFormControl, UntypedFormGroup, 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<any> = new EventEmitter();\n\n    /**\n     * @name onBlur\n     */\n    @Output() public onBlur: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * @name onFocus\n     */\n    @Output() public onFocus: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * @name onKeyup\n     */\n    @Output() public onKeyup: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * @name onKeydown\n     */\n    @Output() public onKeydown: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * @name inputTextChange\n     */\n    @Output() public inputTextChange: EventEmitter<string> = 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: UntypedFormGroup;\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: UntypedFormControl = new UntypedFormControl({ 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 UntypedFormGroup({\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(): UntypedFormControl {\n        return this.form.get('item') as UntypedFormControl;\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","<!-- form -->\n<form (ngSubmit)=\"submit($event)\" [formGroup]=\"form\">\n    <input #input\n\n           type=\"text\"\n           class=\"ng2-tag-input__text-input\"\n           autocomplete=\"off\"\n           tabindex=\"{{ disabled ? -1 : tabindex ? tabindex : 0 }}\"\n           minlength=\"1\"\n           formControlName=\"item\"\n\n           [ngClass]=\"inputClass\"\n           [attr.id]=\"inputId\"\n           [attr.placeholder]=\"placeholder\"\n           [attr.aria-label]=\"placeholder\"\n           [attr.tabindex]=\"tabindex\"\n           [attr.disabled]=\"disabled ? disabled : null\"\n\n           (focus)=\"onFocus.emit($event)\"\n           (blur)=\"onBlur.emit($event)\"\n           (keydown)=\"onKeyDown($event)\"\n           (keyup)=\"onKeyUp($event)\"\n    />\n</form>\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        <div class=\"tag-ripple\" [@ink]=\"state\"></div>\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","<span>\n    <svg\n        height=\"16px\"\n        viewBox=\"0 0 32 32\"\n        width=\"16px\"\n    >\n        <path\n            d=\"M17.459,16.014l8.239-8.194c0.395-0.391,0.395-1.024,0-1.414c-0.394-0.391-1.034-0.391-1.428,0  l-8.232,8.187L7.73,6.284c-0.394-0.395-1.034-0.395-1.428,0c-0.394,0.396-0.394,1.037,0,1.432l8.302,8.303l-8.332,8.286  c-0.394,0.391-0.394,1.024,0,1.414c0.394,0.391,1.034,0.391,1.428,0l8.325-8.279l8.275,8.276c0.394,0.395,1.034,0.395,1.428,0  c0.394-0.396,0.394-1.037,0-1.432L17.459,16.014z\"\n            fill=\"#121313\"\n        />\n    </svg>\n</span>","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<any>}\n     */\n    @Input()\n    public template: TemplateRef<any>;\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<TagModel> = new EventEmitter<TagModel>();\n\n    /**\n     * @name onRemove\n     */\n    @Output()\n    public onRemove: EventEmitter<TagModel> = new EventEmitter<TagModel>();\n\n    /**\n     * @name onBlur\n     */\n    @Output()\n    public onBlur: EventEmitter<TagModel> = new EventEmitter<TagModel>();\n\n    /**\n     * @name onKeyDown\n     */\n    @Output()\n    public onKeyDown: EventEmitter<any> = new EventEmitter<any>();\n\n    /**\n     * @name onTagEdited\n     */\n    @Output()\n    public onTagEdited: EventEmitter<TagModel> = new EventEmitter<TagModel>();\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","<div (click)=\"select($event)\"\n     (dblclick)=\"toggleEditMode()\"\n     (mousedown)=\"rippleState='clicked'\"\n     (mouseup)=\"rippleState='none'\"\n     [ngSwitch]=\"!!template\"\n     [class.disabled]=\"disabled\"\n     [attr.tabindex]=\"-1\"\n     [attr.aria-label]=\"getDisplayValue(model)\">\n\n    <div *ngSwitchCase=\"true\" [attr.contenteditable]=\"editing\">\n        <!-- CUSTOM TEMPLATE -->\n        <ng-template\n            [ngTemplateOutletContext]=\"{ item: model, index: index }\"\n            [ngTemplateOutlet]=\"template\">\n        </ng-template>\n    </div>\n\n    <div *ngSwitchCase=\"false\" class=\"tag-wrapper\">\n        <!-- TAG NAME -->\n        <div [attr.contenteditable]=\"editing\"\n             [attr.title]=\"getDisplayValue(model)\"\n             class=\"tag__text inline\"\n             spellcheck=\"false\"\n             (keydown.enter)=\"disableEditMode($event)\"\n             (keydown.escape)=\"disableEditMode($event)\"\n             (click)=\"editing ? $event.stopPropagation() : undefined\"\n             (blur)=\"onBlurred($event)\">\n            {{ getDisplayValue(model) }}\n        </div>\n\n        <!-- 'X' BUTTON -->\n        <delete-icon\n            aria-label=\"Remove tag\"\n            role=\"button\"\n            (click)=\"remove($event)\"\n            *ngIf=\"isDeleteIconVisible()\">\n        </delete-icon>\n    </div>\n</div>\n\n<tag-ripple [state]=\"rippleState\"\n            [attr.tabindex]=\"-1\"\n            *ngIf=\"isRippleVisible\">\n</tag-ripple>\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<TemplateRef<any>>;\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<any>;\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<Ng2Dropdown> {\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","<ng2-dropdown [dynamicUpdate]=\"dynamicUpdate\">\n    <ng2-dropdown-menu [focusFirstElement]=\"focusFirstElement\"\n                       [zIndex]=\"zIndex\"\n                       [appendToBody]=\"appendToBody\"\n                       [offset]=\"offset\">\n        <ng2-menu-item *ngFor=\"let item of items; let index = index; let last = last\"\n                       [value]=\"item\"\n                       [ngSwitch]=\"!!templates.length\">\n\n            <span *ngSwitchCase=\"false\"\n                  [innerHTML]=\"item[displayBy] | highlight : tagInput.inputForm.value.value\">\n            </span>\n\n            <ng-template *ngSwitchDefault\n                      [ngTemplateOutlet]=\"templates.first\"\n                      [ngTemplateOutletContext]=\"{ item: item, index: index, last: last }\">\n            </ng-template>\n        </ng2-menu-item>\n    </ng2-dropdown-menu>\n</ng2-dropdown>\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    UntypedFormControl,\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<TagModel>();\n\n    /**\n     * @name onRemove\n     * @desc event emitted when removing an existing item\n     */\n    @Output() public onRemove = new EventEmitter<TagModel>();\n\n    /**\n     * @name onSelect\n     * @desc event emitted when selecting an item\n     */\n    @Output() public onSelect = new EventEmitter<TagModel>();\n\n    /**\n     * @name onFocus\n     * @desc event emitted when the input is focused\n     */\n    @Output() public onFocus = new EventEmitter<string>();\n\n    /**\n     * @name onFocus\n     * @desc event emitted when the input is blurred\n     */\n    @Output() public onBlur = new EventEmitter<string>();\n\n    /**\n     * @name onTextChange\n     * @desc event emitted when the input value changes\n     */\n    @Output() public onTextChange = new EventEmitter<TagModel>();\n\n    /**\n     * - output triggered when text is pasted in the form\n     * @name onPaste\n     */\n    @Output() public onPaste = new EventEmitter<string>();\n\n    /**\n     * - output triggered when tag entered is not valid\n     * @name onValidationError\n     */\n    @Output() public onValidationError = new EventEmitter<TagModel>();\n\n    /**\n     * - output triggered when tag is edited\n     * @name onTagEdited\n     */\n    @Output() public onTagEdited = new EventEmitter<TagModel>();\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<TemplateRef<any>>;\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<TagComponent>;\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<string> = 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<boolean>;\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<TagModel> {\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<TagModel> {\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(): UntypedFormControl {\n        return this.inputForm.value as UntypedFormControl;\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<TagModel> {\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","<div\n    [ngClass]=\"theme\"\n    class=\"ng2-tag-input\"\n    (click)=\"focus(true, false)\"\n    [attr.tabindex]=\"-1\"\n    (drop)=\"dragZone ? onTagDropped($event, undefined) : undefined\"\n    (dragenter)=\"dragZone ? onDragOver($event) : undefined\"\n    (dragover)=\"dragZone ? onDragOver($event) : undefined\"\n    (dragend)=\"dragZone ? dragProvider.onDragEnd() : undefined\"\n    [class.ng2-tag-input--dropping]=\"isDropping()\"\n    [class.ng2-tag-input--disabled]=\"disable\"\n    [class.ng2-tag-input--loading]=\"isLoading\"\n    [class.ng2-tag-input--invalid]=\"hasErrors()\"\n    [class.ng2-tag-input--focused]=\"isInputFocused()\"\n>\n\n    <!-- TAGS -->\n    <div class=\"ng2-tags-container\">\n        <tag\n            *ngFor=\"let item of items; let i = index; trackBy: trackBy\"\n            (onSelect)=\"selectItem(item)\"\n            (onRemove)=\"onRemoveRequested(item, i)\"\n            (onKeyDown)=\"handleKeydown($event)\"\n            (onTagEdited)=\"updateEditedTag($event)\"\n            (onBlur)=\"onTagBlurred($event, i)\"\n            draggable=\"{{ editable }}\"\n            (dragstart)=\"dragZone ? onDragStarted($event, item, i) : undefined\"\n            (drop)=\"dragZone ? onTagDropped($event, i) : undefined\"\n            (dragenter)=\"dragZone ? onDragOver($event) : undefined\"\n            (dragover)=\"dragZone ? onDragOver($event, i) : undefined\"\n            (dragleave)=\"dragZone ? dragProvider.onDragEnd() : undefined\"\n            [canAddTag]=\"isTagValid\"\n            [attr.tabindex]=\"0\"\n            [disabled]=\"disable\"\n            [@animation]=\"animationMetadata\"\n            [hasRipple]=\"ripple\"\n            [index]=\"i\"\n            [removable]=\"removable\"\n            [editable]=\"editable\"\n            [displayBy]=\"displayBy\"\n            [identifyBy]=\"identifyBy\"\n            [template]=\"!!hasCustomTemplate() ? templates.first : undefined\"\n            [draggable]=\"dragZone\"\n            [model]=\"item\"\n        >\n        </tag>\n\n        <tag-input-form\n            (onSubmit)=\"onFormSubmit()\"\n            (onBlur)=\"blur()\"\n            (click)=\"dropdown ? dropdown.show() : undefined\"\n            (onKeydown)=\"fireEvents('keydown', $event)\"\n            (onKeyup)=\"fireEvents('keyup', $event)\"\n            [inputText]=\"inputText\"\n            [disabled]=\"disable\"\n            [validators]=\"validators\"\n            [asyncValidators]=\"asyncValidators\"\n            [hidden]=\"maxItemsReached\"\n            [placeholder]=\"items.length ? placeholder : secondaryPlaceholder\"\n            [inputClass]=\"inputClass\"\n            [inputId]=\"inputId\"\n            [tabindex]=\"tabindex\"\n        >\n        </tag-input-form>\n    </div>\n\n    <div\n        class=\"progress-bar\"\n        *ngIf=\"isProgressBarVisible$ | async\"\n    ></div>\n</div>\n\n<!-- ERRORS -->\n<div\n    *ngIf=\"hasErrors()\"\n    [ngClass]=\"theme\"\n    class=\"error-messages\"\n>\n    <p\n        *ngFor=\"let error of errors\"\n        class=\"error-message\"\n    >\n        <span>{{ error }}</span>\n    </p>\n</div>\n<ng-content></ng-content>\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":["i2.DeleteIconComponent","i3.TagRipple","i2","i3.HighlightPipe","constants.KEYDOWN","constants.KEYUP","filter","constants.MAX_ITEMS_WARNING","first","constants.KEY_PRESS_ACTIONS","constants.ACTIONS_KEYS","constants.PREV","constants.NEXT","debounceTime","i1.DragProvider"],"mappings":"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"}