{"version":3,"file":"kara-ui-alfa-components-form-amount-input.mjs","sources":["../../../libs/kara-ui/components/form/amount-input/amount-input.component.ts","../../../libs/kara-ui/components/form/amount-input/amount-input.component.html","../../../libs/kara-ui/components/form/amount-input/kara-ui-alfa-components-form-amount-input.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  HostBinding,\n  Input,\n  OnChanges,\n  SimpleChanges,\n  booleanAttribute,\n  numberAttribute,\n} from '@angular/core';\n\nimport { KBaseInputComponent } from 'kara-ui-alfa/components/form/base';\nimport { KIconComponent } from 'kara-ui-alfa/components/icon';\nimport { KFieldErrorComponent } from 'kara-ui-alfa/components/form/field-error';\nimport { KHintComponent } from 'kara-ui-alfa/components/form/hint';\nimport { CurrencyCodes, KCurrencyPipe } from 'kara-ui-alfa/pipes';\nimport { KButtonComponent } from 'kara-ui-alfa/components/button';\nimport { KInputComponent } from 'kara-ui-alfa/components/form/input';\nimport { AMOUNT_SEPARATOR, getFormattedValue } from 'kara-ui-alfa/components/amount';\n\n@Component({\n  selector: 'k-amount-input',\n  templateUrl: './amount-input.component.html',\n  styleUrls: ['../input/input.component.scss', '../../amount/amount.component.scss', './amount-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [KBaseInputComponent, KIconComponent, KFieldErrorComponent, KHintComponent, KCurrencyPipe, KButtonComponent],\n})\nexport class KAmountInputComponent extends KInputComponent<string | number> implements OnChanges {\n  /** Валюта перевода, на основании ее будет добавлен префикc валюты в конце */\n  @Input() currency?: CurrencyCodes | string = 'KZT';\n\n  /** Количество знаков после запятой */\n  @Input({ transform: numberAttribute }) precision: 0 | 2 | 3 | 4 = 2;\n\n  /** Максимальное допустимое количество символов целой части числа */\n  @Input({ transform: numberAttribute }) integerDigitsLimit: number = Number.MAX_SAFE_INTEGER.toString().length;\n\n  /** Использовать тот же цвет для дробных чисел */\n  @HostBinding('class.k-amount-inherit-color') @Input({ transform: booleanAttribute }) singleColor: boolean = false;\n\n  formattedValue: string = '';\n  amount?: { integer: string; fractional?: string };\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.value) {\n      this.writeValue(changes.value.currentValue);\n    }\n  }\n\n  override writeValue(value: string | number): void {\n    const data = Number.isNaN(Number.parseFloat(value as string)) ? '' : value;\n    this.formattedValue = this.amountValue(data.toString());\n    this.setAmountView(this.formattedValue);\n\n    super.writeValue(data);\n  }\n\n  protected override updateValue(value: string | number): void {\n    const data = value.toString();\n    this.formattedValue = this.amountValue(data.toString());\n    this.setAmountView(this.formattedValue);\n\n    if (this.input?.nativeElement) {\n      const caret = this.input.nativeElement.selectionStart || 0;\n      const diff = this.formattedValue.length - data.length;\n\n      this.input.nativeElement.value = this.formattedValue;\n      this.input.nativeElement.selectionStart = caret + diff;\n      this.input.nativeElement.selectionEnd = caret + diff;\n    }\n\n    let emittedValue: string | number = Number.parseFloat(this.formattedValue.replace(/\\s/g, '').replace(',', '.'));\n\n    if (Number.isNaN(emittedValue)) {\n      emittedValue = '';\n    }\n\n    if (this.value !== emittedValue) {\n      super.updateValue(emittedValue);\n    }\n  }\n\n  private amountValue(value: string): string {\n    if (!value) {\n      return '';\n    }\n\n    const enteredValue = value.replace(/\\s/g, '').replace('.', ',');\n    const regex = new RegExp(`^[0-9]{1,${this.integerDigitsLimit}}(,([0-9]+)?)?$|^\\\\s*$`);\n    const isCorrectEnteredValue = regex.test(enteredValue);\n\n    return isCorrectEnteredValue || !value ? getFormattedValue(enteredValue, this.precision) : this.formattedValue;\n  }\n\n  private setAmountView(value: string): void {\n    const [integer, fractional] = value.split(AMOUNT_SEPARATOR);\n    this.amount = {\n      integer,\n      fractional: value.includes(AMOUNT_SEPARATOR) ? `${AMOUNT_SEPARATOR}${fractional}` : fractional,\n    };\n  }\n}\n","<k-input-container\n  [id]=\"id\"\n  [label]=\"label\"\n  [isActive]=\"isFocused || !!value?.toString()\"\n  [disabled]=\"disabled\"\n  [isLoading]=\"isLoading\"\n  (mousedown)=\"setFocus($event)\"\n>\n  <div class=\"k-amount-input\" [class.with-label]=\"label\">\n    @if (amount && amount.integer) {\n      <div class=\"kui-mono-medium\">\n        <span class=\"k-amount-integer\">{{ amount.integer }}</span>\n        <span class=\"k-amount-fractional\">\n          @if (amount.fractional) {\n            <span>{{ amount.fractional }}</span>\n          }\n          @if (currency) {\n            <span>&#8239;{{ currency | kCurrency }}</span>\n          }\n        </span>\n      </div>\n    }\n    <input\n      #kInput\n      autocomplete=\"off\"\n      type=\"text\"\n      inputmode=\"decimal\"\n      class=\"k-input_input kui-mono-medium\"\n      [id]=\"id\"\n      [class.filled]=\"formattedValue\"\n      [class.with-label]=\"label\"\n      [attr.placeholder]=\"placeholder || null\"\n      [attr.readonly]=\"readonly ? 'readonly' : undefined\"\n      [disabled]=\"disabled\"\n      [value]=\"formattedValue\"\n      (input)=\"onModelChange(kInput.value)\"\n      (focus)=\"onFocus()\"\n      (blur)=\"onBlur()\"\n    />\n  </div>\n  <ng-container ngProjectAs=\"[kuiActions]\">\n    <ng-content select=\"[kuiActions]\"></ng-content>\n\n    @if (showValidationIcon) {\n      <k-icon icon=\"checkmark-m\" class=\"k-input_icon-action k-input_icon-success\"></k-icon>\n      <k-icon icon=\"alert-m\" class=\"k-input_icon-action k-input_icon-error\"></k-icon>\n    }\n\n    @if (!(disabled || readonly) && isFocused && clearButton && value) {\n      <button\n        type=\"button\"\n        kButton\n        theme=\"phantom-secondary\"\n        icon=\"dismiss-m\"\n        size=\"M\"\n        [onlyIcon]=\"true\"\n        (click)=\"clearInput()\"\n      ></button>\n    }\n  </ng-container>\n</k-input-container>\n\n@if (control && control.touched && !disabled) {\n  <k-field-error [control]=\"control.control\" [errorMessages]=\"errorMessages()\"></k-field-error>\n}\n@if (hint) {\n  <k-hint [disabled]=\"disabled\">{{ hint }}</k-hint>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;AA2BM,MAAO,qBAAsB,SAAQ,eAAgC,CAAA;AAP3E,IAAA,WAAA,GAAA;;;QASW,IAAQ,CAAA,QAAA,GAA4B,KAAK;;QAGX,IAAS,CAAA,SAAA,GAAkB,CAAC;;QAG5B,IAAkB,CAAA,kBAAA,GAAW,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,MAAM;;QAGxB,IAAW,CAAA,WAAA,GAAY,KAAK;QAEjH,IAAc,CAAA,cAAA,GAAW,EAAE;AA6D5B;AA1DC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;;;AAItC,IAAA,UAAU,CAAC,KAAsB,EAAA;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAe,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AAC1E,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;AAEvC,QAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;;AAGL,IAAA,WAAW,CAAC,KAAsB,EAAA;AACnD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;AAEvC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC;YAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YAErD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;YACpD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,GAAG,KAAK,GAAG,IAAI;YACtD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI;;QAGtD,IAAI,YAAY,GAAoB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE/G,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YAC9B,YAAY,GAAG,EAAE;;AAGnB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE;AAC/B,YAAA,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC;;;AAI3B,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;;AAGX,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAY,SAAA,EAAA,IAAI,CAAC,kBAAkB,CAAwB,sBAAA,CAAA,CAAC;QACrF,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QAEtD,OAAO,qBAAqB,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc;;AAGxG,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO;AACP,YAAA,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAA,EAAG,gBAAgB,CAAG,EAAA,UAAU,EAAE,GAAG,UAAU;SAC/F;;8GAxEQ,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wHAKZ,eAAe,CAAA,EAAA,kBAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAGf,eAAe,CAG8B,EAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAgB,uJCtCnF,qmEAoEA,EAAA,MAAA,EAAA,CAAA,szEAAA,EAAA,slBAAA,EAAA,6cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3CY,mBAAmB,EAAE,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,qEAAE,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAE,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,kDAAE,gBAAgB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEzG,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,mBAGT,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,qmEAAA,EAAA,MAAA,EAAA,CAAA,szEAAA,EAAA,slBAAA,EAAA,6cAAA,CAAA,EAAA;8BAI5G,QAAQ,EAAA,CAAA;sBAAhB;gBAGsC,SAAS,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAGE,kBAAkB,EAAA,CAAA;sBAAxD,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAGgD,WAAW,EAAA,CAAA;sBAA/F,WAAW;uBAAC,8BAA8B;;sBAAG,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;;AEtCrF;;AAEG;;;;"}