{"version":3,"file":"usitsdasdesign-dds-ng-slider.mjs","sources":["../../src/app/dds/slider/typings.ts","../../src/app/dds/slider/slider/constants.ts","../../src/app/dds/slider/slider/slider.component.ts","../../src/app/dds/slider/slider/slider.component.html","../../src/app/dds/slider/slider.module.ts","../../src/app/dds/slider/usitsdasdesign-dds-ng-slider.ts"],"sourcesContent":["import { DecimalMarkers, Direction, ThousandSeparators } from '@usitsdasdesign/dds-ng/shared';\n\nexport interface SliderOptions {\n  label?: string;\n  fromAriaLabel?: string;\n  toAriaLabel?: string;\n  customClass?: string;\n  min?: number;\n  max?: number;\n  prefix?: string;\n  suffix?: string;\n  isEditable?: boolean;\n  step?: number;\n  disabled?: boolean;\n  isVertical?: boolean;\n  isSegmented?: boolean;\n  isRequired?: boolean;\n  isInverse?: boolean;\n  thousandSeparator?: ThousandSeparators | string;\n  decimalMarker?: DecimalMarkers | '.' | ',';\n}\n\nexport interface SliderControl {\n  title?: SliderType;\n  value?: number | string;\n  currentPos?: number;\n  controlPos?: number;\n}\n\nexport enum SliderType {\n  start = 'start',\n  end = 'end',\n}\n\nexport interface DirectionStrategy {\n  direction: Direction;\n  pointDirection: PointDirection;\n  sizeDirection: SizeDirection;\n}\n\nexport enum SizeDirection {\n  width = 'width',\n  height = 'height',\n}\n\nexport enum PointDirection {\n  offsetLeft = 'offsetLeft',\n  offsetTop = 'offsetTop',\n}\n","import { Direction } from '@usitsdasdesign/dds-ng/shared';\nimport { PointDirection, SizeDirection } from '../typings';\n\nexport enum DEFAULT {\n  STEP = 1,\n  THOUSAND_SEPARATOR = ',',\n  DECIMAL_MARKER = '.',\n  MASK = 'separator',\n  VALUE = 0,\n  MIN_VALUE = 0,\n  MAX_VALUE = 100\n}\n\nexport const POINT_ACTIVE_CLASS = 'dds-slider__point_active';\nexport const DEFAULT_DIRECTION = Direction.left;\nexport const DEFAULT_SIZE_DIRECTION = SizeDirection.width;\nexport const DEFAULT_POINT_DIRECTION = PointDirection.offsetLeft;\nexport const ORIENTATION_VERTICAL = 'vertical';\nexport const ORIENTATION_HORIZONTAL = 'horizontal';\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  NgZone,\n  OnChanges,\n  Output,\n  QueryList,\n  Renderer2,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  DestroyCtor,\n  DestroyMixin,\n  FormAccessorCtor,\n  FormAccessorMixin,\n  valueAccessor,\n} from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { coerceBooleanProperty, generateId } from '@usitsdasdesign/dds-ng/core/utils';\nimport { AdditionalClass, DecimalMarkers, Direction, KeyCodes, ThousandSeparators } from '@usitsdasdesign/dds-ng/shared';\nimport { IConfig, NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { Observable, fromEvent } from 'rxjs';\nimport { switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators';\nimport { DirectionStrategy, PointDirection, SizeDirection, SliderControl, SliderType } from '../typings';\nimport {\n  DEFAULT,\n  DEFAULT_DIRECTION,\n  DEFAULT_POINT_DIRECTION,\n  DEFAULT_SIZE_DIRECTION,\n  ORIENTATION_HORIZONTAL,\n  ORIENTATION_VERTICAL,\n  POINT_ACTIVE_CLASS,\n} from './constants';\n\nconst SliderBase: DestroyCtor & FormAccessorCtor = DestroyMixin(FormAccessorMixin());\n\n@Component({\n  selector: 'dds-slider',\n  templateUrl: './slider.component.html',\n  providers: [valueAccessor(SliderComponent as Component), provideNgxMask()],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, FocusHandlerModule, FormsModule, NgxMaskDirective, NgxMaskPipe],\n})\nexport class SliderComponent extends SliderBase implements OnChanges, DoCheck {\n  // Bind the disabled class to the component based on the disabled input property\n  @HostBinding(`class.${AdditionalClass.disabled}`) @Input() disabled: boolean | undefined;\n\n  // Listen for window resize events to adjust slider properties\n  @HostListener('window:resize') onResize(): void {\n    this.checkElementsProps();\n    this.checkPointsCount();\n    this.checkValue(this.startControlParent(), this.startControlOptions, false);\n    this.checkValue(this.endControlParent(), this.endControlOptions, false);\n  }\n\n  // Input properties for the slider component\n  @Input() label: string | undefined;\n  @Input() fromAriaLabel: string | undefined;\n  @Input() toAriaLabel: string | undefined;\n  @Input() min: number | undefined = DEFAULT.MIN_VALUE;\n  @Input() max: number | undefined = DEFAULT.MAX_VALUE;\n  @Input() step: number | undefined = DEFAULT.STEP;\n  @Input() isEditable: boolean | undefined;\n  @Input() isVertical: boolean | undefined;\n  @Input() isSegmented: boolean | undefined;\n  @Input() isInverse: boolean | undefined;\n  @Input() customClass: string | undefined;\n  @Input() prefix: string | undefined;\n  @Input() suffix: string | undefined;\n  @Input() isRequired: boolean | undefined = false;\n  @Input() thousandSeparator: ThousandSeparators | string | undefined = DEFAULT.THOUSAND_SEPARATOR;\n  @Input() decimalMarker: DecimalMarkers | IConfig['decimalMarker'] | string | undefined = DEFAULT.DECIMAL_MARKER;\n\n  // Setter for the value input property\n  @Input()\n  set value(value: number | string | undefined) {\n    this.checkValueType(value);\n  }\n\n  // Output event emitter for value changes\n  @Output() valueChanged: EventEmitter<number | string> = new EventEmitter();\n\n  // ViewChild and ViewChildren to access DOM elements\n  @ViewChild('wrap') wrap: ElementRef<HTMLElement>;\n  @ViewChild('startControl') startControl: ElementRef<HTMLElement>;\n  @ViewChild('endControl') endControl: ElementRef<HTMLElement>;\n  @ViewChild('startControlInput') startControlInput: ElementRef<HTMLInputElement>;\n  @ViewChild('endControlInput') endControlInput: ElementRef<HTMLInputElement>;\n  @ViewChild('activeLine') activeLine: ElementRef<HTMLElement>;\n  @ViewChildren('pointsRef') pointsRef: QueryList<ElementRef<HTMLElement>>;\n\n  // Public properties\n  public isRangeSlider = false;\n  public tabIndex: number;\n  public points: number[];\n  public mask: string = DEFAULT.MASK;\n  public startControlOptions: SliderControl = {\n    title: SliderType.start,\n    value: DEFAULT.VALUE,\n  };\n  public endControlOptions: SliderControl = {\n    title: SliderType.end,\n  };\n  public describedById = generateId();\n\n  // Private properties\n  private typeOfValue: string;\n  private wrapStartPosition: number;\n  private sliderWidth: number;\n  private controlWidth: number;\n  private pointWidth: number;\n  private firstCheck = true;\n  private firstCheckNgModel = true;\n  private checkForProjection = true;\n  private directionStrategy: DirectionStrategy = {\n    direction: DEFAULT_DIRECTION,\n    pointDirection: DEFAULT_POINT_DIRECTION,\n    sizeDirection: DEFAULT_SIZE_DIRECTION,\n  };\n\n  // Constructor with dependency injection\n  constructor(public cdr: ChangeDetectorRef, private ngZone: NgZone, private renderer: Renderer2) {\n    super();\n  }\n\n  // Lifecycle hook for handling input property changes\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes.step) {\n      this.step = Math.abs(Number(this.step)) || DEFAULT.STEP;\n      this.checkPointsCount();\n    }\n\n    if (changes.isRequired) {\n      this.isRequired = coerceBooleanProperty(changes.isRequired.currentValue);\n    }\n\n    if (changes.min) {\n      this.min = isNaN(Number(changes.min.currentValue)) ? DEFAULT.MIN_VALUE : Number(changes.min.currentValue);\n    }\n\n    if (changes.max) {\n      this.max = isNaN(Number(changes.max.currentValue)) ? DEFAULT.MAX_VALUE : Number(changes.max.currentValue);\n\n      if (this.max > 0) {\n        this.step = Math.min(this.max, Math.abs(Number(this.step)) || DEFAULT.STEP);\n      } else {\n        this.step = Math.abs(Number(this.step)) || DEFAULT.STEP;\n      }\n    }\n\n    if (changes.min || changes.max) {\n      if (this.max < this.min) {\n        [this.min, this.max] = [this.max, this.min];\n      }\n\n      this.checkOrientation();\n      this.checkPointsCount();\n      this.cdr.markForCheck();\n    }\n\n    if (changes.isVertical) {\n      this.checkOrientation();\n    }\n\n    if (changes.isSegmented && changes.isSegmented.currentValue) {\n      this.isEditable = false;\n      this.checkPointsCount();\n    } else {\n      this.checkPointsCount();\n    }\n\n    if (!this.firstCheck) {\n      this.checkValue(this.startControlParent(), this.startControlOptions);\n      if (this.isRangeSlider) {\n        this.checkValue(this.endControlParent(), this.endControlOptions);\n      }\n    }\n\n    if (changes.disabled) {\n      this.tabIndex = changes.disabled.currentValue ? -1 : 0;\n    }\n  }\n\n  // Lifecycle hook for custom change detection\n  public ngDoCheck(): void {\n    if (\n      this.checkForProjection &&\n      this.wrap?.nativeElement.getBoundingClientRect().width > 0 &&\n      this.wrap?.nativeElement.getBoundingClientRect().height\n    ) {\n      this.checkElementsProps();\n      this.checkPointsCount();\n      this.dragging(this.startControl.nativeElement, this.startControlOptions);\n      this.dragging(this.endControl.nativeElement, this.endControlOptions);\n      this.initControlsPos(this.startControlParent(), this.startControlOptions);\n      this.initControlsPos(this.endControlParent(), this.endControlOptions);\n      this.firstCheck = false;\n      this.checkForProjection = false;\n    }\n  }\n\n  // Check if the value is negative\n  isNegativeValue(value: number | string): boolean {\n    const minus = /-/;\n    return minus.test(value?.toString());\n  }\n\n  // Write value to the component\n  public writeValue(value: number | string): void {\n    if (value !== null) {\n      this.value = value;\n    } else {\n      this.reset();\n    }\n  }\n\n  // Set the disabled state of the component\n  public setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  // Check the type of the value and update the slider accordingly\n  public checkValueType(value: number | string): void {\n    if (typeof value === 'number') {\n      this.typeOfValue = 'number';\n      this.isRangeSlider = false;\n      this.startControlOptions.value = value;\n      this.endControlOptions.value = null;\n\n      if (!this.firstCheck) {\n        this.checkValue(this.startControlParent(), this.startControlOptions);\n      }\n    } else if (typeof value === 'string') {\n      let valueList: number[] = value\n        .replace(/\\s/g, '')\n        .split(',')\n        .map((i) => Number(i));\n\n      this.typeOfValue = 'string';\n\n      if (valueList.length === 1) {\n        this.isRangeSlider = false;\n        this.startControlOptions.value = Number(valueList[0]);\n        this.endControlOptions.value = null;\n\n        if (!this.firstCheck) {\n          this.checkValue(this.startControlParent(), this.startControlOptions);\n        }\n      } else if (valueList.length > 1) {\n        this.isRangeSlider = true;\n        valueList = valueList.sort(this.compareValues);\n\n        if (valueList[0] === valueList[1]) {\n          this.startControlOptions.value = valueList[0] - this.step;\n          this.endControlOptions.value = valueList[1];\n        } else {\n          this.startControlOptions.value = valueList[0];\n          this.endControlOptions.value = valueList[1];\n        }\n\n        if (this.firstCheckNgModel && !this.firstCheck) {\n          this.initControlsPos(this.startControlParent(), this.startControlOptions);\n          this.initControlsPos(this.endControlParent(), this.endControlOptions);\n          this.firstCheckNgModel = false;\n        } else if (!this.firstCheck) {\n          this.checkValue(this.startControlParent(), this.startControlOptions);\n          this.checkValue(this.endControlParent(), this.endControlOptions);\n        }\n      }\n    }\n  }\n\n  // Update the value of the slider control\n  public updateValue(control: HTMLElement, controlOptions: SliderControl) {\n    this.checkValue(this.renderer.parentNode(control), controlOptions);\n  }\n\n  // Increase the value of the slider control\n  public increaseValue(control: HTMLElement, controlOptions: SliderControl): void {\n    controlOptions.value = <number>controlOptions.value + this.step;\n\n    this.updateValue(control, controlOptions);\n  }\n\n  // Decrease the value of the slider control\n  public decreaseValue(control: HTMLElement, controlOptions: SliderControl): void {\n    controlOptions.value = <number>controlOptions.value - this.step;\n\n    this.updateValue(control, controlOptions);\n  }\n\n  // Reset the slider to its initial state\n  public reset(): void {\n    if (!this.firstCheck) {\n      this.startControlOptions.value = this.min;\n      this.endControlOptions.value = this.max;\n\n      if (this.isRangeSlider) {\n        this.initControlsPos(this.startControlParent(), this.startControlOptions);\n        this.initControlsPos(this.endControlParent(), this.endControlOptions);\n      } else {\n        this.initControlsPos(this.startControlParent(), this.startControlOptions);\n      }\n\n      this.onModelChange(null);\n      this.valueChanged.emit(null);\n    }\n  }\n\n  // Handle keydown events for the slider control\n  public onKeydown(event: KeyboardEvent, control: HTMLElement, controlOptions: SliderControl): void {\n    switch (event.keyCode) {\n      case KeyCodes.ARROW_RIGHT:\n        event.preventDefault();\n        this.increaseValue(control, controlOptions);\n        break;\n\n      case KeyCodes.ARROW_LEFT:\n        event.preventDefault();\n        this.decreaseValue(control, controlOptions);\n        break;\n    }\n  }\n\n  // Get the orientation of the slider\n  public getOrientation(): string {\n    return this.isVertical ? ORIENTATION_VERTICAL : ORIENTATION_HORIZONTAL;\n  }\n\n  // Select a notch on the slider\n  public selectNotch(index: number): void {\n    const selectedValue = this.min + this.step * index;\n    const startControlDiff = Math.abs(Number(this.startControlOptions.value) - selectedValue);\n    const endControlDiff = Math.abs(Number(this.endControlOptions.value) - selectedValue);\n    const approximateValue = Math.min(startControlDiff, endControlDiff);\n\n    if (this.isRangeSlider) {\n      if ((approximateValue === startControlDiff && approximateValue === endControlDiff) || approximateValue === startControlDiff) {\n        this.startControlOptions.value = selectedValue;\n        this.updateValue(this.startControl.nativeElement, this.startControlOptions);\n      } else {\n        this.endControlOptions.value = selectedValue;\n        this.updateValue(this.endControl.nativeElement, this.endControlOptions);\n      }\n    } else {\n      this.startControlOptions.value = selectedValue;\n      this.updateValue(this.startControl.nativeElement, this.startControlOptions);\n    }\n  }\n\n  // Handle dragging of the slider control\n  private dragging(control: HTMLElement, controlOptions: SliderControl): void {\n    const down$: Observable<Event> = fromEvent(control, 'mousedown');\n    const up$: Observable<Event> = fromEvent(document, 'mouseup');\n    const move$: Observable<Event> = fromEvent(document, 'mousemove').pipe(\n      throttleTime(10),\n      tap((e: MouseEvent) => {\n        this.ngZone.run(() => this.onMouseMove(e, this.renderer.parentNode(control), controlOptions));\n      })\n    );\n\n    this.ngZone.runOutsideAngular(() => {\n      down$\n        .pipe(\n          tap((e: Event) => {\n            e.preventDefault();\n          }),\n          takeUntil(this.destroy),\n          switchMap((_) => move$.pipe(takeUntil(up$)))\n        )\n        .subscribe();\n    });\n  }\n\n  // Handle mouse move events for dragging\n  private onMouseMove = (event: MouseEvent, control: HTMLElement, controlOptions: SliderControl): void => {\n    let currentPos: number;\n    this.checkElementsProps();\n\n    if (this.isVertical) {\n      currentPos = event.clientY - this.wrapStartPosition;\n    } else {\n      currentPos = event.clientX - this.wrapStartPosition;\n    }\n\n    this.checkPosition(control, controlOptions, currentPos);\n  };\n\n  // Check the value of the slider control\n  private checkValue(control: HTMLElement, controlOptions: SliderControl, isEmmited = false): void {\n    this.checkElementsProps();\n\n    const currentPos = (this.sliderWidth * (<number>controlOptions.value - this.min)) / (this.max - this.min);\n    this.checkPosition(control, controlOptions, currentPos, isEmmited);\n  }\n\n  // Initialize the position of the slider controls\n  private initControlsPos(control: HTMLElement, controlOptions: SliderControl): void {\n    this.checkElementsProps();\n\n    const step = this.step >= DEFAULT.STEP ? DEFAULT.STEP : this.step;\n    const currentPos = (this.sliderWidth * (<number>controlOptions.value - this.min)) / (this.max - this.min);\n    const ticksAmount = (this.max - this.min) / step;\n    const tickWidth = this.sliderWidth / ticksAmount;\n\n    if (currentPos <= 0) {\n      this.minimumLimit(control, controlOptions);\n    } else if (currentPos >= this.sliderWidth) {\n      this.maximumLimit(control, controlOptions);\n    } else {\n      this.noLimit(control, controlOptions, currentPos, tickWidth, step);\n    }\n\n    this.checkActiveLinePos();\n    this.checkActivePoints();\n  }\n\n  // Check the position of the slider control\n  private checkPosition(control: HTMLElement, controlOptions: SliderControl, currentPos: number, isEmmited = true): void {\n    const ticksAmount = (this.max - this.min) / this.step;\n    const tickWidth = this.sliderWidth / ticksAmount;\n    const startControlLimitValue = this.endControlOptions.currentPos - tickWidth;\n    const endControlLimitValue = this.startControlOptions.currentPos + tickWidth;\n\n    if (!this.firstCheck && controlOptions.title === SliderType.start && this.isRangeSlider && currentPos >= startControlLimitValue) {\n      if (startControlLimitValue <= 0) {\n        this.minimumLimit(control, controlOptions);\n      } else {\n        this.startControlLimit(control, controlOptions, tickWidth);\n      }\n    } else if (!this.firstCheck && controlOptions.title === SliderType.end && this.isRangeSlider && currentPos <= endControlLimitValue) {\n      if (endControlLimitValue >= this.sliderWidth) {\n        this.maximumLimit(control, controlOptions);\n      } else {\n        this.endControlLimit(control, controlOptions, tickWidth);\n      }\n    } else if (currentPos <= 0) {\n      this.minimumLimit(control, controlOptions);\n    } else if (currentPos >= this.sliderWidth) {\n      this.maximumLimit(control, controlOptions);\n    } else {\n      this.noLimit(control, controlOptions, currentPos, tickWidth, this.step);\n    }\n\n    this.checkActiveLinePos();\n    this.checkActivePoints();\n\n    if (!this.firstCheck) {\n      let value: number | string;\n\n      if (this.isRangeSlider) {\n        value = [this.startControlOptions.value, this.endControlOptions.value].join(',');\n      } else if (this.typeOfValue === 'string') {\n        value = `${this.startControlOptions.value}`;\n      } else {\n        value = this.startControlOptions.value;\n      }\n\n      if (isEmmited) {\n        this.valueChanged.emit(value);\n        this.onModelChange(value);\n        this.onModelTouched();\n      }\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  // Handle the start control limit\n  private startControlLimit(control: HTMLElement, controlOptions: SliderControl, tickWidth: number): void {\n    controlOptions.currentPos = this.endControlOptions.currentPos - tickWidth;\n    controlOptions.value = Number((<number>this.endControlOptions.value - this.step).toFixed(2));\n    this.controlPos(control, controlOptions);\n  }\n\n  // Handle the end control limit\n  private endControlLimit(control: HTMLElement, controlOptions: SliderControl, tickWidth: number): void {\n    controlOptions.currentPos = this.startControlOptions.currentPos + tickWidth;\n    controlOptions.value = Number((<number>this.startControlOptions.value + this.step).toFixed(2));\n    this.controlPos(control, controlOptions);\n  }\n\n  // Handle the minimum limit\n  private minimumLimit(control: HTMLElement, controlOptions: SliderControl): void {\n    controlOptions.currentPos = 0;\n    controlOptions.value = this.min;\n    this.controlPos(control, controlOptions);\n  }\n\n  // Handle the maximum limit\n  private maximumLimit(control: HTMLElement, controlOptions: SliderControl): void {\n    controlOptions.currentPos = this.sliderWidth;\n    controlOptions.value = this.max;\n    this.controlPos(control, controlOptions);\n  }\n\n  // Handle no limit scenario\n  private noLimit(control: HTMLElement, controlOptions: SliderControl, currentPos: number, tickWidth: number, step: number): void {\n    controlOptions.currentPos = currentPos;\n\n    const newValue = Number((Math.round(controlOptions.currentPos / tickWidth) * step).toFixed(2));\n    controlOptions.value = Number(Math.min(this.max, newValue + this.min).toFixed(2));\n\n    if (this.isSegmented) {\n      controlOptions.currentPos =\n        controlOptions.value <= this.min ? 0 : (this.sliderWidth * (<number>controlOptions.value - this.min)) / (this.max - this.min);\n    }\n\n    this.controlPos(control, controlOptions);\n  }\n\n  // Check the position of the active line\n  private checkActiveLinePos(): void {\n    if (this.isRangeSlider) {\n      this.activeLine.nativeElement.style[this.directionStrategy.direction] = `${this.startControlOptions.currentPos}px`;\n      this.activeLine.nativeElement.style[this.directionStrategy.sizeDirection] = `${\n        this.endControlOptions.currentPos - this.startControlOptions.currentPos\n      }px`;\n    } else {\n      this.activeLine.nativeElement.style[this.directionStrategy.direction] = `0px`;\n      this.activeLine.nativeElement.style[this.directionStrategy.sizeDirection] = `${this.startControlOptions.currentPos}px`;\n    }\n  }\n\n  // Check the properties of the slider elements\n  private checkElementsProps(): void {\n    this.wrapStartPosition = this.wrap?.nativeElement.getBoundingClientRect()[this.directionStrategy.direction];\n    this.controlWidth = this.startControlParent()?.getBoundingClientRect()[this.directionStrategy.sizeDirection];\n    this.sliderWidth = this.wrap?.nativeElement.getBoundingClientRect()[this.directionStrategy.sizeDirection];\n    if (this.pointsRef?.length) this.pointWidth = this.pointsRef.toArray()[0]?.nativeElement.clientWidth;\n  }\n\n  // Check the number of points on the slider\n  private checkPointsCount(): void {\n    const diff = this.max - this.min;\n    const pointCount = Math.ceil(diff / this.step + 1);\n    this.points = this.isSegmented ? this.fillArray(pointCount) : this.fillArray(11);\n\n    this.cdr.markForCheck();\n  }\n\n  // Check and update the active points on the slider\n  private checkActivePoints(): void {\n    if (this.isRangeSlider) {\n      this.pointsRef.forEach((item) => {\n        const pointEl = item.nativeElement;\n\n        if (\n          this.startControlOptions.currentPos <= pointEl[this.directionStrategy.pointDirection] + this.pointWidth &&\n          pointEl[this.directionStrategy.pointDirection] <= this.endControlOptions.currentPos\n        ) {\n          pointEl.classList.add(POINT_ACTIVE_CLASS);\n        } else {\n          pointEl.classList.remove(POINT_ACTIVE_CLASS);\n        }\n      });\n    } else {\n      this.pointsRef.forEach((item) => {\n        const pointEl = item.nativeElement;\n\n        if (pointEl[this.directionStrategy.pointDirection] <= this.startControlOptions.currentPos) {\n          pointEl.classList.add(POINT_ACTIVE_CLASS);\n        } else {\n          pointEl.classList.remove(POINT_ACTIVE_CLASS);\n        }\n      });\n    }\n  }\n\n  // Set the position of the control element\n  private controlPos(control: HTMLElement, controlOptions: SliderControl): void {\n    this.cdr.detectChanges();\n\n    if (controlOptions.title === SliderType.start) {\n      control.style[this.directionStrategy.direction] = `${controlOptions.currentPos - this.controlWidth}px`;\n    } else {\n      control.style[this.directionStrategy.direction] = `${controlOptions.currentPos}px`;\n    }\n  }\n\n  // Compare two values for sorting\n  private compareValues(prev: number, next: number): number {\n    return prev < next ? -1 : 1;\n  }\n\n  // Fill an array with a sequence of numbers\n  private fillArray(count: number): number[] {\n    return Array(count)\n      .fill(1)\n      .map((x, i) => i + 1);\n  }\n\n  // Get the parent element of the start control\n  private startControlParent(): HTMLElement {\n    if (this.startControl) {\n      return this.renderer.parentNode(this.startControl.nativeElement);\n    }\n  }\n\n  // Get the parent element of the end control\n  private endControlParent(): HTMLElement {\n    if (this.endControl) {\n      return this.renderer.parentNode(this.endControl.nativeElement);\n    }\n  }\n\n  // Check and update the orientation of the slider\n  private checkOrientation(): void {\n    if (this.isVertical) {\n      if (!this.firstCheck) {\n        this.startControlParent().style.left = null;\n        this.endControlParent().style.left = null;\n        this.activeLine.nativeElement.style.left = null;\n        this.activeLine.nativeElement.style.width = null;\n      }\n\n      this.directionStrategy = {\n        direction: Direction.top,\n        pointDirection: PointDirection.offsetTop,\n        sizeDirection: SizeDirection.height,\n      };\n    } else {\n      if (!this.firstCheck) {\n        this.startControlParent().style.top = null;\n        this.endControlParent().style.top = null;\n        this.activeLine.nativeElement.style.top = null;\n        this.activeLine.nativeElement.style.height = null;\n      }\n\n      this.directionStrategy = {\n        direction: DEFAULT_DIRECTION,\n        pointDirection: DEFAULT_POINT_DIRECTION,\n        sizeDirection: DEFAULT_SIZE_DIRECTION,\n      };\n    }\n  }\n}\n","<div [ngClass]=\"{\n      'dds-slider_vertical': isVertical,\n      'dds-slider_editable': isEditable,\n      'dds-slider_disabled': disabled,\n      'dds-slider_segmented': isSegmented,\n      'dds-slider_inverse': isInverse\n      }\"\n     [attr.aria-disabled]=\"disabled\"\n     data-qa=\"slider\"\n     class=\"dds-slider {{customClass}}\">\n  @if (label) {\n    <span data-qa=\"slider-label\"\n          class=\"dds-slider__label\">{{label}}\n      @if (isRequired) {\n        <span class=\"dds-required\"></span>\n      }\n    </span>\n  }\n  <div class=\"dds-slider__shell\">\n    <div data-qa=\"slider-min\"\n         class=\"dds-slider__min-value\">\n      @if (prefix) {\n        <span class=\"dds-slider__prefix\">{{prefix}}</span>\n      }\n      @if (isNegativeValue(min)) {\n        <span>-</span>\n      }\n      {{min | mask : mask : {thousandSeparator: thousandSeparator, decimalMarker: decimalMarker} }}\n      @if (suffix) {\n        <span class=\"dds-slider__suffix\">{{suffix}}</span>\n      }\n    </div>\n    <div class=\"dds-slider__wrap\"\n         #wrap>\n      <span class=\"dds-slider__describedby\"\n            [attr.id]=\"describedById\">min value: {{min}}, max value: {{max}}</span>\n      <div class=\"dds-slider__points\">\n        @if (!isSegmented) {\n          @for (point of points; track point) {\n            <span class=\"dds-slider__point\"\n                  #pointsRef></span>\n          }\n        } @else {\n          @for (point of points; track point; let i = $index) {\n            <span class=\"dds-slider__point dds-slider__point_segmented\"\n                  (click)=\"selectNotch(i)\"\n                  #pointsRef></span>\n          }\n        }\n\n      </div>\n      <div class=\"dds-slider__line\"></div>\n      <div class=\"dds-slider__active-line\"\n           #activeLine></div>\n      <div class=\"dds-slider__control dds-slider__control_left\">\n        <button [attr.aria-label]=\"fromAriaLabel\"\n                [attr.aria-valuemax]=\"max\"\n                [attr.aria-valuemin]=\"min\"\n                [attr.aria-orientation]=\"getOrientation()\"\n                [attr.aria-valuenow]=\"startControlOptions.value\"\n                [attr.aria-required]=\"isRequired\"\n                [attr.aria-describedby]=\"describedById\"\n                [attr.tabindex]=\"tabIndex\"\n                data-qa=\"slider-button\"\n                class=\"dds-slider__control-icon\"\n                role=\"slider\"\n                ddsFocus\n                (keydown)=\"onKeydown($event, startControl, startControlOptions)\"\n                #startControl></button>\n        @if (!isEditable) {\n          <div class=\"dds-slider__value dds-slider__value_left\">\n            @if (prefix) {\n              <span class=\"dds-slider__prefix\">{{prefix}}</span>\n            }\n            @if (isNegativeValue(startControlOptions.value)) {\n              <span>-</span>\n            }\n            {{(startControlOptions.value || 0) | mask : mask : {thousandSeparator: thousandSeparator, decimalMarker: decimalMarker} }}\n            @if (suffix) {\n              <span class=\"dds-slider__suffix\">{{suffix}}</span>\n            }\n          </div>\n        } @else {\n          <div class=\"dds-slider__value dds-slider__value_editable\">\n            @if (prefix) {\n              <span class=\"dds-slider__prefix\">{{prefix}}</span>\n            }\n            <input [(ngModel)]=\"startControlOptions.value\"\n                   [thousandSeparator]=\"thousandSeparator\"\n                   [decimalMarker]=\"decimalMarker\"\n                   [disabled]=\"disabled\"\n                   [attr.aria-label]=\"startControlOptions.value\"\n                   [attr.aria-disabled]=\"disabled\"\n                   [attr.tabindex]=\"tabIndex\"\n                   [attr.aria-required]=\"isRequired\"\n                   [attr.aria-describedby]=\"describedById\"\n                   [required]=\"isRequired\"\n                   [mask]=\"mask\"\n                   [allowNegativeNumbers]=\"true\"\n                   data-qa=\"slider-input\"\n                   ddsFocus\n                   type=\"text\"\n                   class=\"dds-slider__input\"\n                   (focusout)=\"updateValue(startControl, startControlOptions)\"\n                   (keydown.enter)=\"updateValue(startControl, startControlOptions)\"\n                   (keydown.space)=\"updateValue(startControl, startControlOptions)\"\n                   #startControlInput>\n            @if (suffix) {\n              <span class=\"dds-slider__suffix\">{{suffix}}</span>\n            }\n          </div>\n        }\n      </div>\n      <div [ngClass]=\"{\n            'dds-slider__control_invisible': !isRangeSlider\n          }\"\n           class=\"dds-slider__control dds-slider__control_right\">\n        <button [attr.aria-label]=\"toAriaLabel\"\n                [attr.aria-valuemax]=\"max\"\n                [attr.aria-valuemin]=\"min\"\n                [attr.aria-orientation]=\"getOrientation()\"\n                [attr.aria-valuenow]=\"endControlOptions.value\"\n                [attr.aria-required]=\"isRequired\"\n                [attr.aria-describedby]=\"describedById\"\n                [attr.tabindex]=\"tabIndex\"\n                data-qa=\"slider-button\"\n                class=\"dds-slider__control-icon\"\n                role=\"slider\"\n                ddsFocus\n                (keydown)=\"onKeydown($event, endControl, endControlOptions)\"\n                #endControl></button>\n        @if (!isEditable) {\n          <div class=\"dds-slider__value dds-slider__value_right\">\n            @if (prefix) {\n              <span class=\"dds-slider__prefix\">{{prefix}}</span>\n            }\n            @if (isNegativeValue(endControlOptions.value)) {\n              <span>-</span>\n            }\n            {{endControlOptions.value | mask : mask : {thousandSeparator: thousandSeparator, decimalMarker: decimalMarker} }}\n            @if (suffix) {\n              <span class=\"dds-slider__suffix\">{{suffix}}</span>\n            }\n          </div>\n        } @else {\n          <div class=\"dds-slider__value dds-slider__value_right dds-slider__value_editable\">\n            @if (prefix) {\n              <span class=\"dds-slider__prefix\">{{prefix}}</span>\n            }\n            <input [(ngModel)]=\"endControlOptions.value\"\n                   [thousandSeparator]=\"thousandSeparator\"\n                   [decimalMarker]=\"decimalMarker\"\n                   [disabled]=\"disabled\"\n                   [attr.aria-label]=\"endControlOptions.value\"\n                   [attr.aria-disabled]=\"disabled\"\n                   [attr.tabindex]=\"tabIndex\"\n                   [attr.aria-required]=\"isRequired\"\n                   [attr.aria-describedby]=\"describedById\"\n                   [required]=\"isRequired\"\n                   [mask]=\"mask\"\n                   [allowNegativeNumbers]=\"true\"\n                   data-qa=\"slider-input\"\n                   ddsFocus\n                   type=\"text\"\n                   class=\"dds-slider__input\"\n                   (focusout)=\"updateValue(endControl, endControlOptions)\"\n                   (keydown.enter)=\"updateValue(endControl, endControlOptions)\"\n                   (keydown.space)=\"updateValue(endControl, endControlOptions)\"\n                   #endControlInput>\n            @if (suffix) {\n              <span class=\"dds-slider__suffix\">{{suffix}}</span>\n            }\n          </div>\n        }\n      </div>\n    </div>\n    <div data-qa=\"slider-max\"\n         class=\"dds-slider__max-value\">\n      @if (prefix) {\n        <span class=\"dds-slider__prefix\">{{prefix}}</span>\n      }\n      @if (isNegativeValue(max)) {\n        <span>-</span>\n      }\n      {{max | mask : mask : {thousandSeparator: thousandSeparator, decimalMarker: decimalMarker} }}\n      @if (suffix) {\n        <span class=\"dds-slider__suffix\">{{suffix}}</span>\n      }\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { SliderComponent } from './slider/slider.component';\n\n@NgModule({\n  declarations: [],\n  imports: [SliderComponent],\n  exports: [SliderComponent],\n})\nexport class SliderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}