{"version":3,"file":"slider.mjs","sources":["../src/slider/utils.ts","../src/slider/SliderRoot.ts","../src/slider/SliderRange.ts","../src/slider/SliderRange.vue","../src/slider/SliderRoot.vue","../src/slider/SliderThumb.ts","../src/slider/SliderBubbleInput.vue","../src/slider/SliderThumb.vue","../src/slider/SliderTrack.ts","../src/slider/SliderTrack.vue"],"sourcesContent":["import { clamp } from '../shared/index.ts'\n\nexport function getNextSortedValues(prevValues: number[] = [], nextValue: number, atIndex: number) {\n  const nextValues = [...prevValues]\n  nextValues[atIndex] = nextValue\n  return nextValues.sort((a, b) => a - b)\n}\n\nexport function convertValueToPercentage(value: number, min: number, max: number) {\n  const maxSteps = max - min\n  const percentPerStep = 100 / maxSteps\n  const percentage = percentPerStep * (value - min)\n  return clamp(percentage, 0, 100)\n}\n\n/**\n * Returns a label for each thumb when there are two or more thumbs\n */\nexport function getLabel(index: number, totalValues: number) {\n  if (totalValues > 2)\n    return `Value ${index + 1} of ${totalValues}`\n\n  if (totalValues === 2)\n    return ['Minimum', 'Maximum'][index]\n\n  return undefined\n}\n\n/**\n * Given a `values` array and a `nextValue`, determine which value in\n * the array is closest to `nextValue` and return its index.\n *\n * @example\n * // returns 1\n * getClosestValueIndex([10, 30], 25);\n */\nexport function getClosestValueIndex(values: number[], nextValue: number) {\n  if (values.length === 1)\n    return 0\n  const distances = values.map(value => Math.abs(value - nextValue))\n  const closestDistance = Math.min(...distances)\n  return distances.indexOf(closestDistance)\n}\n\n/**\n * Offsets the thumb centre point while sliding to ensure it remains\n * within the bounds of the slider when reaching the edges\n */\nexport function getThumbInBoundsOffset(width: number, left: number, direction: number) {\n  const halfWidth = width / 2\n  const halfPercent = 50\n  const offset = linearScale([0, halfPercent], [0, halfWidth])\n  return (halfWidth - offset(left) * direction) * direction\n}\n\n/**\n * Gets an array of steps between each value.\n *\n * @example\n * // returns [1, 9]\n * getStepsBetweenValues([10, 11, 20]);\n */\nexport function getStepsBetweenValues(values: number[]) {\n  return values.slice(0, -1).map((value, index) => values[index + 1]! - value)\n}\n\n/**\n * Verifies the minimum steps between all values is greater than or equal\n * to the expected minimum steps.\n *\n * @example\n * // returns false\n * hasMinStepsBetweenValues([1,2,3], 2);\n *\n * @example\n * // returns true\n * hasMinStepsBetweenValues([1,2,3], 1);\n */\nexport function hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number) {\n  if (minStepsBetweenValues > 0) {\n    const stepsBetweenValues = getStepsBetweenValues(values)\n    const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues)\n    return actualMinStepsBetweenValues >= minStepsBetweenValues\n  }\n  return true\n}\n\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nexport function linearScale(input: readonly [number, number], output: readonly [number, number]) {\n  return (value: number) => {\n    if (input[0] === input[1] || output[0] === output[1])\n      return output[0]\n    const ratio = (output[1] - output[0]) / (input[1] - input[0])\n    return output[0] + ratio * (value - input[0])\n  }\n}\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport type { EmitsToHookProps, LooseRequired, PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { computed, type HTMLAttributes, type MaybeRefOrGetter, type Ref, type UnwrapRef } from 'vue'\nimport { createCollection } from '../collection/index.ts'\nimport { type Direction, useDirection } from '../direction/index.ts'\nimport { createContext, type MutableRefObject, useControllableStateV3, useRef, type useSize } from '../hooks/index.ts'\nimport { clamp, getDecimalCount, isNumber, mergePrimitiveAttrs, roundValue } from '../shared/index.ts'\nimport { getClosestValueIndex, getNextSortedValues, hasMinStepsBetweenValues, linearScale } from './utils.ts'\n\nexport const PAGE_KEYS = ['PageUp', 'PageDown']\nexport const ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']\n\nexport type SlideDirection = 'from-left' | 'from-right' | 'from-bottom' | 'from-top'\nexport const BACK_KEYS: Record<SlideDirection, string[]> = {\n  'from-left': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],\n  'from-right': ['Home', 'PageDown', 'ArrowDown', 'ArrowRight'],\n  'from-bottom': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],\n  'from-top': ['Home', 'PageDown', 'ArrowUp', 'ArrowLeft'],\n}\n\nexport interface SliderRootProps {\n  as?: PrimitiveProps['as']\n  name?: string\n  disabled?: boolean\n  orientation?: HTMLAttributes['aria-orientation']\n  dir?: Direction\n  min?: number\n  max?: number\n  step?: number\n  minStepsBetweenThumbs?: number\n  value?: number[]\n  defaultValue?: number[]\n  inverted?: boolean\n}\n\nexport const DEFAULT_SLIDER_ROOT_PROPS = {\n  as: 'span',\n  disabled: undefined,\n  inverted: undefined,\n  min: 0,\n  max: 100,\n  step: 1,\n  minStepsBetweenThumbs: 0,\n  defaultValue: (v: LooseRequired<SliderRootProps>) => isNumber(v.min) ? [v.min] : [0],\n} satisfies PrimitiveDefaultProps<SliderRootProps>\n\nexport type SliderRootEmits = {\n  'update:value': [value: number[]]\n  'valueCommit': [value: number[]]\n}\n\nexport interface SliderContext {\n  name: () => string | undefined\n  disabled: () => boolean | undefined\n  min: () => number\n  max: () => number\n  values: Ref<number[]>\n  valueIndexToChangeRef: MutableRefObject<number>\n  thumbs: Set<HTMLElement>\n  orientation: NonNullable<SliderRootProps['orientation']>\n}\n\nexport const [provideSliderContext, useSliderContext] = createContext<SliderContext>('Slider')\n\nexport const [Collection, useCollection] = createCollection<HTMLElement>('Slider')\n\nexport type Side = 'top' | 'right' | 'bottom' | 'left'\n\nexport type SliderOrientationContext = Ref<{\n  startEdge: Side\n  endEdge: Side\n  size: keyof NonNullable<UnwrapRef<ReturnType<typeof useSize>>>\n  direction: number\n}>\n\nexport const [provideSliderOrientationContext, useSliderOrientationContext] = createContext<SliderOrientationContext>('SliderOrientation')\n\nexport interface UseSliderRootProps extends EmitsToHookProps<SliderRootEmits> {\n  el?: MutableRefObject<HTMLElement>\n  value?: () => number[] | undefined\n  defaultValue?: () => number[]\n  name?: () => string | undefined\n  disabled?: () => boolean | undefined\n  orientation?: HTMLAttributes['aria-orientation']\n  dir?: MaybeRefOrGetter<Direction | undefined>\n  min?: () => number\n  max?: () => number\n  step?: () => number\n  minStepsBetweenThumbs?: () => number\n  inverted?: boolean\n}\n\nexport function useSliderRoot(props: UseSliderRootProps): RadixPrimitiveReturns {\n  const {\n    name = () => undefined,\n    min = () => 0,\n    max = () => 100,\n    step = () => 1,\n    disabled = () => false,\n    orientation = 'horizontal',\n    minStepsBetweenThumbs = () => 0,\n    defaultValue = () => {\n      const _min = min()\n      return isNumber(_min) ? [_min] : [0]\n    },\n  } = props\n\n  const el = props.el || useRef<HTMLElement>()\n  const setElRef = props.el ? undefined : (value: HTMLElement | undefined) => el.value = value\n\n  Collection.provideCollectionContext(el)\n\n  const thumbs: SliderContext['thumbs'] = new Set()\n  const valueIndexToChangeRef = useRef(0)\n\n  // TODO: is not reactive\n  const values = useControllableStateV3(\n    props.value,\n    (v) => {\n      const _thumbs = Array.from(thumbs)\n      _thumbs[valueIndexToChangeRef.value]?.focus()\n      props.onUpdateValue?.(v as number[])\n    },\n    defaultValue,\n  )\n\n  let valuesBeforeSlideStartRef = values.value\n\n  function onSliderSlideStart(value: number) {\n    const closestIndex = getClosestValueIndex(values.value, value)\n    updateValues(value, closestIndex)\n  }\n\n  function onSliderSlideMove(value: number) {\n    updateValues(value, valueIndexToChangeRef.value)\n  }\n\n  function onSliderSlideEnd() {\n    const prevValue = valuesBeforeSlideStartRef[valueIndexToChangeRef.value]\n    const nextValue = values.value[valueIndexToChangeRef.value]\n    const hasChanged = nextValue !== prevValue\n    if (hasChanged) {\n      props.onValueCommit?.(values.value)\n    }\n  }\n\n  function onSliderHomeKeydown() {\n    updateValues(min(), 0, { commit: true })\n  }\n\n  function onSliderEndKeydown() {\n    updateValues(max(), values.value.length - 1, { commit: true })\n  }\n\n  function onSliderStepKeydown({ event, direction: stepDirection }: { event: KeyboardEvent, direction: number }) {\n    const isPageKey = PAGE_KEYS.includes(event.key)\n    const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.includes(event.key))\n    const multiplier = isSkipKey ? 10 : 1\n    const atIndex = valueIndexToChangeRef.value\n    const value = values.value[atIndex]!\n    const stepInDirection = step() * multiplier * stepDirection\n    updateValues(value + stepInDirection, atIndex, { commit: true })\n  }\n\n  function updateValues(value: number, atIndex: number, { commit } = { commit: false }) {\n    const decimalCount = getDecimalCount(step())\n    const snapToStep = roundValue(Math.round((value - min()) / step()) * step() + min(), decimalCount)\n    const nextValue = clamp(snapToStep, min(), max())\n\n    const prevValues = values.value\n    const nextValues = getNextSortedValues(values.value, nextValue, atIndex)\n\n    if (!hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs() * step()))\n      return\n\n    valueIndexToChangeRef.value = nextValues.indexOf(nextValue)\n    const hasChanged = String(nextValues) !== String(prevValues)\n\n    if (!hasChanged)\n      return\n\n    if (commit) {\n      props.onValueCommit?.(nextValues)\n    }\n    values.value = nextValues\n  }\n\n  function onSliderPointerdown() {\n    valuesBeforeSlideStartRef = values.value\n  }\n\n  provideSliderContext({\n    name,\n    disabled,\n    min,\n    max,\n    valueIndexToChangeRef,\n    thumbs,\n    values,\n    orientation,\n  })\n\n  // COMP::SliderOrientation\n\n  const isHorisontal = orientation === 'horizontal'\n\n  interface OrientationLocalState {\n    readonly reactSise: 'width' | 'height'\n    readonly rectStartEdge: 'left' | 'top'\n    readonly clientEdge: 'x' | 'y'\n    readonly slideDirectionSte: 'from-left' | 'from-bottom'\n    readonly slideDirectionEts: 'from-right' | 'from-top'\n  }\n\n  const orientationLocalState: OrientationLocalState = {\n    reactSise: isHorisontal ? 'width' : 'height',\n    rectStartEdge: isHorisontal ? 'left' : 'top',\n    clientEdge: isHorisontal ? 'x' : 'y',\n    slideDirectionSte: isHorisontal ? 'from-left' : 'from-bottom',\n    slideDirectionEts: isHorisontal ? 'from-right' : 'from-top',\n  }\n\n  let rectRef: DOMRect | undefined\n  const direction = useDirection(props.dir)\n\n  const isSlidingFromStart = computed(() => {\n    if (isHorisontal) {\n      const isLtr = direction.value === 'ltr'\n      return (isLtr && !props.inverted) || (!isLtr && props.inverted)\n    }\n\n    return !props.inverted\n  })\n\n  function getValueFromPointer(pointerPosition: number) {\n    const rect = rectRef || el.value!.getBoundingClientRect()\n    const input: [number, number] = [0, rect[orientationLocalState.reactSise]]\n    const output: [number, number] = isSlidingFromStart.value === isHorisontal ? [min(), max()] : [max(), min()]\n    const value = linearScale(input, output)\n\n    rectRef = rect\n\n    return value(pointerPosition - rect[orientationLocalState.rectStartEdge])\n  }\n\n  function onOrientationSlideStart(event: PointerEvent) {\n    const value = getValueFromPointer(event[orientationLocalState.clientEdge])\n    onSliderSlideStart(value)\n  }\n\n  function onOrientationSlideMove(event: PointerEvent) {\n    const value = getValueFromPointer(event[orientationLocalState.clientEdge])\n    onSliderSlideMove(value)\n  }\n\n  function onOrientationSlideEnd() {\n    rectRef = undefined\n    onSliderSlideEnd()\n  }\n\n  function onOrientationStepKeydown(event: KeyboardEvent) {\n    const slideDirection = isSlidingFromStart.value ? orientationLocalState.slideDirectionSte : orientationLocalState.slideDirectionEts\n    const isBackKey = BACK_KEYS[slideDirection].includes(event.key)\n    onSliderStepKeydown({ event, direction: isBackKey ? -1 : 1 })\n  }\n\n  const orientationContext = computed(() => {\n    const _startEdge = isHorisontal ? 'left' : 'bottom'\n    const _endEdge = isHorisontal ? 'right' : 'top'\n\n    const startEdge = isSlidingFromStart.value ? _startEdge : _endEdge\n    const endEdge = isSlidingFromStart.value ? _endEdge : _startEdge\n    const direction = isSlidingFromStart.value ? 1 : -1\n    const size = isHorisontal ? 'width' : 'height'\n\n    return { startEdge, endEdge, direction, size } as const\n  })\n\n  provideSliderOrientationContext(orientationContext)\n\n  // COMP::SliderImpl\n\n  function onKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    if (event.key === 'Home') {\n      onSliderHomeKeydown()\n      // Prevent scrolling to page start\n      event.preventDefault()\n    }\n    else if (event.key === 'End') {\n      onSliderEndKeydown()\n      // Prevent scrolling to page end\n      event.preventDefault()\n    }\n    else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n      onOrientationStepKeydown(event)\n      // Prevent scrolling for directional key presses\n      event.preventDefault()\n    }\n  }\n\n  function onPointerdown(event: PointerEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    onSliderPointerdown()\n\n    const target = event.target as HTMLElement\n    target.setPointerCapture(event.pointerId)\n    // Prevent browser focus behaviour because we focus a thumb manually when values change.\n    event.preventDefault()\n    // Touch devices have a delay before focusing so won't focus if touch immediately moves\n    // away from target (sliding). We want thumb to focus regardless.\n    if (thumbs.has(target)) {\n      target.focus()\n    }\n    else {\n      onOrientationSlideStart(event)\n    }\n  }\n\n  function onPointermove(event: PointerEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    const target = event.target as HTMLElement\n    if (target.hasPointerCapture(event.pointerId))\n      onOrientationSlideMove(event)\n  }\n\n  function onPointerup(event: PointerEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    const target = event.target as HTMLElement\n    if (target.hasPointerCapture(event.pointerId)) {\n      target.releasePointerCapture(event.pointerId)\n      onOrientationSlideEnd()\n    }\n  }\n\n  return {\n    attrs(extraAttrs) {\n      const _disabled = disabled()\n\n      const attrs = {\n        'elRef': setElRef,\n        'dir': direction.value,\n        'data-orientation': orientation,\n        'aria-disabled': _disabled,\n        'data-disabled': _disabled ? '' : undefined,\n        'style': orientation === 'horizontal' ? '--radix-slider-thumb-transform: translateX(-50%)' : '--radix-slider-thumb-transform: translateY(50%)',\n        onKeydown,\n        onPointerdown,\n        onPointermove,\n        onPointerup,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","import type { PrimitiveProps } from '../primitive'\nimport { computed } from 'vue'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useSliderContext, useSliderOrientationContext } from './SliderRoot.ts'\nimport { convertValueToPercentage } from './utils.ts'\n\nexport interface SliderRangeProps {\n  as?: PrimitiveProps['as']\n}\n\nexport const DEFAULT_SLIDER_RANGE_PROPS = {\n  as: 'span',\n} satisfies PrimitiveDefaultProps<SliderRangeProps>\n\nexport function useSliderRange(): RadixPrimitiveReturns {\n  const context = useSliderContext('SliderRange')\n  const orientation = useSliderOrientationContext('SliderRange')\n\n  const percentages = computed(() => context.values.value.map(value => convertValueToPercentage(value, context.min(), context.max())))\n\n  const offsetStart = computed(() => context.values.value.length > 1 ? Math.min(...percentages.value) : 0)\n  const offsetEnd = computed(() => 100 - Math.max(...percentages.value))\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        'data-disabled': context.disabled() ? '' : undefined,\n        'data-orientation': context.orientation,\n        'style': {\n          [orientation.value.startEdge]: `${offsetStart.value}%`,\n          [orientation.value.endEdge]: `${offsetEnd.value}%`,\n        },\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_SLIDER_RANGE_PROPS, type SliderRangeProps, useSliderRange } from './SliderRange.ts'\n\ndefineOptions({\n  name: 'SliderRange',\n  inheritAttrs: false,\n})\n\nwithDefaults(defineProps<SliderRangeProps>(), DEFAULT_SLIDER_RANGE_PROPS)\n\nconst sliderRange = useSliderRange()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(sliderRange.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n","<script setup lang=\"ts\">\nimport type { EmitsToHookProps } from '../shared/index.ts'\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_SLIDER_ROOT_PROPS, type SliderRootEmits, type SliderRootProps, useSliderRoot } from './SliderRoot.ts'\n\ndefineOptions({\n  name: 'SliderRoot',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SliderRootProps>(), DEFAULT_SLIDER_ROOT_PROPS)\n\nconst emit = defineEmits<SliderRootEmits>()\n\nconst sliderRoot = useSliderRoot(convertPropsToHookProps(props, [\n  'value',\n  'defaultValue',\n  'name',\n  'disabled',\n  'dir',\n  'min',\n  'max',\n  'step',\n  'minStepsBetweenThumbs',\n], (): Required<EmitsToHookProps<SliderRootEmits>> => ({\n  onUpdateValue(value) {\n    emit('update:value', value)\n  },\n  onValueCommit(value) {\n    emit('valueCommit', value)\n  },\n})))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(sliderRoot.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport { computed, onBeforeUnmount, onMounted, type Ref, shallowRef } from 'vue'\nimport { DATA_COLLECTION_ITEM } from '../collection/index.ts'\nimport { useSize } from '../hooks/index.ts'\nimport { type IAttrsData, mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveGetAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useCollection, useSliderContext, useSliderOrientationContext } from './SliderRoot.ts'\nimport { convertValueToPercentage, getLabel, getThumbInBoundsOffset } from './utils.ts'\n\nexport interface SliderThumbProps {\n  as?: PrimitiveProps['as']\n  name?: string\n}\n\nexport const DEFAULT_SLIDER_THUMB_PROPS = {\n  as: 'span',\n} satisfies PrimitiveDefaultProps<SliderThumbProps>\n\n// export interface SliderThumbContext {\n//   bubbleInput: {\n//     name: () => string | undefined\n//     value: Ref<number | undefined>\n//   }\n// }\n\n// export const [provideSliderThumbContext, useSliderThumbContext] = createContext<SliderThumbContext>('Checkbox')\n\nexport interface UseSliderThumbProps {\n  el?: Ref<HTMLElement>\n  name?: () => string | undefined\n}\n\nexport function useSliderThumb(props: UseSliderThumbProps = {}): RadixPrimitiveReturns<{\n  bubbleInput: {\n    name: () => string | undefined\n    value: Ref<number | undefined>\n    index: Ref<number>\n  }\n  isFormControl: Ref<boolean>\n  wrapperAttrs: () => IAttrsData\n  attrs: RadixPrimitiveGetAttrs\n}> {\n  const el = props.el || shallowRef<HTMLElement>()\n  const setElRef = props.el ? undefined : (value: HTMLElement | undefined) => el.value = value\n\n  const getItems = useCollection()\n  // TODO: check: index is not reactive\n  const index = computed(() => el.value ? getItems().findIndex(item => item === el.value) : -1)\n\n  const context = useSliderContext('SliderThumbImpl')\n  const orientation = useSliderOrientationContext('SliderThumbImpl')\n\n  // We set this to true by default so that events bubble to forms without JS (SSR)\n  const isFormControl = computed(() => el.value ? Boolean(el.value.closest('form')) : true)\n  const size = useSize(el)\n\n  // We cast because index could be `-1` which would return undefined\n  const value = computed(() => context.values.value[index.value])\n\n  const percent = computed(() => value.value === undefined ? 0 : convertValueToPercentage(value.value, context.min(), context.max()))\n  const label = computed(() => getLabel(index.value, context.values.value.length))\n\n  const thumbInBoundsOffset = computed(() => {\n    const orientationSize = size.value?.[orientation.value.size]\n    return orientationSize ? getThumbInBoundsOffset(orientationSize, percent.value, orientation.value.direction) : 0\n  })\n\n  onMounted(() => {\n    context.thumbs.add(el.value!)\n  })\n\n  onBeforeUnmount(() => {\n    context.thumbs.delete(el.value!)\n  })\n\n  function onFocus(event: FocusEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    context.valueIndexToChangeRef.value = index.value\n  }\n\n  return {\n    bubbleInput: {\n      name() {\n        const propsName = props.name?.()\n        if (propsName != null)\n          return propsName\n\n        const contextName = context.name()\n\n        return (contextName ? contextName + (context.values.value.length > 1 ? '[]' : '') : undefined)\n      },\n      value,\n      index,\n    },\n    isFormControl,\n    wrapperAttrs(): IAttrsData {\n      const attrs = {\n        style: {\n          transform: 'var(--radix-slider-thumb-transform)',\n          position: 'absolute',\n          [orientation.value.startEdge]: `calc(${percent.value}% + ${thumbInBoundsOffset.value}px)`,\n        },\n      }\n\n      return attrs\n    },\n    attrs(extraAttrs) {\n      const _orientation = context.orientation\n      const _disabled = context.disabled()\n      const attrs = {\n        'elRef': setElRef,\n        'role': 'slider',\n        'aria-label': label.value,\n        'aria-valuemin': context.min(),\n        'aria-valuenow': value.value,\n        'aria-valuemax': context.max(),\n        'aria-orientation': _orientation,\n        'data-orientation': _orientation,\n        'data-disabled': _disabled ? '' : undefined,\n        'tabindex': _disabled ? undefined : 0,\n        [DATA_COLLECTION_ITEM]: true,\n\n        'style': {\n          /**\n           * There will be no value on initial render while we work out the index so we hide thumbs\n           * without a value, otherwise SSR will render them in the wrong position before they\n           * snap into the correct position during hydration which would be visually jarring for\n           * slower connections.\n           */\n          ...value.value === undefined ? { display: 'none' } : undefined,\n        },\n        onFocus,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport type { SliderBubbleInputProps } from './SliderBubbleInput.ts'\nimport { watch } from 'vue'\n\ndefineOptions({\n  name: 'SliderBubbleInput',\n  inheritAttrs: false,\n})\n\nconst props = defineProps<SliderBubbleInputProps>()\n\nlet input: HTMLInputElement | undefined\nfunction setElRef(vNode: any) {\n  input = vNode\n}\n\n// TODO: Check if this is the correct way to create a change event\n// const initValue = props.value\n\n// Bubble checked change to parents (e.g form change event)\nwatch(() => props.value, (value, prevValue) => {\n  if (!input)\n    return\n\n  const inputProto = window.HTMLInputElement.prototype\n  const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'value') as PropertyDescriptor\n  const setValue = descriptor.set\n\n  if (prevValue !== value && setValue) {\n    // TODO: Check if this is the correct way to create a change event\n    const inputEvent = new Event('input', { bubbles: true })\n    const changeEvent = new Event('change', { bubbles: true })\n    setValue.call(input, value)\n    input.dispatchEvent(inputEvent)\n    input.dispatchEvent(changeEvent)\n  }\n})\n\n/**\n * We purposefully do not use `type=\"hidden\"` here otherwise forms that\n * wrap it will not be able to access its value via the FormData API.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programatically and bubble to any parent form `onChange` event.\n * Adding the `value` will cause React to consider the programatic\n * dispatch a duplicate and it will get swallowed.\n */\n</script>\n\n<template>\n  <input :ref=\"setElRef\" :name=\"name\" type=\"number\" style=\"display: none\" :value=\"value\">\n</template>\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport SliderBubbleInput from './SliderBubbleInput.vue'\nimport { DEFAULT_SLIDER_THUMB_PROPS, type SliderThumbProps, useSliderThumb } from './SliderThumb.ts'\n\ndefineOptions({\n  name: 'SliderThumb',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SliderThumbProps>(), DEFAULT_SLIDER_THUMB_PROPS)\n\nconst sliderThumb = useSliderThumb(convertPropsToHookProps(props, ['name']))\n</script>\n\n<template>\n  <span v-bind=\"sliderThumb.wrapperAttrs()\">\n    <Primitive v-bind=\"normalizeAttrs(sliderThumb.attrs([$attrs, { as }]))\">\n      <slot />\n    </Primitive>\n\n    <SliderBubbleInput\n      v-if=\"sliderThumb.isFormControl.value\"\n      :name=\"sliderThumb.bubbleInput.name()\"\n      :value=\"sliderThumb.bubbleInput.value.value\"\n    />\n  </span>\n</template>\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { mergePrimitiveAttrs } from '../shared/index.ts'\nimport { useSliderContext } from './SliderRoot.ts'\n\nexport interface SliderTrackProps {\n  as?: PrimitiveProps['as']\n}\n\nexport const DEFAULT_SLIDER_TRACK_PROPS = {\n  as: 'span',\n} satisfies PrimitiveDefaultProps<SliderTrackProps>\n\nexport function useSliderTrack(): RadixPrimitiveReturns {\n  const context = useSliderContext('SliderTrack')\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        'data-disabled': context.disabled() ? '' : undefined,\n        'data-orientation': context.orientation,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_SLIDER_TRACK_PROPS, type SliderTrackProps, useSliderTrack } from './SliderTrack.ts'\n\ndefineOptions({\n  name: 'SliderTrack',\n  inheritAttrs: false,\n})\n\nwithDefaults(defineProps<SliderTrackProps>(), DEFAULT_SLIDER_TRACK_PROPS)\n\nconst sliderTrack = useSliderTrack()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(sliderTrack.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":["direction","value"],"mappings":"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"}