{"version":3,"file":"usitsdasdesign-dds-ng-number-input.mjs","sources":["../../src/app/dds/number-input/directives/number-input.directive.ts","../../src/app/dds/number-input/utils.ts","../../src/app/dds/number-input/number-input/constants.ts","../../src/app/dds/number-input/number-input/number-input.component.ts","../../src/app/dds/number-input/number-input/number-input.component.html","../../src/app/dds/number-input/number-input.module.ts","../../src/app/dds/number-input/usitsdasdesign-dds-ng-number-input.ts"],"sourcesContent":["import { Directive, ElementRef, HostBinding, Optional, Self } from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { FocusHandlerDirective } from '@usitsdasdesign/dds-ng/core/focus-handler';\n\n@Directive({\n  selector: '[ddsNumberInput]',\n  hostDirectives: [FocusHandlerDirective],\n  standalone: true\n})\nexport class NumberInputFieldDirective {\n  @HostBinding(`class.dds-number-input__field`) inputField = true;\n\n  constructor(\n    @Optional() @Self() public ngControl: NgControl,\n    @Optional() public parentForm: NgForm,\n    @Optional() public parentFormGroup: FormGroupDirective,\n    public elementRef: ElementRef<HTMLInputElement>\n  ) { }\n}\n","// Returns the number of decimal places in a given number.\nexport function getDecimalCount(value: number): number {\n  const decimalSeparator = '.';\n\n  return value.toString().includes(decimalSeparator) ? value.toString().split(decimalSeparator).pop().length : 1;\n}\n\n// Rounds the new value to the appropriate number of decimal places.\nexport function roundValue(fieldValue: number, newValue: number, step: number): number {\n  const valueDecimalCount = getDecimalCount(fieldValue);\n  const stepDecimalCount = getDecimalCount(step);\n  const decimalCount = stepDecimalCount > valueDecimalCount ? stepDecimalCount : valueDecimalCount;\n\n  return Number(newValue.toFixed(decimalCount));\n}\n","import { Size } from '@usitsdasdesign/dds-ng/shared';\nimport { ThemeClassesMap, ThemeMapEnum } from '@usitsdasdesign/dds-ng/core/theme';\n\nexport enum DEFAULT {\n  STEP = 1,\n  PLACEHOLDER = '',\n  THOUSAND_SEPARATOR = ' ',\n  DECIMAL_MARKER = '.',\n  MASK = 'separator',\n  MIN_VALUE = 0,\n}\n\nexport enum KEY_SHORTCUTS_COEF {\n  ctrl = 100,\n  shift = 10,\n  alt = 0.1,\n}\n\nexport const themeClassesMap: ThemeClassesMap = {\n  [ThemeMapEnum.Size]: {\n    [Size.lg]: 'dds-number-input_lg',\n    [Size.sm]: 'dds-number-input_sm',\n  },\n};\n\nexport const DEFAULT_INCREASE_ICON = 'dds-icon_arrow-up';\nexport const DEFAULT_DECREASE_ICON = 'dds-icon_arrow-down';\n\nexport const ARIA_VALUEMIN = 'aria-valuemin';\nexport const ARIA_VALUEMAX = 'aria-valuemax';\nexport const ARIA_VALUENOW = 'aria-valuenow';\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  Self,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { FormGroupDirective, FormsModule, NgControl, NgForm } from '@angular/forms';\nimport {\n  DestroyCtor,\n  DestroyMixin,\n  ErrorStateCtor,\n  ErrorStateMixin,\n  FormAccessorCtor,\n  FormAccessorMixin,\n  I18nCtor,\n  I18nMixin,\n} from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { ThemeClassesMap, ThemeModule } from '@usitsdasdesign/dds-ng/core/theme';\nimport { coerceBooleanProperty } from '@usitsdasdesign/dds-ng/core/utils';\nimport {\n  AdditionalClass,\n  DecimalMarkers,\n  ErrorState,\n  KeyCodes,\n  LabelPosition,\n  Size,\n  ThousandSeparators,\n} from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { I18nModule, I18nService, ITranslation } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { IConfig, NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { NumberInputFieldDirective } from '../directives/number-input.directive';\nimport { roundValue } from '../utils';\nimport {\n  ARIA_VALUEMAX,\n  ARIA_VALUEMIN,\n  ARIA_VALUENOW,\n  DEFAULT,\n  DEFAULT_DECREASE_ICON,\n  DEFAULT_INCREASE_ICON,\n  KEY_SHORTCUTS_COEF,\n  themeClassesMap,\n} from './constants';\n\nconst NumberInputBase: DestroyCtor & I18nCtor & FormAccessorCtor & ErrorStateCtor = DestroyMixin(\n  I18nMixin(FormAccessorMixin(ErrorStateMixin()))\n);\n\n@Component({\n  selector: 'dds-number-input',\n  templateUrl: './number-input.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, FocusHandlerModule, ThemeModule, I18nModule, FormsModule, NgxMaskDirective],\n  providers: [provideNgxMask()],\n})\nexport class NumberInputComponent extends NumberInputBase implements OnInit, OnChanges, DoCheck, AfterContentInit {\n  // Binds the disabled class to the host element when the component is disabled.\n  @HostBinding(`class.${AdditionalClass.disabled}`) @Input() disabled: boolean | undefined;\n\n  // Binds the data-is-empty attribute to the host element based on whether the input value is empty.\n  @HostBinding(`attr.data-is-empty`) isEmptyValue: boolean;\n\n  // Input properties for various configurations and attributes\n  @Input() label: string | undefined;\n  @Input() ariaLabel: string | undefined;\n  @Input() errorMessage: string | undefined;\n  @Input() prefix: string | undefined;\n  @Input() suffix: string | undefined;\n  @Input() customClass: string | undefined;\n  @Input() increaseIcon: string | undefined = DEFAULT_INCREASE_ICON;\n  @Input() decreaseIcon: string | undefined = DEFAULT_DECREASE_ICON;\n  @Input() placeholder: string | undefined = DEFAULT.PLACEHOLDER;\n  @Input() size: Size | string | undefined = this.ddsConfig.getConfig().size;\n  @Input() labelPosition: LabelPosition | string | undefined = this.ddsConfig.getConfig().labelPosition;\n  @Input() thousandSeparator: ThousandSeparators | string | undefined = DEFAULT.THOUSAND_SEPARATOR;\n  @Input() decimalMarker: DecimalMarkers | IConfig['decimalMarker'] | string | undefined = DEFAULT.DECIMAL_MARKER;\n  @Input() decimalCount: number | undefined;\n  @Input() errorState: ErrorState | string | undefined = this.ddsConfig.getConfig().errorState;\n  @Input() isError: boolean | undefined;\n  @Input() isInverse: boolean | undefined;\n  @Input() hasOnlyPositiveValues: boolean | undefined;\n  @Input() step: number | undefined = DEFAULT.STEP;\n  @Input() min: number | undefined;\n  @Input() max: number | undefined;\n  @Input() isRequired: boolean | undefined = false;\n  @Input() isStrictMode: boolean | undefined = false;\n  @Input() readonly: boolean | undefined;\n\n  // Sets the value of the input and performs necessary checks and updates.\n  @Input()\n  set value(value: number | undefined) {\n    this._value = value;\n    this.checkIsEmpty();\n    this.setIsMinMaxValues();\n  }\n\n  get value(): number | undefined {\n    return this._value;\n  }\n\n  @Output() valueChanged = new EventEmitter<number>();\n\n  @ViewChild('numberInput') numberInput: ElementRef<HTMLInputElement>;\n  @ContentChild(NumberInputFieldDirective) inputFieldExternal: NumberInputFieldDirective;\n\n  public themeConfig: ThemeClassesMap = themeClassesMap;\n  public isExternalLabel: boolean;\n  public isMaxValue: boolean;\n  public isMinValue: boolean;\n  public _value = 0;\n  public defaultPlaceholder: string = DEFAULT.PLACEHOLDER;\n  public mask: string = DEFAULT.MASK;\n  public arrowUpAriaLabel: string;\n  public arrowDownAriaLabel: string;\n  public minValueAriaDesc: string;\n  public maxValueAriaDesc: string;\n\n  get ariaLabelValue(): string {\n    return this.ariaLabel || this.label;\n  }\n\n  get ariaDescriptionValue(): string {\n    const minValue = this.min !== undefined ? `${this.minValueAriaDesc} ${this.min}` : '';\n    const maxValue = this.max !== undefined ? `${this.maxValueAriaDesc} ${this.max}` : '';\n\n    return minValue + ' ' + maxValue;\n  }\n\n  get isErrorState(): boolean {\n    return this._isError || Number(this.value) > this.max || Number(this.value) < this.min;\n  }\n\n  constructor(\n    @Optional() @Self() public ngControl: NgControl,\n    @Optional() public parentForm: NgForm,\n    @Optional() public parentFormGroup: FormGroupDirective,\n    public cdr: ChangeDetectorRef,\n    public i18n: I18nService,\n    private ddsConfig: DdsConfigService\n  ) {\n    super();\n\n    if (this.ngControl !== null) {\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  public ngOnInit(): void {\n    this.checkIsEmpty();\n    this.checkLabelPosition(this.labelPosition);\n    this.setAriaAttr();\n    super.ngOnInit();\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    this.checkLabelPosition(changes.labelPosition);\n\n    if (changes.isError || changes.max || changes.min || changes.value) {\n      this.value = this.validateValue(this.value);\n      this.setIsMinMaxValues();\n    }\n\n    if (changes.isRequired) {\n      this.isRequired = coerceBooleanProperty(changes.isRequired.currentValue);\n    }\n\n    if (changes.hasOnlyPositiveValues || changes.max || changes.min) {\n      this.validateMinMax();\n    }\n\n    if (changes.hasOnlyPositiveValues && !this.min) {\n      this.min = DEFAULT.MIN_VALUE;\n    }\n\n    if (changes.decimalCount?.currentValue >= 0) {\n      this.mask = DEFAULT.MASK + '.' + this.decimalCount;\n    }\n\n    super.ngOnChanges(changes);\n  }\n\n  public ngDoCheck() {\n    super.ngDoCheck();\n    if (this.ngControl && this.inputFieldExternal) {\n      if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {\n        this.disabled = this.ngControl.disabled;\n        this.cdr.markForCheck();\n      }\n    }\n  }\n\n  public ngAfterContentInit(): void {\n    if (this.inputFieldExternal) {\n      this.ngControl = this.inputFieldExternal.ngControl;\n      this.parentForm = this.inputFieldExternal.parentForm;\n      this.parentFormGroup = this.inputFieldExternal.parentFormGroup;\n\n      this.setDataFromExternalInput();\n    }\n  }\n\n  // Handles keydown events on the input field.\n  public onKeyDown(event: KeyboardEvent): void {\n    if (this.readonly) return;\n    if (event.keyCode === KeyCodes.ARROW_UP) {\n      this.changeNumberInput(true, event);\n    } else if (event.keyCode === KeyCodes.ARROW_DOWN) {\n      this.changeNumberInput(false, event);\n    }\n  }\n\n  // Changes the value of the input field based on the increment/decrement action.\n  public changeNumberInput(increment: boolean, keyboardBtn?: KeyboardEvent): void {\n    const value = this.value ? Number(this.value) : 0;\n\n    const amount = this.getAmountKeyShortcuts(this.step, keyboardBtn);\n    let newValue = increment ? value + amount : value - amount;\n\n    newValue = this.validateValue(newValue);\n\n    this.changeHandle(roundValue(value, newValue, this.step));\n    this.checkError();\n  }\n\n  // Handles input events on the input field.\n  public onInput(): void {\n    this.changeHandle(this.value, true);\n  }\n\n  // Handles changes to the input value.\n  public changeHandle(value: number, fromInput = false): void {\n    const currentValue = this.inputIsEmpty() && !value ? null : Number(value);\n    this.updValue(currentValue, fromInput);\n    if (!this.isStrictMode) {\n      this.valueChanged.emit(currentValue);\n      this.setIsMinMaxValues();\n    }\n\n    if (this.inputFieldExternal) {\n      this.inputFieldExternal.elementRef.nativeElement.value = `${currentValue}`;\n    }\n  }\n\n  // Writes a new value to the input field.\n  public writeValue(value: number): void {\n    this.value = this.getNotNullValue(value);\n    super.writeValue(this.value);\n    this.cdr.markForCheck();\n  }\n\n  // Sets the disabled state of the component.\n  public setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n    this.cdr.markForCheck();\n  }\n\n  // Resets the input field to its initial state.\n  public reset(): void {\n    this.updValue(null);\n    this.valueChanged.emit(this.value);\n    this.cdr.markForCheck();\n  }\n\n  // Handles blur events on the input field.\n  public blur(): void {\n    if (this.errorState === ErrorState.focusOut) this.checkError();\n    this.onModelTouched();\n\n    if (this.isStrictMode) {\n      this.value = this.validateValue(this.value);\n      this.valueChanged.emit(this.value);\n      this.setIsMinMaxValues();\n    }\n  }\n\n  // Checks if the input field is empty.\n  // Considers the length of the prefix if present.\n  private inputIsEmpty(): boolean {\n    let fieldValue = this.numberInput?.nativeElement.value;\n\n    if (this.inputFieldExternal) {\n      fieldValue = this.inputFieldExternal?.elementRef?.nativeElement.value;\n    }\n\n    const fieldValueLength = fieldValue.length;\n    const prefixLength = this.prefix?.length || 0;\n\n    return fieldValueLength === prefixLength;\n  }\n\n  // Updates the value of the component and triggers necessary changes.\n  private updValue(value: number, fromInput = false): void {\n    if (!fromInput) {\n      this.value = value || this.getNotNullValue(value);\n    }\n    this.onModelChange(value);\n    this.checkError();\n  }\n\n  // Returns a non-null value.\n  // If the value is null, it returns undefined to fix ngx mask issues.\n  private getNotNullValue(value: number): number {\n    return value === null ? undefined : value; // fix ngx mask\n  }\n\n  // Sets the internationalization (i18n) texts for the number input component.\n  protected setI18nTexts(translation: ITranslation): void {\n    this.arrowUpAriaLabel = translation.NUMBER_INPUT.A11Y.UP_ARROW_ARIA_LABEL;\n    this.arrowDownAriaLabel = translation.NUMBER_INPUT.A11Y.DOWN_ARROW_ARIA_LABEL;\n    this.minValueAriaDesc = translation.NUMBER_INPUT.A11Y.MIN_VALUE_ARIA_DESCRIPTION;\n    this.maxValueAriaDesc = translation.NUMBER_INPUT.A11Y.MAX_VALUE_ARIA_DESCRIPTION;\n    this.cdr.detectChanges();\n  }\n\n  // Sets ARIA attributes for accessibility.\n  // Updates the ARIA attributes based on the current min, max, and value properties.\n  private setAriaAttr(): void {\n    const el = this.numberInput?.nativeElement || this.inputFieldExternal?.elementRef?.nativeElement;\n\n    if (el) {\n      const dataForAria = [\n        { value: this.min, ariaProp: ARIA_VALUEMIN },\n        { value: this.max, ariaProp: ARIA_VALUEMAX },\n        { value: this.value, ariaProp: ARIA_VALUENOW },\n      ];\n\n      dataForAria.forEach((item) => {\n        this.isEmptyValue ? el.removeAttribute(item.ariaProp) : el.setAttribute(item.ariaProp, `${item.value}`);\n      });\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  // Determines the amount to increment or decrement based on keyboard shortcuts.\n  private getAmountKeyShortcuts(amount: number, keyboardBtn: KeyboardEvent): number {\n    if (keyboardBtn) {\n      switch (true) {\n        case keyboardBtn.ctrlKey:\n          amount = KEY_SHORTCUTS_COEF.ctrl;\n          break;\n        case keyboardBtn.shiftKey:\n          amount = KEY_SHORTCUTS_COEF.shift;\n          break;\n        case keyboardBtn.altKey:\n          amount = KEY_SHORTCUTS_COEF.alt;\n          break;\n      }\n    }\n\n    return amount;\n  }\n\n  // Sets the flags indicating whether the current value is equal to the min or max values.\n  // Updates ARIA attributes accordingly.\n  private setIsMinMaxValues(): void {\n    const value = Number(this.value);\n\n    this.isMaxValue = value === this.max;\n    this.isMinValue = value === this.min;\n    this.setAriaAttr();\n  }\n\n  // Checks if the value is empty and updates the isEmptyValue property accordingly.\n  private checkIsEmpty(): void {\n    this.isEmptyValue = !!(this.value === undefined || this.value === null);\n  }\n\n  // Checks the label position and updates the isExternalLabel property accordingly.\n  private checkLabelPosition(labelPosition: unknown): void {\n    if (labelPosition) {\n      this.isExternalLabel = this.labelPosition === LabelPosition.external;\n    }\n  }\n\n  // Validates the input value against the min and max constraints.\n  private validateValue(value: number): number {\n    if (value > this.max) {\n      value = this.max;\n    } else if (value < this.min) {\n      value = this.min;\n    }\n\n    return value;\n  }\n\n  // Validates the min and max values to ensure they are non-negative if only positive values are allowed.\n  private validateMinMax(): void {\n    if (this.hasOnlyPositiveValues) {\n      this.min = this.min < 0 ? 0 : this.min;\n      this.max = this.max < 0 ? 0 : this.max;\n    }\n  }\n\n  // Sets data from the external input field directive.\n  private setDataFromExternalInput(): void {\n    const externalInputEl = this.inputFieldExternal.elementRef.nativeElement;\n\n    // Update min, max, step, and value properties based on external input field attributes\n    if (externalInputEl.min) {\n      this.min = Number(externalInputEl.min);\n    }\n    if (externalInputEl.max) {\n      this.max = Number(externalInputEl.max);\n    }\n    if (externalInputEl.step) {\n      this.step = Number(externalInputEl.step);\n    }\n    if (externalInputEl.value) {\n      this.value = Number(externalInputEl.value);\n    }\n\n    this.value = Number(externalInputEl.value);\n\n    fromEvent(externalInputEl, 'input')\n      .pipe(takeUntil(this.destroy))\n      .subscribe((e) => (this.value = Number((e.target as HTMLInputElement).value)));\n  }\n}\n","<div [ngClass]=\"{\n      'dds-number-input_disabled': disabled,\n      'dds-number-input_external': isExternalLabel,\n      'dds-number-input_with-label': label && !isExternalLabel,\n      'dds-number-input_error': isErrorState,\n      'dds-number-input_with-error-message': errorMessage && isErrorState,\n      'dds-number-input_inverse': isInverse,\n      'dds-number-input_readonly': readonly\n     }\"\n     [size]=\"size\"\n     [ddsTheme]=\"themeConfig\"\n     class=\"dds-number-input {{customClass}}\">\n  @if (label && isExternalLabel) {\n    <label class=\"dds-number-input__label\">\n      {{ label }}\n      @if (isRequired) {\n        <span class=\"dds-required\"></span>\n      }\n    </label>\n  }\n\n  <div class=\"dds-number-input__wrap\">\n    @if (label && !isExternalLabel) {\n      <label class=\"dds-number-input__label dds-number-input__label_internal\">{{ label }}\n        @if (isRequired) {\n          <span class=\"dds-required\"></span>\n        }\n      </label>\n    }\n\n    @if (inputFieldExternal) {\n      <ng-content></ng-content>\n    } @else {\n      <input [placeholder]=\"placeholder || defaultPlaceholder\"\n             [disabled]=\"disabled\"\n             [(ngModel)]=\"value\"\n             [decimalMarker]=\"decimalMarker\"\n             [prefix]=\"prefix || ''\"\n             [suffix]=\"suffix || ''\"\n             [thousandSeparator]=\"thousandSeparator\"\n             [allowNegativeNumbers]=\"!hasOnlyPositiveValues\"\n             [attr.aria-disabled]=\"disabled\"\n             [attr.aria-invalid]=\"_isError\"\n             [attr.aria-label]=\"ariaLabelValue\"\n             [attr.aria-description]=\"ariaDescriptionValue\"\n             [attr.aria-required]=\"isRequired || _isFormControlRequired\"\n             [attr.aria-valuemin]=\"min\"\n             [attr.aria-valuemax]=\"max\"\n             [required]=\"isRequired\"\n             [mask]=\"mask\"\n             [readonly]=\"readonly\"\n             data-qa=\"input\"\n             ddsFocus\n             role=\"spinbutton\"\n             class=\"dds-number-input__field\"\n             type=\"text\"\n             (keydown)=\"onKeyDown($event)\"\n             (blur)=\"blur()\"\n             (input)=\"onInput()\"\n             #numberInput />\n    }\n\n    <div class=\"dds-number-input__buttons\"\n         role=\"group\">\n      <div [ngClass]=\"{'dds-number-input__increase_disabled': isMaxValue }\"\n           data-qa=\"increase\"\n           role=\"button\"\n           class=\"dds-number-input__increase dds-icon {{increaseIcon}}\"\n           [attr.aria-label]=\"arrowUpAriaLabel\"\n           (click)=\"changeNumberInput(true)\"></div>\n      <div [ngClass]=\"{'dds-number-input__decrease_disabled': isMinValue }\"\n           data-qa=\"decrease\"\n           role=\"button\"\n           class=\"dds-number-input__decrease dds-icon {{decreaseIcon}}\"\n           [attr.aria-label]=\"arrowDownAriaLabel\"\n           (click)=\"changeNumberInput(false)\"></div>\n    </div>\n  </div>\n\n  @if (_isError && errorMessage) {\n    <div data-qa=\"error-message\"\n         class=\"dds-number-input__error-message\">\n      {{ errorMessage }}\n    </div>\n  }\n</div>\n","import { NgModule } from '@angular/core';\nimport { NumberInputFieldDirective } from './directives/number-input.directive';\nimport { NumberInputComponent } from './number-input/number-input.component';\n\n@NgModule({\n  declarations: [],\n  imports: [NumberInputFieldDirective, NumberInputComponent],\n  exports: [NumberInputFieldDirective, NumberInputComponent],\n})\nexport class NumberInputModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2"],"mappings":"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"}