{"version":3,"file":"edsis-component-slider.mjs","sources":["../../../library/component/slider/slider.component.ts","../../../library/component/slider/slider-root.component.ts","../../../library/component/slider/edsis-component-slider.ts"],"sourcesContent":["import { Component, ElementRef, computed, inject, input } from '@angular/core';\nimport { cn } from '@edsis/component/class';\n\n/**\n * Styled native range input. Works with `ngModel` / `FormControl` via\n * Angular's built-in `RangeValueAccessor`. Keyboard + ARIA handled by the browser.\n */\n@Component({\n  selector: 'input[type=range][Slider]',\n  host: { '[class]': 'classes()' },\n  template: '',\n  styleUrl: './slider.component.css',\n})\nexport class SliderComponent {\n  private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  readonly class = input<string>('');\n\n  protected readonly classes = computed(() =>\n    cn(\n      'Slider relative w-full appearance-none bg-transparent',\n      'focus-visible:outline-none',\n      'disabled:pointer-events-none disabled:opacity-50',\n      this.class(),\n    ),\n  );\n\n  focus(): void {\n    this.el.nativeElement.focus();\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  numberAttribute,\n  output,\n  signal,\n  untracked,\n  viewChild,\n} from '@angular/core';\nimport { cn } from '@edsis/component/class';\n\nexport type SliderOrientation = 'horizontal' | 'vertical';\n\ninterface SliderConfig {\n  readonly min: number;\n  readonly max: number;\n  readonly step: number;\n  readonly minStepsBetweenThumbs: number;\n}\n\ninterface SliderThumbState {\n  readonly index: number;\n  readonly value: number;\n  readonly position: number;\n  readonly min: number;\n  readonly max: number;\n  readonly label: string | null;\n}\n\n@Component({\n  selector: 'Slider',\n  host: {\n    '[class]': 'hostClasses()',\n    '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n    '[attr.data-orientation]': 'orientation()',\n    '(window:pointermove)': 'onWindowPointerMove($event)',\n    '(window:pointerup)': 'onWindowPointerUp($event)',\n    '(window:pointercancel)': 'onWindowPointerUp($event)',\n  },\n  template: `\n    <div #track class=\"slider__track\" (pointerdown)=\"onTrackPointerDown($event)\">\n      <div\n        class=\"slider__range\"\n        [style.left.%]=\"orientation() === 'horizontal' ? rangeOffset() : null\"\n        [style.width.%]=\"orientation() === 'horizontal' ? rangeSize() : null\"\n        [style.bottom.%]=\"orientation() === 'vertical' ? rangeOffset() : null\"\n        [style.height.%]=\"orientation() === 'vertical' ? rangeSize() : null\"\n      ></div>\n\n      @for (thumb of thumbs(); track thumb.index) {\n        <button\n          type=\"button\"\n          class=\"slider__thumb\"\n          [style.left.%]=\"orientation() === 'horizontal' ? thumb.position : 50\"\n          [style.top.%]=\"orientation() === 'horizontal' ? 50 : null\"\n          [style.bottom.%]=\"orientation() === 'vertical' ? thumb.position : null\"\n          [attr.aria-describedby]=\"ariaDescribedby()\"\n          [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n          [attr.aria-label]=\"thumb.label\"\n          [attr.aria-labelledby]=\"thumb.label ? null : ariaLabelledby()\"\n          [attr.aria-orientation]=\"orientation()\"\n          [attr.aria-valuemax]=\"thumb.max\"\n          [attr.aria-valuemin]=\"thumb.min\"\n          [attr.aria-valuenow]=\"thumb.value\"\n          [attr.data-index]=\"thumb.index\"\n          [attr.data-state]=\"isDisabled() ? 'disabled' : 'active'\"\n          [tabIndex]=\"isDisabled() ? -1 : activeThumbIndex() === thumb.index ? 0 : -1\"\n          role=\"slider\"\n          (focus)=\"onThumbFocus(thumb.index)\"\n          (keydown)=\"onThumbKeydown($event, thumb.index)\"\n          (pointerdown)=\"onThumbPointerDown($event, thumb.index)\"\n        ></button>\n      }\n    </div>\n  `,\n  styleUrl: './slider-root.component.css',\n})\nexport class SliderRootComponent {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly document = inject(DOCUMENT);\n  private readonly track = viewChild.required<ElementRef<HTMLElement>>('track');\n\n  readonly value = input<readonly number[]>([0]);\n  readonly min = input(0, { transform: numberAttribute });\n  readonly max = input(100, { transform: numberAttribute });\n  readonly step = input(1, { transform: numberAttribute });\n  readonly minStepsBetweenThumbs = input(0, { transform: numberAttribute });\n  readonly orientation = input<SliderOrientation>('horizontal');\n  readonly disabled = input(false, { transform: booleanAttribute });\n  readonly thumbLabels = input<readonly string[] | null>(null);\n  readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n  readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n  readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n  readonly class = input<string>('');\n\n  readonly valueChange = output<readonly number[]>();\n\n  private readonly disabledState = signal(false);\n  private readonly valueState = signal<number[]>([0]);\n  protected readonly activeThumbIndex = signal(0);\n  private readonly draggedThumbIndex = signal<number | null>(null);\n  private readonly pointerId = signal<number | null>(null);\n\n  private readonly config = computed<SliderConfig>(() => ({\n    min: Math.min(this.min(), this.max()),\n    max: Math.max(this.min(), this.max()),\n    step: this.step() > 0 ? this.step() : 1,\n    minStepsBetweenThumbs: Math.max(0, Math.floor(this.minStepsBetweenThumbs())),\n  }));\n\n  protected readonly isDisabled = computed(() => this.disabled() || this.disabledState());\n  protected readonly hostClasses = computed(() =>\n    cn(\n      'slider-root relative flex touch-none select-none',\n      this.orientation() === 'horizontal' ? 'h-5 w-full items-center' : 'h-32 w-5 justify-center',\n      this.isDisabled() ? 'opacity-50' : '',\n      this.class(),\n    ),\n  );\n\n  protected readonly thumbs = computed<readonly SliderThumbState[]>(() => {\n    const values = this.valueState();\n    const config = this.config();\n\n    return values.map((value, index) => {\n      const bounds = thumbBounds(values, index, config);\n\n      return {\n        index,\n        value,\n        position: this.positionPercent(value),\n        min: bounds.min,\n        max: bounds.max,\n        label: this.thumbLabel(index, values.length),\n      };\n    });\n  });\n\n  protected readonly rangeOffset = computed(() => {\n    const span = this.rangeSpan();\n    return span.start;\n  });\n\n  protected readonly rangeSize = computed(() => {\n    const span = this.rangeSpan();\n    return span.end - span.start;\n  });\n\n  private readonly syncExternalValue = effect(() => {\n    const normalized = normalizeSliderValues(this.value(), this.config());\n\n    untracked(() => {\n      if (!sameValues(normalized, this.valueState())) {\n        this.valueState.set(normalized);\n      }\n\n      this.activeThumbIndex.set(clampIndex(this.activeThumbIndex(), normalized.length));\n    });\n  });\n\n  onTrackPointerDown(event: PointerEvent): void {\n    if (this.isDisabled() || event.button !== 0) {\n      return;\n    }\n\n    event.preventDefault();\n\n    const nextValue = this.valueFromPointer(event);\n    if (nextValue == null) {\n      return;\n    }\n\n    const thumbIndex = this.closestThumbIndex(nextValue);\n    this.activeThumbIndex.set(thumbIndex);\n    this.updateThumbValue(thumbIndex, nextValue);\n    this.beginDrag(event, thumbIndex);\n  }\n\n  onThumbPointerDown(event: PointerEvent, index: number): void {\n    if (this.isDisabled() || event.button !== 0) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.activeThumbIndex.set(index);\n    this.beginDrag(event, index);\n  }\n\n  onWindowPointerMove(event: PointerEvent): void {\n    if (this.pointerId() !== event.pointerId) {\n      return;\n    }\n\n    const thumbIndex = this.draggedThumbIndex();\n    if (thumbIndex == null) {\n      return;\n    }\n\n    const nextValue = this.valueFromPointer(event);\n    if (nextValue == null) {\n      return;\n    }\n\n    event.preventDefault();\n    this.updateThumbValue(thumbIndex, nextValue);\n  }\n\n  onWindowPointerUp(event: PointerEvent): void {\n    if (this.pointerId() !== event.pointerId) {\n      return;\n    }\n\n    this.draggedThumbIndex.set(null);\n    this.pointerId.set(null);\n  }\n\n  onThumbFocus(index: number): void {\n    this.activeThumbIndex.set(index);\n  }\n\n  onThumbKeydown(event: KeyboardEvent, index: number): void {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    const current = this.valueState()[index];\n    const config = this.config();\n    const pageStep = config.step * 10;\n    const direction = this.resolvedDirection();\n    let nextValue: number | null = null;\n\n    switch (event.key) {\n      case 'ArrowRight':\n        nextValue =\n          current +\n          (direction === 'rtl' && this.orientation() === 'horizontal' ? -config.step : config.step);\n        break;\n      case 'ArrowLeft':\n        nextValue =\n          current +\n          (direction === 'rtl' && this.orientation() === 'horizontal' ? config.step : -config.step);\n        break;\n      case 'ArrowUp':\n        nextValue = current + config.step;\n        break;\n      case 'ArrowDown':\n        nextValue = current - config.step;\n        break;\n      case 'PageUp':\n        nextValue = current + pageStep;\n        break;\n      case 'PageDown':\n        nextValue = current - pageStep;\n        break;\n      case 'Home':\n        nextValue = thumbBounds(this.valueState(), index, config).min;\n        break;\n      case 'End':\n        nextValue = thumbBounds(this.valueState(), index, config).max;\n        break;\n      default:\n        return;\n    }\n\n    event.preventDefault();\n    this.activeThumbIndex.set(index);\n    this.updateThumbValue(index, nextValue);\n  }\n\n  private beginDrag(event: PointerEvent, index: number): void {\n    this.pointerId.set(event.pointerId);\n    this.draggedThumbIndex.set(index);\n    this.focusThumb(index);\n  }\n\n  private updateThumbValue(index: number, rawValue: number): void {\n    const current = this.valueState();\n    const bounds = thumbBounds(current, index, this.config());\n    const nextValues = current.slice();\n\n    nextValues[index] = snapWithinBounds(rawValue, bounds.min, bounds.max, this.config());\n\n    if (sameValues(nextValues, current)) {\n      return;\n    }\n\n    this.valueState.set(nextValues);\n    this.valueChange.emit(nextValues);\n  }\n\n  private valueFromPointer(event: PointerEvent): number | null {\n    const track = this.track().nativeElement;\n    const rect = track.getBoundingClientRect();\n    const config = this.config();\n\n    if (rect.width <= 0 || rect.height <= 0) {\n      return null;\n    }\n\n    let ratio = 0;\n\n    if (this.orientation() === 'horizontal') {\n      const physicalRatio = clamp((event.clientX - rect.left) / rect.width, 0, 1);\n      ratio = this.resolvedDirection() === 'rtl' ? 1 - physicalRatio : physicalRatio;\n    } else {\n      ratio = clamp((rect.bottom - event.clientY) / rect.height, 0, 1);\n    }\n\n    return config.min + ratio * (config.max - config.min);\n  }\n\n  private closestThumbIndex(nextValue: number): number {\n    const values = this.valueState();\n    let bestIndex = 0;\n    let bestDistance = Number.POSITIVE_INFINITY;\n\n    values.forEach((value, index) => {\n      const distance = Math.abs(value - nextValue);\n      if (distance < bestDistance) {\n        bestDistance = distance;\n        bestIndex = index;\n      }\n    });\n\n    return bestIndex;\n  }\n\n  private rangeSpan(): { start: number; end: number } {\n    const positions = this.valueState().map((value) => this.positionPercent(value));\n\n    if (!positions.length) {\n      return { start: 0, end: 0 };\n    }\n\n    if (positions.length === 1) {\n      const minBoundary = this.positionPercent(this.config().min);\n      return {\n        start: Math.min(minBoundary, positions[0]),\n        end: Math.max(minBoundary, positions[0]),\n      };\n    }\n\n    return {\n      start: Math.min(...positions),\n      end: Math.max(...positions),\n    };\n  }\n\n  private positionPercent(value: number): number {\n    const config = this.config();\n    const range = config.max - config.min;\n\n    if (range <= 0) {\n      return this.orientation() === 'horizontal' && this.resolvedDirection() === 'rtl' ? 100 : 0;\n    }\n\n    const logicalRatio = (value - config.min) / range;\n    const physicalRatio =\n      this.orientation() === 'horizontal' && this.resolvedDirection() === 'rtl'\n        ? 1 - logicalRatio\n        : logicalRatio;\n\n    return clamp(physicalRatio * 100, 0, 100);\n  }\n\n  private thumbLabel(index: number, count: number): string | null {\n    const labels = this.thumbLabels();\n\n    if (labels?.[index]) {\n      return labels[index] ?? null;\n    }\n\n    if (count === 1) {\n      return this.ariaLabel();\n    }\n\n    return this.ariaLabel() ? `${this.ariaLabel()} ${index + 1}` : `Slider thumb ${index + 1}`;\n  }\n\n  private focusThumb(index: number): void {\n    const thumb = this.host.nativeElement.querySelector<HTMLButtonElement>(\n      `.slider__thumb[data-index=\"${index}\"]`,\n    );\n    thumb?.focus();\n  }\n\n  private resolvedDirection(): 'ltr' | 'rtl' {\n    const host = this.host.nativeElement;\n\n    if (host.dir === 'ltr' || host.dir === 'rtl') {\n      return host.dir;\n    }\n\n    const view = this.document.defaultView;\n    if (!view) {\n      return 'ltr';\n    }\n\n    return view.getComputedStyle(host).direction === 'rtl' ? 'rtl' : 'ltr';\n  }\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max);\n}\n\nfunction clampIndex(index: number, length: number): number {\n  return clamp(index, 0, Math.max(length - 1, 0));\n}\n\nfunction decimalPlaces(value: number): number {\n  const text = `${value}`;\n  const fraction = text.split('.')[1];\n  return fraction?.length ?? 0;\n}\n\nfunction normalizeSliderValues(values: readonly number[], config: SliderConfig): number[] {\n  const incoming = values.length ? [...values] : [config.min];\n  const sorted = incoming\n    .map((value) => snapToStep(value, config))\n    .sort((left, right) => left - right);\n  const gap = config.step * config.minStepsBetweenThumbs;\n  const normalized: number[] = [];\n\n  sorted.forEach((value, index) => {\n    const remaining = sorted.length - index - 1;\n    const min = index === 0 ? config.min : normalized[index - 1] + gap;\n    const max = Math.max(min, config.max - remaining * gap);\n    normalized.push(snapWithinBounds(value, min, max, config));\n  });\n\n  return normalized;\n}\n\nfunction sameValues(left: readonly number[], right: readonly number[]): boolean {\n  return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction snapToStep(value: number, config: SliderConfig): number {\n  const ratio = (value - config.min) / config.step;\n  const snapped = config.min + Math.round(ratio) * config.step;\n  const precision = Math.max(decimalPlaces(config.step), decimalPlaces(config.min));\n  return Number(snapped.toFixed(precision));\n}\n\nfunction snapWithinBounds(value: number, min: number, max: number, config: SliderConfig): number {\n  const boundedMin = Math.min(min, max);\n  const boundedMax = Math.max(min, max);\n  const snapped = snapToStep(value, config);\n  return clamp(snapped, boundedMin, boundedMax);\n}\n\nfunction thumbBounds(\n  values: readonly number[],\n  index: number,\n  config: SliderConfig,\n): { min: number; max: number } {\n  const gap = config.step * config.minStepsBetweenThumbs;\n  const min = index === 0 ? config.min : values[index - 1] + gap;\n  const max = index === values.length - 1 ? config.max : values[index + 1] - gap;\n  return { min: Math.min(min, max), max: Math.max(min, max) };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}