{"version":3,"file":"uiowa-digit-only.mjs","sources":["../../../../projects/uiowa/digit-only/src/lib/digit-only.directive.ts","../../../../projects/uiowa/digit-only/src/lib/mask.directive.ts","../../../../projects/uiowa/digit-only/src/public-api.ts","../../../../projects/uiowa/digit-only/src/uiowa-digit-only.ts"],"sourcesContent":["import {\r\n  Directive,\r\n  ElementRef,\r\n  Input,\r\n  OnChanges,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[digitOnly]',\r\n  host: {\r\n    '(beforeinput)': 'onBeforeInput($event)',\r\n    '(keydown)': 'onKeyDown($event)',\r\n    '(paste)': 'onPaste($event)',\r\n    '(drop)': 'onDrop($event)',\r\n  },\r\n})\r\nexport class DigitOnlyDirective implements OnChanges {\r\n  private hasDecimalPoint = false;\r\n  private hasNegativeSign = false;\r\n  private navigationKeys = [\r\n    'Backspace',\r\n    'Delete',\r\n    'Tab',\r\n    'Escape',\r\n    'Enter',\r\n    'Home',\r\n    'End',\r\n    'ArrowLeft',\r\n    'ArrowRight',\r\n    'Clear',\r\n    'Copy',\r\n    'Paste',\r\n  ];\r\n\r\n  @Input() decimal = false;\r\n  @Input() decimalSeparator = '.';\r\n  @Input() allowNegatives = false;\r\n  @Input() allowPaste = true;\r\n  @Input() negativeSign = '-';\r\n  @Input() min = -Infinity;\r\n  @Input() max = Infinity;\r\n  @Input() pattern?: string | RegExp;\r\n  private regex: RegExp | null = null;\r\n  inputElement: HTMLInputElement;\r\n\r\n  constructor(public el: ElementRef) {\r\n    this.inputElement = el.nativeElement;\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['pattern']) {\r\n      this.regex = this.pattern ? RegExp(this.pattern) : null;\r\n    }\r\n\r\n    if (changes['min']) {\r\n      const maybeMin = Number(this.min);\r\n      this.min = isNaN(maybeMin) ? -Infinity : maybeMin;\r\n    }\r\n\r\n    if (changes['max']) {\r\n      const maybeMax = Number(this.max);\r\n      this.max = isNaN(maybeMax) ? Infinity : maybeMax;\r\n    }\r\n  }\r\n\r\n  onBeforeInput(e: InputEvent): any {\r\n    if (isNaN(Number(e.data))) {\r\n      if (\r\n        e.data === this.decimalSeparator ||\r\n        (e.data === this.negativeSign && this.allowNegatives)\r\n      ) {\r\n        return; // go on\r\n      }\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n    }\r\n  }\r\n\r\n  onKeyDown(e: KeyboardEvent): any {\r\n    if (\r\n      this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc.\r\n      ((e.key === 'a' || e.code === 'KeyA') && e.ctrlKey === true) || // Allow: Ctrl+A\r\n      ((e.key === 'c' || e.code === 'KeyC') && e.ctrlKey === true) || // Allow: Ctrl+C\r\n      ((e.key === 'v' || e.code === 'KeyV') && e.ctrlKey === true) || // Allow: Ctrl+V\r\n      ((e.key === 'x' || e.code === 'KeyX') && e.ctrlKey === true) || // Allow: Ctrl+X\r\n      ((e.key === 'a' || e.code === 'KeyA') && e.metaKey === true) || // Allow: Cmd+A (Mac)\r\n      ((e.key === 'c' || e.code === 'KeyC') && e.metaKey === true) || // Allow: Cmd+C (Mac)\r\n      ((e.key === 'v' || e.code === 'KeyV') && e.metaKey === true) || // Allow: Cmd+V (Mac)\r\n      ((e.key === 'x' || e.code === 'KeyX') && e.metaKey === true) // Allow: Cmd+X (Mac)\r\n    ) {\r\n      // let it happen, don't do anything\r\n      return;\r\n    }\r\n\r\n    let newValue = '';\r\n\r\n    if (this.decimal && e.key === this.decimalSeparator) {\r\n      newValue = this.forecastValue(e.key);\r\n      if (newValue.split(this.decimalSeparator).length > 2) {\r\n        // has two or more decimal points\r\n        e.preventDefault();\r\n        return;\r\n      } else {\r\n        this.hasDecimalPoint = newValue.indexOf(this.decimalSeparator) > -1;\r\n        return; // Allow: only one decimal point\r\n      }\r\n    }\r\n\r\n    if (e.key === this.negativeSign && this.allowNegatives) {\r\n      newValue = this.forecastValue(e.key);\r\n      if (\r\n        newValue.charAt(0) !== this.negativeSign ||\r\n        newValue.split(this.negativeSign).length > 2\r\n      ) {\r\n        e.preventDefault();\r\n        return;\r\n      } else {\r\n        this.hasNegativeSign = newValue.split(this.negativeSign).length > -1;\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Ensure that it is a number and stop the keypress\r\n    if (e.key === ' ' || isNaN(Number(e.key))) {\r\n      e.preventDefault();\r\n      return;\r\n    }\r\n\r\n    newValue = newValue || this.forecastValue(e.key);\r\n    // check the input pattern RegExp\r\n    if (this.regex) {\r\n      if (!this.regex.test(newValue)) {\r\n        e.preventDefault();\r\n        return;\r\n      }\r\n    }\r\n\r\n    const newNumber = Number(newValue);\r\n    if (newNumber > this.max || newNumber < this.min) {\r\n      e.preventDefault();\r\n    }\r\n  }\r\n\r\n  onPaste(event: any): void {\r\n    if (this.allowPaste === true) {\r\n      let pastedInput: string = '';\r\n      if ((window as { [key: string]: any })['clipboardData']) {\r\n        // Browser is IE\r\n        pastedInput = (window as { [key: string]: any })[\r\n          'clipboardData'\r\n        ].getData('text');\r\n      } else if (event.clipboardData && event.clipboardData.getData) {\r\n        // Other browsers\r\n        pastedInput = event.clipboardData.getData('text/plain');\r\n      }\r\n\r\n      this.pasteData(pastedInput);\r\n      event.preventDefault();\r\n    } else {\r\n      // this prevents the paste\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n    }\r\n  }\r\n\r\n  onDrop(event: DragEvent): void {\r\n    const textData = event.dataTransfer?.getData('text') ?? '';\r\n    this.inputElement.focus();\r\n    this.pasteData(textData);\r\n    event.preventDefault();\r\n  }\r\n\r\n  private pasteData(pastedContent: string): void {\r\n    const sanitizedContent = this.sanitizeInput(pastedContent);\r\n    if (\r\n      sanitizedContent.includes(this.negativeSign) &&\r\n      this.hasNegativeSign &&\r\n      !this.getSelection().includes(this.negativeSign)\r\n    ) {\r\n      return;\r\n    }\r\n    const pasted = document.execCommand('insertText', false, sanitizedContent);\r\n    if (!pasted) {\r\n      if (this.inputElement.setRangeText) {\r\n        const { selectionStart: start, selectionEnd: end } = this.inputElement;\r\n        this.inputElement.setRangeText(\r\n          sanitizedContent,\r\n          start ?? 0,\r\n          end ?? 0,\r\n          'end'\r\n        );\r\n        // Angular's Reactive Form relies on \"input\" event, but on Firefox, the setRangeText method doesn't trigger it\r\n        // so we have to trigger it ourself.\r\n        if (\r\n          typeof (window as { [key: string]: any })['InstallTrigger'] !==\r\n          'undefined'\r\n        ) {\r\n          this.inputElement.dispatchEvent(\r\n            new Event('input', { cancelable: true })\r\n          );\r\n        }\r\n      } else {\r\n        // Browser does not support setRangeText, e.g. IE\r\n        this.insertAtCursor(this.inputElement, sanitizedContent);\r\n      }\r\n    }\r\n    if (this.decimal) {\r\n      this.hasDecimalPoint =\r\n        this.inputElement.value.indexOf(this.decimalSeparator) > -1;\r\n    }\r\n    this.hasNegativeSign =\r\n      this.inputElement.value.indexOf(this.negativeSign) > -1;\r\n  }\r\n\r\n  // The following 2 methods were added from the below article for browsers that do not support setRangeText\r\n  // https://stackoverflow.com/questions/11076975/how-to-insert-text-into-the-textarea-at-the-current-cursor-position\r\n  private insertAtCursor(myField: HTMLInputElement, myValue: string): void {\r\n    const startPos = myField.selectionStart ?? 0;\r\n    const endPos = myField.selectionEnd ?? 0;\r\n\r\n    myField.value =\r\n      myField.value.substring(0, startPos) +\r\n      myValue +\r\n      myField.value.substring(endPos, myField.value.length);\r\n\r\n    const pos = startPos + myValue.length;\r\n    myField.focus();\r\n    myField.setSelectionRange(pos, pos);\r\n\r\n    this.triggerEvent(myField, 'input');\r\n  }\r\n\r\n  private triggerEvent(el: HTMLInputElement, type: string): void {\r\n    if ('createEvent' in document) {\r\n      // modern browsers, IE9+\r\n      const e = document.createEvent('HTMLEvents');\r\n      e.initEvent(type, false, true);\r\n      el.dispatchEvent(e);\r\n    }\r\n  }\r\n  // end stack overflow code\r\n\r\n  private sanitizeInput(input: string): string {\r\n    let result = '';\r\n    let regex;\r\n    if (this.decimal && this.isValidDecimal(input)) {\r\n      regex = new RegExp(\r\n        `${this.getNegativeSignRegExp()}[^0-9${this.decimalSeparator}]`,\r\n        'g'\r\n      );\r\n    } else {\r\n      regex = new RegExp(`${this.getNegativeSignRegExp()}[^0-9]`, 'g');\r\n    }\r\n    result = input.replace(regex, '');\r\n\r\n    const maxLength = this.inputElement.maxLength;\r\n    if (maxLength > 0) {\r\n      // the input element has maxLength limit\r\n      const allowedLength =\r\n        maxLength -\r\n        this.inputElement.value.length +\r\n        (result.includes(`${this.negativeSign}`) ? 1 : 0);\r\n      result = allowedLength > 0 ? result.substring(0, allowedLength) : '';\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private getNegativeSignRegExp(): string {\r\n    return this.allowNegatives &&\r\n      (!this.hasNegativeSign || this.getSelection().includes(this.negativeSign))\r\n      ? `(?!^${this.negativeSign})`\r\n      : '';\r\n  }\r\n\r\n  private isValidDecimal(string: string): boolean {\r\n    if (!this.hasDecimalPoint) {\r\n      return string.split(this.decimalSeparator).length <= 2;\r\n    } else {\r\n      // the input element already has a decimal separator\r\n      const selectedText = this.getSelection();\r\n      if (selectedText && selectedText.indexOf(this.decimalSeparator) > -1) {\r\n        return string.split(this.decimalSeparator).length <= 2;\r\n      } else {\r\n        return string.indexOf(this.decimalSeparator) < 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  private getSelection(): string {\r\n    return this.inputElement.value.substring(\r\n      this.inputElement.selectionStart ?? 0,\r\n      this.inputElement.selectionEnd ?? 0\r\n    );\r\n  }\r\n\r\n  private forecastValue(key: string): string {\r\n    const selectionStart = this.inputElement.selectionStart ?? 0;\r\n    const selectionEnd = this.inputElement.selectionEnd ?? 0;\r\n    const oldValue = this.inputElement.value;\r\n    return (\r\n      oldValue.substring(0, selectionStart) +\r\n      key +\r\n      oldValue.substring(selectionEnd)\r\n    );\r\n  }\r\n}\r\n","import { Directive, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[mask]',\r\n  host: {\r\n    '(keydown)': 'onKeyDown($event)',\r\n  },\r\n})\r\nexport class MaskDirective {\r\n  private navigationKeys = [\r\n    'Backspace',\r\n    'Delete',\r\n    'Tab',\r\n    'Escape',\r\n    'Enter',\r\n    'Home',\r\n    'End',\r\n    'ArrowLeft',\r\n    'ArrowRight',\r\n    'Clear',\r\n    'Copy',\r\n    'Paste',\r\n  ];\r\n  inputElement: HTMLInputElement;\r\n  regex: RegExp = new RegExp('');\r\n\r\n  constructor(public el: ElementRef) {\r\n    this.inputElement = el.nativeElement;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.regex = new RegExp(this.inputElement.pattern);\r\n  }\r\n\r\n  onKeyDown(e: KeyboardEvent) {\r\n    if (\r\n      this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc.\r\n      ((e.key === 'a' || e.code === 'KeyA') && e.ctrlKey === true) || // Allow: Ctrl+A\r\n      ((e.key === 'c' || e.code === 'KeyC') && e.ctrlKey === true) || // Allow: Ctrl+C\r\n      ((e.key === 'v' || e.code === 'KeyV') && e.ctrlKey === true) || // Allow: Ctrl+V\r\n      ((e.key === 'x' || e.code === 'KeyX') && e.ctrlKey === true) || // Allow: Ctrl+X\r\n      ((e.key === 'a' || e.code === 'KeyA') && e.metaKey === true) || // Allow: Cmd+A (Mac)\r\n      ((e.key === 'c' || e.code === 'KeyC') && e.metaKey === true) || // Allow: Cmd+C (Mac)\r\n      ((e.key === 'v' || e.code === 'KeyV') && e.metaKey === true) || // Allow: Cmd+V (Mac)\r\n      ((e.key === 'x' || e.code === 'KeyX') && e.metaKey === true) // Allow: Cmd+X (Mac)\r\n    ) {\r\n      // let it happen, don't do anything\r\n      return;\r\n    }\r\n\r\n    const newValue = this.forecastValue(e.key);\r\n    if (!this.regex.test(newValue)) {\r\n      e.preventDefault();\r\n    }\r\n  }\r\n\r\n  private forecastValue(key: string): string {\r\n    const selectionStart = this.inputElement.selectionStart ?? 0;\r\n    const selectionEnd = this.inputElement.selectionEnd ?? 0;\r\n    const oldValue = this.inputElement.value;\r\n    const selection = oldValue.substring(selectionStart, selectionEnd);\r\n    return selection\r\n      ? oldValue.replace(selection, key)\r\n      : oldValue.substring(0, selectionStart) +\r\n          key +\r\n          oldValue.substring(selectionStart);\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of digit-only\r\n */\r\n\r\nexport * from './lib/digit-only.directive';\r\nexport * from './lib/mask.directive';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}