{"version":3,"file":"obliczeniowo-elementary-min-max-input.mjs","sources":["../../../../projects/components/min-max-input/components/min-max-input/min-max-input.component.ts","../../../../projects/components/min-max-input/components/min-max-input/min-max-input.component.html","../../../../projects/components/min-max-input/min-max-input.module.ts","../../../../projects/components/min-max-input/obliczeniowo-elementary-min-max-input.ts"],"sourcesContent":["import {\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  input,\r\n  Input,\r\n  model,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  ControlValueAccessor,\r\n  NG_VALIDATORS,\r\n  NG_VALUE_ACCESSOR,\r\n  ValidationErrors,\r\n  Validator,\r\n} from '@angular/forms';\r\nimport { LimitsPipe } from '@obliczeniowo/elementary/numeric-pipes';\r\n\r\n@Component({\r\n    selector: 'obl-min-max-input',\r\n    templateUrl: './min-max-input.component.html',\r\n    styleUrl: './min-max-input.component.scss',\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            multi: true,\r\n            useExisting: MinMaxInputComponent,\r\n        },\r\n        {\r\n            provide: NG_VALIDATORS,\r\n            multi: true,\r\n            useExisting: MinMaxInputComponent,\r\n        },\r\n        LimitsPipe,\r\n    ],\r\n    standalone: false\r\n})\r\nexport class MinMaxInputComponent implements ControlValueAccessor, Validator {\r\n  @Input() label?: string;\r\n\r\n  min = model<number>(0);\r\n  max = model<number>(100);\r\n  value = model<number>(50);\r\n  precision = input(0, {\r\n    transform: (precision: number) => {\r\n      return this.limits.transform([precision], {\r\n        min: 0,\r\n        transformTo: 'int-round',\r\n      })[0];\r\n    },\r\n  });\r\n\r\n  @Input() appearance: 'outlined' | 'none' = 'outlined';\r\n\r\n  @Input() valueFormatter: (\r\n    value: number,\r\n    precision: number\r\n  ) => string | number = (value: number, precision: number) =>\r\n    value.toFixed(precision);\r\n\r\n  @Input()\r\n  @HostBinding('class.disabled')\r\n  disabled = false;\r\n\r\n  @HostBinding('class.invalid') get invalid() {\r\n    const { value, min, max } = this;\r\n    return value() < min() || value() > max();\r\n  }\r\n\r\n  @ViewChild('valueContainer') valueContainer!: ElementRef<HTMLDivElement>;\r\n\r\n  mouseValue: number = 0;\r\n  mouseIn?: boolean;\r\n\r\n  constructor(protected limits: LimitsPipe) {}\r\n\r\n  get valueWidth() {\r\n    const dValue = +this.max() - +this.min();\r\n    const value = +(\r\n      (this.mouseIn ? this.mouseValue : this.value()) - this.min()\r\n    ).toFixed(this.precision());\r\n    return (dValue > 0 ? value / dValue : 0) * 100 + '%';\r\n  }\r\n\r\n  mouseMove(mouseEvent: any) {\r\n    const rect = this.valueContainer.nativeElement.getBoundingClientRect();\r\n    const x = mouseEvent.clientX - rect.x;\r\n\r\n    const width = this.valueContainer.nativeElement.clientWidth - 1 || 1;\r\n    this.mouseValue = (x / width) * (+this.max() - +this.min()) + +this.min();\r\n  }\r\n\r\n  setValue(value: number) {\r\n    const { min, max } = this;\r\n    this.value.set(+value.toFixed(+this.precision()));\r\n    this.onChange({\r\n      value: +value.toFixed(+this.precision()),\r\n      min: min(),\r\n      max: max(),\r\n    });\r\n  }\r\n\r\n  onChange = (value: { value: number; min: number; max: number }) => {};\r\n\r\n  onTouched = () => {};\r\n\r\n  protected abstractControl: AbstractControl | undefined;\r\n\r\n  validate(control: AbstractControl): ValidationErrors | null {\r\n    this.abstractControl = control;\r\n    this.abstractControl.setErrors(this.invalid ? { range: true } : null);\r\n    return this.abstractControl.errors;\r\n  }\r\n\r\n  registerOnValidatorChange(fn: () => void): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  writeValue(value: { value: number; min: number; max: number }): void {\r\n    this.value.set(value.value);\r\n    this.min.set(value.min || this.min());\r\n    this.max.set(value.max || this.max());\r\n  }\r\n\r\n  registerOnChange(onChange: any): void {\r\n    this.onChange = onChange;\r\n  }\r\n\r\n  registerOnTouched(onTouched: any): void {\r\n    this.onTouched = onTouched;\r\n  }\r\n\r\n  setDisabledState(disabled: boolean): void {\r\n    this.disabled = disabled;\r\n  }\r\n}\r\n","<fieldset>\r\n  @if (label) {\r\n    <legend>{{ label }}</legend>\r\n  }\r\n\r\n  <div\r\n    class=\"value-wrapper\"\r\n    (mousemove)=\"mouseMove($event)\"\r\n    (mouseleave)=\"mouseIn = false\"\r\n    (mouseenter)=\"mouseIn = true\"\r\n    (click)=\"setValue(mouseValue)\"\r\n    #valueContainer\r\n  >\r\n    <div class=\"value\" [ngStyle]=\"{ width: valueWidth }\"></div>\r\n    <div class=\"value-text\">\r\n      {{\r\n        valueFormatter(\r\n          mouseIn ? mouseValue : value(),\r\n          precision()\r\n        )\r\n      }}\r\n    </div>\r\n  </div>\r\n</fieldset>\r\n","import { MinMaxInputComponent } from './components/min-max-input/min-max-input.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { LimitsPipe } from '@obliczeniowo/elementary/numeric-pipes';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    MinMaxInputComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    FormsModule,\r\n    LimitsPipe\r\n  ],\r\n  exports: [\r\n    MinMaxInputComponent\r\n  ]\r\n})\r\nexport class MinMaxInputModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}