{"version":3,"file":"slider.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/slider/slider-interface.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/slider/slider-thumb.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/slider/slider-thumb.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/slider/slider.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/slider/slider.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/slider/slider-input.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/slider/slider-module.ts"],"sourcesContent":["/**\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.dev/license\n */\n\nimport {InjectionToken, ChangeDetectorRef, WritableSignal, Signal} from '@angular/core';\nimport {MatRipple, RippleGlobalOptions} from '../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 enum _MatThumb {\n  START = 1,\n  END = 2,\n}\n\n/** Tick mark enum, for discrete sliders. */\nexport enum _MatTickMark {\n  ACTIVE = 0,\n  INACTIVE = 1,\n}\n\n/**\n * Injection token that can be used for a `MatSlider` to provide itself as a\n * parent to the `MatSliderThumb` and `MatSliderRangeThumb`.\n * Used primarily to avoid circular imports.\n * @docs-private\n */\nexport const MAT_SLIDER = new InjectionToken<_MatSlider>('_MatSlider');\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 * Injection token that can be used to query for a `MatSliderRangeThumb`.\n * Used primarily to avoid circular imports.\n * @docs-private\n */\nexport const MAT_SLIDER_RANGE_THUMB = new InjectionToken<{}>('_MatSliderRangeThumb');\n\n/**\n * Injection token that can be used to query for a `MatSliderVisualThumb`.\n * Used primarily to avoid circular imports.\n * @docs-private\n */\nexport const MAT_SLIDER_VISUAL_THUMB = new InjectionToken<{}>('_MatSliderVisualThumb');\n\n/** Represents a drag event emitted by the MatSlider component. */\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/**\n * A simple change event emitted by the MatSlider component.\n * @deprecated Use event bindings directly on the MatSliderThumbs for `change` and `input` events. See https://v17.material.angular.dev/guide/mdc-migration for information about migrating.\n * @breaking-change 17.0.0\n */\nexport class MatSliderChange {\n  /** The MatSliderThumb that was interacted with. */\n  source!: _MatSliderThumb;\n\n  /** The MatSlider that was interacted with. */\n  parent!: _MatSlider;\n\n  /** The new value of the source slider. */\n  value!: number;\n}\n\nexport interface _MatSlider {\n  /** Whether the given pointer event occurred within the bounds of the slider pointer's DOM Rect. */\n  _isCursorOnSliderThumb(event: PointerEvent, rect: DOMRect): boolean;\n\n  /** Gets the slider thumb input of the given thumb position. */\n  _getInput(thumbPosition: _MatThumb): _MatSliderThumb | _MatSliderRangeThumb | undefined;\n\n  /** Gets the slider thumb HTML input element of the given thumb position. */\n  _getThumb(thumbPosition: _MatThumb): _MatSliderVisualThumb;\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: Signal<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  /** The radius of the visual slider's ripple. */\n  _rippleRadius: number;\n\n  /** The global configuration for `matRipple` instances. */\n  readonly _globalRippleOptions: RippleGlobalOptions | null;\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  /** Updates the scale on the active portion of the track. */\n  _updateTrackUI: (source: _MatSliderThumb) => void;\n\n  /** Used to set the transition duration for thumb and track animations. */\n  _setTransition: (withAnimation: boolean) => void;\n\n  _cdr: ChangeDetectorRef;\n}\n\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: WritableSignal<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\nexport interface _MatSliderRangeThumb extends _MatSliderThumb {\n  /** Whether this slider corresponds to the input on the left hand side. */\n  _isLeftThumb: boolean;\n\n  /**\n   * Gets the sibling MatSliderRangeThumb.\n   * Returns undefined if it is too early in Angular's life cycle.\n   */\n  getSibling: () => _MatSliderRangeThumb | undefined;\n\n  /** Used to cache whether this slider input corresponds to the visual left thumb. */\n  _setIsLeftThumb: () => void;\n\n  /** Updates the input styles to control whether it is pinned to the start or end of the mat-slider. */\n  _updateStaticStyles: () => void;\n\n  /** Updates the min and max properties of this slider input according to it's sibling. */\n  _updateMinMax: () => void;\n}\n\nexport interface _MatSliderVisualThumb {\n  /** The MatRipple for this slider thumb. */\n  _ripple: MatRipple;\n\n  /** Whether the slider thumb is currently being pressed. */\n  _isActive: boolean;\n\n  /** The host native HTML input element. */\n  _hostElement: HTMLElement;\n\n  /** Shows the value indicator ui. */\n  _showValueIndicator: () => void;\n\n  /** Hides the value indicator ui. */\n  _hideValueIndicator: () => void;\n\n  /** Whether the slider visual thumb is currently showing any ripple. */\n  _isShowingAnyRipple: () => boolean;\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.dev/license\n */\n\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Input,\n  NgZone,\n  OnDestroy,\n  Renderer2,\n  ViewChild,\n  ViewEncapsulation,\n  inject,\n} from '@angular/core';\nimport {MatRipple, RippleAnimationConfig, RippleRef, RippleState} from '../core';\nimport {\n  _MatThumb,\n  _MatSlider,\n  _MatSliderThumb,\n  _MatSliderVisualThumb,\n  MAT_SLIDER,\n  MAT_SLIDER_VISUAL_THUMB,\n} from './slider-interface';\nimport {Platform} from '@angular/cdk/platform';\n\n/**\n * The visual slider thumb.\n *\n * Handles the slider thumb ripple states (hover, focus, and active),\n * and displaying the value tooltip on discrete sliders.\n * @docs-private\n */\n@Component({\n  selector: 'mat-slider-visual-thumb',\n  templateUrl: './slider-thumb.html',\n  styleUrl: 'slider-thumb.css',\n  host: {\n    'class': 'mdc-slider__thumb mat-mdc-slider-visual-thumb',\n  },\n  encapsulation: ViewEncapsulation.None,\n  providers: [{provide: MAT_SLIDER_VISUAL_THUMB, useExisting: MatSliderVisualThumb}],\n  imports: [MatRipple],\n})\nexport class MatSliderVisualThumb implements _MatSliderVisualThumb, AfterViewInit, OnDestroy {\n  readonly _cdr = inject(ChangeDetectorRef);\n  private readonly _ngZone = inject(NgZone);\n  private _slider = inject<_MatSlider>(MAT_SLIDER);\n  private _renderer = inject(Renderer2);\n  private _listenerCleanups: (() => void)[] | undefined;\n\n  /** Whether the slider displays a numeric value label upon pressing the thumb. */\n  @Input() discrete: boolean = false;\n\n  /** Indicates which slider thumb this input corresponds to. */\n  @Input() thumbPosition!: _MatThumb;\n\n  /** The display value of the slider thumb. */\n  @Input() valueIndicatorText!: string;\n\n  /** The MatRipple for this slider thumb. */\n  @ViewChild(MatRipple) readonly _ripple!: MatRipple;\n\n  /** The slider thumb knob. */\n  @ViewChild('knob') _knob!: ElementRef<HTMLElement>;\n\n  /** The slider thumb value indicator container. */\n  @ViewChild('valueIndicatorContainer')\n  _valueIndicatorContainer!: ElementRef<HTMLElement>;\n\n  /** The slider input corresponding to this slider thumb. */\n  private _sliderInput!: _MatSliderThumb;\n\n  /** The native html element of the slider input corresponding to this thumb. */\n  private _sliderInputEl: HTMLInputElement | undefined;\n\n  /** The RippleRef for the slider thumbs hover state. */\n  private _hoverRippleRef: RippleRef | undefined;\n\n  /** The RippleRef for the slider thumbs focus state. */\n  private _focusRippleRef: RippleRef | undefined;\n\n  /** The RippleRef for the slider thumbs active state. */\n  private _activeRippleRef: RippleRef | undefined;\n\n  /** Whether the slider thumb is currently being hovered. */\n  private _isHovered: boolean = false;\n\n  /** Whether the slider thumb is currently being pressed. */\n  _isActive = false;\n\n  /** Whether the value indicator tooltip is visible. */\n  _isValueIndicatorVisible: boolean = false;\n\n  /** The host native HTML input element. */\n  _hostElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n  private _platform = inject(Platform);\n\n  ngAfterViewInit() {\n    const sliderInput = this._slider._getInput(this.thumbPosition);\n\n    // No-op if the slider isn't configured properly. `MatSlider` will\n    // throw an error instructing the user how to set up the slider.\n    if (!sliderInput) {\n      return;\n    }\n\n    this._ripple.radius = 24;\n    this._sliderInput = sliderInput;\n    this._sliderInputEl = this._sliderInput._hostElement;\n\n    // These listeners don't update any data bindings so we bind them outside\n    // of the NgZone to prevent Angular from needlessly running change detection.\n    this._ngZone.runOutsideAngular(() => {\n      const input = this._sliderInputEl!;\n      const renderer = this._renderer;\n      this._listenerCleanups = [\n        renderer.listen(input, 'pointermove', this._onPointerMove),\n        renderer.listen(input, 'pointerdown', this._onDragStart),\n        renderer.listen(input, 'pointerup', this._onDragEnd),\n        renderer.listen(input, 'pointerleave', this._onMouseLeave),\n        renderer.listen(input, 'focus', this._onFocus),\n        renderer.listen(input, 'blur', this._onBlur),\n      ];\n    });\n  }\n\n  ngOnDestroy() {\n    this._listenerCleanups?.forEach(cleanup => cleanup());\n  }\n\n  private _onPointerMove = (event: PointerEvent): void => {\n    if (this._sliderInput._isFocused) {\n      return;\n    }\n\n    const rect = this._hostElement.getBoundingClientRect();\n    const isHovered = this._slider._isCursorOnSliderThumb(event, rect);\n    this._isHovered = isHovered;\n\n    if (isHovered) {\n      this._showHoverRipple();\n    } else {\n      this._hideRipple(this._hoverRippleRef);\n    }\n  };\n\n  private _onMouseLeave = (): void => {\n    this._isHovered = false;\n    this._hideRipple(this._hoverRippleRef);\n  };\n\n  private _onFocus = (): void => {\n    // We don't want to show the hover ripple on top of the focus ripple.\n    // Happen when the users cursor is over a thumb and then the user tabs to it.\n    this._hideRipple(this._hoverRippleRef);\n    this._showFocusRipple();\n    this._hostElement.classList.add('mdc-slider__thumb--focused');\n  };\n\n  private _onBlur = (): void => {\n    // Happens when the user tabs away while still dragging a thumb.\n    if (!this._isActive) {\n      this._hideRipple(this._focusRippleRef);\n    }\n    // Happens when the user tabs away from a thumb but their cursor is still over it.\n    if (this._isHovered) {\n      this._showHoverRipple();\n    }\n    this._hostElement.classList.remove('mdc-slider__thumb--focused');\n  };\n\n  private _onDragStart = (event: PointerEvent): void => {\n    if (event.button !== 0) {\n      return;\n    }\n    this._isActive = true;\n    this._showActiveRipple();\n  };\n\n  private _onDragEnd = (): void => {\n    this._isActive = false;\n    this._hideRipple(this._activeRippleRef);\n    // Happens when the user starts dragging a thumb, tabs away, and then stops dragging.\n    if (!this._sliderInput._isFocused) {\n      this._hideRipple(this._focusRippleRef);\n    }\n\n    // On Safari we need to immediately re-show the hover ripple because\n    // sliders do not retain focus from pointer events on that platform.\n    if (this._platform.SAFARI) {\n      this._showHoverRipple();\n    }\n  };\n\n  /** Handles displaying the hover ripple. */\n  private _showHoverRipple(): void {\n    if (!this._isShowingRipple(this._hoverRippleRef)) {\n      this._hoverRippleRef = this._showRipple({enterDuration: 0, exitDuration: 0});\n      this._hoverRippleRef?.element.classList.add('mat-mdc-slider-hover-ripple');\n    }\n  }\n\n  /** Handles displaying the focus ripple. */\n  private _showFocusRipple(): void {\n    // Show the focus ripple event if noop animations are enabled.\n    if (!this._isShowingRipple(this._focusRippleRef)) {\n      this._focusRippleRef = this._showRipple({enterDuration: 0, exitDuration: 0}, true);\n      this._focusRippleRef?.element.classList.add('mat-mdc-slider-focus-ripple');\n    }\n  }\n\n  /** Handles displaying the active ripple. */\n  private _showActiveRipple(): void {\n    if (!this._isShowingRipple(this._activeRippleRef)) {\n      this._activeRippleRef = this._showRipple({enterDuration: 225, exitDuration: 400});\n      this._activeRippleRef?.element.classList.add('mat-mdc-slider-active-ripple');\n    }\n  }\n\n  /** Whether the given rippleRef is currently fading in or visible. */\n  private _isShowingRipple(rippleRef?: RippleRef): boolean {\n    return rippleRef?.state === RippleState.FADING_IN || rippleRef?.state === RippleState.VISIBLE;\n  }\n\n  /** Manually launches the slider thumb ripple using the specified ripple animation config. */\n  private _showRipple(\n    animation: RippleAnimationConfig,\n    ignoreGlobalRippleConfig?: boolean,\n  ): RippleRef | undefined {\n    if (this._slider.disabled) {\n      return;\n    }\n    this._showValueIndicator();\n    if (this._slider._isRange) {\n      const sibling = this._slider._getThumb(\n        this.thumbPosition === _MatThumb.START ? _MatThumb.END : _MatThumb.START,\n      );\n      sibling._showValueIndicator();\n    }\n    if (this._slider._globalRippleOptions?.disabled && !ignoreGlobalRippleConfig) {\n      return;\n    }\n    return this._ripple.launch({\n      animation: this._slider._noopAnimations ? {enterDuration: 0, exitDuration: 0} : animation,\n      centered: true,\n      persistent: true,\n    });\n  }\n\n  /**\n   * Fades out the given ripple.\n   * Also hides the value indicator if no ripple is showing.\n   */\n  private _hideRipple(rippleRef?: RippleRef): void {\n    rippleRef?.fadeOut();\n\n    if (this._isShowingAnyRipple()) {\n      return;\n    }\n\n    if (!this._slider._isRange) {\n      this._hideValueIndicator();\n    }\n\n    const sibling = this._getSibling();\n    if (!sibling._isShowingAnyRipple()) {\n      this._hideValueIndicator();\n      sibling._hideValueIndicator();\n    }\n  }\n\n  /** Shows the value indicator ui. */\n  _showValueIndicator(): void {\n    this._hostElement.classList.add('mdc-slider__thumb--with-indicator');\n  }\n\n  /** Hides the value indicator ui. */\n  _hideValueIndicator(): void {\n    this._hostElement.classList.remove('mdc-slider__thumb--with-indicator');\n  }\n\n  _getSibling(): _MatSliderVisualThumb {\n    return this._slider._getThumb(\n      this.thumbPosition === _MatThumb.START ? _MatThumb.END : _MatThumb.START,\n    );\n  }\n\n  /** Gets the value indicator container's native HTML element. */\n  _getValueIndicatorContainer(): HTMLElement | undefined {\n    return this._valueIndicatorContainer?.nativeElement;\n  }\n\n  /** Gets the native HTML element of the slider thumb knob. */\n  _getKnob(): HTMLElement {\n    return this._knob.nativeElement;\n  }\n\n  _isShowingAnyRipple(): boolean {\n    return (\n      this._isShowingRipple(this._hoverRippleRef) ||\n      this._isShowingRipple(this._focusRippleRef) ||\n      this._isShowingRipple(this._activeRippleRef)\n    );\n  }\n}\n","@if (discrete) {\n  <div class=\"mdc-slider__value-indicator-container\" #valueIndicatorContainer>\n    <div class=\"mdc-slider__value-indicator\">\n      <span class=\"mdc-slider__value-indicator-text\">{{valueIndicatorText}}</span>\n    </div>\n  </div>\n}\n<div class=\"mdc-slider__thumb-knob\" #knob></div>\n<div matRipple class=\"mat-focus-indicator\" [matRippleDisabled]=\"true\"></div>\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.dev/license\n */\n\nimport {Directionality} from '@angular/cdk/bidi';\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  afterRenderEffect,\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  inject,\n  Input,\n  NgZone,\n  numberAttribute,\n  OnDestroy,\n  QueryList,\n  ViewChild,\n  ViewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  _animationsDisabled,\n  _StructuralStylesLoader,\n  MAT_RIPPLE_GLOBAL_OPTIONS,\n  RippleGlobalOptions,\n  ThemePalette,\n} from '../core';\nimport {\n  _MatThumb,\n  _MatTickMark,\n  _MatSlider,\n  _MatSliderRangeThumb,\n  _MatSliderThumb,\n  _MatSliderVisualThumb,\n  MAT_SLIDER_RANGE_THUMB,\n  MAT_SLIDER_THUMB,\n  MAT_SLIDER,\n  MAT_SLIDER_VISUAL_THUMB,\n} from './slider-interface';\nimport {MatSliderVisualThumb} from './slider-thumb';\nimport {_CdkPrivateStyleLoader} from '@angular/cdk/private';\n\n// TODO(wagnermaciel): maybe handle the following edge case:\n// 1. start dragging discrete slider\n// 2. tab to disable checkbox\n// 3. without ending drag, disable the slider\n\n/**\n * Allows users to select from a range of values by moving the slider thumb. It is similar in\n * behavior to the native `<input type=\"range\">` element.\n */\n@Component({\n  selector: 'mat-slider',\n  templateUrl: 'slider.html',\n  styleUrl: 'slider.css',\n  host: {\n    'class': 'mat-mdc-slider mdc-slider',\n    '[class]': '\"mat-\" + (color || \"primary\")',\n    '[class.mdc-slider--range]': '_isRange',\n    '[class.mdc-slider--disabled]': 'disabled',\n    '[class.mdc-slider--discrete]': 'discrete',\n    '[class.mdc-slider--tick-marks]': 'showTickMarks',\n    '[class._mat-animation-noopable]': '_noopAnimations',\n  },\n  exportAs: 'matSlider',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{provide: MAT_SLIDER, useExisting: MatSlider}],\n  imports: [MatSliderVisualThumb],\n})\nexport class MatSlider implements AfterViewInit, OnDestroy, _MatSlider {\n  readonly _ngZone = inject(NgZone);\n  readonly _cdr = inject(ChangeDetectorRef);\n  readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  readonly _dir = inject(Directionality, {optional: true});\n  readonly _globalRippleOptions = inject<RippleGlobalOptions>(MAT_RIPPLE_GLOBAL_OPTIONS, {\n    optional: true,\n  });\n\n  /** The active portion of the slider track. */\n  @ViewChild('trackActive') _trackActive!: ElementRef<HTMLElement>;\n\n  /** The slider thumb(s). */\n  @ViewChildren(MAT_SLIDER_VISUAL_THUMB) _thumbs!: QueryList<_MatSliderVisualThumb>;\n\n  /** The sliders hidden range input(s). */\n  @ContentChild(MAT_SLIDER_THUMB) _input!: _MatSliderThumb;\n\n  /** The sliders hidden range input(s). */\n  @ContentChildren(MAT_SLIDER_RANGE_THUMB, {descendants: false})\n  _inputs!: QueryList<_MatSliderRangeThumb>;\n\n  /** Whether the slider is disabled. */\n  @Input({transform: booleanAttribute})\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(v: boolean) {\n    this._disabled = v;\n    const endInput = this._getInput(_MatThumb.END);\n    const startInput = this._getInput(_MatThumb.START);\n\n    if (endInput) {\n      endInput.disabled = this._disabled;\n    }\n    if (startInput) {\n      startInput.disabled = this._disabled;\n    }\n  }\n  private _disabled: boolean = false;\n\n  /** Whether the slider displays a numeric value label upon pressing the thumb. */\n  @Input({transform: booleanAttribute})\n  get discrete(): boolean {\n    return this._discrete;\n  }\n  set discrete(v: boolean) {\n    this._discrete = v;\n    this._updateValueIndicatorUIs();\n  }\n  private _discrete: boolean = false;\n\n  /** Whether the slider displays tick marks along the slider track. */\n  @Input({transform: booleanAttribute})\n  get showTickMarks(): boolean {\n    return this._showTickMarks;\n  }\n  set showTickMarks(value: boolean) {\n    this._showTickMarks = value;\n\n    if (this._hasViewInitialized) {\n      this._updateTickMarkUI();\n      this._updateTickMarkTrackUI();\n    }\n  }\n  private _showTickMarks: boolean = false;\n\n  /** The minimum value that the slider can have. */\n  @Input({transform: numberAttribute})\n  get min(): number {\n    return this._min;\n  }\n  set min(v: number) {\n    const min = v === undefined || v === null || isNaN(v) ? this._min : v;\n    if (this._min !== min) {\n      this._updateMin(min);\n    }\n  }\n  private _min: number = 0;\n\n  /**\n   * Theme color of the slider. This API is supported in M2 themes only, it\n   * has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/slider/styling.\n   *\n   * For information on applying color variants in M3, see\n   * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n   */\n  @Input()\n  color: ThemePalette;\n\n  /** Whether ripples are disabled in the slider. */\n  @Input({transform: booleanAttribute})\n  disableRipple: boolean = false;\n\n  private _updateMin(min: number): void {\n    const prevMin = this._min;\n    this._min = min;\n    this._isRange ? this._updateMinRange({old: prevMin, new: min}) : this._updateMinNonRange(min);\n    this._onMinMaxOrStepChange();\n  }\n\n  private _updateMinRange(min: {old: number; new: number}): void {\n    const endInput = this._getInput(_MatThumb.END) as _MatSliderRangeThumb;\n    const startInput = this._getInput(_MatThumb.START) as _MatSliderRangeThumb;\n\n    const oldEndValue = endInput.value;\n    const oldStartValue = startInput.value;\n\n    startInput.min = min.new;\n    endInput.min = Math.max(min.new, startInput.value);\n    startInput.max = Math.min(endInput.max, endInput.value);\n\n    startInput._updateWidthInactive();\n    endInput._updateWidthInactive();\n\n    min.new < min.old\n      ? this._onTranslateXChangeBySideEffect(endInput, startInput)\n      : this._onTranslateXChangeBySideEffect(startInput, endInput);\n\n    if (oldEndValue !== endInput.value) {\n      this._onValueChange(endInput);\n    }\n\n    if (oldStartValue !== startInput.value) {\n      this._onValueChange(startInput);\n    }\n  }\n\n  private _updateMinNonRange(min: number): void {\n    const input = this._getInput(_MatThumb.END);\n    if (input) {\n      const oldValue = input.value;\n\n      input.min = min;\n      input._updateThumbUIByValue();\n      this._updateTrackUI(input);\n\n      if (oldValue !== input.value) {\n        this._onValueChange(input);\n      }\n    }\n  }\n\n  /** The maximum value that the slider can have. */\n  @Input({transform: numberAttribute})\n  get max(): number {\n    return this._max;\n  }\n  set max(v: number) {\n    const max = v === undefined || v === null || isNaN(v) ? this._max : v;\n    if (this._max !== max) {\n      this._updateMax(max);\n    }\n  }\n  private _max: number = 100;\n\n  private _updateMax(max: number): void {\n    const prevMax = this._max;\n    this._max = max;\n    this._isRange ? this._updateMaxRange({old: prevMax, new: max}) : this._updateMaxNonRange(max);\n    this._onMinMaxOrStepChange();\n  }\n\n  private _updateMaxRange(max: {old: number; new: number}): void {\n    const endInput = this._getInput(_MatThumb.END) as _MatSliderRangeThumb;\n    const startInput = this._getInput(_MatThumb.START) as _MatSliderRangeThumb;\n\n    const oldEndValue = endInput.value;\n    const oldStartValue = startInput.value;\n\n    endInput.max = max.new;\n    startInput.max = Math.min(max.new, endInput.value);\n    endInput.min = startInput.value;\n\n    endInput._updateWidthInactive();\n    startInput._updateWidthInactive();\n\n    max.new > max.old\n      ? this._onTranslateXChangeBySideEffect(startInput, endInput)\n      : this._onTranslateXChangeBySideEffect(endInput, startInput);\n\n    if (oldEndValue !== endInput.value) {\n      this._onValueChange(endInput);\n    }\n\n    if (oldStartValue !== startInput.value) {\n      this._onValueChange(startInput);\n    }\n  }\n\n  private _updateMaxNonRange(max: number): void {\n    const input = this._getInput(_MatThumb.END);\n    if (input) {\n      const oldValue = input.value;\n\n      input.max = max;\n      input._updateThumbUIByValue();\n      this._updateTrackUI(input);\n\n      if (oldValue !== input.value) {\n        this._onValueChange(input);\n      }\n    }\n  }\n\n  /** The values at which the thumb will snap. */\n  @Input({transform: numberAttribute})\n  get step(): number {\n    return this._step;\n  }\n  set step(v: number) {\n    const step = isNaN(v) ? this._step : v;\n    if (this._step !== step) {\n      this._updateStep(step);\n    }\n  }\n  private _step: number = 1;\n\n  private _updateStep(step: number): void {\n    this._step = step;\n    this._isRange ? this._updateStepRange() : this._updateStepNonRange();\n    this._onMinMaxOrStepChange();\n  }\n\n  private _updateStepRange(): void {\n    const endInput = this._getInput(_MatThumb.END) as _MatSliderRangeThumb;\n    const startInput = this._getInput(_MatThumb.START) as _MatSliderRangeThumb;\n\n    const oldEndValue = endInput.value;\n    const oldStartValue = startInput.value;\n\n    const prevStartValue = startInput.value;\n\n    endInput.min = this._min;\n    startInput.max = this._max;\n\n    endInput.step = this._step;\n    startInput.step = this._step;\n\n    if (this._platform.SAFARI) {\n      endInput.value = endInput.value;\n      startInput.value = startInput.value;\n    }\n\n    endInput.min = Math.max(this._min, startInput.value);\n    startInput.max = Math.min(this._max, endInput.value);\n\n    startInput._updateWidthInactive();\n    endInput._updateWidthInactive();\n\n    endInput.value < prevStartValue\n      ? this._onTranslateXChangeBySideEffect(startInput, endInput)\n      : this._onTranslateXChangeBySideEffect(endInput, startInput);\n\n    if (oldEndValue !== endInput.value) {\n      this._onValueChange(endInput);\n    }\n\n    if (oldStartValue !== startInput.value) {\n      this._onValueChange(startInput);\n    }\n  }\n\n  private _updateStepNonRange(): void {\n    const input = this._getInput(_MatThumb.END);\n    if (input) {\n      const oldValue = input.value;\n\n      input.step = this._step;\n      if (this._platform.SAFARI) {\n        input.value = input.value;\n      }\n\n      input._updateThumbUIByValue();\n\n      if (oldValue !== input.value) {\n        this._onValueChange(input);\n      }\n    }\n  }\n\n  /**\n   * Function that will be used to format the value before it is displayed\n   * in the thumb label. Can be used to format very large number in order\n   * for them to fit into the slider thumb.\n   */\n  @Input() displayWith: (value: number) => string = (value: number) => `${value}`;\n\n  /** Used to keep track of & render the active & inactive tick marks on the slider track. */\n  _tickMarks!: _MatTickMark[];\n\n  /** Whether animations have been disabled. */\n  _noopAnimations = _animationsDisabled();\n\n  /** Observer used to monitor size changes in the slider. */\n  private _resizeObserver: ResizeObserver | null = null;\n\n  // Stored dimensions to avoid calling getBoundingClientRect redundantly.\n\n  _cachedWidth!: number;\n  _cachedLeft!: number;\n\n  _rippleRadius: number = 24;\n\n  // The value indicator tooltip text for the visual slider thumb(s).\n\n  /** @docs-private */\n  protected startValueIndicatorText: string = '';\n\n  /** @docs-private */\n  protected endValueIndicatorText: string = '';\n\n  // Used to control the translateX of the visual slider thumb(s).\n\n  _endThumbTransform!: string;\n  _startThumbTransform!: string;\n\n  _isRange: boolean = false;\n\n  /** Whether the slider is rtl. */\n  _isRtl = computed(() => this._dir?.valueSignal() === 'rtl');\n\n  private _hasViewInitialized: boolean = false;\n\n  /**\n   * The width of the tick mark track.\n   * The tick mark track width is different from full track width\n   */\n  _tickMarkTrackWidth: number = 0;\n\n  _hasAnimation: boolean = false;\n\n  private _resizeTimer: null | ReturnType<typeof setTimeout> = null;\n\n  private _platform = inject(Platform);\n\n  constructor() {\n    inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n\n    let prevIsRtl = this._isRtl();\n\n    afterRenderEffect(() => {\n      const isRtl = this._isRtl();\n\n      // The diffing is normally handled by the signal, but we don't want to\n      // fire on the first run, because it'll trigger unnecessary measurements.\n      if (isRtl !== prevIsRtl) {\n        prevIsRtl = isRtl;\n        this._isRange ? this._onDirChangeRange() : this._onDirChangeNonRange();\n        this._updateTickMarkUI();\n      }\n    });\n  }\n\n  /** The radius of the native slider's knob. AFAIK there is no way to avoid hardcoding this. */\n  _knobRadius: number = 8;\n\n  _inputPadding!: number;\n\n  ngAfterViewInit(): void {\n    if (this._platform.isBrowser) {\n      this._updateDimensions();\n    }\n\n    const eInput = this._getInput(_MatThumb.END);\n    const sInput = this._getInput(_MatThumb.START);\n    this._isRange = !!eInput && !!sInput;\n    this._cdr.detectChanges();\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      _validateInputs(\n        this._isRange,\n        this._getInput(_MatThumb.END),\n        this._getInput(_MatThumb.START),\n      );\n    }\n\n    const thumb = this._getThumb(_MatThumb.END);\n    this._rippleRadius = thumb._ripple.radius;\n    this._inputPadding = this._rippleRadius - this._knobRadius;\n\n    this._isRange\n      ? this._initUIRange(eInput as _MatSliderRangeThumb, sInput as _MatSliderRangeThumb)\n      : this._initUINonRange(eInput!);\n\n    this._updateTrackUI(eInput!);\n    this._updateTickMarkUI();\n    this._updateTickMarkTrackUI();\n\n    this._observeHostResize();\n    this._cdr.detectChanges();\n  }\n\n  private _initUINonRange(eInput: _MatSliderThumb): void {\n    eInput.initProps();\n    eInput.initUI();\n\n    this._updateValueIndicatorUI(eInput);\n\n    this._hasViewInitialized = true;\n    eInput._updateThumbUIByValue();\n  }\n\n  private _initUIRange(eInput: _MatSliderRangeThumb, sInput: _MatSliderRangeThumb): void {\n    eInput.initProps();\n    eInput.initUI();\n\n    sInput.initProps();\n    sInput.initUI();\n\n    eInput._updateMinMax();\n    sInput._updateMinMax();\n\n    eInput._updateStaticStyles();\n    sInput._updateStaticStyles();\n\n    this._updateValueIndicatorUIs();\n\n    this._hasViewInitialized = true;\n\n    eInput._updateThumbUIByValue();\n    sInput._updateThumbUIByValue();\n  }\n\n  ngOnDestroy(): void {\n    this._resizeObserver?.disconnect();\n    this._resizeObserver = null;\n  }\n\n  private _onDirChangeRange(): void {\n    const endInput = this._getInput(_MatThumb.END) as _MatSliderRangeThumb;\n    const startInput = this._getInput(_MatThumb.START) as _MatSliderRangeThumb;\n\n    endInput._setIsLeftThumb();\n    startInput._setIsLeftThumb();\n\n    endInput.translateX = endInput._calcTranslateXByValue();\n    startInput.translateX = startInput._calcTranslateXByValue();\n\n    endInput._updateStaticStyles();\n    startInput._updateStaticStyles();\n\n    endInput._updateWidthInactive();\n    startInput._updateWidthInactive();\n\n    endInput._updateThumbUIByValue();\n    startInput._updateThumbUIByValue();\n  }\n\n  private _onDirChangeNonRange(): void {\n    const input = this._getInput(_MatThumb.END)!;\n    input._updateThumbUIByValue();\n  }\n\n  /** Starts observing and updating the slider if the host changes its size. */\n  private _observeHostResize() {\n    if (typeof ResizeObserver === 'undefined' || !ResizeObserver) {\n      return;\n    }\n\n    this._ngZone.runOutsideAngular(() => {\n      this._resizeObserver = new ResizeObserver(() => {\n        if (this._isActive()) {\n          return;\n        }\n        if (this._resizeTimer) {\n          clearTimeout(this._resizeTimer);\n        }\n        this._onResize();\n      });\n      this._resizeObserver.observe(this._elementRef.nativeElement);\n    });\n  }\n\n  /** Whether any of the thumbs are currently active. */\n  private _isActive(): boolean {\n    return this._getThumb(_MatThumb.START)._isActive || this._getThumb(_MatThumb.END)._isActive;\n  }\n\n  private _getValue(thumbPosition: _MatThumb = _MatThumb.END): number {\n    const input = this._getInput(thumbPosition);\n    if (!input) {\n      return this.min;\n    }\n    return input.value;\n  }\n\n  private _skipUpdate(): boolean {\n    return !!(\n      this._getInput(_MatThumb.START)?._skipUIUpdate || this._getInput(_MatThumb.END)?._skipUIUpdate\n    );\n  }\n\n  /** Stores the slider dimensions. */\n  _updateDimensions(): void {\n    this._cachedWidth = this._elementRef.nativeElement.offsetWidth;\n    this._cachedLeft = this._elementRef.nativeElement.getBoundingClientRect().left;\n  }\n\n  /** Sets the styles for the active portion of the track. */\n  _setTrackActiveStyles(styles: {\n    left: string;\n    right: string;\n    transform: string;\n    transformOrigin: string;\n  }): void {\n    const trackStyle = this._trackActive.nativeElement.style;\n\n    trackStyle.left = styles.left;\n    trackStyle.right = styles.right;\n    trackStyle.transformOrigin = styles.transformOrigin;\n    trackStyle.transform = styles.transform;\n  }\n\n  /** Returns the translateX positioning for a tick mark based on it's index. */\n  _calcTickMarkTransform(index: number): string {\n    // TODO(wagnermaciel): See if we can avoid doing this and just using flex to position these.\n    const offset = index * (this._tickMarkTrackWidth / (this._tickMarks.length - 1));\n    const translateX = this._isRtl() ? this._cachedWidth - 6 - offset : offset;\n    return `translateX(${translateX}px)`;\n  }\n\n  // Handlers for updating the slider ui.\n\n  _onTranslateXChange(source: _MatSliderThumb): void {\n    if (!this._hasViewInitialized) {\n      return;\n    }\n\n    this._updateThumbUI(source);\n    this._updateTrackUI(source);\n    this._updateOverlappingThumbUI(source as _MatSliderRangeThumb);\n  }\n\n  _onTranslateXChangeBySideEffect(\n    input1: _MatSliderRangeThumb,\n    input2: _MatSliderRangeThumb,\n  ): void {\n    if (!this._hasViewInitialized) {\n      return;\n    }\n\n    input1._updateThumbUIByValue();\n    input2._updateThumbUIByValue();\n  }\n\n  _onValueChange(source: _MatSliderThumb): void {\n    if (!this._hasViewInitialized) {\n      return;\n    }\n\n    this._updateValueIndicatorUI(source);\n    this._updateTickMarkUI();\n    this._cdr.detectChanges();\n  }\n\n  _onMinMaxOrStepChange(): void {\n    if (!this._hasViewInitialized) {\n      return;\n    }\n\n    this._updateTickMarkUI();\n    this._updateTickMarkTrackUI();\n    this._cdr.markForCheck();\n  }\n\n  _onResize(): void {\n    if (!this._hasViewInitialized) {\n      return;\n    }\n\n    this._updateDimensions();\n    if (this._isRange) {\n      const eInput = this._getInput(_MatThumb.END) as _MatSliderRangeThumb;\n      const sInput = this._getInput(_MatThumb.START) as _MatSliderRangeThumb;\n\n      eInput._updateThumbUIByValue();\n      sInput._updateThumbUIByValue();\n\n      eInput._updateStaticStyles();\n      sInput._updateStaticStyles();\n\n      eInput._updateMinMax();\n      sInput._updateMinMax();\n\n      eInput._updateWidthInactive();\n      sInput._updateWidthInactive();\n    } else {\n      const eInput = this._getInput(_MatThumb.END);\n      if (eInput) {\n        eInput._updateThumbUIByValue();\n      }\n    }\n\n    this._updateTickMarkUI();\n    this._updateTickMarkTrackUI();\n    this._cdr.detectChanges();\n  }\n\n  /** Whether or not the slider thumbs overlap. */\n  private _thumbsOverlap: boolean = false;\n\n  /** Returns true if the slider knobs are overlapping one another. */\n  private _areThumbsOverlapping(): boolean {\n    const startInput = this._getInput(_MatThumb.START);\n    const endInput = this._getInput(_MatThumb.END);\n    if (!startInput || !endInput) {\n      return false;\n    }\n    return endInput.translateX - startInput.translateX < 20;\n  }\n\n  /**\n   * Updates the class names of overlapping slider thumbs so\n   * that the current active thumb is styled to be on \"top\".\n   */\n  private _updateOverlappingThumbClassNames(source: _MatSliderRangeThumb): void {\n    const sibling = source.getSibling()!;\n    const sourceThumb = this._getThumb(source.thumbPosition);\n    const siblingThumb = this._getThumb(sibling.thumbPosition);\n    siblingThumb._hostElement.classList.remove('mdc-slider__thumb--top');\n    sourceThumb._hostElement.classList.toggle('mdc-slider__thumb--top', this._thumbsOverlap);\n  }\n\n  /** Updates the UI of slider thumbs when they begin or stop overlapping. */\n  private _updateOverlappingThumbUI(source: _MatSliderRangeThumb): void {\n    if (!this._isRange || this._skipUpdate()) {\n      return;\n    }\n    if (this._thumbsOverlap !== this._areThumbsOverlapping()) {\n      this._thumbsOverlap = !this._thumbsOverlap;\n      this._updateOverlappingThumbClassNames(source);\n    }\n  }\n\n  // _MatThumb styles update conditions\n  //\n  // 1. TranslateX, resize, or dir change\n  //    - Reason: The thumb styles need to be updated according to the new translateX.\n  // 2. Min, max, or step\n  //    - Reason: The value may have silently changed.\n\n  /** Updates the translateX of the given thumb. */\n  _updateThumbUI(source: _MatSliderThumb) {\n    if (this._skipUpdate()) {\n      return;\n    }\n    const thumb = this._getThumb(\n      source.thumbPosition === _MatThumb.END ? _MatThumb.END : _MatThumb.START,\n    )!;\n    thumb._hostElement.style.transform = `translateX(${source.translateX}px)`;\n  }\n\n  // Value indicator text update conditions\n  //\n  // 1. Value\n  //    - Reason: The value displayed needs to be updated.\n  // 2. Min, max, or step\n  //    - Reason: The value may have silently changed.\n\n  /** Updates the value indicator tooltip ui for the given thumb. */\n  _updateValueIndicatorUI(source: _MatSliderThumb): void {\n    if (this._skipUpdate()) {\n      return;\n    }\n\n    const valuetext = this.displayWith(source.value);\n\n    this._hasViewInitialized\n      ? source._valuetext.set(valuetext)\n      : source._hostElement.setAttribute('aria-valuetext', valuetext);\n\n    if (this.discrete) {\n      source.thumbPosition === _MatThumb.START\n        ? (this.startValueIndicatorText = valuetext)\n        : (this.endValueIndicatorText = valuetext);\n\n      const visualThumb = this._getThumb(source.thumbPosition);\n      valuetext.length < 3\n        ? visualThumb._hostElement.classList.add('mdc-slider__thumb--short-value')\n        : visualThumb._hostElement.classList.remove('mdc-slider__thumb--short-value');\n    }\n  }\n\n  /** Updates all value indicator UIs in the slider. */\n  private _updateValueIndicatorUIs(): void {\n    const eInput = this._getInput(_MatThumb.END);\n    const sInput = this._getInput(_MatThumb.START);\n\n    if (eInput) {\n      this._updateValueIndicatorUI(eInput);\n    }\n    if (sInput) {\n      this._updateValueIndicatorUI(sInput);\n    }\n  }\n\n  // Update Tick Mark Track Width\n  //\n  // 1. Min, max, or step\n  //    - Reason: The maximum reachable value may have changed.\n  //    - Side note: The maximum reachable value is different from the maximum value set by the\n  //      user. For example, a slider with [min: 5, max: 100, step: 10] would have a maximum\n  //      reachable value of 95.\n  // 2. Resize\n  //    - Reason: The position for the maximum reachable value needs to be recalculated.\n\n  /** Updates the width of the tick mark track. */\n  private _updateTickMarkTrackUI(): void {\n    if (!this.showTickMarks || this._skipUpdate()) {\n      return;\n    }\n\n    const step = this._step && this._step > 0 ? this._step : 1;\n    const maxValue = Math.floor(this.max / step) * step;\n    const percentage = (maxValue - this.min) / (this.max - this.min);\n    this._tickMarkTrackWidth = (this._cachedWidth - 6) * percentage;\n  }\n\n  // Track active update conditions\n  //\n  // 1. TranslateX\n  //    - Reason: The track active should line up with the new thumb position.\n  // 2. Min or max\n  //    - Reason #1: The 'active' percentage needs to be recalculated.\n  //    - Reason #2: The value may have silently changed.\n  // 3. Step\n  //    - Reason: The value may have silently changed causing the thumb(s) to shift.\n  // 4. Dir change\n  //    - Reason: The track active will need to be updated according to the new thumb position(s).\n  // 5. Resize\n  //    - Reason: The total width the 'active' tracks translateX is based on has changed.\n\n  /** Updates the scale on the active portion of the track. */\n  _updateTrackUI(source: _MatSliderThumb): void {\n    if (this._skipUpdate()) {\n      return;\n    }\n\n    this._isRange\n      ? this._updateTrackUIRange(source as _MatSliderRangeThumb)\n      : this._updateTrackUINonRange(source as _MatSliderThumb);\n  }\n\n  private _updateTrackUIRange(source: _MatSliderRangeThumb): void {\n    const sibling = source.getSibling();\n    if (!sibling || !this._cachedWidth) {\n      return;\n    }\n\n    const activePercentage = Math.abs(sibling.translateX - source.translateX) / this._cachedWidth;\n\n    if (source._isLeftThumb && this._cachedWidth) {\n      this._setTrackActiveStyles({\n        left: 'auto',\n        right: `${this._cachedWidth - sibling.translateX}px`,\n        transformOrigin: 'right',\n        transform: `scaleX(${activePercentage})`,\n      });\n    } else {\n      this._setTrackActiveStyles({\n        left: `${sibling.translateX}px`,\n        right: 'auto',\n        transformOrigin: 'left',\n        transform: `scaleX(${activePercentage})`,\n      });\n    }\n  }\n\n  private _updateTrackUINonRange(source: _MatSliderThumb): void {\n    this._isRtl()\n      ? this._setTrackActiveStyles({\n          left: 'auto',\n          right: '0px',\n          transformOrigin: 'right',\n          transform: `scaleX(${1 - source.fillPercentage})`,\n        })\n      : this._setTrackActiveStyles({\n          left: '0px',\n          right: 'auto',\n          transformOrigin: 'left',\n          transform: `scaleX(${source.fillPercentage})`,\n        });\n  }\n\n  // Tick mark update conditions\n  //\n  // 1. Value\n  //    - Reason: a tick mark which was once active might now be inactive or vice versa.\n  // 2. Min, max, or step\n  //    - Reason #1: the number of tick marks may have changed.\n  //    - Reason #2: The value may have silently changed.\n\n  /** Updates the dots along the slider track. */\n  _updateTickMarkUI(): void {\n    if (\n      !this.showTickMarks ||\n      this.step === undefined ||\n      this.min === undefined ||\n      this.max === undefined\n    ) {\n      return;\n    }\n    const step = this.step > 0 ? this.step : 1;\n    this._isRange ? this._updateTickMarkUIRange(step) : this._updateTickMarkUINonRange(step);\n  }\n\n  private _updateTickMarkUINonRange(step: number): void {\n    const value = this._getValue();\n    let numActive = Math.max(Math.round((value - this.min) / step), 0) + 1;\n    let numInactive = Math.max(Math.round((this.max - value) / step), 0) - 1;\n    this._isRtl() ? numActive++ : numInactive++;\n\n    this._tickMarks = Array(numActive)\n      .fill(_MatTickMark.ACTIVE)\n      .concat(Array(numInactive).fill(_MatTickMark.INACTIVE));\n  }\n\n  private _updateTickMarkUIRange(step: number): void {\n    const endValue = this._getValue();\n    const startValue = this._getValue(_MatThumb.START);\n\n    const numInactiveBeforeStartThumb = Math.max(Math.round((startValue - this.min) / step), 0);\n    const numActive = Math.max(Math.round((endValue - startValue) / step) + 1, 0);\n    const numInactiveAfterEndThumb = Math.max(Math.round((this.max - endValue) / step), 0);\n    this._tickMarks = Array(numInactiveBeforeStartThumb)\n      .fill(_MatTickMark.INACTIVE)\n      .concat(\n        Array(numActive).fill(_MatTickMark.ACTIVE),\n        Array(numInactiveAfterEndThumb).fill(_MatTickMark.INACTIVE),\n      );\n  }\n\n  /** Gets the slider thumb input of the given thumb position. */\n  _getInput(thumbPosition: _MatThumb): _MatSliderThumb | _MatSliderRangeThumb | undefined {\n    if (thumbPosition === _MatThumb.END && this._input) {\n      return this._input;\n    }\n    if (this._inputs?.length) {\n      return thumbPosition === _MatThumb.START ? this._inputs.first : this._inputs.last;\n    }\n    return;\n  }\n\n  /** Gets the slider thumb HTML input element of the given thumb position. */\n  _getThumb(thumbPosition: _MatThumb): _MatSliderVisualThumb {\n    return thumbPosition === _MatThumb.END ? this._thumbs?.last! : this._thumbs?.first!;\n  }\n\n  _setTransition(withAnimation: boolean): void {\n    this._hasAnimation = !this._platform.IOS && withAnimation && !this._noopAnimations;\n    this._elementRef.nativeElement.classList.toggle(\n      'mat-mdc-slider-with-animation',\n      this._hasAnimation,\n    );\n  }\n\n  /** Whether the given pointer event occurred within the bounds of the slider pointer's DOM Rect. */\n  _isCursorOnSliderThumb(event: PointerEvent, rect: DOMRect) {\n    const radius = rect.width / 2;\n    const centerX = rect.x + radius;\n    const centerY = rect.y + radius;\n    const dx = event.clientX - centerX;\n    const dy = event.clientY - centerY;\n    return Math.pow(dx, 2) + Math.pow(dy, 2) < Math.pow(radius, 2);\n  }\n}\n\n/** Ensures that there is not an invalid configuration for the slider thumb inputs. */\nfunction _validateInputs(\n  isRange: boolean,\n  endInputElement: _MatSliderThumb | _MatSliderRangeThumb | undefined,\n  startInputElement: _MatSliderThumb | undefined,\n): void {\n  const startValid =\n    !isRange || startInputElement?._hostElement.hasAttribute('matSliderStartThumb');\n  const endValid = endInputElement?._hostElement.hasAttribute(\n    isRange ? 'matSliderEndThumb' : 'matSliderThumb',\n  );\n\n  if (!startValid || !endValid) {\n    _throwInvalidInputConfigurationError();\n  }\n}\n\nfunction _throwInvalidInputConfigurationError(): void {\n  throw Error(`Invalid slider thumb input configuration!\n\n   Valid configurations are as follows:\n\n     <mat-slider>\n       <input matSliderThumb>\n     </mat-slider>\n\n     or\n\n     <mat-slider>\n       <input matSliderStartThumb>\n       <input matSliderEndThumb>\n     </mat-slider>\n   `);\n}\n","<!-- Inputs -->\n<ng-content></ng-content>\n\n<!-- Track -->\n<div class=\"mdc-slider__track\">\n  <div class=\"mdc-slider__track--inactive\"></div>\n  <div class=\"mdc-slider__track--active\">\n    <div #trackActive class=\"mdc-slider__track--active_fill\"></div>\n  </div>\n  @if (showTickMarks) {\n    <div class=\"mdc-slider__tick-marks\" #tickMarkContainer>\n      @if (_cachedWidth) {\n        @for (tickMark of _tickMarks; track i; let i = $index) {\n          <div\n            [class]=\"tickMark === 0 ? 'mdc-slider__tick-mark--active' : 'mdc-slider__tick-mark--inactive'\"\n            [style.transform]=\"_calcTickMarkTransform(i)\"></div>\n        }\n      }\n    </div>\n  }\n</div>\n\n<!-- Thumbs -->\n@if (_isRange) {\n  <mat-slider-visual-thumb\n    [discrete]=\"discrete\"\n    [thumbPosition]=\"1\"\n    [valueIndicatorText]=\"startValueIndicatorText\">\n  </mat-slider-visual-thumb>\n}\n\n<mat-slider-visual-thumb\n  [discrete]=\"discrete\"\n  [thumbPosition]=\"2\"\n  [valueIndicatorText]=\"endValueIndicatorText\">\n</mat-slider-visual-thumb>\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.dev/license\n */\n\nimport {\n  booleanAttribute,\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  NgZone,\n  numberAttribute,\n  OnDestroy,\n  Output,\n  Renderer2,\n  signal,\n} from '@angular/core';\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {\n  _MatThumb,\n  MatSliderDragEvent,\n  _MatSlider,\n  _MatSliderRangeThumb,\n  _MatSliderThumb,\n  MAT_SLIDER_RANGE_THUMB,\n  MAT_SLIDER_THUMB,\n  MAT_SLIDER,\n} from './slider-interface';\nimport {Platform} from '@angular/cdk/platform';\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 * Provider that allows the range slider thumb to register as a ControlValueAccessor.\n * @docs-private\n */\nexport const MAT_SLIDER_RANGE_THUMB_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MatSliderRangeThumb),\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 */\n@Directive({\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: [\n    MAT_SLIDER_THUMB_VALUE_ACCESSOR,\n    {provide: MAT_SLIDER_THUMB, useExisting: MatSliderThumb},\n  ],\n})\nexport class MatSliderThumb implements _MatSliderThumb, OnDestroy, ControlValueAccessor {\n  readonly _ngZone = inject(NgZone);\n  readonly _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  readonly _cdr = inject(ChangeDetectorRef);\n  protected _slider = inject<_MatSlider>(MAT_SLIDER);\n  private _platform = inject(Platform);\n  private _listenerCleanups!: (() => void)[];\n\n  @Input({transform: numberAttribute})\n  get value(): number {\n    return numberAttribute(this._hostElement.value, 0);\n  }\n  set value(value: number) {\n    if (value === null) {\n      value = this._getDefaultValue();\n    }\n    value = isNaN(value) ? 0 : value;\n    const stringValue = value + '';\n    if (!this._hasSetInitialValue) {\n      this._initialValue = stringValue;\n      return;\n    }\n    if (this._isActive) {\n      return;\n    }\n    this._setValue(stringValue);\n  }\n\n  /**\n   * Handles programmatic value setting. This has been split out to\n   * allow the range thumb to override it and add additional necessary logic.\n   */\n  protected _setValue(value: string) {\n    this._hostElement.value = value;\n    this._updateThumbUIByValue();\n    this._slider._onValueChange(this);\n    this._cdr.detectChanges();\n    this._slider._cdr.markForCheck();\n  }\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> =\n    new EventEmitter<MatSliderDragEvent>();\n\n  /** Event emitted when the slider thumb stops being dragged. */\n  @Output() readonly dragEnd: EventEmitter<MatSliderDragEvent> =\n    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 = this._tickMarkOffset;\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 numberAttribute(this._hostElement.min, 0);\n  }\n  set min(v: number) {\n    this._hostElement.min = v + '';\n    this._cdr.detectChanges();\n  }\n\n  /** @docs-private */\n  get max(): number {\n    return numberAttribute(this._hostElement.max, 0);\n  }\n  set max(v: number) {\n    this._hostElement.max = v + '';\n    this._cdr.detectChanges();\n  }\n\n  get step(): number {\n    return numberAttribute(this._hostElement.step, 0);\n  }\n  set step(v: number) {\n    this._hostElement.step = v + '';\n    this._cdr.detectChanges();\n  }\n\n  /** @docs-private */\n  get disabled(): boolean {\n    return booleanAttribute(this._hostElement.disabled);\n  }\n  set disabled(v: boolean) {\n    this._hostElement.disabled = 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 = this._elementRef.nativeElement;\n\n  /** The aria-valuetext string representation of the input's value. */\n  _valuetext = signal('');\n\n  /** The radius of a native html slider's knob. */\n  _knobRadius: number = 8;\n\n  /** The distance in px from the start of the slider track to the first tick mark. */\n  _tickMarkOffset = 3;\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  protected _onChangeFn: ((value: any) => void) | undefined;\n\n  /** Callback called when the slider input has been touched. */\n  private _onTouchedFn: () => void = () => {};\n\n  /**\n   * Whether the NgModel has been initialized.\n   *\n   * This flag is used to ignore ghost null calls to\n   * writeValue which can break slider initialization.\n   *\n   * See https://github.com/angular/angular/issues/14988.\n   */\n  protected _isControlInitialized = false;\n\n  constructor() {\n    const renderer = inject(Renderer2);\n\n    this._ngZone.runOutsideAngular(() => {\n      this._listenerCleanups = [\n        renderer.listen(this._hostElement, 'pointerdown', this._onPointerDown.bind(this)),\n        renderer.listen(this._hostElement, 'pointermove', this._onPointerMove.bind(this)),\n        renderer.listen(this._hostElement, 'pointerup', this._onPointerUp.bind(this)),\n      ];\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._listenerCleanups.forEach(cleanup => cleanup());\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._slider._setTransition(false);\n    this._slider._updateTrackUI(this);\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: !this._isActive});\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    // On IOS, dragging only works if the pointer down happens on the\n    // slider thumb and the slider does not receive focus from pointer events.\n    if (this._platform.IOS) {\n      const isCursorOnSliderThumb = this._slider._isCursorOnSliderThumb(\n        event,\n        this._slider._getThumb(this.thumbPosition)._hostElement.getBoundingClientRect(),\n      );\n\n      this._isActive = isCursorOnSliderThumb;\n      this._updateWidthActive();\n      this._slider._updateDimensions();\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 =\n      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      if (this._platform.SAFARI) {\n        this._setIsFocused(false);\n      }\n      this.dragEnd.emit({source: this, parent: this._slider, value: this.value});\n\n      // This setTimeout is to prevent the pointerup from triggering a value\n      // change on the input based on the inactive width. It's not clear why\n      // but for some reason on IOS this race condition is even more common so\n      // the timeout needs to be increased.\n      setTimeout(() => this._updateWidthInactive(), this._platform.IOS ? 10 : 0);\n    }\n  }\n\n  _clamp(v: number): number {\n    const min = this._tickMarkOffset;\n    const max = this._slider._cachedWidth - this._tickMarkOffset;\n    return Math.max(Math.min(v, max), min);\n  }\n\n  _calcTranslateXByValue(): number {\n    if (this._slider._isRtl()) {\n      return (\n        (1 - this.percentage) * (this._slider._cachedWidth - this._tickMarkOffset * 2) +\n        this._tickMarkOffset\n      );\n    }\n    return (\n      this.percentage * (this._slider._cachedWidth - this._tickMarkOffset * 2) +\n      this._tickMarkOffset\n    );\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\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 = `0 ${this._slider._inputPadding}px`;\n    this._hostElement.style.width = `calc(100% + ${\n      this._slider._inputPadding - this._tickMarkOffset * 2\n    }px)`;\n    this._hostElement.style.left = `-${this._slider._rippleRadius - this._tickMarkOffset}px`;\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    if (this._isControlInitialized || value !== null) {\n      this.value = value;\n    }\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    this._isControlInitialized = true;\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\n@Directive({\n  selector: 'input[matSliderStartThumb], input[matSliderEndThumb]',\n  exportAs: 'matSliderRangeThumb',\n  providers: [\n    MAT_SLIDER_RANGE_THUMB_VALUE_ACCESSOR,\n    {provide: MAT_SLIDER_RANGE_THUMB, useExisting: MatSliderRangeThumb},\n  ],\n})\nexport class MatSliderRangeThumb extends MatSliderThumb implements _MatSliderRangeThumb {\n  override readonly _cdr = inject(ChangeDetectorRef);\n\n  /** @docs-private */\n  getSibling(): _MatSliderRangeThumb | undefined {\n    if (!this._sibling) {\n      this._sibling = this._slider._getInput(this._isEndThumb ? _MatThumb.START : _MatThumb.END) as\n        MatSliderRangeThumb | undefined;\n    }\n    return this._sibling;\n  }\n  private _sibling: MatSliderRangeThumb | undefined;\n\n  /**\n   * Returns the minimum translateX position allowed for this slider input's visual thumb.\n   * @docs-private\n   */\n  getMinPos(): number {\n    const sibling = this.getSibling();\n    if (!this._isLeftThumb && sibling) {\n      return sibling.translateX;\n    }\n    return this._tickMarkOffset;\n  }\n\n  /**\n   * Returns the maximum translateX position allowed for this slider input's visual thumb.\n   * @docs-private\n   */\n  getMaxPos(): number {\n    const sibling = this.getSibling();\n    if (this._isLeftThumb && sibling) {\n      return sibling.translateX;\n    }\n    return this._slider._cachedWidth - this._tickMarkOffset;\n  }\n\n  _setIsLeftThumb(): void {\n    this._isLeftThumb =\n      (this._isEndThumb && this._slider._isRtl()) || (!this._isEndThumb && !this._slider._isRtl());\n  }\n\n  /** Whether this slider corresponds to the input on the left hand side. */\n  _isLeftThumb = false;\n\n  /** Whether this slider corresponds to the input with greater value. */\n  _isEndThumb = false;\n\n  constructor() {\n    super();\n\n    this._isEndThumb = this._hostElement.hasAttribute('matSliderEndThumb');\n    this._setIsLeftThumb();\n    this.thumbPosition = this._isEndThumb ? _MatThumb.END : _MatThumb.START;\n  }\n\n  override _getDefaultValue(): number {\n    return this._isEndThumb && this._slider._isRange ? this.max : this.min;\n  }\n\n  override _onInput(): void {\n    super._onInput();\n    this._updateSibling();\n    if (!this._isActive) {\n      this._updateWidthInactive();\n    }\n  }\n\n  override _onNgControlValueChange(): void {\n    super._onNgControlValueChange();\n    this.getSibling()?._updateMinMax();\n  }\n\n  override _onPointerDown(event: PointerEvent): void {\n    if (this.disabled || event.button !== 0) {\n      return;\n    }\n    if (this._sibling) {\n      this._sibling._updateWidthActive();\n      this._sibling._hostElement.classList.add('mat-mdc-slider-input-no-pointer-events');\n    }\n    super._onPointerDown(event);\n  }\n\n  override _onPointerUp(): void {\n    super._onPointerUp();\n    if (this._sibling) {\n      setTimeout(() => {\n        this._sibling!._updateWidthInactive();\n        this._sibling!._hostElement.classList.remove('mat-mdc-slider-input-no-pointer-events');\n      });\n    }\n  }\n\n  override _onPointerMove(event: PointerEvent): void {\n    super._onPointerMove(event);\n    if (!this._slider.step && this._isActive) {\n      this._updateSibling();\n    }\n  }\n\n  override _fixValue(event: PointerEvent): void {\n    super._fixValue(event);\n    this._sibling?._updateMinMax();\n  }\n\n  override _clamp(v: number): number {\n    return Math.max(Math.min(v, this.getMaxPos()), this.getMinPos());\n  }\n\n  _updateMinMax(): void {\n    const sibling = this.getSibling();\n    if (!sibling) {\n      return;\n    }\n    if (this._isEndThumb) {\n      this.min = Math.max(this._slider.min, sibling.value);\n      this.max = this._slider.max;\n    } else {\n      this.min = this._slider.min;\n      this.max = Math.min(this._slider.max, sibling.value);\n    }\n  }\n\n  override _updateWidthActive(): void {\n    const minWidth = this._slider._rippleRadius * 2 - this._slider._inputPadding * 2;\n    const maxWidth =\n      this._slider._cachedWidth + this._slider._inputPadding - minWidth - this._tickMarkOffset * 2;\n    const percentage =\n      this._slider.min < this._slider.max\n        ? (this.max - this.min) / (this._slider.max - this._slider.min)\n        : 1;\n    const width = maxWidth * percentage + minWidth;\n    this._hostElement.style.width = `${width}px`;\n    this._hostElement.style.padding = `0 ${this._slider._inputPadding}px`;\n  }\n\n  override _updateWidthInactive(): void {\n    const sibling = this.getSibling();\n    if (!sibling) {\n      return;\n    }\n    const maxWidth = this._slider._cachedWidth - this._tickMarkOffset * 2;\n    const midValue = this._isEndThumb\n      ? this.value - (this.value - sibling.value) / 2\n      : this.value + (sibling.value - this.value) / 2;\n\n    const _percentage = this._isEndThumb\n      ? (this.max - midValue) / (this._slider.max - this._slider.min)\n      : (midValue - this.min) / (this._slider.max - this._slider.min);\n\n    const percentage = this._slider.min < this._slider.max ? _percentage : 1;\n\n    // Extend the native input width by the radius of the ripple\n    let ripplePadding = this._slider._rippleRadius;\n\n    // If one of the inputs is maximally sized (the value of both thumbs is\n    // equal to the min or max), make that input take up all of the width and\n    // make the other unselectable.\n    if (percentage === 1) {\n      ripplePadding = 48;\n    } else if (percentage === 0) {\n      ripplePadding = 0;\n    }\n\n    const width = maxWidth * percentage + ripplePadding;\n    this._hostElement.style.width = `${width}px`;\n    this._hostElement.style.padding = '0px';\n\n    if (this._isLeftThumb) {\n      this._hostElement.style.left = `-${this._slider._rippleRadius - this._tickMarkOffset}px`;\n      this._hostElement.style.right = 'auto';\n    } else {\n      this._hostElement.style.left = 'auto';\n      this._hostElement.style.right = `-${this._slider._rippleRadius - this._tickMarkOffset}px`;\n    }\n  }\n\n  _updateStaticStyles(): void {\n    this._hostElement.classList.toggle('mat-slider__right-input', !this._isLeftThumb);\n  }\n\n  private _updateSibling(): void {\n    const sibling = this.getSibling();\n    if (!sibling) {\n      return;\n    }\n    sibling._updateMinMax();\n    if (this._isActive) {\n      sibling._updateWidthActive();\n    } else {\n      sibling._updateWidthInactive();\n    }\n  }\n\n  /**\n   * Sets the input's value.\n   * @param value The new value of the input\n   * @docs-private\n   */\n  override writeValue(value: any): void {\n    if (this._isControlInitialized || value !== null) {\n      this.value = value;\n      this._updateWidthInactive();\n      this._updateSibling();\n    }\n  }\n\n  override _setValue(value: string) {\n    super._setValue(value);\n    this._updateWidthInactive();\n    this._updateSibling();\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.dev/license\n */\n\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {NgModule} from '@angular/core';\nimport {MatRippleModule} from '../core';\nimport {MatSlider} from './slider';\nimport {MatSliderVisualThumb} from './slider-thumb';\nimport {MatSliderThumb, MatSliderRangeThumb} from './slider-input';\n\n@NgModule({\n  imports: [MatRippleModule, MatSlider, MatSliderThumb, MatSliderRangeThumb, MatSliderVisualThumb],\n  exports: [MatSlider, MatSliderThumb, MatSliderRangeThumb, BidiModule],\n})\nexport class MatSliderModule {}\n"],"names":[],"mappings":"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"}