{"version":3,"file":"ngx-formly-material-slider.mjs","sources":["../../../../src/ui/material/slider/src/slider.type.ts","../../../../src/ui/material/slider/src/slider-interface.ts","../../../../src/ui/material/slider/src/slider-input.ts","../../../../src/ui/material/slider/src/slider-mdc.type.ts","../../../../src/ui/material/slider/src/slider.module.ts","../../../../src/ui/material/slider/src/public_api.ts","../../../../src/ui/material/slider/src/ngx-formly-material-slider.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, ViewChild, Type } from '@angular/core';\nimport { FieldTypeConfig, FormlyFieldConfig } from '@ngx-formly/core';\nimport { FieldType, FormlyFieldProps } from '@ngx-formly/material/form-field';\nimport { MatSlider, MatSliderChange } from '@angular/material/slider';\n\ninterface SliderProps extends FormlyFieldProps {\n  displayWith?: (value: number) => string | number;\n  invert?: boolean;\n  tickInterval?: number;\n  valueText?: string;\n  vertical?: boolean;\n  input?: (field: FormlyFieldConfig<SliderProps>, $event: MatSliderChange) => void;\n  change?: (field: FormlyFieldConfig<SliderProps>, $event: MatSliderChange) => void;\n\n  /** @deprecated Use `discrete` instead. */\n  thumbLabel?: boolean;\n  discrete?: boolean;\n  showTickMarks?: boolean;\n}\n\nexport interface FormlySliderFieldConfig extends FormlyFieldConfig<SliderProps> {\n  type: 'slider' | Type<FormlyFieldSlider>;\n}\n\n@Component({\n  selector: 'formly-field-mat-slider',\n  template: `\n    <mat-slider\n      [id]=\"id\"\n      [style.width]=\"'100%'\"\n      [formControl]=\"formControl\"\n      [formlyAttributes]=\"field\"\n      [tabIndex]=\"props.tabindex\"\n      [color]=\"props.color\"\n      [displayWith]=\"props.displayWith\"\n      [invert]=\"props.invert\"\n      [max]=\"props.max\"\n      [min]=\"props.min\"\n      [step]=\"props.step\"\n      [thumbLabel]=\"props.thumbLabel || props.discrete\"\n      [tickInterval]=\"props.tickInterval\"\n      [valueText]=\"props.valueText\"\n      [vertical]=\"props.vertical\"\n      (input)=\"props.input && props.input(field, $event)\"\n      (change)=\"props.change && props.change(field, $event)\"\n    >\n    </mat-slider>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormlyFieldSlider extends FieldType<FieldTypeConfig<SliderProps>> {\n  @ViewChild(MatSlider, { static: true }) slider!: MatSlider;\n  override defaultOptions = {\n    props: {\n      hideFieldUnderline: true,\n      floatLabel: 'always' as const,\n      thumbLabel: false,\n      displayWith: (value: number) => value,\n    },\n  };\n\n  override onContainerClick(event: MouseEvent): void {\n    this.slider.focus?.();\n    super.onContainerClick(event);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { InjectionToken } from '@angular/core';\nimport { RippleGlobalOptions } from '@angular/material/core';\n\n/**\n * Thumb types: range slider has two thumbs (START, END) whereas single point\n * slider only has one thumb (END).\n */\nexport const enum _MatThumb {\n  START = 1,\n  END = 2,\n}\n\n/**\n * Injection token that can be used to query for a `MatSliderThumb`.\n * Used primarily to avoid circular imports.\n * @docs-private\n */\nexport const MAT_SLIDER_THUMB = new InjectionToken<{}>('_MatSliderThumb');\n\n/**\n * Represents a drag event emitted by the MatSlider component.\n * @ignore\n */\nexport interface MatSliderDragEvent {\n  /** The MatSliderThumb that was interacted with. */\n  source: _MatSliderThumb;\n\n  /** The MatSlider that was interacted with. */\n  parent: _MatSlider;\n\n  /** The current value of the slider. */\n  value: number;\n}\n\n/** @ignore */\nexport interface _MatSlider {\n  /** Gets the slider thumb input of the given thumb position. */\n  _getInput(thumbPosition: _MatThumb): _MatSliderThumb | undefined;\n\n  /** The minimum value that the slider can have. */\n  min: number;\n\n  /** The maximum value that the slider can have. */\n  max: number;\n\n  /** The amount that slider values can increment or decrement by. */\n  step: number;\n\n  /** Whether the slider is disabled. */\n  disabled: boolean;\n\n  /** Whether the slider is a range slider. */\n  _isRange: boolean;\n\n  /** Whether the slider is rtl. */\n  _isRtl: boolean;\n\n  /** The stored width of the host element's bounding client rect. */\n  _cachedWidth: number;\n\n  /** The stored width of the host element's bounding client rect. */\n  _cachedLeft: number;\n\n  /**\n   * The padding of the native slider input. This is added in order to make the region where the\n   * thumb ripple extends past the end of the slider track clickable.\n   */\n  _inputPadding: number;\n\n  /**\n   * The offset represents left most translateX of the slider knob. Inversely,\n   * (slider width - offset) = the right most translateX of the slider knob.\n   *\n   * Note:\n   *    * The native slider knob differs from the visual slider. It's knob cannot slide past\n   *      the end of the track AT ALL.\n   *    * The visual slider knob CAN slide past the end of the track slightly. It's knob can slide\n   *      past the end of the track such that it's center lines up with the end of the track.\n   */\n  _inputOffset: number;\n\n  /** The radius of the visual slider's ripple. */\n  _rippleRadius: number;\n\n  /** The global configuration for `matRipple` instances. */\n  readonly _globalRippleOptions?: RippleGlobalOptions;\n\n  /** Whether animations have been disabled. */\n  _noopAnimations: boolean;\n\n  /** Whether or not the slider should use animations. */\n  _hasAnimation: boolean;\n\n  /** Triggers UI updates that are needed after a slider input value has changed. */\n  _onValueChange: (source: _MatSliderThumb) => void;\n\n  /** Triggers UI updates that are needed after the slider thumb position has changed. */\n  _onTranslateXChange: (source: _MatSliderThumb) => void;\n\n  /** Updates the stored slider dimensions using the current bounding client rect. */\n  _updateDimensions: () => void;\n\n  /** Used to set the transition duration for thumb and track animations. */\n  _setTransition: (withAnimation: boolean) => void;\n}\n\n/** @ignore */\nexport interface _MatSliderThumb {\n  /** The minimum value that the slider can have. */\n  min: number;\n\n  /** The maximum value that the slider can have. */\n  max: number;\n\n  /** The amount that slider values can increment or decrement by. */\n  step: number;\n\n  /** The current value of this slider input. */\n  value: number;\n\n  /** The current translateX in px of the slider visual thumb. */\n  translateX: number;\n\n  /** Indicates whether this thumb is the start or end thumb. */\n  thumbPosition: _MatThumb;\n\n  /** Similar to percentage but calcualted using translateX relative to the total track width. */\n  fillPercentage: number;\n\n  /** Whether the slider is disabled. */\n  disabled: boolean;\n\n  /** The host native HTML input element. */\n  _hostElement: HTMLInputElement;\n\n  /** Whether the input is currently focused (either by tab or after clicking). */\n  _isFocused: boolean;\n\n  /** The aria-valuetext string representation of the input's value. */\n  _valuetext: string;\n\n  /**\n   * Indicates whether UI updates should be skipped.\n   *\n   * This flag is used to avoid flickering\n   * when correcting values on pointer up/down.\n   */\n  _skipUIUpdate: boolean;\n\n  /** Handles the initialization of properties for the slider input. */\n  initProps: () => void;\n\n  /** Handles UI initialization controlled by this slider input. */\n  initUI: () => void;\n\n  /** Calculates the visual thumb's translateX based on the slider input's current value. */\n  _calcTranslateXByValue: () => number;\n\n  /** Updates the visual thumb based on the slider input's current value. */\n  _updateThumbUIByValue: () => void;\n\n  /**\n   * Sets the slider input to disproportionate dimensions to allow for touch\n   * events to be captured on touch devices.\n   */\n  _updateWidthInactive: () => void;\n\n  /**\n   * Used to set the slider width to the correct\n   * dimensions while the user is dragging.\n   */\n  _updateWidthActive: () => void;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  Output,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatSlider } from '@angular/material/slider';\nimport { VERSION } from '@angular/material/core';\nimport { Subject } from 'rxjs';\nimport { _MatThumb, MatSliderDragEvent, _MatSlider, _MatSliderThumb, MAT_SLIDER_THUMB } from './slider-interface';\n\nclass Signal<T> {\n  constructor(public value: T) {}\n  set(value: T): void {\n    this.value = value;\n  }\n  update(updateFn: (value: T) => T): void {\n    this.set(updateFn(this.value));\n  }\n  asReadonly(): Signal<T> {\n    return this;\n  }\n}\n\n/**\n * Provider that allows the slider thumb to register as a ControlValueAccessor.\n * @docs-private\n */\nexport const MAT_SLIDER_THUMB_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MatSliderThumb),\n  multi: true,\n};\n\n/**\n * Directive that adds slider-specific behaviors to an input element inside `<mat-slider>`.\n * Up to two may be placed inside of a `<mat-slider>`.\n *\n * If one is used, the selector `matSliderThumb` must be used, and the outcome will be a normal\n * slider. If two are used, the selectors `matSliderStartThumb` and `matSliderEndThumb` must be\n * used, and the outcome will be a range slider with two slider thumbs.\n * @ignore\n */\n@Directive({\n  // eslint-disable-next-line\n  selector: 'input[matSliderThumb]',\n  exportAs: 'matSliderThumb',\n  host: {\n    class: 'mdc-slider__input',\n    type: 'range',\n    '[attr.aria-valuetext]': 'valuetext',\n    '(change)': '_onChange()',\n    '(input)': '_onInput()',\n    // TODO(wagnermaciel): Consider using a global event listener instead.\n    // Reason: I have found a semi-consistent way to mouse up without triggering this event.\n    '(blur)': '_onBlur()',\n    '(focus)': '_onFocus()',\n  },\n  providers: [MAT_SLIDER_THUMB_VALUE_ACCESSOR, { provide: MAT_SLIDER_THUMB, useExisting: MatSliderThumb }],\n})\nexport class MatSliderThumb implements _MatSliderThumb, OnDestroy, ControlValueAccessor {\n  @Input()\n  get value(): number {\n    return coerceNumberProperty(this._hostElement.value);\n  }\n  set value(v: NumberInput) {\n    const val = coerceNumberProperty(v).toString();\n    if (!this._hasSetInitialValue) {\n      this._initialValue = val;\n      return;\n    }\n    if (this._isActive) {\n      return;\n    }\n    this._hostElement.value = val;\n    this._updateThumbUIByValue();\n    this._slider._onValueChange(this);\n    this._cdr.detectChanges();\n  }\n  /** Event emitted when the `value` is changed. */\n  @Output() readonly valueChange: EventEmitter<number> = new EventEmitter<number>();\n\n  /** Event emitted when the slider thumb starts being dragged. */\n  @Output() readonly dragStart: EventEmitter<MatSliderDragEvent> = new EventEmitter<MatSliderDragEvent>();\n\n  /** Event emitted when the slider thumb stops being dragged. */\n  @Output() readonly dragEnd: EventEmitter<MatSliderDragEvent> = new EventEmitter<MatSliderDragEvent>();\n\n  /**\n   * The current translateX in px of the slider visual thumb.\n   * @docs-private\n   */\n  get translateX(): number {\n    if (this._slider.min >= this._slider.max) {\n      this._translateX = 0;\n      return this._translateX;\n    }\n    if (this._translateX === undefined) {\n      this._translateX = this._calcTranslateXByValue();\n    }\n    return this._translateX;\n  }\n  set translateX(v: number) {\n    this._translateX = v;\n  }\n  private _translateX: number | undefined;\n\n  /**\n   * Indicates whether this thumb is the start or end thumb.\n   * @docs-private\n   */\n  thumbPosition: _MatThumb = _MatThumb.END;\n\n  /** @docs-private */\n  get min(): number {\n    return coerceNumberProperty(this._hostElement.min);\n  }\n  set min(v: NumberInput) {\n    this._hostElement.min = coerceNumberProperty(v).toString();\n    this._cdr.detectChanges();\n  }\n\n  /** @docs-private */\n  get max(): number {\n    return coerceNumberProperty(this._hostElement.max);\n  }\n  set max(v: NumberInput) {\n    this._hostElement.max = coerceNumberProperty(v).toString();\n    this._cdr.detectChanges();\n  }\n\n  get step(): number {\n    return coerceNumberProperty(this._hostElement.step);\n  }\n  set step(v: NumberInput) {\n    this._hostElement.step = coerceNumberProperty(v).toString();\n    this._cdr.detectChanges();\n  }\n\n  /** @docs-private */\n  get disabled(): boolean {\n    return coerceBooleanProperty(this._hostElement.disabled);\n  }\n  set disabled(v: BooleanInput) {\n    this._hostElement.disabled = coerceBooleanProperty(v);\n    this._cdr.detectChanges();\n\n    if (this._slider.disabled !== this.disabled) {\n      this._slider.disabled = this.disabled;\n    }\n  }\n\n  /** The percentage of the slider that coincides with the value. */\n  get percentage(): number {\n    if (this._slider.min >= this._slider.max) {\n      return this._slider._isRtl ? 1 : 0;\n    }\n    return (this.value - this._slider.min) / (this._slider.max - this._slider.min);\n  }\n\n  /** @docs-private */\n  get fillPercentage(): number {\n    if (!this._slider._cachedWidth) {\n      return this._slider._isRtl ? 1 : 0;\n    }\n    if (this._translateX === 0) {\n      return 0;\n    }\n    return this.translateX / this._slider._cachedWidth;\n  }\n\n  /** The host native HTML input element. */\n  _hostElement: HTMLInputElement;\n\n  /** The aria-valuetext string representation of the input's value. */\n  _valuetext: any = +VERSION.major >= 18 ? new Signal('') : '';\n\n  get valuetext() {\n    return +VERSION.major >= 18 ? this._valuetext.value : this._valuetext;\n  }\n\n  /** The radius of a native html slider's knob. */\n  _knobRadius: number = 8;\n\n  /** Whether user's cursor is currently in a mouse down state on the input. */\n  _isActive: boolean = false;\n\n  /** Whether the input is currently focused (either by tab or after clicking). */\n  _isFocused: boolean = false;\n\n  /** Used to relay updates to _isFocused to the slider visual thumbs. */\n  private _setIsFocused(v: boolean): void {\n    this._isFocused = v;\n  }\n\n  /**\n   * Whether the initial value has been set.\n   * This exists because the initial value cannot be immediately set because the min and max\n   * must first be relayed from the parent MatSlider component, which can only happen later\n   * in the component lifecycle.\n   */\n  private _hasSetInitialValue: boolean = false;\n\n  /** The stored initial value. */\n  _initialValue: string | undefined;\n\n  /** Defined when a user is using a form control to manage slider value & validation. */\n  private _formControl: FormControl | undefined;\n\n  /** Emits when the component is destroyed. */\n  protected readonly _destroyed = new Subject<void>();\n\n  /**\n   * Indicates whether UI updates should be skipped.\n   *\n   * This flag is used to avoid flickering\n   * when correcting values on pointer up/down.\n   */\n  _skipUIUpdate: boolean = false;\n\n  /** Callback called when the slider input value changes. */\n  private _onChangeFn: (value: any) => void = () => {};\n\n  /** Callback called when the slider input has been touched. */\n  private _onTouchedFn: () => void = () => {};\n\n  constructor(\n    readonly _ngZone: NgZone,\n    readonly _elementRef: ElementRef<HTMLInputElement>,\n    readonly _cdr: ChangeDetectorRef,\n    @Inject(MatSlider) protected _slider: _MatSlider,\n  ) {\n    this._hostElement = _elementRef.nativeElement;\n    this._onPointerDown = this._onPointerDown.bind(this);\n    this._onPointerMove = this._onPointerMove.bind(this);\n    this._onPointerUp = this._onPointerUp.bind(this);\n    this._ngZone.runOutsideAngular(() => {\n      this._hostElement.addEventListener('pointerdown', this._onPointerDown);\n      this._hostElement.addEventListener('pointermove', this._onPointerMove);\n      this._hostElement.addEventListener('pointerup', this._onPointerUp);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._hostElement.removeEventListener('pointerdown', this._onPointerDown);\n    this._hostElement.removeEventListener('pointermove', this._onPointerMove);\n    this._hostElement.removeEventListener('pointerup', this._onPointerUp);\n    this._destroyed.next();\n    this._destroyed.complete();\n    this.dragStart.complete();\n    this.dragEnd.complete();\n  }\n\n  /** @docs-private */\n  initProps(): void {\n    this._updateWidthInactive();\n\n    // If this or the parent slider is disabled, just make everything disabled.\n    if (this.disabled !== this._slider.disabled) {\n      // The MatSlider setter for disabled will relay this and disable both inputs.\n      this._slider.disabled = true;\n    }\n\n    this.step = this._slider.step;\n    this.min = this._slider.min;\n    this.max = this._slider.max;\n    this._initValue();\n  }\n\n  /** @docs-private */\n  initUI(): void {\n    this._updateThumbUIByValue();\n  }\n\n  _initValue(): void {\n    this._hasSetInitialValue = true;\n    if (this._initialValue === undefined) {\n      this.value = this._getDefaultValue();\n    } else {\n      this._hostElement.value = this._initialValue;\n      this._updateThumbUIByValue();\n      this._slider._onValueChange(this);\n      this._cdr.detectChanges();\n    }\n  }\n\n  _getDefaultValue(): number {\n    return this.min;\n  }\n\n  _onBlur(): void {\n    this._setIsFocused(false);\n    this._onTouchedFn();\n  }\n\n  _onFocus(): void {\n    this._setIsFocused(true);\n  }\n\n  _onChange(): void {\n    this.valueChange.emit(this.value);\n    // only used to handle the edge case where user\n    // mousedown on the slider then uses arrow keys.\n    if (this._isActive) {\n      this._updateThumbUIByValue({ withAnimation: true });\n    }\n  }\n\n  _onInput(): void {\n    this._onChangeFn(this.value);\n    // handles arrowing and updating the value when\n    // a step is defined.\n    if (this._slider.step || !this._isActive) {\n      this._updateThumbUIByValue({ withAnimation: true });\n    }\n    this._slider._onValueChange(this);\n  }\n\n  _onNgControlValueChange(): void {\n    // only used to handle when the value change\n    // originates outside of the slider.\n    if (!this._isActive || !this._isFocused) {\n      this._slider._onValueChange(this);\n      this._updateThumbUIByValue();\n    }\n    this._slider.disabled = this._formControl!.disabled;\n  }\n\n  _onPointerDown(event: PointerEvent): void {\n    if (this.disabled || event.button !== 0) {\n      return;\n    }\n\n    this._isActive = true;\n    this._setIsFocused(true);\n    this._updateWidthActive();\n    this._slider._updateDimensions();\n\n    // Does nothing if a step is defined because we\n    // want the value to snap to the values on input.\n    if (!this._slider.step) {\n      this._updateThumbUIByPointerEvent(event, { withAnimation: true });\n    }\n\n    if (!this.disabled) {\n      this._handleValueCorrection(event);\n      this.dragStart.emit({ source: this, parent: this._slider, value: this.value });\n    }\n  }\n\n  /**\n   * Corrects the value of the slider on pointer up/down.\n   *\n   * Called on pointer down and up because the value is set based\n   * on the inactive width instead of the active width.\n   */\n  private _handleValueCorrection(event: PointerEvent): void {\n    // Don't update the UI with the current value! The value on pointerdown\n    // and pointerup is calculated in the split second before the input(s)\n    // resize. See _updateWidthInactive() and _updateWidthActive() for more\n    // details.\n    this._skipUIUpdate = true;\n\n    // Note that this function gets triggered before the actual value of the\n    // slider is updated. This means if we were to set the value here, it\n    // would immediately be overwritten. Using setTimeout ensures the setting\n    // of the value happens after the value has been updated by the\n    // pointerdown event.\n    setTimeout(() => {\n      this._skipUIUpdate = false;\n      this._fixValue(event);\n    }, 0);\n  }\n\n  /** Corrects the value of the slider based on the pointer event's position. */\n  _fixValue(event: PointerEvent): void {\n    const xPos = event.clientX - this._slider._cachedLeft;\n    const width = this._slider._cachedWidth;\n    const step = this._slider.step === 0 ? 1 : this._slider.step;\n    const numSteps = Math.floor((this._slider.max - this._slider.min) / step);\n    const percentage = this._slider._isRtl ? 1 - xPos / width : xPos / width;\n\n    // To ensure the percentage is rounded to the necessary number of decimals.\n    const fixedPercentage = Math.round(percentage * numSteps) / numSteps;\n\n    const impreciseValue = fixedPercentage * (this._slider.max - this._slider.min) + this._slider.min;\n    const value = Math.round(impreciseValue / step) * step;\n    const prevValue = this.value;\n\n    if (value === prevValue) {\n      // Because we prevented UI updates, if it turns out that the race\n      // condition didn't happen and the value is already correct, we\n      // have to apply the ui updates now.\n      this._slider._onValueChange(this);\n      this._slider.step > 0\n        ? this._updateThumbUIByValue()\n        : this._updateThumbUIByPointerEvent(event, { withAnimation: this._slider._hasAnimation });\n      return;\n    }\n\n    this.value = value;\n    this.valueChange.emit(this.value);\n    this._onChangeFn(this.value);\n    this._slider._onValueChange(this);\n    this._slider.step > 0\n      ? this._updateThumbUIByValue()\n      : this._updateThumbUIByPointerEvent(event, { withAnimation: this._slider._hasAnimation });\n  }\n\n  _onPointerMove(event: PointerEvent): void {\n    // Again, does nothing if a step is defined because\n    // we want the value to snap to the values on input.\n    if (!this._slider.step && this._isActive) {\n      this._updateThumbUIByPointerEvent(event);\n    }\n  }\n\n  _onPointerUp(): void {\n    if (this._isActive) {\n      this._isActive = false;\n      this.dragEnd.emit({ source: this, parent: this._slider, value: this.value });\n      setTimeout(() => this._updateWidthInactive());\n    }\n  }\n\n  _clamp(v: number): number {\n    return Math.max(Math.min(v, this._slider._cachedWidth), 0);\n  }\n\n  _calcTranslateXByValue(): number {\n    if (this._slider._isRtl) {\n      return (1 - this.percentage) * this._slider._cachedWidth;\n    }\n    return this.percentage * this._slider._cachedWidth;\n  }\n\n  _calcTranslateXByPointerEvent(event: PointerEvent): number {\n    return event.clientX - this._slider._cachedLeft;\n  }\n\n  /**\n   * Used to set the slider width to the correct\n   * dimensions while the user is dragging.\n   */\n  _updateWidthActive(): void {\n    this._hostElement.style.padding = `0 ${this._slider._inputPadding}px`;\n    this._hostElement.style.width = `calc(100% + ${this._slider._inputPadding}px)`;\n  }\n\n  /**\n   * Sets the slider input to disproportionate dimensions to allow for touch\n   * events to be captured on touch devices.\n   */\n  _updateWidthInactive(): void {\n    this._hostElement.style.padding = '0px';\n    this._hostElement.style.width = 'calc(100% + 48px)';\n    this._hostElement.style.left = '-24px';\n  }\n\n  _updateThumbUIByValue(options?: { withAnimation: boolean }): void {\n    this.translateX = this._clamp(this._calcTranslateXByValue());\n    this._updateThumbUI(options);\n  }\n\n  _updateThumbUIByPointerEvent(event: PointerEvent, options?: { withAnimation: boolean }): void {\n    this.translateX = this._clamp(this._calcTranslateXByPointerEvent(event));\n    this._updateThumbUI(options);\n  }\n\n  _updateThumbUI(options?: { withAnimation: boolean }) {\n    this._slider._setTransition(!!options?.withAnimation);\n    this._slider._onTranslateXChange(this);\n  }\n\n  /**\n   * Sets the input's value.\n   * @param value The new value of the input\n   * @docs-private\n   */\n  writeValue(value: any): void {\n    this.value = value;\n  }\n\n  /**\n   * Registers a callback to be invoked when the input's value changes from user input.\n   * @param fn The callback to register\n   * @docs-private\n   */\n  registerOnChange(fn: any): void {\n    this._onChangeFn = fn;\n  }\n\n  /**\n   * Registers a callback to be invoked when the input is blurred by the user.\n   * @param fn The callback to register\n   * @docs-private\n   */\n  registerOnTouched(fn: any): void {\n    this._onTouchedFn = fn;\n  }\n\n  /**\n   * Sets the disabled state of the slider.\n   * @param isDisabled The new disabled state\n   * @docs-private\n   */\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  focus(): void {\n    this._hostElement.focus();\n  }\n\n  blur(): void {\n    this._hostElement.blur();\n  }\n}\n","import { Component, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { MatSlider } from '@angular/material/slider';\nimport { MAT_SLIDER_THUMB, _MatSlider, _MatSliderThumb } from './slider-interface';\nimport { FormlyFieldSlider } from './slider.type';\n\n/**\n * @ignore\n */\n@Component({\n  selector: 'formly-field-mat-slider',\n  template: `\n    <mat-slider\n      [id]=\"id\"\n      [style.width]=\"'100%'\"\n      [formlyAttributes]=\"field\"\n      [tabIndex]=\"props.tabindex\"\n      [color]=\"props.color\"\n      [displayWith]=\"props.displayWith\"\n      [invert]=\"props.invert\"\n      [max]=\"props.max\"\n      [min]=\"props.min\"\n      [step]=\"props.step\"\n      [discrete]=\"props.thumbLabel || props.discrete\"\n      [showTickMarks]=\"props.showTickMarks\"\n      [step]=\"props.step\"\n      [tickInterval]=\"props.tickInterval\"\n      [valueText]=\"props.valueText\"\n      [vertical]=\"props.vertical\"\n      (input)=\"props.input && props.input(field, $event)\"\n      (change)=\"props.change && props.change(field, $event)\"\n    >\n      <input matSliderThumb [formControl]=\"formControl\" [formlyAttributes]=\"field\" />\n    </mat-slider>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormlyFieldMDCSlider extends FormlyFieldSlider {\n  @ViewChild(MAT_SLIDER_THUMB, { static: true }) sliderThumb: _MatSliderThumb;\n  @ViewChild(MatSlider, { static: true }) set mdcSlider(slider: _MatSlider) {\n    Object.defineProperty(slider, '_input', {\n      set: () => {},\n      get: () => this.sliderThumb,\n    });\n\n    const visualThumb = {\n      _hostElement: {\n        classList: {\n          add: () => {},\n          remove: () => {},\n        },\n      },\n    };\n\n    // workarround for \"ERROR TypeError: visualThumb is undefined\" when `discrete` is set to `true`\n    (slider as any)._thumbs = { first: visualThumb, last: visualThumb };\n  }\n\n  override onContainerClick(event: MouseEvent): void {\n    this.sliderThumb?._hostElement.focus();\n    super.onContainerClick(event);\n  }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';\nimport { VERSION } from '@angular/cdk';\n\nimport { MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport { FormlyFieldSlider as LegacyFormlyFieldSlider } from './slider.type';\nimport { FormlyFieldMDCSlider } from './slider-mdc.type';\nimport { MatSliderThumb } from './slider-input';\nconst FormlyFieldSlider = Number(VERSION.major) >= 15 ? FormlyFieldMDCSlider : LegacyFormlyFieldSlider;\n\n@NgModule({\n  declarations: [LegacyFormlyFieldSlider, FormlyFieldMDCSlider, MatSliderThumb],\n  imports: [\n    CommonModule,\n    MatCommonModule,\n    MatRippleModule,\n    ReactiveFormsModule,\n    MatSliderModule,\n    FormlyMatFormFieldModule,\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'slider',\n          component: FormlyFieldSlider,\n          wrappers: ['form-field'],\n        },\n      ],\n    }),\n  ],\n  schemas: [NO_ERRORS_SCHEMA],\n})\nexport class FormlyMatSliderModule {}\n","import { FormlyMatSliderModule } from './slider.module';\nimport { FormlyFieldSlider as LegacyFormlyFieldSlider, FormlySliderFieldConfig } from './slider.type';\nimport { FormlyFieldMDCSlider } from './slider-mdc.type';\n\nimport { VERSION } from '@angular/cdk';\n\nconst FormlyFieldSlider = Number(VERSION.major) >= 15 ? FormlyFieldMDCSlider : LegacyFormlyFieldSlider;\nexport { FormlyMatSliderModule, FormlyFieldSlider, FormlySliderFieldConfig };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["FormlyFieldSlider","i2","i3.MatSliderThumb","VERSION","LegacyFormlyFieldSlider","i1"],"mappings":"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"}