{"version":3,"file":"ngx-touch-virtual-keyboard.mjs","sources":["../../../projects/ngx-touch-virtual-keyboard/src/lib/ngx-key-element.ts","../../../projects/ngx-touch-virtual-keyboard/src/lib/ngx-touch-virtual-keyboard.resources.ts","../../../projects/ngx-touch-virtual-keyboard/src/lib/ngx-touch-virtual-keyboard.service.ts","../../../projects/ngx-touch-virtual-keyboard/src/lib/repeat-action.directive.ts","../../../projects/ngx-touch-virtual-keyboard/src/lib/ngx-touch-virtual-keyboard.component.ts","../../../projects/ngx-touch-virtual-keyboard/src/lib/ngx-touch-virtual-keyboard.component.html","../../../projects/ngx-touch-virtual-keyboard/src/lib/ngx-use-keyboard.directive.ts","../../../projects/ngx-touch-virtual-keyboard/src/lib/ngx-touch-virtual-keyboard.module.ts","../../../projects/ngx-touch-virtual-keyboard/src/public-api.ts","../../../projects/ngx-touch-virtual-keyboard/src/ngx-touch-virtual-keyboard.ts"],"sourcesContent":["export interface INGXKeyElement {\r\n  p: string;\r\n  s?: string;\r\n}\r\n\r\nexport function k(a: string, b?: string): INGXKeyElement {\r\n  return { p: a, s: b };\r\n}\r\n","import { INGXKeyElement, k } from './ngx-key-element';\r\n\r\nexport type MapInputType = 'text' | 'password' | 'number' | 'email' | 'url' | 'range' | 'tel';\r\nexport type MapKeyboardType = 'default' | 'number' | 'password' | 'tel' | 'email';\r\n\r\nexport enum InputTypes {\r\n  Text,\r\n  Password,\r\n  Number,\r\n  Date,\r\n  Time,\r\n  Email,\r\n  Url,\r\n  File,\r\n  Range,\r\n  Search,\r\n  Tel,\r\n  Month,\r\n  Week,\r\n}\r\n\r\nexport type KeyboardType = 'full' | 'number' | 'password';\r\n\r\nexport const defaultKeyboard: { layout: string; values: (INGXKeyElement | string)[][] }[] = [\r\n  {\r\n    layout: 'us',\r\n    values: [\r\n      [\r\n        k('`', '~'),\r\n        k('1', '!'),\r\n        k('2', '@'),\r\n        k('3', '#'),\r\n        k('4', '$'),\r\n        k('5', '%'),\r\n        k('6', '^'),\r\n        k('7', '&'),\r\n        k('8', '*'),\r\n        k('9', '('),\r\n        k('0', ')'),\r\n        k('-', '_'),\r\n        k('=', '+'),\r\n        'backspace',\r\n      ],\r\n      ['tab', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'],\r\n      ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'],\r\n      ['shift', 'z', 'x', 'c', 'v', 'b', 'n', 'm', k(',', ';'), k('.', ':'), k('-', '_'), 'shift'],\r\n      ['space', 'left', 'right'],\r\n    ],\r\n  },\r\n  {\r\n    layout: 'it',\r\n    values: [\r\n      [\r\n        k('\\\\', '|'),\r\n        k('1', '!'),\r\n        k('2', '\"'),\r\n        k('3', '£'),\r\n        k('4', '$'),\r\n        k('5', '%'),\r\n        k('6', '&'),\r\n        k('7', '/'),\r\n        k('8', '('),\r\n        k('9', ')'),\r\n        k('0', '='),\r\n        k(\"'\", '?'),\r\n        k('ì', '^'),\r\n        'backspace',\r\n      ],\r\n      ['tab', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', k('è', 'é'), k('+', '*')],\r\n      ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', k('ò', 'ç'), k('à', '°'), k('ù', '§')],\r\n      ['shift', k('<', '>'), 'z', 'x', 'c', 'v', 'b', 'n', 'm', k(',', ';'), k('.', ':'), k('-', '_'), 'shift'],\r\n      ['space', 'left', 'right'],\r\n    ],\r\n  },\r\n];\r\n\r\nexport const emailKeyboard: { layout: string; values: (INGXKeyElement | string)[][] }[] = [\r\n  {\r\n    layout: 'us',\r\n    values: [\r\n      [\r\n        k('`', '~'),\r\n        k('1', '!'),\r\n        k('2', '@'),\r\n        k('3', '#'),\r\n        k('4', '$'),\r\n        k('5', '%'),\r\n        k('6', '^'),\r\n        k('7', '&'),\r\n        k('8', '*'),\r\n        k('9', '('),\r\n        k('0', ')'),\r\n        k('-', '_'),\r\n        k('=', '+'),\r\n        'backspace',\r\n      ],\r\n      ['tab', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'],\r\n      ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'],\r\n      ['shift', 'z', 'x', 'c', 'v', 'b', 'n', 'm', k(',', ';'), k('.', ':'), k('-', '_'), 'shift'],\r\n      ['space', '@', '.com', 'left', 'right'],\r\n    ],\r\n  },\r\n  {\r\n    layout: 'it',\r\n    values: [\r\n      [\r\n        k('\\\\', '|'),\r\n        k('1', '!'),\r\n        k('2', '\"'),\r\n        k('3', '£'),\r\n        k('4', '$'),\r\n        k('5', '%'),\r\n        k('6', '&'),\r\n        k('7', '/'),\r\n        k('8', '('),\r\n        k('9', ')'),\r\n        k('0', '='),\r\n        k(\"'\", '?'),\r\n        k('ì', '^'),\r\n        'backspace',\r\n      ],\r\n      ['tab', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', k('è', 'é'), k('+', '*')],\r\n      ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', k('ò', 'ç'), k('à', '°'), k('ù', '§')],\r\n      ['shift', k('<', '>'), 'z', 'x', 'c', 'v', 'b', 'n', 'm', k(',', ';'), k('.', ':'), k('-', '_'), 'shift'],\r\n      ['space', '@', '.com', 'left', 'right'],\r\n    ],\r\n  },\r\n];\r\n\r\nexport const numberKeyboard = [\r\n  {\r\n    layout: 'us',\r\n    values: [\r\n      ['1', '2', '3'],\r\n      ['4', '5', '6'],\r\n      ['7', '8', '9'],\r\n      ['.', '0', 'backspace'],\r\n    ],\r\n  },\r\n  {\r\n    layout: 'it',\r\n    values: [\r\n      ['1', '2', '3'],\r\n      ['4', '5', '6'],\r\n      ['7', '8', '9'],\r\n      [',', '0', 'backspace'],\r\n    ],\r\n  },\r\n];\r\n\r\nexport const telKeyboard = [\r\n  {\r\n    layout: 'us',\r\n    values: [\r\n      ['1', '2', '3', ''],\r\n      ['4', '5', '6', ''],\r\n      ['7', '8', '9', ''],\r\n      ['', '0', '+', 'backspace'],\r\n    ],\r\n  },\r\n];\r\n\r\nexport const dateKeyboard = [\r\n  {\r\n    layout: 'us',\r\n    values: [\r\n      ['', '1', '2', '3', ''],\r\n      ['', '4', '5', '6', ''],\r\n      ['', '7', '8', '9', ''],\r\n      ['-', '0', 'left', 'right', 'backspace'],\r\n    ],\r\n  },\r\n];\r\n\r\nexport const mapInputLayout: { inputType: MapInputType; keyboardType: MapKeyboardType }[] = [\r\n  { inputType: 'text', keyboardType: 'default' }, //KEYBOARD_LAYOUT_DEFAULT\r\n  { inputType: 'url', keyboardType: 'default' }, //KEYBOARD_LAYOUT_DEFAULT\r\n  { inputType: 'email', keyboardType: 'email' },\r\n  { inputType: 'password', keyboardType: 'password' },\r\n  { inputType: 'number', keyboardType: 'number' },\r\n  { inputType: 'range', keyboardType: 'number' },\r\n  { inputType: 'tel', keyboardType: 'tel' },\r\n];\r\n","import { ElementRef, Inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { KEYBOARD_MAP_INPUT_TO_LAYOUT } from '../public-api';\r\nimport { MapInputType, MapKeyboardType } from './ngx-touch-virtual-keyboard.resources';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NgxTouchVirtualKeyboardService {\r\n  constructor(\r\n    @Inject(KEYBOARD_MAP_INPUT_TO_LAYOUT)\r\n    private readonly _keyboardMapLayoutType: { inputType: MapInputType; keyboardType: MapKeyboardType }[]\r\n  ) {}\r\n\r\n  private isOpen = false;\r\n  private readonly isOpenSubject = new Subject<{ input: ElementRef | undefined; isOpen: boolean }>();\r\n  private keyboardType: MapKeyboardType = 'default';\r\n  private readonly isPasswordSubject = new Subject<boolean>();\r\n  private readonly keyboardTypeSubject = new Subject<MapKeyboardType>();\r\n  private readonly inputValueSubject$ = new BehaviorSubject<string>('');\r\n\r\n  get isPassword$() {\r\n    return this.isPasswordSubject.asObservable();\r\n  }\r\n\r\n  get keyboardType$() {\r\n    return this.keyboardTypeSubject.asObservable();\r\n  }\r\n\r\n  get inputValue$(): Observable<string> {\r\n    return this.inputValueSubject$.asObservable();\r\n  }\r\n\r\n  isOpen$ = this.isOpenSubject.asObservable();\r\n\r\n  openKeyboard(inputElement: ElementRef, value?: string) {\r\n    this.isOpen = true;\r\n    this.isOpenSubject.next({ input: inputElement, isOpen: this.isOpen });\r\n    this.keyboardTypeSubject.next(this.keyboardType);\r\n    this.inputValueSubject$.next(value ?? '');\r\n  }\r\n\r\n  updateKeyboard(value?: string) {\r\n    this.keyboardTypeSubject.next(this.keyboardType);\r\n    this.inputValueSubject$.next(value ?? '');\r\n  }\r\n\r\n  closeKeyboard() {\r\n    this.isOpen = false;\r\n    this.isOpenSubject.next({ input: undefined, isOpen: this.isOpen });\r\n    this.keyboardTypeSubject.next(this.keyboardType);\r\n  }\r\n\r\n  setType(type: string, forceType?: MapKeyboardType) {\r\n    //todo evaluate if there is an overridden configuration provided\r\n    //foreach in array search if exists key and set this.keyboardType = value\r\n\r\n    let isPassword = false;\r\n\r\n    var mappedType = this._keyboardMapLayoutType.find((e) => e.inputType === type);\r\n    if (mappedType) {\r\n      this.keyboardType = mappedType.keyboardType;\r\n      if (mappedType.inputType === 'password') isPassword = true;\r\n    } else {\r\n      this.keyboardType = 'default';\r\n    }\r\n    if (forceType) this.keyboardType = forceType;\r\n\r\n    this.keyboardTypeSubject.next(this.keyboardType);\r\n    this.isPasswordSubject.next(isPassword);\r\n  }\r\n\r\n  changeValue(value: string) {\r\n    this.inputValueSubject$.next(value ?? '');\r\n  }\r\n}\r\n","import { Directive, Output, EventEmitter, HostListener, OnDestroy } from '@angular/core';\r\nimport { Subscription, interval } from 'rxjs';\r\n\r\n@Directive({\r\n  selector: '[appRepeatAction]',\r\n})\r\nexport class RepeatActionDirective implements OnDestroy {\r\n  @Output() repeatAction = new EventEmitter<void>();\r\n  private subscription!: Subscription;\r\n\r\n  constructor() {}\r\n\r\n  @HostListener('mousedown') onMouseDown() {\r\n    // Emit the initial action\r\n    this.repeatAction.emit();\r\n\r\n    // Set interval to repeat the action every 500 milliseconds\r\n    this.subscription = interval(180)\r\n      .pipe()\r\n      .subscribe(() => {\r\n        this.repeatAction.emit();\r\n      });\r\n  }\r\n\r\n  @HostListener('mouseup', ['$event'])\r\n  @HostListener('mouseleave', ['$event'])\r\n  onMouseUp(event: MouseEvent) {\r\n    this.subscription?.unsubscribe();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscription?.unsubscribe();\r\n  }\r\n}\r\n","import { Component, OnDestroy, OnInit, HostListener, ElementRef, Inject, ViewChild, Input, OnChanges } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport { NgxTouchVirtualKeyboardService } from './ngx-touch-virtual-keyboard.service';\r\nimport { INGXKeyElement } from './ngx-key-element';\r\nimport { Subscription, interval, BehaviorSubject } from 'rxjs';\r\nimport { MapKeyboardType } from './ngx-touch-virtual-keyboard.resources';\r\nimport {\r\n  ICON_BACKSPACE,\r\n  ICON_ERASE,\r\n  ICON_EYE,\r\n  ICON_EYE_SLASH,\r\n  ICON_KEYBOARD,\r\n  ICON_KEYBOARD_CLOSE,\r\n  ICON_LEFT,\r\n  ICON_RIGHT,\r\n  ICON_SHIFT,\r\n  ICON_TAB,\r\n  // KEYBOARD_LAYOUT_DATE,\r\n  KEYBOARD_LAYOUT_DEFAULT,\r\n  KEYBOARD_LAYOUT_EMAIL,\r\n  KEYBOARD_LAYOUT_NUMBER,\r\n  KEYBOARD_LAYOUT_TEL,\r\n} from '../public-api';\r\n\r\n@Component({\r\n  selector: 'ngx-touch-virtual-keyboard',\r\n  templateUrl: './ngx-touch-virtual-keyboard.component.html',\r\n  styleUrls: ['./ngx-touch-virtual-keyboard.component.scss'],\r\n  animations: [\r\n    trigger('slideInOut', [\r\n      state(\r\n        'in',\r\n        style({\r\n          transform: 'translateY(0)',\r\n          opacity: 1,\r\n        })\r\n      ),\r\n      state(\r\n        'out',\r\n        style({\r\n          transform: 'translateY(100%)',\r\n          opacity: 0,\r\n        })\r\n      ),\r\n      transition('in => out', animate('300ms ease-out')),\r\n      transition('out => in', animate('300ms ease-in')),\r\n    ]),\r\n  ],\r\n})\r\nexport class NgxTouchVirtualKeyboardComponent implements OnInit, OnDestroy {\r\n  constructor(\r\n    @Inject(ICON_BACKSPACE) public iconDelete: string,\r\n    @Inject(ICON_ERASE) public iconErase: string,\r\n    @Inject(ICON_EYE) public iconEye: string,\r\n    @Inject(ICON_EYE_SLASH) public iconEyeSlash: string,\r\n    @Inject(ICON_KEYBOARD) public iconKeyboard: string,\r\n    @Inject(ICON_KEYBOARD_CLOSE) public iconKeyboardClose: string,\r\n    @Inject(ICON_LEFT) public iconLeft: string,\r\n    @Inject(ICON_RIGHT) public iconRight: string,\r\n    @Inject(ICON_SHIFT) public iconShift: string,\r\n    @Inject(ICON_TAB) public iconTab: string,\r\n    @Inject(KEYBOARD_LAYOUT_DEFAULT)\r\n    private readonly _keyboardLayoutDefault: { layout: string; values: (INGXKeyElement | string)[][] }[],\r\n    @Inject(KEYBOARD_LAYOUT_NUMBER)\r\n    private readonly _keyboardLayoutNumber: { layout: string; values: (INGXKeyElement | string)[][] }[],\r\n    @Inject(KEYBOARD_LAYOUT_TEL)\r\n    private readonly _keyboardLayoutTel: { layout: string; values: (INGXKeyElement | string)[][] }[],\r\n    @Inject(KEYBOARD_LAYOUT_EMAIL)\r\n    private readonly _keyboardLayoutEmail: { layout: string; values: (INGXKeyElement | string)[][] }[],\r\n    private readonly elementRef: ElementRef,\r\n    private readonly keyboardService: NgxTouchVirtualKeyboardService\r\n  ) {\r\n    this._selectedKeyboardLayout = _keyboardLayoutDefault;\r\n  }\r\n  private _layout: string = 'us';\r\n  private keyboardTypeSubscription!: Subscription;\r\n  private inputValueSubscription!: Subscription;\r\n  private keyboardSubscription!: Subscription;\r\n  private passwordSubscription!: Subscription;\r\n  private subscription!: Subscription;\r\n  private inputElement: ElementRef<any> | undefined = undefined;\r\n  private _cursorPosition: number = 0;\r\n  private capsLockActive: boolean = false;\r\n  private _textInputPassword = '';\r\n  private _selectedKeyboardLayout: { layout: string; values: (INGXKeyElement | string)[][] }[];\r\n  private readonly keyboardLayoutSubject = new BehaviorSubject<undefined | (INGXKeyElement | string)[][]>(undefined);\r\n\r\n  protected isShift = false;\r\n  protected isOpen: boolean = false;\r\n  protected textInput: string = '';\r\n  protected keyboardType!: MapKeyboardType;\r\n  protected isPassword: boolean = false;\r\n  protected passwordShow: boolean = false;\r\n  protected showCursor: boolean = true;\r\n\r\n  protected set cursorPosition(value: number) {\r\n    if (this._cursorPosition !== value) {\r\n      this._cursorPosition = value;\r\n      this.adjustCursorPosition();\r\n    }\r\n  }\r\n\r\n  protected get cursorPosition() {\r\n    return this._cursorPosition;\r\n  }\r\n\r\n  protected get textInputPassword() {\r\n    return this._textInputPassword;\r\n  }\r\n\r\n  @ViewChild('beforeCursor') beforeCursor!: ElementRef;\r\n  @ViewChild('cursor') cursor!: ElementRef;\r\n\r\n  @Input('layout')\r\n  set layout(value: string) {\r\n    if (value !== this._layout) {\r\n      this._layout = value;\r\n      this.evalauteKeyboardLayout();\r\n    }\r\n  }\r\n  get layout(): string {\r\n    return this._layout;\r\n  }\r\n\r\n  @HostListener('window:keydown', ['$event'])\r\n  onKeyDown(event: KeyboardEvent) {\r\n    //capslock\r\n    if (event.getModifierState && event.getModifierState('CapsLock')) {\r\n      this.capsLockActive = true;\r\n      this.isShift = true;\r\n    } else {\r\n      this.capsLockActive = false;\r\n      this.isShift = false;\r\n    }\r\n    if (event.shiftKey) {\r\n      this.isShift = this.capsLockActive ? false : true;\r\n    } else if (event.key === 'ArrowLeft') {\r\n      this.moveCursorLeft();\r\n    } else if (event.key === 'ArrowRight') {\r\n      this.moveCursorRight();\r\n    }\r\n  }\r\n\r\n  @HostListener('window:keyup', ['$event'])\r\n  onKeyUp(event: KeyboardEvent) {\r\n    if (!event.shiftKey) {\r\n      this.isShift = this.capsLockActive ? true : false;\r\n    }\r\n    this.cursorPosition = this.inputElement ? this.inputElement.nativeElement.selectionEnd : this.textInput.length;\r\n  }\r\n\r\n  // @HostListener('document:click', ['$event'])\r\n  @HostListener('click', ['$event'])\r\n  handleClick(event: MouseEvent) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    // If click was outside, prevent default action\r\n    // console.log('HERE IT IS A CLICK' + event);\r\n  }\r\n\r\n  protected get keyboardLayout$() {\r\n    return this.keyboardLayoutSubject.asObservable();\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.elementRef.nativeElement.addEventListener('mousedown', (e: MouseEvent) => {\r\n      this.handleMouseDown(e);\r\n    });\r\n\r\n    this.keyboardTypeSubscription = this.keyboardService.keyboardType$.subscribe((type) => {\r\n      if (this.keyboardType === type) return;\r\n\r\n      this.keyboardType = type;\r\n\r\n      switch (this.keyboardType) {\r\n        case 'default':\r\n          this._selectedKeyboardLayout = this._keyboardLayoutDefault;\r\n          break;\r\n        case 'number':\r\n          this._selectedKeyboardLayout = this._keyboardLayoutNumber;\r\n          break;\r\n        case 'password':\r\n          this._selectedKeyboardLayout = this._keyboardLayoutDefault;\r\n          break;\r\n        case 'tel':\r\n          this._selectedKeyboardLayout = this._keyboardLayoutTel;\r\n          break;\r\n        case 'email':\r\n          this._selectedKeyboardLayout = this._keyboardLayoutEmail;\r\n          break;\r\n        default:\r\n          this._selectedKeyboardLayout = this._keyboardLayoutDefault;\r\n      }\r\n\r\n      this.evalauteKeyboardLayout();\r\n    });\r\n\r\n    this.keyboardSubscription = this.keyboardService.isOpen$.subscribe((e) => {\r\n      this.inputElement = e.input;\r\n      this.isOpen = e.isOpen;\r\n    });\r\n\r\n    this.passwordSubscription = this.keyboardService.isPassword$.subscribe((isPassword) => {\r\n      this.isPassword = isPassword;\r\n    });\r\n\r\n    this.inputValueSubscription = this.keyboardService.inputValue$.subscribe((value) => {\r\n      if (this.textInput !== value) {\r\n        this.onInputChange(value);\r\n        this.cursorPosition = this.inputElement ? this.inputElement.nativeElement.selectionEnd : this.textInput.length;\r\n      }\r\n    });\r\n\r\n    this.restartCursorVisibility();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.keyboardSubscription.unsubscribe();\r\n    this.keyboardTypeSubscription.unsubscribe();\r\n    this.passwordSubscription.unsubscribe();\r\n    this.inputValueSubscription.unsubscribe();\r\n    this.subscription.unsubscribe();\r\n  }\r\n\r\n  protected toggleKeyboard() {\r\n    this.isOpen = !this.isOpen;\r\n  }\r\n\r\n  protected pressKey(key: string) {\r\n    const charToAdd = this.isShift ? key.toUpperCase() : key;\r\n    const updatedTextInput = `${this.textInput.slice(0, this.cursorPosition)}${charToAdd}${this.textInput.slice(this.cursorPosition)}`;\r\n\r\n    if (this.textInput !== updatedTextInput) {\r\n      this.onInputChange(updatedTextInput);\r\n      this.cursorPosition++;\r\n    }\r\n  }\r\n\r\n  protected clear() {\r\n    this.textInput = '';\r\n    this.cursorPosition = 0;\r\n    this.keyboardService.changeValue(this.textInput);\r\n  }\r\n\r\n  protected emitDeletePressed() {\r\n    const deletePosition = this.cursorPosition - 1;\r\n\r\n    if (deletePosition >= 0 && deletePosition < this.textInput.length) {\r\n      const updatedTextInput = this.textInput.slice(0, deletePosition) + this.textInput.slice(deletePosition + 1);\r\n\r\n      this.onInputChange(updatedTextInput);\r\n      this.cursorPosition = deletePosition;\r\n    }\r\n  }\r\n\r\n  protected emitTab() {\r\n    const focusableElements = document.querySelectorAll(\r\n      'button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([disabled]):not([tabindex=\"-1\"])'\r\n    );\r\n\r\n    const focusedElement = document.activeElement;\r\n    if (focusedElement) {\r\n      let currentIndex = Array.from(focusableElements).indexOf(focusedElement);\r\n\r\n      if (!this.isShift) {\r\n        if (currentIndex === -1) {\r\n          currentIndex = 0;\r\n        }\r\n\r\n        const nextIndex = (currentIndex + 1) % focusableElements.length;\r\n        const nextElement = focusableElements[nextIndex] as HTMLElement;\r\n        nextElement.focus();\r\n      } else {\r\n        const prevIndex = currentIndex - 1;\r\n\r\n        if (prevIndex < 0) {\r\n          (focusableElements[currentIndex] as HTMLElement).blur();\r\n          return;\r\n        }\r\n\r\n        const nextElement = focusableElements[prevIndex] as HTMLElement;\r\n        nextElement.focus();\r\n      }\r\n    }\r\n  }\r\n\r\n  protected arrowLeft() {\r\n    this.moveCursorLeft();\r\n    this.setSourceCursor();\r\n  }\r\n  protected arrowRight() {\r\n    this.moveCursorRight();\r\n    this.setSourceCursor();\r\n  }\r\n\r\n  protected shiftClick() {\r\n    if (!this.capsLockActive) this.isShift = !this.isShift;\r\n  }\r\n\r\n  protected showHide() {\r\n    if (this.isPassword) {\r\n      this.passwordShow = !this.passwordShow;\r\n      this.adjustCursorPosition();\r\n    }\r\n  }\r\n\r\n  private evalauteKeyboardLayout(): void {\r\n    const res = this._selectedKeyboardLayout.find((e) => e.layout === this.layout);\r\n    if (!res) {\r\n      console.error(`layout: <${this.layout}> not found. Default is applied: <${this._selectedKeyboardLayout[0].layout}>`);\r\n      this.layout = this._selectedKeyboardLayout[0].layout;\r\n      this.keyboardLayoutSubject.next(this._selectedKeyboardLayout[0].values);\r\n      return;\r\n    }\r\n\r\n    if (res === undefined) this.keyboardLayoutSubject.next(undefined);\r\n    else this.keyboardLayoutSubject.next(res.values);\r\n  }\r\n\r\n  private onInputChange(value: string) {\r\n    if (this.textInput === value) return;\r\n\r\n    this.textInput = value;\r\n    this._textInputPassword = '*'.repeat(this.textInput.length);\r\n    this.keyboardService.changeValue(this.textInput);\r\n  }\r\n\r\n  private handleMouseDown(event: MouseEvent) {\r\n    // Prevent the default behavior which causes the input field to lose focus\r\n    event.preventDefault();\r\n  }\r\n\r\n  private restartCursorVisibility(): void {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n      this.showCursor = true;\r\n    }\r\n\r\n    this.subscription = interval(500).subscribe(() => {\r\n      this.showCursor = !this.showCursor; // Toggle cursor visibility\r\n    });\r\n  }\r\n\r\n  private adjustCursorPosition() {\r\n    setTimeout(() => {\r\n      if (this.beforeCursor && this.cursor) {\r\n        this.restartCursorVisibility();\r\n        const beforeCursorWidth = 3 + this.beforeCursor.nativeElement.offsetWidth;\r\n        this.cursor.nativeElement.style.left = beforeCursorWidth + 'px';\r\n      }\r\n\r\n      // this.setSourceCursor();\r\n    }, 0);\r\n  }\r\n\r\n  private setSourceCursor(): void {\r\n    if (!this.inputElement) return;\r\n\r\n    try {\r\n      this.inputElement.nativeElement.setSelectionRange(this._cursorPosition, this._cursorPosition);\r\n    } catch (error) {}\r\n  }\r\n\r\n  private moveCursorLeft() {\r\n    if (this.cursorPosition > 0) {\r\n      this.cursorPosition--;\r\n    }\r\n  }\r\n\r\n  private moveCursorRight() {\r\n    if (this.cursorPosition + 1 <= this.textInput.length) {\r\n      this.cursorPosition++;\r\n    }\r\n  }\r\n}\r\n","<div class=\"keyboard-wrapper\">\r\n  <div class=\"keyboard-fixed\" [@slideInOut]=\"isOpen ? 'in' : 'out'\">\r\n    <div class=\"keyboard-row\" style=\"display: flex; align-items: center\">\r\n      <button class=\"keyboard-key keyboard-key-icon keyboard-key-icon-clear\" (click)=\"clear()\">\r\n        <img [src]=\"iconErase\" alt=\"cl\" />\r\n      </button>\r\n      <div class=\"keyboard-input\">\r\n        <ng-container *ngIf=\"!isPassword\">\r\n          <span #beforeCursor>{{ textInput.substring(0, cursorPosition) }}</span>\r\n          <span>{{ textInput.substring(cursorPosition) }}</span>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"isPassword\">\r\n          <span #beforeCursor>{{\r\n            passwordShow ? textInput.substring(0, cursorPosition) : textInputPassword.substring(0, cursorPosition)\r\n          }}</span>\r\n          <span>{{ passwordShow ? textInput.substring(cursorPosition) : textInputPassword.substring(cursorPosition) }}</span>\r\n        </ng-container>\r\n        <span #cursor class=\"keyboard-input-cursor\" [style.visibility]=\"showCursor ? 'visible' : 'hidden'\"></span>\r\n      </div>\r\n      <button *ngIf=\"isPassword\" class=\"keyboard-key keyboard-key-icon keyboard-key-icon-clear\" (click)=\"showHide()\">\r\n        <img *ngIf=\"!passwordShow\" [src]=\"iconEye\" alt=\"eye\" />\r\n        <img *ngIf=\"passwordShow\" [src]=\"iconEyeSlash\" alt=\"eyeSlash\" />\r\n      </button>\r\n    </div>\r\n    <ng-container *ngIf=\"keyboardLayout$ | async as layoutSel\">\r\n      <ng-container *ngIf=\"layoutSel\">\r\n        <ng-container *ngTemplateOutlet=\"content; context: { data: layoutSel }\"></ng-container>\r\n      </ng-container>\r\n    </ng-container>\r\n  </div>\r\n</div>\r\n<button class=\"toggle-button keyboard-key-icon\" (click)=\"toggleKeyboard()\">\r\n  <img *ngIf=\"!isOpen\" [src]=\"iconKeyboard\" alt=\"keyboard\" />\r\n  <img *ngIf=\"isOpen\" [src]=\"iconKeyboardClose\" alt=\"keyboard\" />\r\n</button>\r\n<ng-template #content let-data=\"data\">\r\n  <div *ngFor=\"let row of data\" class=\"keyboard-row\">\r\n    <ng-container *ngFor=\"let key of row\">\r\n      <button\r\n        *ngIf=\"key === 'backspace'; else tab\"\r\n        class=\"keyboard-key keyboard-key-icon\"\r\n        appRepeatAction\r\n        (repeatAction)=\"emitDeletePressed()\"\r\n      >\r\n        <img style=\"height: 60%; width: 60%\" [src]=\"iconDelete\" alt=\"Backspace\" />\r\n      </button>\r\n      <ng-template #tab>\r\n        <button\r\n          *ngIf=\"key === 'tab'; else left\"\r\n          class=\"keyboard-key keyboard-key-icon\"\r\n          [class.keyboard-shift]=\"isShift\"\r\n          (click)=\"emitTab()\"\r\n        >\r\n          <img style=\"height: 50%; width: 50%\" [src]=\"iconTab\" alt=\"left\" />\r\n        </button>\r\n      </ng-template>\r\n      <ng-template #left>\r\n        <button *ngIf=\"key === 'left'; else right\" class=\"keyboard-key keyboard-key-icon\" appRepeatAction (repeatAction)=\"arrowLeft()\">\r\n          <img style=\"height: 50%; width: 50%\" [src]=\"iconLeft\" alt=\"left\" />\r\n        </button>\r\n      </ng-template>\r\n      <ng-template #right>\r\n        <button *ngIf=\"key === 'right'; else shift\" class=\"keyboard-key keyboard-key-icon\" appRepeatAction (repeatAction)=\"arrowRight()\">\r\n          <img style=\"height: 50%; width: 50%\" [src]=\"iconRight\" alt=\"right\" />\r\n        </button>\r\n      </ng-template>\r\n      <ng-template #shift>\r\n        <button\r\n          *ngIf=\"key === 'shift'; else space\"\r\n          [class.keyboard-shift]=\"isShift\"\r\n          class=\"keyboard-key keyboard-key-icon\"\r\n          (click)=\"shiftClick()\"\r\n        >\r\n          <img [src]=\"iconShift\" alt=\"shift\" />\r\n        </button>\r\n      </ng-template>\r\n      <ng-template #space>\r\n        <button\r\n          *ngIf=\"key === 'space'; else standardKey\"\r\n          class=\"keyboard-key-complex keyboard-key-icon keyboard-space\"\r\n          appRepeatAction\r\n          (repeatAction)=\"pressKey(' ')\"\r\n        >\r\n          <span class=\"keyboard-layout\">{{ layout }}</span>\r\n        </button>\r\n      </ng-template>\r\n      <ng-template #standardKey>\r\n        <ng-container *ngIf=\"key.s !== undefined\">\r\n          <button\r\n            [style.visibility]=\"key.p == '' ? 'hidden' : 'visible'\"\r\n            class=\"keyboard-key-complex\"\r\n            appRepeatAction\r\n            (repeatAction)=\"pressKey(isShift ? key.s : key.p)\"\r\n          >\r\n            <div>\r\n              <div class=\"keyboard-key-secondary\">\r\n                {{ !isShift ? key.s : key.p }}\r\n              </div>\r\n              <div>\r\n                {{ isShift ? key.s : key.p }}\r\n              </div>\r\n            </div>\r\n          </button>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"key.s === undefined\">\r\n          <button\r\n            [style.visibility]=\"key === '' ? 'hidden' : 'visible'\"\r\n            class=\"keyboard-key\"\r\n            appRepeatAction\r\n            (repeatAction)=\"pressKey(key)\"\r\n          >\r\n            {{ isShift ? (key | uppercase) : key }}\r\n          </button>\r\n        </ng-container>\r\n      </ng-template>\r\n    </ng-container>\r\n  </div>\r\n</ng-template>\r\n","import { Directive, ElementRef, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { NgxTouchVirtualKeyboardService } from './ngx-touch-virtual-keyboard.service';\r\nimport { MapKeyboardType } from './ngx-touch-virtual-keyboard.resources';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n  selector: '[useVirtualKeyboard]',\r\n  inputs: ['keyboardType'],\r\n})\r\nexport class UseKeyboardDirective implements OnInit, OnDestroy {\r\n  constructor(\r\n    private readonly elementRef: ElementRef<HTMLInputElement>,\r\n    private readonly keyboardService: NgxTouchVirtualKeyboardService\r\n  ) {}\r\n\r\n  private inputValueSubscription: Subscription | undefined;\r\n\r\n  @Input('setKeyboardType') setKeyboardType: MapKeyboardType = 'default';\r\n\r\n  @HostListener('input') // Listen for input events\r\n  onInput() {\r\n    this.onInputUpdate(this.elementRef.nativeElement.value);\r\n  }\r\n\r\n  @HostListener('focus') onFocus() {\r\n    if (this.inputValueSubscription) this.inputValueSubscription.unsubscribe();\r\n    // Open the keyboard using the service\r\n\r\n    const inputType = this.elementRef.nativeElement.type;\r\n    this.keyboardService.setType(inputType, this.setKeyboardType);\r\n    this.keyboardService.openKeyboard(this.elementRef, this.elementRef.nativeElement.value);\r\n\r\n    this.inputValueSubscription = this.keyboardService.inputValue$.subscribe((value) => {\r\n      this.onInputChange(value);\r\n    });\r\n  }\r\n\r\n  @HostListener('blur') onBlur() {\r\n    // Close the keyboard using the service\r\n    // console.log('Directive INIT...' + this.isNumericOnly);\r\n    // if (this.isNumericOnly === true) {\r\n    //   this.keyboardService.setNumericOnly(true);\r\n    // } else this.keyboardService.setNumericOnly(false);\r\n    if (this.inputValueSubscription) this.inputValueSubscription.unsubscribe();\r\n\r\n    this.keyboardService.closeKeyboard();\r\n  }\r\n\r\n  ngOnInit() {}\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.inputValueSubscription) this.inputValueSubscription.unsubscribe();\r\n  }\r\n\r\n  /**\r\n   * When keyboard trigger an element change. Reflect into input element\r\n   * @param value\r\n   * @returns\r\n   */\r\n  protected onInputChange(value: string) {\r\n    if (value === this.elementRef.nativeElement.value) return;\r\n\r\n    this.elementRef.nativeElement.value = value;\r\n  }\r\n\r\n  /**\r\n   * When input element change. Reflect change into keyboard component\r\n   * @param value\r\n   * @returns\r\n   */\r\n  protected onInputUpdate(value: string) {\r\n    this.keyboardService.updateKeyboard(value);\r\n  }\r\n}\r\n","import { InjectionToken, NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { UseKeyboardDirective } from './ngx-use-keyboard.directive';\r\nimport { RepeatActionDirective } from './repeat-action.directive';\r\nimport { NgxTouchVirtualKeyboardComponent } from './ngx-touch-virtual-keyboard.component';\r\nimport { INGXKeyElement } from './ngx-key-element';\r\nimport {\r\n  defaultKeyboard,\r\n  numberKeyboard,\r\n  telKeyboard,\r\n  emailKeyboard,\r\n  mapInputLayout,\r\n  MapInputType,\r\n  MapKeyboardType,\r\n} from './ngx-touch-virtual-keyboard.resources';\r\n\r\n/**\r\n * Export all icons InjectionToken to give possibility to override icon image\r\n */\r\nexport const ICON_BACKSPACE = new InjectionToken<string>('ICON_BACKSPACE');\r\nexport const ICON_ERASE = new InjectionToken<string>('ICON_ERASE');\r\nexport const ICON_EYE_SLASH = new InjectionToken<string>('ICON_EYE_SLASH');\r\nexport const ICON_EYE = new InjectionToken<string>('ICON_EYE');\r\nexport const ICON_KEYBOARD = new InjectionToken<string>('ICON_KEYBOARD');\r\nexport const ICON_KEYBOARD_CLOSE = new InjectionToken<string>('ICON_KEYBOARD_CLOSE');\r\nexport const ICON_LEFT = new InjectionToken<string>('ICON_LEFT');\r\nexport const ICON_RIGHT = new InjectionToken<string>('ICON_RIGHT');\r\nexport const ICON_SHIFT = new InjectionToken<string>('ICON_SHIFT');\r\nexport const ICON_TAB = new InjectionToken<string>('ICON_TAB');\r\n\r\nexport const KEYBOARD_LAYOUT_DEFAULT = new InjectionToken<{ layout: string; values: (INGXKeyElement | string)[][] }>(\r\n  'KEYBOARD_LAYOUT_DEFAULT'\r\n);\r\n\r\nexport const KEYBOARD_LAYOUT_NUMBER = new InjectionToken<{ layout: string; values: (INGXKeyElement | string)[][] }[]>(\r\n  'KEYBOARD_LAYOUT_NUMBER'\r\n);\r\n\r\nexport const KEYBOARD_LAYOUT_TEL = new InjectionToken<{ layout: string; alues: (INGXKeyElement | string)[][] }[]>('KEYBOARD_LAYOUT_TEL');\r\n\r\nexport const KEYBOARD_LAYOUT_EMAIL = new InjectionToken<{ layout: string; alues: (INGXKeyElement | string)[][] }[]>(\r\n  'KEYBOARD_LAYOUT_EMAIL'\r\n);\r\n\r\n/**\r\n *\r\n * Mapping from <input type=\"X\"> to a specific keyobard layout. This is pre mapped, but can be customized.\r\n * available KeyboardType = 'full' | 'number' | 'password' | 'tel' | 'date' | 'email';\r\n */\r\nexport const KEYBOARD_MAP_INPUT_TO_LAYOUT = new InjectionToken<{ inputType: MapInputType; keyboardType: MapKeyboardType }[]>(\r\n  'NGX_TVK_CONFIGURATION'\r\n);\r\n\r\n@NgModule({\r\n  declarations: [UseKeyboardDirective, RepeatActionDirective, NgxTouchVirtualKeyboardComponent],\r\n  providers: [\r\n    { provide: ICON_BACKSPACE, useValue: '../assets/ngx-tvk/icon/delete-left.svg' },\r\n    { provide: ICON_ERASE, useValue: '../assets/ngx-tvk/icon/erase.svg' },\r\n    { provide: ICON_EYE_SLASH, useValue: '../assets/ngx-tvk/icon/eye-slash.svg' },\r\n    { provide: ICON_EYE, useValue: '../assets/ngx-tvk/icon/eye.svg' },\r\n    { provide: ICON_KEYBOARD, useValue: '../assets/ngx-tvk/icon/keyboard.svg' },\r\n    { provide: ICON_KEYBOARD_CLOSE, useValue: '../assets/ngx-tvk/icon/keyboard.svg' },\r\n    { provide: ICON_LEFT, useValue: '../assets/ngx-tvk/icon/left.svg' },\r\n    { provide: ICON_RIGHT, useValue: '../assets/ngx-tvk/icon/right.svg' },\r\n    { provide: ICON_SHIFT, useValue: '../assets/ngx-tvk/icon/shift.svg' },\r\n    { provide: ICON_TAB, useValue: '../assets/ngx-tvk/icon/tab.svg' },\r\n    { provide: KEYBOARD_LAYOUT_DEFAULT, useValue: defaultKeyboard },\r\n    { provide: KEYBOARD_LAYOUT_NUMBER, useValue: numberKeyboard },\r\n    { provide: KEYBOARD_LAYOUT_TEL, useValue: telKeyboard },\r\n    { provide: KEYBOARD_LAYOUT_EMAIL, useValue: emailKeyboard },\r\n    { provide: KEYBOARD_MAP_INPUT_TO_LAYOUT, useValue: mapInputLayout },\r\n  ],\r\n  imports: [FormsModule, BrowserModule, BrowserAnimationsModule],\r\n\r\n  exports: [UseKeyboardDirective, NgxTouchVirtualKeyboardComponent],\r\n})\r\nexport class NgxTouchVirtualKeyboardModule {}\r\n","/*\r\n * Public API Surface of ngx-touch-virtual-keyboard\r\n */\r\nexport * from './lib/ngx-key-element';\r\nexport * from './lib/ngx-touch-virtual-keyboard.resources';\r\nexport * from './lib/ngx-touch-virtual-keyboard.service';\r\nexport * from './lib/ngx-touch-virtual-keyboard.component';\r\nexport * from './lib/ngx-touch-virtual-keyboard.module';\r\nexport * from './lib/ngx-use-keyboard.directive';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxTouchVirtualKeyboardService","i3.RepeatActionDirective"],"mappings":"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"}