{"version":3,"file":"pad-ui-lib-input-number.mjs","sources":["../../../components/input-number/input-number.directive.ts","../../../components/input-number/input.module.ts","../../../components/input-number/pad-ui-lib-input-number.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, Input, forwardRef } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { OnTouchedType, PadSafeAny } from \"pad-ui-lib/core/type\";\n\nexport type PadInputSize = \"lg\" | \"md\";\n\n@Directive({\n  selector: \"input[padInputNumber]\",\n  exportAs: \"padInputNumber\",\n  host: {\n    class: \"pad-input\",\n    \"[class.pad-input-disabled]\": \"disabled\",\n    \"[disabled]\": \"disabled\",\n    \"[class.pad-input-size-md]\": `padSize === 'md'`,\n    \"[class.pad-input-size-lg]\": `padSize === 'lg'`,\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => PadInputNumberDirective),\n      multi: true,\n    },\n  ],\n})\nexport class PadInputNumberDirective implements ControlValueAccessor {\n  @Input() decimalSeparator = \".\";\n  @Input() thousandSeparator = \",\";\n  @Input() maximumFractionDigits = 0;\n\n  // @Input('value')\n  // set value(value: string | number | null) {\n  //   this.onInputChange(value ? value.toString() : '');\n  // }\n\n  #numberValue: string | null = null;\n  #formatValue = \"\";\n  private _onChange!: (value: number | null) => void;\n  private _onTouched!: OnTouchedType;\n\n  @HostListener(\"keydown\", [\"$event\"])\n  onInputKeyDown(event: KeyboardEvent) {\n    if (event.key == \"Backspace\") {\n      const prevValue = (event.target as HTMLInputElement).value;\n      const position = this.element.nativeElement.selectionStart;\n      if (position) {\n        const character = prevValue[position - 1];\n        if (character === this.thousandSeparator || character === this.decimalSeparator) {\n          event.preventDefault();\n          this.element.nativeElement.setSelectionRange(position - 1, position - 1);\n        }\n      }\n    }\n\n    if (event.key == \"Delete\") {\n      const prevValue = (event.target as HTMLInputElement).value;\n      const position = this.element.nativeElement.selectionStart;\n      if (position) {\n        const character = prevValue[position];\n        if (character === this.thousandSeparator || character === this.decimalSeparator) {\n          event.preventDefault();\n          this.element.nativeElement.setSelectionRange(position + 1, position + 1);\n        }\n      }\n    }\n  }\n\n  @HostListener(\"input\", [\"$event.target.value\"])\n  onInputChange(inputValue: string) {\n    if (inputValue) {\n      const position = this.element.nativeElement.selectionStart;\n      const num = this.unFormatValue(inputValue);\n      const displayText = this.formatMoney(num);\n      this.element.nativeElement.value = displayText;\n      this._onChange(num);\n\n      const [integer, decimal] = displayText.split(this.decimalSeparator);\n      console.log(decimal);\n      if (position) {\n        if (position < integer.length) {\n          const newPosition =\n            position - (inputValue.length - this.element.nativeElement.value.length);\n          this.element.nativeElement.setSelectionRange(newPosition, newPosition);\n        } else {\n          this.element.nativeElement.setSelectionRange(position, position);\n        }\n      }\n    } else {\n      this.element.nativeElement.value = \"\";\n      this._onChange(null);\n    }\n  }\n\n  constructor(private readonly element: ElementRef<HTMLInputElement>) {}\n\n  writeValue(obj: PadSafeAny): void {\n    this.element.nativeElement.value = obj ? this.formatMoney(obj) : \"\";\n    this.#numberValue = obj;\n  }\n  registerOnChange(fn: PadSafeAny): void {\n    this._onChange = fn;\n  }\n  registerOnTouched(fn: PadSafeAny): void {\n    this._onTouched = fn;\n  }\n  setDisabledState?(isDisabled: boolean): void {\n    console.log(\"isDisabled\", isDisabled);\n  }\n\n  formatMoney(value: number) {\n    const prefix = value < 0 ? \"-\" : \"\";\n    const temp = Math.abs(value).toString();\n\n    const amount = this.maximumFractionDigits ? parseFloat(temp) : parseInt(temp);\n\n    const i = parseInt(\n      Math.abs(Number(amount) ?? 0).toFixed(this.maximumFractionDigits)\n    ).toString();\n    const j = i.length > 3 ? i.length % 3 : 0;\n\n    // if (isNaN(Number(amount))) {\n    //   debugger;\n    // }\n\n    return (\n      prefix +\n      (j ? i.substring(0, j) + this.thousandSeparator : \"\") +\n      i.substring(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + this.thousandSeparator) +\n      (this.maximumFractionDigits\n        ? this.decimalSeparator +\n          Math.abs(amount - Number(i))\n            .toFixed(this.maximumFractionDigits)\n            .slice(2)\n        : \"\")\n    );\n  }\n\n  unFormatValue(value: string): number {\n    const temp = value.replace(this.decimalSeparator, \".\").replace(/[^\\d.-]/g, \"\");\n\n    return Number(temp);\n  }\n\n  #isLastCharacterDecimalSeparator(value: string) {\n    const num = parseInt(value[value.length - 1]);\n    return isNaN(num);\n  }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PadInputNumberDirective } from \"./input-number.directive\";\n\n@NgModule({\n  declarations: [PadInputNumberDirective],\n  exports: [PadInputNumberDirective],\n  imports: [CommonModule],\n})\nexport class PadInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}