{"version":3,"file":"verben-ng-ui-src-lib-components-number-input.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/number-input/number-input.component.ts","../../../projects/verben-ng-ui/src/lib/components/number-input/number-input.component.html","../../../projects/verben-ng-ui/src/lib/components/number-input/number-input.module.ts","../../../projects/verben-ng-ui/src/lib/components/number-input/verben-ng-ui-src-lib-components-number-input.ts"],"sourcesContent":["import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nconst NUMBER_INPUT_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => NumberInputComponent),\n  multi: true,\n};\n\n@Component({\n  selector: 'verben-number-input',\n  templateUrl: './number-input.component.html',\n  styleUrls: ['./number-input.component.css'],\n  providers: [NUMBER_INPUT_VALUE_ACCESSOR],\n})\nexport class NumberInputComponent implements ControlValueAccessor {\n  @Input() min?: number;\n  @Input() max?: number;\n  @Input() step: number = 1;\n  @Input() value: number = 0;\n  @Input() label?: string = '';\n  @Input() controlButton: boolean = false;\n  @Input() disabled: boolean = false; // ✅ New input\n\n  @Output() valueChange = new EventEmitter<number>();\n  @Output() keyUp = new EventEmitter<{ event: KeyboardEvent; value: number }>();\n\n  private onChange = (value: number) => {};\n  private onTouched = () => {};\n\n  errorMessage: string = '';\n  inputContainerClass: any;\n  inputWrapperClass: any;\n\n  increase() {\n    if (this.disabled) return; // ✅ Respect disabled state\n    if (this.max === undefined || this.value + this.step <= this.max) {\n      this.value += this.step;\n      this.validateValue();\n      this.valueChange.emit(this.value);\n      this.notifyValueChange();\n    }\n  }\n\n  decrease() {\n    if (this.disabled) return;\n    if (this.min === undefined || this.value - this.step >= this.min) {\n      this.value -= this.step;\n      this.validateValue();\n      this.valueChange.emit(this.value);\n      this.notifyValueChange();\n    }\n  }\n\n  onKeyUp(event: KeyboardEvent) {\n    const input = event.target as HTMLInputElement;\n    const currentValue = Number(input.value);\n    this.keyUp.emit({ event, value: currentValue });\n  }\n\n  onInput(event: Event) {\n    if (this.disabled) return;\n\n    const input = event.target as HTMLInputElement;\n    let newValue = Number(input.value);\n\n    // Clamp immediately\n    if (this.max !== undefined && newValue > this.max) {\n      newValue = this.max;\n      input.value = String(this.max); // visually correct it\n    } else if (this.min !== undefined && newValue < this.min) {\n      newValue = this.min;\n      input.value = String(this.min);\n    }\n\n    // Assign & emit after correction\n    this.value = newValue;\n    this.errorMessage = ''; // clear existing errors since input is valid now\n    this.notifyValueChange(); // your method that emits this.valueChange\n  }\n\n  validateValue() {\n    if (this.min !== undefined && this.value < this.min) {\n      this.value = this.min;\n      this.errorMessage = `Value must be at least ${this.min}`;\n    } else if (this.max !== undefined && this.value > this.max) {\n      this.value = this.max;\n      this.errorMessage = `Value cannot exceed ${this.max}`;\n    } else {\n      this.errorMessage = '';\n    }\n\n    this.valueChange.emit(this.value);\n  }\n\n  notifyValueChange() {\n    this.onChange(this.value);\n    this.onTouched();\n  }\n\n  // Control Value Accessor methods\n  writeValue(value: number): void {\n    this.value = value ?? 0;\n    this.validateValue();\n  }\n\n  registerOnChange(fn: (value: number) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState?(isDisabled: boolean): void {\n    this.disabled = isDisabled; // ✅ Sync with external state\n  }\n}\n","<div\n  class=\"input-container {{ inputContainerClass }}\"\n  [ngStyle]=\"{\n    display: 'flex',\n    'flex-direction': 'column'\n  }\"\n>\n  <div\n    [ngStyle]=\"{\n      width: '100%',\n      display: 'flex',\n      'justify-content': 'space-between'\n    }\"\n  >\n    <label [for]=\"label\">{{ label }}</label>\n  </div>\n\n  <input\n    type=\"number\"\n    [value]=\"value\"\n    (input)=\"onInput($event)\"\n    (keyup)=\"onKeyUp($event)\"\n    [min]=\"min\"\n    [max]=\"max\"\n    [step]=\"step\"\n    [disabled]=\"disabled\"\n    (blur)=\"validateValue()\"\n    class=\"input-field verben-input {{ inputWrapperClass }}\"\n  />\n</div>\n\n<p class=\"error-message\" *ngIf=\"errorMessage\">{{ errorMessage }}</p>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NumberInputComponent } from './number-input.component';\n\n@NgModule({\n  declarations: [NumberInputComponent],\n  imports: [CommonModule],\n  exports: [NumberInputComponent],\n})\nexport class NumberInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}