{"version":3,"file":"nw-style-guide-email-input.mjs","sources":["../../../projects/nw-style-guide/email-input/email-input.component.ts","../../../projects/nw-style-guide/email-input/nw-style-guide-email-input.ts"],"sourcesContent":["import {\n    Component,\n    OnInit,\n    ViewChild,\n    ElementRef,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    OnDestroy,\n    Input,\n    Output,\n    EventEmitter,\n    inject\n} from '@angular/core';\nimport { FormControl, Validators, ReactiveFormsModule } from '@angular/forms';\nimport { IValidationChange } from './models/IValidationChange';\nimport { Subscription } from 'rxjs';\n\n@Component({\n    selector: 'nw-email-input',\n    template: `\n        <div\n            class=\"emails-container form-control input-lg\"\n            #container\n            [class.show-placeholder]=\"emails.length < 1 && emailInputControl.value.length < 1\"\n            (click)=\"onContainerClick($event)\"\n            (paste)=\"onPaste($event)\"\n            [attr.data-placeholder-text]=\"placeholder\">\n            @for (email of emails; track email; let last = $last) {\n                <div\n                    class=\"pill pill-sm\"\n                    [class.invalid]=\"!isValid(email)\"\n                    [class.selected]=\"last && isPillSelected\">\n                    <span class=\"pill-label\">{{ email }}</span>\n                    <button\n                        type=\"button\"\n                        class=\"close\"\n                        (click)=\"removeEmail(email)\">\n                        ×\n                    </button>\n                </div>\n            }\n\n            <div\n                class=\"input-container\"\n                [class.persistent-placeholder]=\"persistentPlaceholder\">\n                <!-- pill-hidden is an invisble element that controls the width of the input -->\n                <div class=\"pill pill-sm pill-hidden\">{{ emailInputControl.value }}</div>\n                <input\n                    type=\"text\"\n                    #inputEl\n                    [id]=\"inputId\"\n                    [formControl]=\"emailInputControl\"\n                    (keydown)=\"onKeydown($event)\"\n                    (keydown.tab)=\"onTab($event)\"\n                    (keyup.backspace)=\"onBackspace()\"\n                    [placeholder]=\"persistentPlaceholder\"\n                    (blur)=\"onBlur()\" />\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'nw-email-input',\n    imports: [ReactiveFormsModule]\n})\nexport class EmailInputComponent implements OnInit, OnDestroy {\n    private _cdRef = inject(ChangeDetectorRef);\n\n    @Input() emails: string[] = [];\n    /**\n     * Applied to the HTMLInputElement. Mostly useful for label using the \"for\" attribute\n     */\n    @Input() inputId: string = '';\n    @Input() placeholder: string = '';\n    @Input() persistentPlaceholder: string = '';\n    /**\n     * A list of strings or RegExp to be matched against the inputted list of emails. Any emails that\n     * match entries in the blacklist will be marked as invalid\n     */\n    @Input() blacklist: (string | RegExp)[] = [];\n\n    @Output() updated: EventEmitter<IValidationChange> = new EventEmitter();\n\n    @ViewChild('inputEl', { static: true }) inputEl: ElementRef;\n    @ViewChild('container', { static: true }) container: ElementRef;\n\n    public emailInputControl: FormControl<string> = new FormControl('', Validators.email);\n    public isPillSelected: boolean = false;\n\n    private _validationFormControl: FormControl<string> = new FormControl();\n    private _submitKeys: string[] = [',', 'Enter', ' ', ';'];\n    private _valueChangesSub: Subscription;\n\n    ngOnInit() {\n        this._subscribeToValueChanges();\n        this._emitValidationChange();\n    }\n\n    private _subscribeToValueChanges() {\n        this._valueChangesSub = this.emailInputControl.valueChanges.subscribe(value => {\n            if (value.length > 0) {\n                this.isPillSelected = false;\n                this._cdRef.detectChanges();\n            }\n        });\n    }\n\n    removeEmail(email: string) {\n        const index = this.emails.indexOf(email, 0);\n\n        if (index > -1) {\n            this.emails = this.emails.filter(value => value !== email);\n            this._emitValidationChange();\n        }\n    }\n\n    onBlur() {\n        this.isPillSelected = false;\n        this._addEmail();\n    }\n\n    onKeydown(event: KeyboardEvent): void {\n        const index = this._submitKeys.indexOf(event.key, 0);\n\n        if (index > -1) {\n            event.preventDefault();\n            this._addEmail();\n            this.focus();\n        }\n\n        if (event.key === 'Escape') {\n            event.stopPropagation();\n            this.emailInputControl.setValue('');\n            (this.inputEl.nativeElement as HTMLInputElement).blur();\n        }\n    }\n\n    onTab(event: KeyboardEvent) {\n        /**\n         * If the input has a value, add it as an entry.\n         *\n         * Otherwise, allow the default tab behaviour\n         */\n        if (this.emailInputControl.value.length > 0) {\n            event.preventDefault();\n            this._addEmail();\n            this.focus();\n        }\n    }\n\n    isValid(email: string): boolean {\n        this._validationFormControl.setValue(email);\n        const isBlacklisted = this.blacklist.some(item => {\n            /**\n             * If item in blacklist is a string, create a regular expression to match the full\n             * case-insenstive string\n             */\n            if (typeof item === 'string') {\n                return email.match(new RegExp(`^${item}$`, 'i'));\n            }\n            return email.match(item);\n        });\n\n        return Validators.email(this._validationFormControl) === null && !isBlacklisted;\n    }\n\n    onContainerClick(event: MouseEvent) {\n        /**\n         * We're only interested in this event if it originates from the container element.\n         *\n         * We don't care about events that bubble up from child elements.\n         */\n        if (event.target === this.container.nativeElement) {\n            this.focus();\n        }\n    }\n\n    onPaste(event: ClipboardEvent) {\n        if (event.clipboardData) {\n            event.preventDefault();\n\n            this.emailInputControl.markAsDirty();\n\n            const selectionStart: number = (this.inputEl.nativeElement as HTMLInputElement).selectionStart;\n            const selectionEnd: number = (this.inputEl.nativeElement as HTMLInputElement).selectionEnd;\n            const controlValue: string = this.emailInputControl.value as string;\n\n            let pastedData: string = event.clipboardData.getData('text');\n\n            /**\n             * We need to check if the input already has a value when the user pasted\n             */\n            if (this.emailInputControl.value.length) {\n                /**\n                 * The user has selected text in the input\n                 */\n                if (selectionStart !== selectionEnd) {\n                    const newValue: string = controlValue.slice(0, selectionStart) + controlValue.slice(selectionEnd);\n                    pastedData = newValue.slice(0, selectionStart) + pastedData + newValue.slice(selectionStart);\n                } else {\n                    pastedData =\n                        controlValue.slice(0, selectionStart) + pastedData + controlValue.slice(selectionStart);\n                }\n            }\n\n            const items: string[] = pastedData\n                .split(/\\s+/)\n                .map(item => item.split(/,|;/g))\n                .reduce((acc, curr) => acc.concat(curr), [])\n                .filter(item => item);\n\n            const lastEmail: string = items[items.length - 1];\n\n            if (this.isValid(lastEmail)) {\n                // Use Set to remove duplicate emails\n                this.emails = Array.from(new Set(this.emails.concat(items)));\n                this.emailInputControl.setValue('');\n            } else {\n                items.pop();\n                // Use Set to remove duplicate emails\n                this.emails = Array.from(new Set(this.emails.concat(items)));\n                this.emailInputControl.setValue(lastEmail);\n            }\n            this._emitValidationChange();\n        }\n    }\n\n    private _addEmail() {\n        const email: string = this.emailInputControl.value.trim();\n\n        // We only want to add the entry if it hasn't already been added\n        if (email.length && this.emails.indexOf(email) === -1) {\n            this.emails = this.emails.concat(this.emailInputControl.value.trim());\n            this._emitValidationChange();\n        }\n        this.emailInputControl.setValue('');\n    }\n\n    focus() {\n        (this.inputEl.nativeElement as HTMLInputElement).focus();\n    }\n\n    onBackspace() {\n        if (this.emailInputControl.value.length < 1 && this.emails.length > 0) {\n            if (this.isPillSelected) {\n                this.removeEmail(this.emails[this.emails.length - 1]);\n            } else {\n                this.isPillSelected = true;\n            }\n        }\n    }\n\n    private _emitValidationChange() {\n        /**\n         * isValid is based on the entered emails and does not include the current value of the form control\n         */\n        const isValid: boolean = this.emails.length > 0 && this.emails.every(email => this.isValid(email));\n\n        this.updated.emit({\n            isValid: isValid,\n            emails: this.emails,\n            control: this.emailInputControl\n        });\n    }\n\n    ngOnDestroy() {\n        this._valueChangesSub.unsubscribe();\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}