UNPKG

@alyle/ui

Version:

Minimal Design, a set of components for Angular

1 lines 91.2 kB
{"version":3,"file":"alyle-ui-slider.mjs","sources":["../../../lib/slider/tokens.ts","../../../lib/slider/util.ts","../../../lib/slider/tick.ts","../../../lib/slider/mark.ts","../../../lib/slider/mark.html","../../../lib/slider/slider.ts","../../../lib/slider/slider.html","../../../lib/slider/slider.module.ts","../../../lib/slider/alyle-ui-slider.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Used to provide a slider to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\nexport const LY_SLIDER = new InjectionToken<any>('LY_SLIDER');\n","export function гbetween(x: number, min: number, max: number) {\n  return x >= min && x <= max;\n}\n\nexport function гvalueToPercent(value: number, min: number, max: number) {\n  return ((value - min) * 100) / (max - min);\n}\n","import { Directive, Renderer2, ElementRef, Input, OnInit, OnDestroy, OnChanges, Inject } from '@angular/core';\nimport { гbetween, гvalueToPercent } from './util';\nimport { untilComponentDestroyed } from '@alyle/ui';\nimport { LY_SLIDER } from './tokens';\n\n@Directive({\n  selector: 'ly-tick',\n  standalone: false\n})\nexport class LyTick implements OnChanges, OnInit, OnDestroy {\n  /** @docs-private */\n  readonly classes = this._slider.classes;\n\n  private _tickActiveClass?: string | null;\n\n  @Input() value: number;\n\n  constructor(\n    private _renderer: Renderer2,\n    private _el: ElementRef,\n    @Inject(LY_SLIDER) public _slider?: any,\n  ) { }\n\n  ngOnChanges() {\n    this._updateTick();\n  }\n\n  ngOnInit() {\n    this._renderer.addClass(this._getHostElement(), this.classes.tick);\n    this._slider._changes.pipe(\n      untilComponentDestroyed(this)\n    ).subscribe(() => {\n      this._updateTick();\n    });\n  }\n\n  private _updateTick() {\n    const min = this._slider._minPercent;\n    const max = this._slider._maxPercent;\n\n    const className = this._slider.classes.tickActive;\n    const percent = гvalueToPercent(this.value, this._slider.min, this._slider.max);\n    const pos = this._slider._calculatePosition(percent);\n\n    if (гbetween(percent, min, max)) {\n      this._tickActiveClass = className;\n      this._renderer.addClass(this._el.nativeElement, className);\n    } else if (this._tickActiveClass) {\n      this._tickActiveClass = null;\n      this._renderer.removeClass(this._el.nativeElement, className);\n    }\n\n    this._renderer.setStyle(this._getHostElement(), 'bottom', null);\n    this._renderer.setStyle(this._getHostElement(), 'left', null);\n    this._renderer.setStyle(this._getHostElement(), 'right', null);\n    this._renderer.setStyle(this._getHostElement(), pos.style, pos.value);\n  }\n\n  ngOnDestroy() { }\n\n  _getHostElement() {\n    return this._el.nativeElement;\n  }\n\n}\n","import { untilComponentDestroyed } from '@alyle/ui';\nimport { Component, Input, Renderer2, ElementRef, ChangeDetectionStrategy, ViewChild, OnInit, OnDestroy, Inject } from '@angular/core';\nimport { гvalueToPercent, гbetween } from './util';\nimport { LyTick } from './tick';\nimport { LY_SLIDER } from './tokens';\n\n@Component({\n  selector: 'ly-mark',\n  templateUrl: 'mark.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false\n})\nexport class LyMark implements OnInit, OnDestroy {\n  /** @docs-private */\n  readonly classes = this._slider.classes;\n\n  private _markActiveClass?: string | null;\n\n  @ViewChild(LyTick, { static: true}) _tick: LyTick;\n\n  @Input() value: number;\n\n  constructor(\n    private _renderer: Renderer2,\n    private _el: ElementRef,\n    @Inject(LY_SLIDER) public _slider?: any,\n  ) {\n    _renderer.addClass(_el.nativeElement, _slider.classes.mark);\n  }\n\n  ngOnInit() {\n    this._renderer.insertBefore(this._slider._wrapper.nativeElement, this._tick._getHostElement(), this._slider._ticksRef.nativeElement);\n    this._slider._changes.pipe(untilComponentDestroyed(this)).subscribe(() => {\n      this._updateMark();\n    });\n    this._updateMark();\n  }\n\n  private _updateMark() {\n    const min = this._slider._minPercent;\n    const max = this._slider._maxPercent;\n\n    const className = this._slider.classes.markActive;\n    const percent = гvalueToPercent(this.value, this._slider.min, this._slider.max);\n    const pos = this._slider._calculatePosition(percent);\n\n    if (гbetween(percent, min, max)) {\n      this._markActiveClass = className;\n      this._renderer.addClass(this._el.nativeElement, className);\n    } else if (this._markActiveClass) {\n      this._markActiveClass = null;\n      this._renderer.removeClass(this._el.nativeElement, className);\n    }\n\n    this._renderer.setStyle(this._getHostElement(), 'bottom', null);\n    this._renderer.setStyle(this._getHostElement(), 'left', null);\n    this._renderer.setStyle(this._getHostElement(), 'right', null);\n    this._renderer.setStyle(this._getHostElement(), pos.style, pos.value);\n\n  }\n\n  ngOnDestroy() { }\n\n  private _getHostElement() {\n    return this._el.nativeElement;\n  }\n}\n\n","<ly-tick [value]=\"value\"></ly-tick>\n<ng-content></ng-content>","import {\n  Component,\n  ChangeDetectionStrategy,\n  ElementRef,\n  Renderer2,\n  Input,\n  OnInit,\n  forwardRef,\n  ChangeDetectorRef,\n  Output,\n  EventEmitter,\n  ViewChild,\n  OnChanges,\n  OnDestroy,\n  QueryList,\n  ViewChildren,\n  InjectionToken,\n  Inject,\n  Optional,\n  NgZone,\n  AfterViewInit} from '@angular/core';\nimport {\n  LyTheme2,\n  ThemeVariables,\n  LY_COMMON_STYLES,\n  untilComponentDestroyed,\n  Dir,\n  StyleCollection,\n  LyClasses,\n  StyleTemplate,\n  st2c,\n  ThemeRef,\n  StyleRenderer,\n  Style } from '@alyle/ui';\nimport { Color } from '@alyle/ui/color';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { DOCUMENT } from '@angular/common';\nimport { DOWN_ARROW, END, hasModifierKey, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { LY_SLIDER } from './tokens';\nimport { гvalueToPercent } from './util';\nimport { coerceBooleanProperty, BooleanInput, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\n\nconst activeEventOptions = normalizePassiveListenerOptions({passive: false});\n\nexport interface LySliderTheme {\n  /** Styles for Slider Component */\n  root?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)>\n    | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);\n  /**\n   * Disabled state\n   * @param classes Classes\n   * @param color color slider (deprecated)\n   */\n  disabled?: StyleCollection<((classes: LyClasses<typeof STYLES>, color: Color) => StyleTemplate)>\n  | ((classes: LyClasses<typeof STYLES>, color: Color) => StyleTemplate);\n  color?: StyleCollection<((classes: LyClasses<typeof STYLES>, color: Color, contrast: Color) => StyleTemplate)>\n  | ((classes: LyClasses<typeof STYLES>, color: Color, contrast: Color) => StyleTemplate);\n  appearance?: {\n    standard?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)>\n    | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);\n    md?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)>\n    | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);\n    [key: string]: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)>\n    | ((classes: LyClasses<typeof STYLES>) => StyleTemplate) | undefined;\n  };\n  size?: {\n    small?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)>\n    | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);\n    medium?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)>\n    | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);\n    [key: string]: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)>\n    | ((classes: LyClasses<typeof STYLES>) => StyleTemplate) | undefined;\n  };\n}\n\nexport interface LySliderDefaultOptions {\n  appearance?: string;\n}\n\nexport const LY_SLIDER_DEFAULT_OPTIONS =\n    new InjectionToken<LySliderDefaultOptions>('LY_SLIDER_DEFAULT_OPTIONS');\n\nexport interface LySliderVariables {\n  slider?: LySliderTheme;\n}\n\nexport const LY_SLIDER_CONTROL_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => LySlider),\n  multi: true\n};\n\nconst STYLE_PRIORITY = -2;\nexport const STYLES = (theme: ThemeVariables & LySliderVariables, ref: ThemeRef) => {\n  const __ = ref.selectorsOf(STYLES);\n  const { before, after } = theme;\n  const isRTL = theme.isRTL();\n  return {\n    $priority: STYLE_PRIORITY,\n    root: () => (_className: string) => `${_className}{display:inline-block;position:relative;box-sizing:border-box;}${st2c((LY_COMMON_STYLES.fill), `${_className} ${__.bg}`)}${_className} ${__.bg}{margin:auto;}${_className}${__.sliding}{cursor:-webkit-grabbing;cursor:grabbing;}${_className}${__.sliding} ${__.thumb},${_className}${__.sliding} ${__.thumbLabel}{cursor:-webkit-grabbing;cursor:grabbing;}${st2c((\n          (theme.slider\n            && theme.slider.root\n            && (theme.slider.root instanceof StyleCollection\n              ? theme.slider.root.setTransformer(fn => fn(__)).css\n              : theme.slider.root(__))\n          )), `${_className}`)}`,\n\n    wrapper: (_className: string) => `${_className}{-webkit-print-color-adjust:exact;color-adjust:exact;position:absolute;}`,\n\n    track: () => (_className: string) => `${_className}{position:absolute;margin:auto;}${__.horizontal} ${_className}{transform-origin:${ isRTL ? 100 : 0}% 0;}${__.vertical} ${_className}{transform-origin:${ isRTL ? 100 : 0}% 100%;}`,\n    bg: null,\n    thumbContainer: (_className: string) => `${_className}{width:0;height:0;position:absolute;margin:auto;}`,\n    thumbContent: (_className: string) => `${_className}{display:flex;justify-content:center;align-items:center;}`,\n    thumb: (_className: string) => `${_className}{position:absolute;width:16px;height:16px;border-radius:50%;outline:0;cursor:-webkit-grab;cursor:grab;transition:${['border-radius', 'transform'].map(prop => `${prop} ${\n        theme.animations.durations.exiting\n      }ms ${theme.animations.curves.standard} 0ms`).join()};}${_className}::before{content:'';}${st2c((LY_COMMON_STYLES.fill), `${_className}::before`)}${_className}::before{border-radius:50%;transition:${['box-shadow'].map(prop => `${prop} ${\n          theme.animations.durations.entering\n        }ms ${theme.animations.curves.sharp} 0ms`).join()};}`,\n    thumbLabel: (_className: string) => `${_className}{position:absolute;font-size:12px;width:28px;height:28px;border-radius:50%;top:-14px;${before}:-14px;cursor:-webkit-grab;cursor:grab;transition:${[\n        'transform',\n        'top',\n        'left',\n        'right',\n        'border-radius'\n      ].map(prop => `${prop} 150ms ${theme.animations.curves.standard} 0ms`).join()};}`,\n    thumbLabelValue: (_className: string) => `${_className}{display:flex;height:100%;width:100%;align-items:center;justify-content:center;}`,\n\n    horizontal: () => (_className: string) => `${_className}{width:128px;height:48px;padding:8px;touch-action:pan-y !important;}${_className} ${__.wrapper}{top:23px;left:8px;right:8px;}${_className} ${__.track},${_className} ${__.bg},${_className} ${__.track}{height:inherit;}${_className} ${__.track},${_className} ${__.bg}{width:100%;}${_className} ${__.track}{${before}:0;top:0;bottom:0;}${_className} ${__.thumbContainer}{top:0;bottom:0;}${_className} ${__.tick}{width:2px;top:0;bottom:0;transform:translate(-1px,0%);}${_className} ${__.mark}{top:22px;transform:translateX(${theme.direction === Dir.ltr ? '-' : ''}50%);}${_className}${__.marked}{margin-bottom:24px;}`,\n    vertical: () => (_className: string) => `${_className}{width:48px;height:128px;padding:8px;touch-action:pan-x !important;}${_className} ${__.wrapper}{${before}:23px;top:8px;bottom:8px;}${_className} ${__.track},${_className} ${__.bg},${_className} ${__.track}{width:inherit;}${_className} ${__.track},${_className} ${__.bg}{height:100%;}${_className} ${__.track}{bottom:0;${before}:-1px;${after}:0;}${_className} ${__.thumbContainer}{left:0;right:0;}${_className} ${__.tick}{width:inherit;height:2px;left:0;right:0;}${_className} ${__.mark}{${before}:22px;transform:translateY(50%);}${_className}${__.marked}{${theme.direction === Dir.ltr ? 'margin-right' : 'margin-left'}:24px;}`,\n\n    marked: null,\n    mark: (_className: string) => `${_className}{position:absolute;white-space:nowrap;font-size:14px;color:${theme.text.secondary};}`,\n    markActive: (_className: string) => `${_className}{color:currentColor;}`,\n    tick: (_className: string) => `${_className}{position:absolute;margin:auto;}`,\n    tickActive: null,\n\n    thumbVisible: null,\n    thumbNotVisible: null,\n    thumbContentFocused: null,\n    sliding: null,\n    disabled: (_className: string) => `${_className}{cursor:default;}`\n  };\n};\n/** A change event emitted by the LySlider component. */\nexport class LySliderChange {\n\n  constructor(\n      /** The LySlider that changed. */\n    public source: LySlider,\n    /** The new value of the source slider. */\n    public value: number | (number | null)[] | null,\n  ) { }\n}\n\ninterface Thumb {\n  value: number;\n  displayValue: string | number | null;\n  percent: number | null;\n  styles: { [key: string]: string };\n  focused?: boolean;\n  sliding?: boolean;\n  index: number;\n}\n\nexport interface LySliderMark {\n  value: number;\n  label: number | string;\n}\n\n@Component({\n  selector: 'ly-slider',\n  templateUrl: 'slider.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  exportAs: 'lySlider',\n  providers: [\n    LY_SLIDER_CONTROL_VALUE_ACCESSOR,\n    StyleRenderer,\n    { provide: LY_SLIDER, useExisting: LySlider },\n  ],\n  host: {\n    '(focus)': '_onFocus()',\n    '(blur)': '_onBlur()',\n    '(keydown)': '_onKeydown($event)',\n    '(keyup)': '_onKeyup()',\n    '(mouseenter)': '_onMouseenter()',\n\n    // On Safari starting to slide temporarily triggers text selection mode which\n    // show the wrong cursor. We prevent it by stopping the `selectstart` event.\n    '(selectstart)': '$event.preventDefault()',\n  },\n  standalone: false\n})\nexport class LySlider implements OnChanges, OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n\n  /**\n   * Identifier used to attribute a touch event to a particular slider.\n   * Will be undefined if one of the following conditions is true:\n   * - The user isn't dragging using a touch device.\n   * - The browser doesn't support `Touch.identifier`.\n   * - Dragging hasn't started yet.\n   */\n  private _touchId: number | undefined;\n\n   /** Keeps track of the last pointer event that was captured by the slider. */\n  private _lastPointerEvent: MouseEvent | TouchEvent | null;\n\n  /** Used to subscribe to global move and end events */\n  protected _document: Document;\n\n  /** The dimensions of the slider. */\n  private _sliderDimensions: ClientRect | null = null;\n\n   /** Reference to the inner slider wrapper element. */\n  @ViewChild('wrapper', { static: true }) readonly _wrapper: ElementRef;\n\n  /** Whether or not to show the thumb. */\n  @Input()\n  get thumbVisible() {\n    return this._thumbVisible;\n  }\n  set thumbVisible(val: BooleanInput | null) {\n    const newVal = val != null ? coerceBooleanProperty(val) : null;\n\n    if (newVal !== this.thumbVisible) {\n\n      const { thumbVisible: thumbVisibleClass } = this.classes;\n      const { thumbNotVisible: thumbNotVisibleClass } = this.classes;\n      this._thumbVisible = newVal;\n\n      this.sRenderer.toggleClass(thumbVisibleClass, newVal === true);\n      this.sRenderer.toggleClass(thumbNotVisibleClass, newVal === false);\n\n    }\n  }\n\n  /** Whether or not to show the marks, also accepts an array of marks. */\n  @Input()\n  get marks() {\n    return this._marks;\n  }\n  set marks(val: BooleanInput | LySliderMark[]) {\n    const newVal = coerceBooleanProperty(val);\n\n    if (newVal !== this.marks) {\n\n      const newClass = this.classes.marked;\n\n      if (newVal) {\n        this._renderer.addClass(this._el.nativeElement, newClass);\n        this._marksClass = newClass;\n        this._marks = Array.isArray(val) ? val : newVal;\n      } else if (this._marksClass) {\n        this._marks = false;\n        this._renderer.removeClass(this._el.nativeElement, newClass);\n        this._marksClass = null;\n      }\n      if (Array.isArray(newVal)) {\n        this._marksList = val as LySliderMark[];\n      } else {\n        this._marksList = null;\n      }\n    }\n\n  }\n\n  /** The maximum value that the slider can have. */\n  @Input()\n  get max(): number {\n    return this._max;\n  }\n  set max(v: NumberInput) {\n    this._max = coerceNumberProperty(v, this._max);\n    this._updateThumbs();\n\n    this._cd.markForCheck();\n  }\n\n  /** The minimum value that the slider can have. */\n  @Input()\n  get min(): number {\n    return this._min;\n  }\n  set min(v: NumberInput) {\n    this._min = coerceNumberProperty(v, this._min);\n\n    // If the value wasn't explicitly set by the user, set it to the min.\n    if (this._value === null) {\n      this.value = this._min;\n    }\n    this._updateThumbs();\n\n    this._cd.markForCheck();\n  }\n\n  /** The slider appearance style. */\n  @Input()\n  set appearance(val: string) {\n    if (val !== this.appearance) {\n      this._appearance = val;\n      this._appearanceClass = this.sRenderer.add(\n        `${LySlider.и}.appearance:${val}`,\n        (theme: ThemeVariables & LySliderVariables, ref) => {\n          const classes = ref.selectorsOf(STYLES);\n          if (theme.slider && theme.slider.appearance) {\n            const appearance = theme.slider.appearance[val];\n            if (appearance) {\n              return appearance instanceof StyleCollection\n                ? appearance.setTransformer((_) => _(classes)).css\n                : appearance(classes, );\n            }\n          }\n          throw new Error(`${val} not found in theme.slider.appearance`);\n      }, STYLE_PRIORITY, this._appearanceClass);\n    }\n  }\n  get appearance() {\n    return this._appearance;\n  }\n\n  /** The slider size. */\n  @Input()\n  @Style<string | null>(\n    val => (\n      theme: ThemeVariables & LySliderVariables,\n      ref: ThemeRef\n    ) => {\n      const slider = ref.selectorsOf(STYLES);\n      if (theme.slider?.size) {\n        const size = theme.slider.size[val];\n        if (size) {\n          return size instanceof StyleCollection\n            ? size.setTransformer((_) => _(slider)).css\n            : size(slider);\n        }\n      }\n      throw new Error(`${LySlider.и}: styles theme.checkbox.size is undefined`);\n    }\n  , STYLE_PRIORITY)\n  size: string | null;\n\n  /** Color of Slider */\n  @Input()\n  get color(): string {\n    return this._color;\n  }\n  set color(val: string) {\n    this._color = val;\n    const styleKey = `${LySlider.и}.color:${val}`;\n\n    const newStyle = (theme: ThemeVariables & LySliderVariables, ref: ThemeRef) => {\n      const color = theme.colorOf(val);\n      const contrast = theme.colorOf(`${val}:contrast`);\n      const __ = ref.selectorsOf(STYLES);\n\n      if (theme.slider && theme.slider.color) {\n        const sliderColor = theme.slider.color;\n        if (sliderColor) {\n          return sliderColor instanceof StyleCollection\n            ? (sliderColor).setTransformer((_) => _(__, color, contrast)).css\n            : sliderColor(__, color, contrast);\n        }\n      }\n      throw new Error(`${val} not found in theme.slider.color`);\n    };\n    this._colorClass = this.sRenderer.add(\n      styleKey,\n      newStyle,\n      STYLE_PRIORITY + 1,\n      this._colorClass\n    );\n  }\n\n  /** Whether the slider is vertical. */\n  @Input()\n  get vertical() {\n    return this._vertical;\n  }\n  set vertical(val: BooleanInput) {\n    const newVal = coerceBooleanProperty(val);\n    this._vertical = newVal;\n\n    const newClass = newVal\n      ? this.classes.vertical\n      : this.classes.horizontal;\n\n    this._verticalClass = this._theme.updateClass(\n      this._el.nativeElement,\n      this._renderer,\n      newClass,\n      this._verticalClass as any);\n    this._updateThumbs();\n\n    this._cd.markForCheck();\n  }\n\n  /** The values at which the thumb will snap. */\n  @Input()\n  get step(): number { return this._step; }\n  set step(v: NumberInput) {\n    this._step = coerceNumberProperty(v, this._step);\n\n    this._stepPrecision = this._step % 1 !== 0\n      ? this._step.toString().split('.')[1].length\n      : null;\n\n    this._cd.markForCheck();\n  }\n  private _step: number = 1;\n\n  /**\n   * Value of a slider, this can be a number or an array of numbers.\n   * If the array of numbers has more than one value,\n   * then this will create more thumbs\n   */\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(val: number | (number | null)[] | null) {\n    if (val !== this._value) {\n      const valueIsArray = Array.isArray(val);\n      if (typeof val === 'number') {\n        let newValue = Number(val);\n        newValue = (newValue === this.min || newValue === this.max)\n          ? newValue\n          : parseFloat(newValue.toFixed(this._stepPrecision as number));\n        this._value = newValue;\n      } else if (valueIsArray && !arrayEquals(this._value, val)) {\n        let newValue = val as number[];\n        newValue = newValue.map(\n          _val => _val === null\n            ? _val\n            : (_val === this.min || _val === this.max)\n              ? _val\n              : parseFloat(_val.toFixed(this._stepPrecision as number)));\n\n        this._value = newValue;\n      }\n      this._thumbs = (valueIsArray ?\n        this._value as (number | null)[]\n        : [this._value as number | null]).map((v, index) => ({\n          index,\n          value: coerceNumberProperty(v, this.min),\n          displayValue: null,\n          percent: null,\n          styles: {},\n          focused: this._thumbs?.[index]?.focused\n        }));\n\n      this._updateThumbs();\n\n      this._cd.markForCheck();\n    }\n  }\n\n  /** Whether the slider is disabled. */\n  @Input()\n  get disabled() {\n    return this._disabled;\n  }\n  set disabled(val: BooleanInput) {\n    const newVal = coerceBooleanProperty(val);\n\n    if (newVal !== this.disabled) {\n      this._disabled = newVal;\n      if (newVal) {\n        // TODO: remove promise when color parameter removed\n        Promise.resolve(null).then(() => {\n          // TODO: deprecated\n          const color = this.color;\n          const styleKey = `${LySlider.и}.disabled:${val}-${color}`;\n          let newStyle: ((theme: ThemeVariables & LySliderVariables, ref: ThemeRef) => StyleTemplate);\n          newStyle = (theme: ThemeVariables & LySliderVariables, ref: ThemeRef) => {\n            const clr = theme.colorOf(color);\n            const __ = ref.selectorsOf(STYLES);\n\n            if (theme.slider && theme.slider.disabled) {\n              const sliderColor = theme.slider.disabled;\n              if (sliderColor) {\n                return sliderColor instanceof StyleCollection\n                  ? (sliderColor).setTransformer((_) => _(__, clr)).css\n                  : sliderColor(__, clr);\n              }\n            }\n            throw new Error(`${val} not found in theme.slider.color`);\n          };\n          const newClass = this.sRenderer.add(\n            styleKey,\n            newStyle,\n            STYLE_PRIORITY + 1.5,\n            this._disabledClass\n          );\n          this.sRenderer.addClass(this.classes.disabled);\n          this._disabledClass = newClass;\n        });\n      } else if (this._disabledClass) {\n        this.sRenderer.removeClass(this._disabledClass);\n        this.sRenderer.removeClass(this.classes.disabled);\n        this._disabledClass = null;\n      }\n    }\n  }\n\n  /**\n   * Whether or not to show the thumb label, but if the value is a number,\n   * it will show ticks according to the steps. For example: if you set\n   * 3 ticks with a step of 10, you will draw a tick every 30 values\n   */\n  @Input()\n  get ticks() {\n    return this._ticks;\n  }\n  set ticks(val: NumberInput | BooleanInput) {\n    const newValue = coerceNumberProperty(val, coerceBooleanProperty(val));\n    this._ticks = newValue;\n  }\n  get _tickList() {\n    return this.__tickList;\n  }\n  // private _ngClass: NgClass;\n  constructor(\n    private _theme: LyTheme2,\n    private _el: ElementRef,\n    private _renderer: Renderer2,\n    private _cd: ChangeDetectorRef,\n    readonly sRenderer: StyleRenderer,\n    private _ngZone: NgZone,\n    private _focusMonitor: FocusMonitor,\n    @Inject(DOCUMENT) _document: any,\n    @Optional() @Inject(LY_SLIDER_DEFAULT_OPTIONS) private _default: LySliderDefaultOptions\n  ) {\n    this._document = _document;\n    _renderer.addClass(_el.nativeElement, this.classes.root);\n    _ngZone.runOutsideAngular(() => {\n      const element = _el.nativeElement;\n      element.addEventListener('mousedown', this._pointerDown, activeEventOptions);\n      element.addEventListener('touchstart', this._pointerDown, activeEventOptions);\n    });\n  }\n  static и = 'LySlider';\n  readonly classes = this._theme.renderStyleSheet(STYLES);\n\n  private _disabled: boolean;\n  private _disabledClass: string | null;\n  private _color: string;\n  private _colorClass: string;\n\n  private _vertical: boolean;\n  private _verticalClass?: string | null;\n\n  private _appearance: string;\n  private _appearanceClass: string;\n\n  private _value: number | (number | null)[] | null = null;\n  private _thumbsOnSlideStart: Thumb[] | null;\n  private _valueOnSlideStart: number | (number | null)[] | null;\n\n  private _min: number = 0;\n  private _max: number = 100;\n\n  private _stepPrecision?: number | null;\n\n  private _closestIndex: number | null;\n\n  _changes = new Subject<void>();\n\n  /** Min percentage, this is for mark. */\n  _minPercent: number;\n  /** Max percentage, this is for mark. */\n  _maxPercent: number;\n\n  /**\n   * Whether or not the thumb is sliding.\n   */\n  _isSliding: 'keyboard' | 'pointer' | null = null;\n  _slidingThumbValue?: number | null;\n\n  _thumbs: Thumb[] = [];\n\n  _rootClasses = new Set<string>();\n\n  @ViewChild('bg') _bg?: ElementRef<HTMLDivElement>;\n  @ViewChild('track', { static: true }) _track: ElementRef<HTMLDivElement>;\n  @ViewChild('ticksRef', { static: true }) _ticksRef: ElementRef<HTMLDivElement>;\n  @ViewChildren('thumbsRef') _thumbsRef?: QueryList<ElementRef<HTMLDivElement>>;\n\n  @Input() displayWith: (value: number | null) => string | number;\n\n  /** Event emitted when the slider value has changed. */\n  @Output() readonly change: EventEmitter<LySliderChange> = new EventEmitter<LySliderChange>();\n\n  /** Event emitted when the slider thumb moves. */\n  @Output() readonly input: EventEmitter<LySliderChange> = new EventEmitter<LySliderChange>();\n\n  /** @docs-private */\n  @Output() readonly valueChange: EventEmitter<number | (number | null)[] | null> = new EventEmitter<number | (number | null)[] | null>();\n\n  private _thumbVisible: boolean | null;\n\n  private _marks: boolean | LySliderMark[];\n  private _marksClass: string | null;\n  _marksList?: LySliderMark[] | null;\n  private _ticks: number | boolean;\n  _tickInterval: number;\n  private __tickList: number[];\n\n  /** Called when the window has lost focus. */\n  private _windowBlur = () => {\n    // If the window is blurred while dragging we need to stop dragging because the\n    // browser won't dispatch the `mouseup` and `touchend` events anymore.\n    if (this._lastPointerEvent) {\n      this._pointerUp(this._lastPointerEvent);\n    }\n  }\n\n  /**\n   * The registered callback function called when a blur event occurs on the input element.\n   * @docs-private\n   */\n  onTouched = () => {};\n\n  private _controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n  ngOnChanges() {\n    this._updateTickValues();\n    this._changes.next();\n  }\n\n  ngOnInit() {\n\n    this._theme.directionChanged.pipe(untilComponentDestroyed(this)).subscribe(() => {\n      this.ngOnChanges();\n      this._updateThumbs();\n      this._cd.markForCheck();\n    });\n\n    /** Set default appearance */\n    if (this.appearance == null) {\n      this.appearance = (this._default && this._default.appearance) || 'standard';\n    }\n\n    /** Set default size */\n    if (this.size == null) {\n      this.size = 'small';\n    }\n\n    /** Set horizontal slider */\n    if (this.vertical == null) {\n      this.vertical = false;\n    }\n\n    /** Set default color */\n    if (this.color == null) {\n      this.color = 'accent';\n    }\n\n    /** Set default step */\n    if (this.step == null) {\n      this.step = 1;\n    }\n\n  }\n\n  ngAfterViewInit() {\n    this._focusMonitor.monitor(this._el, true).subscribe((_origin: FocusOrigin) => {\n      this._cd.detectChanges();\n    });\n  }\n\n  ngOnDestroy() {\n    const element = this._el.nativeElement;\n    this._focusMonitor.stopMonitoring(this._el);\n    element.removeEventListener('mousedown', this._pointerDown, activeEventOptions);\n    element.removeEventListener('touchstart', this._pointerDown, activeEventOptions);\n    this._lastPointerEvent = null;\n    this._changes.complete();\n  }\n\n  writeValue(value: any): void {\n    this.value = value;\n    this._changes.next();\n  }\n\n  /**\n   * Registers a function called when the control value changes.\n   *\n   * @param fn The callback function\n   */\n  registerOnChange(fn: (value: any) => any): void {\n    this._controlValueAccessorChangeFn = fn;\n  }\n\n  /**\n   * Registers a function called when the control is touched.\n   *\n   * @param fn The callback function\n   */\n  registerOnTouched(fn: () => any): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * Disables the select. Part of the ControlValueAccessor interface required\n   * to integrate with Angular's core forms API.\n   *\n   * @param isDisabled Sets whether the component is disabled.\n   */\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n  }\n\n  _onMouseenter() {\n    if (this.disabled) {\n      return;\n    }\n\n    // We save the dimensions of the slider here so we can use them to update the spacing of the\n    // ticks and determine where on the slider click and slide events happen.\n    this._sliderDimensions = this._getSliderDimensions();\n    // this._updateTickIntervalPercent();\n  }\n\n  _onFocus() {\n    // We save the dimensions of the slider here so we can use them to update the spacing of the\n    // ticks and determine where on the slider click and slide events happen.\n    this._sliderDimensions = this._getSliderDimensions();\n    // this._updateTickIntervalPercent();\n  }\n\n  _onBlur() {\n    this.onTouched();\n  }\n\n  _onKeydown(event: KeyboardEvent) {\n    if (\n      this.disabled ||\n      hasModifierKey(event) ||\n      (this._isSliding && this._isSliding !== 'keyboard')\n    ) {\n      return;\n    }\n    this._isSliding = 'keyboard';\n    const oldValue = this.value;\n\n    switch (event.keyCode) {\n      case PAGE_UP:\n        this._increment(10);\n        break;\n      case PAGE_DOWN:\n        this._increment(-10);\n        break;\n      case END:\n        this.value = this.max;\n        break;\n      case HOME:\n        this.value = this.min;\n        break;\n      case LEFT_ARROW:\n        this._increment(this._getDirection() === Dir.rtl ? 1 : -1);\n        break;\n      case UP_ARROW:\n        this._increment(1);\n        break;\n      case RIGHT_ARROW:\n        // See comment on LEFT_ARROW about the conditions under which we flip the meaning.\n        this._increment(this._getDirection() === Dir.rtl ? -1 : 1);\n        break;\n      case DOWN_ARROW:\n        this._increment(-1);\n        break;\n      default:\n        // Return if the key is not one that we explicitly handle to avoid calling preventDefault on\n        // it.\n        return;\n    }\n\n    if (!valueEquals(oldValue, this.value)) {\n      this._emitInputEvent();\n      this._emitChangeEvent();\n      this._changes.next();\n    }\n\n    event.preventDefault();\n  }\n\n  _onKeyup() {\n    if (this._isSliding === 'keyboard') {\n      this._renderer.removeClass(this._el.nativeElement, this.classes.sliding);\n      this._isSliding = null;\n      this._thumbsOnSlideStart = null;\n      this._valueOnSlideStart = null;\n      this._closestIndex = null;\n    }\n  }\n\n  private _pointerDown = (event: TouchEvent | MouseEvent) => {\n    // Don't do anything if the slider is disabled or the\n    // user is using anything other than the main mouse button.\n    if (this.disabled || this._isSliding || (!isTouchEvent(event) && event.button !== 0)) {\n      return;\n    }\n\n    this._ngZone.run(() => {\n      this._touchId = isTouchEvent(event)\n        ? getTouchIdForSlider(event, this._el.nativeElement)\n        : undefined;\n      const pointerPosition = getPointerPositionOnPage(event, this._touchId);\n\n      if (pointerPosition) {\n        const oldValue = this.value;\n        this._isSliding = 'pointer';\n        this._lastPointerEvent = event;\n        event.preventDefault();\n        this._focusHostElement();\n        this._onMouseenter(); // Simulate mouseenter in case this is a mobile device.\n        this._bindGlobalEvents(event);\n        this._focusHostElement();\n        this._setOnSlideStart();\n        this._updateValueFromPosition(pointerPosition.x, pointerPosition.y);\n\n        // Emit a change and input event if the value changed.\n        if (!valueEquals(oldValue, this.value)) {\n          this._emitInputEvent();\n          this._changes.next();\n        }\n      }\n    });\n  }\n\n   /**\n   * Called when the user has moved their pointer after\n   * starting to drag. Bound on the document level.\n   */\n  private _pointerMove = (event: TouchEvent | MouseEvent) => {\n    if (this._isSliding === 'pointer') {\n      const pointerPosition = getPointerPositionOnPage(event, this._touchId);\n\n      if (pointerPosition) {\n        // Prevent the slide from selecting anything else.\n        event.preventDefault();\n        const oldValue = this.value;\n        this._lastPointerEvent = event;\n        this._updateValueFromPosition(pointerPosition.x, pointerPosition.y);\n\n        // Native range elements always emit `input` events when the value changed while sliding.\n        if (!valueEquals(oldValue, this.value)) {\n          this._emitInputEvent();\n          this._changes.next();\n        }\n      }\n    }\n  }\n\n  /** Called when the user has lifted their pointer. Bound on the document level. */\n  private _pointerUp = (event: TouchEvent | MouseEvent) => {\n    if (this._isSliding === 'pointer') {\n      if (\n        !isTouchEvent(event) ||\n        typeof this._touchId !== 'number' ||\n        // Note that we use `changedTouches`, rather than `touches` because it\n        // seems like in most cases `touches` is empty for `touchend` events.\n        findMatchingTouch(event.changedTouches, this._touchId)\n      ) {\n        event.preventDefault();\n        this._removeGlobalEvents();\n        this._isSliding = null;\n        this._touchId = undefined;\n        this._renderer.removeClass(this._el.nativeElement, this.classes.sliding);\n\n        if (!valueEquals(this._valueOnSlideStart, this.value) && !this.disabled) {\n          this._emitChangeEvent();\n          this._changes.next();\n        }\n\n        this._thumbsOnSlideStart = null;\n        this._closestIndex = null;\n        this._valueOnSlideStart = this._lastPointerEvent = null;\n      }\n    }\n  }\n\n  _onFocusThumb(thumb: Thumb) {\n    if (!this.disabled) {\n      thumb.focused = true;\n    }\n  }\n\n  _onBlurThumb(thumb: Thumb) {\n    if (!this.disabled ) {\n      thumb.focused = false;\n    }\n  }\n\n\n  private _setOnSlideStart() {\n    if (!this._valueOnSlideStart) {\n\n      this._renderer.addClass(this._el.nativeElement, this.classes.sliding);\n\n      // clone\n      this._valueOnSlideStart = Array.isArray(this.value) ? this.value.slice(0) : this.value;\n      this._thumbsOnSlideStart = this._thumbs.slice(0).map(t => ({...t}));\n    }\n  }\n\n\n  _trackByFn(_index: number, item: Thumb) {\n    return item.index;\n  }\n\n  private _getDirection() {\n    return this._theme.variables.direction;\n  }\n\n  private _updateValueFromPosition(x: number, y: number) {\n\n    if (!this._sliderDimensions) {\n      return;\n    }\n\n    const w = this._sliderDimensions!.width;\n    const h = this._sliderDimensions!.height;\n    x -= this._sliderDimensions.left;\n    y -= this._sliderDimensions.top;\n\n    let percent = clamp(\n      this.vertical\n        ? гvalueToPercent(y, 0, h)\n        : гvalueToPercent(x, 0, w),\n      0,\n      100);\n\n    if (this.vertical || (!this.vertical && this._theme.variables.direction === Dir.rtl)) {\n      percent = 100 - percent;\n    }\n\n    let value: number;\n\n    if (percent === 0) {\n      value = this.min;\n    } else if (percent === 100) {\n      value = this.max;\n    } else {\n      value = this._roundValueToStep(percentToValue(percent, this.min, this.max));\n    }\n    if (this._closestIndex == null) {\n      this._closestIndex = findClosest(this._thumbs.map(thumb => thumb.value), value);\n    }\n    const currentThumb = this._thumbsOnSlideStart![this._closestIndex];\n    this._slidingThumbValue = currentThumb.value = value;\n    if (Array.isArray(this.value)) {\n      this.value = this._thumbsOnSlideStart!.map(thumb => thumb.value).sort(ASC);\n    } else {\n      this.value = value;\n    }\n\n    // focus slidingThumb\n    const currentSlidingThumb: Thumb | undefined = this._thumbs.find(thumb => thumb.value === value)!;\n    if (currentSlidingThumb) {\n      currentSlidingThumb.focused = true;\n      this._thumbsRef!.toArray()[currentSlidingThumb.index].nativeElement.focus();\n    }\n  }\n\n  private _updateThumbs() {\n    this._thumbs.forEach(thumb => {\n      const val = clamp(thumb.value, this.min, this.max);\n      const percent = гvalueToPercent(val, this.min, this.max);\n      const pos = this._calculatePosition(percent);\n      thumb.value = val;\n      thumb.displayValue = this._transformValue(val);\n      thumb.percent = percent;\n      if (this._isSliding === 'pointer') {\n        thumb.focused = false;\n      }\n      thumb.styles = {\n        [pos.style]: pos.value\n      };\n    });\n\n    this._updateTrack();\n  }\n\n  _calculatePosition(percent: number) {\n    let style: string;\n    const value = `${percent}%`;\n\n    if (this.vertical) {\n      style = 'bottom';\n    } else {\n      style = this._theme.variables.direction === 'rtl' ? 'right' : 'left';\n    }\n    return {\n      style,\n      value\n    };\n  }\n\n  private _updateTrack() {\n    const track = this._track;\n    const thumbs = this._thumbs;\n    const thumbsPercents = thumbs.map(thumb => thumb.percent!);\n    // const direction = this._theme.variables.direction === 'rtl' ? 'right' : 'left';\n    // const axis = this.vertical ? 'Y' : 'X';\n    // const sign = this._theme.variables.direction === 'rtl' ? '-' : '';\n    if (thumbs.length === 1) {\n      thumbsPercents.unshift(0);\n    }\n\n    const minPercent = this._minPercent = Math.min(...thumbsPercents);\n    const maxPercent = this._maxPercent = Math.max(...thumbsPercents);\n    const percent = (maxPercent / 100) - (minPercent / 100);\n\n    // const scale = this.vertical ? `1, ${percent}, 1` : `${percent}, 1, 1`;\n    const position = this.vertical ? 'height' : 'width';\n    const location = this.vertical ? 'bottom' : (this._theme.variables.direction === 'rtl' ? 'right' : 'left');\n    if (track) {\n      // track.nativeElement.style.transform = `translate${axis}(${sign}${minPercent}%)`;\n      // track.nativeElement.style.transform = `translate${axis}(${sign}${minPercent}%) scale3d(${scale})`;\n      track.nativeElement.style.width = '';\n      track.nativeElement.style.height = '';\n      track.nativeElement.style.left = '';\n      track.nativeElement.style.right = '';\n      track.nativeElement.style[position] = `${percent * 100}%`;\n      track.nativeElement.style[location] = `${minPercent}%`;\n    }\n  }\n\n  /** Emits a change event. */\n  private _emitChangeEvent() {\n    this._controlValueAccessorChangeFn(this.value);\n    this.valueChange.emit(this.value);\n    this.change.emit(this._createChangeEvent());\n  }\n\n  /** Emits an input event. */\n  private _emitInputEvent() {\n    this.input.emit(this._createChangeEvent());\n  }\n\n  private _createChangeEvent(value = this.value) {\n    return new LySliderChange(this, value);\n  }\n\n  private _roundValueToStep(value: number) {\n    return Number((Math.round(value / this.step) * this.step).toFixed(this._stepPrecision!));\n  }\n\n  private _transformValue(value: number) {\n    if (this.displayWith) {\n      return this.displayWith(value);\n    }\n    return value;\n  }\n\n  /** Increments the slider by the given number of steps (negative number decrements). */\n  private _increment(numSteps: number) {\n    this._setOnSlideStart();\n    if (this._closestIndex == null) {\n      this._closestIndex = this._thumbsOnSlideStart!.findIndex(_ => _.focused);\n    }\n    const index = this._closestIndex;\n    const thumb = this._thumbsOnSlideStart![index];\n    const newValue = clamp((thumb.value || 0) + this.step * numSteps, this.min, this.max);\n    thumb.value = newValue;\n    if (Array.isArray(this.value)) {\n      this.value = this._thumbsOnSlideStart!.map(_ => _.value).sort(ASC);\n    } else {\n      this.value = newValue;\n    }\n\n    // focus slidingThumb\n    const currentSlidingThumb: Thumb | undefined = this._thumbs.find(t => t.value === newValue)!;\n    if (currentSlidingThumb) {\n      currentSlidingThumb.focused = true;\n      this._thumbsRef?.forEach((t, i) => {\n        if (i === currentSlidingThumb.index) {\n          t.nativeElement.focus();\n        } else {\n          this._thumbs[i].focused = false;\n        }\n      });\n    }\n  }\n\n  _getHostElement() {\n    return this._el.nativeElement;\n  }\n\n  /**\n   * Get the bounding client rect of the slider track element.\n   * The track is used rather than the native element to ignore the extra space that the thumb can\n   * take up.\n   */\n   private _getSliderDimensions() {\n    return this._bg ? this._bg.nativeElement.getBoundingClientRect() : null;\n  }\n\n  private _updateTickValues() {\n    this.__tickList = [];\n    if (!this.ticks || this.step == null) {\n      return false;\n    } else {\n      const ticks = this.ticks;\n      this._tickInterval = typeof ticks === 'number'\n        ? this.step * ticks\n        : this.step;\n\n      this.__tickList = [];\n      const stepWidth = this._tickInterval;\n      let cu = this.min;\n      this.__tickList.push(cu);\n      while (cu <= this.max) {\n        cu += stepWidth;\n        const newVal = clamp(cu, this.min, this.max);\n        this.__tickList.push(newVal);\n        // Remove duplicate value for next\n        if (newVal === this.max) {\n          break;\n        }\n      }\n    }\n\n    this._cd.markForCheck();\n  }\n\n  /**\n   * Focuses the native element.\n   */\n   private _focusHostElement(options?: FocusOptions) {\n    this._el.nativeElement.focus(options);\n  }\n\n   /**\n   * Binds our global move and end events. They're bound at the document level and only while\n   * dragging so that the user doesn't have to keep their pointer exactly over the slider\n   * as they're swiping across the screen.\n   */\n  private _bindGlobalEvents(triggerEvent: TouchEvent | MouseEvent) {\n    // Note that we bind the events to the `document`, because it allows us to capture\n    // drag cancel events where the user's pointer is outside the browser window.\n    const document = this._document;\n    const isTouch = isTouchEvent(triggerEvent);\n    const moveEventName = isTouch ? 'touchmove' : 'mousemove';\n    const endEventName = isTouch ? 'touchend' : 'mouseup';\n    document.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n    document.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n\n    if (isTouch) {\n      document.addEventListener('touchcancel', this._pointerUp, activeEventOptions);\n    }\n\n    const window = this._getWindow();\n\n    if (typeof window !== 'undefined' && window) {\n      window.addEventListener('blur', this._windowBlur);\n    }\n  }\n\n  /** Removes any global event listeners that we may have added. */\n  private _removeGlobalEvents() {\n    const document = this._document;\n    document.removeEventListener('mousemove', this._pointerMove, activeEventOptions);\n    document.removeEventListener('mouseup', this._pointerUp, activeEventOptions);\n    document.removeEventListener('touchmove', this._pointerMove, activeEventOptions);\n    document.removeEventListener('touchend', this._pointerUp, activeEventOptions);\n    document.removeEventListener('touchcancel', this._pointerUp, activeEventOptions);\n\n    const window = this._getWindow();\n\n    if (typeof window !== 'undefined' && window) {\n      window.removeEventListener('blur', this._windowBlur);\n    }\n  }\n\n  /** Use defaultView of injected document if available or fallback to global window reference */\n  private _getWindow(): Window {\n    return this._document.defaultView || window;\n  }\n\n}\n\nfunction findClosest(values: number[], currentValue: number) {\n  const { index: closestIndex } = values.reduce<{\n    distance: number\n    index: number\n  } | null>((previousValue, value, index) => {\n    const distance = Math.abs(currentValue - value);\n\n    if (previousValue === null || distance < previousValue.distance || distance === previousValue.distance) {\n      return {\n        distance,\n        index,\n      };\n    }\n\n    return previousValue;\n  }, null)!;\n  return closestIndex;\n}\n\nfunction percentToValue(percent, min, max) {\n  return (max - min) * (percent / 100) + min;\n}\n\nfunction arrayEquals(array1: any, array2: any) {\n  return Array.isArray(array1) && Array.isArray(array2) && array1.length === array2.length\n    && array1.every((value, index) => value === array2[index]);\n}\n\n/** Quickly check if two values are equal */\nfunction valueEquals(value: number | (number | null)[] | null, value2: number | (number | null)[] | null) {\n  if (value === value2) {\n    return true;\n  }\n  return arrayEquals(value, value2);\n}\n\nfunction clamp(value: number, min: number, max: number) {\n  if (value < min) {\n    return min;\n  }\n  if (value > max) {\n    return max;\n  }\n  return value;\n}\n\nfunction ASC(a: number, b: number) {\n  return a - b;\n}\n\n/** Returns whether an event is a touch event. */\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n  // This function is called for every pixel that the user has dragged so we need it to be\n  // as fast as possible. Since we only bind mouse events and touch events, we can assume\n  // that if the event's name starts with `t`, it's a touch event.\n  return event.type[0] === 't';\n}\n\n/** Gets the unique ID of a touch that matches a specific slider. */\nfunction getTouchIdForSlider(event: TouchEvent, sliderHost: HTMLElement): number | undefined {\n  for (let i = 0; i < event.touches.length; i++) {\n    const target = event.touches[i].target as HTMLElement;\n\n    if (sliderHost === target || sliderHost.contains(target)) {\n      return event.touches[i].identifier;\n    }\n  }\n\n  return undefined;\n}\n\n/** Gets the coordinates of a touch or mouse event relative to the viewport. */\nfunction getPointerPositionOnPage(event: MouseEvent | TouchEvent, id: number | undefined) {\n  let point: {clientX: number; clientY: number} | undefined;\n\n  if (isTouchEvent(event)) {\n    // The `identifier` could be undefined if the browser doesn't support `TouchEvent.identifier`.\n    // If that's the case, attribute the first touch to all active sliders. This should still cover\n    // the most common case while only breaking multi-touch.\n    if (typeof id === 'number') {\n      point = findMatchingTouch(event.touches, id) || findMatchingTouch(event.changedTouches, id);\n    } else {\n      // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n      point = event.touches[0] || event.changedTouches[0];\n    }\n  } else {\n    point = event;\n  }\n\n  return point ? {x: point.clientX, y: point.clientY} : undefined;\n}\n\n/** Finds a `Touch` with a specific ID in a `TouchList`. */\nfunction findMatchingTouch(touches: TouchList, id: number): Touch | undefined {\n  for (let i = 0; i < touches.length; i++) {\n    if (touches[i].identifier === id) {\n      return touches[i];\n    }\n  }\n\n  return undefined;\n}\n","<div #wrapper [className]=\"classes.wrapper\">\n  <div #bg [className]=\"classes.bg\"></div>\n  <div #track [className]=\"classes.track\"></div>\n  <ng-template [ngIf]=\"ticks\">\n    <ly-tick *ngFor=\"let tick of _tickList\" [value]=\"tick\"></ly-tick>\n  </ng-template>\n  <span #ticksRef></span>\n  <ng-template [ngIf]=\"marks\">\n    <ng-content select=\"ly-mark\"></ng-content>\n  </ng-template>\n  <ng-template [ngIf]=\"_marksList\">\n    <ly-mark *ngFor=\"let mark of _marksList\" [value]=\"mark.value\">{{ mark.label }}</ly-mark>\n  </ng-template>\n  <div\n    *ngFor=\"let thumb of _thumbs; trackBy: _trackByFn\"\n    [className]=\"classes.thumbContainer\"\n    [ngStyle]=\"thumb.styles\"\n  >\n    <div\n      [className]=\"classes.thumbContent\"\n      [ngClass]=\"thumb.focused ? classes.thumbContentFocused : null\"\n      #thumbsRef\n        (focus)=\"_onFocusThumb(thumb)\"\n        (blur)=\"_onBlurThumb(thumb)\"\n        [attr.tabindex]=\"disabled ? -1 : 0\"\n    >\n      <div\n        [className]=\"classes.thumb\"\n      ></div>\n      <div [className]=\"classes.thumbLabel\" *ngIf=\"thumbVisible !== false\">\n        <span [className]=\"classes.thumbLabelValue\">{{ thumb.displayValue }}</span>\n      </div>\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LyCommonModule } from '@alyle/ui';\nimport { LySlider } from './slider';\nimport { LyMark } from './mark';\nimport { LyTick } from './tick';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    LyCommonModule\n  ],\n  declarations: [LySlider, LyMark, LyTick],\n  exports: [LySlider, LyMark]\n})\nexport class LySliderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.LyTick","i4.LyMark","i5.LyTick"],"mappings":"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"}