{"version":3,"file":"RangeSlider.cjs","names":["createVarsResolver","getSize","getThemeColor","getRadius","rem","factory","useProps","useStyles","useDirection","getPosition","getPrecision","findClosestNumber","getLastMarkValue","getFirstMarkValue","getPreviousMarkValue","getNextMarkValue","getFloatingValue","getChangeValue","getClientPosition","SliderProvider","SliderRoot","Track","Thumb","classes"],"sources":["../../../../src/components/Slider/RangeSlider/RangeSlider.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { clamp, useMergedRef, useMove, useUncontrolled } from '@mantine/hooks';\nimport {\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  findClosestNumber,\n  getRadius,\n  getSize,\n  getThemeColor,\n  MantineColor,\n  MantineRadius,\n  MantineSize,\n  rem,\n  StylesApiProps,\n  useDirection,\n  useProps,\n  useStyles,\n} from '../../../core';\nimport { TransitionOverride } from '../../Transition';\nimport { SliderCssVariables, SliderProvider, SliderStylesNames } from '../Slider.context';\nimport { SliderMark } from '../SliderMark';\nimport { SliderRoot } from '../SliderRoot/SliderRoot';\nimport { Thumb } from '../Thumb/Thumb';\nimport { Track } from '../Track/Track';\nimport { getChangeValue } from '../utils/get-change-value/get-change-value';\nimport { getClientPosition } from '../utils/get-client-position/get-client-position';\nimport { getFloatingValue } from '../utils/get-floating-value/get-floating-value';\nimport { getPosition } from '../utils/get-position/get-position';\nimport { getPrecision } from '../utils/get-precision/get-precision';\nimport {\n  getFirstMarkValue,\n  getLastMarkValue,\n  getNextMarkValue,\n  getPreviousMarkValue,\n} from '../utils/get-step-mark-value/get-step-mark-value';\nimport classes from '../Slider.module.css';\n\nexport type RangeSliderValue = [number, number];\n\nexport interface RangeSliderProps\n  extends\n    BoxProps,\n    StylesApiProps<RangeSliderFactory>,\n    ElementProps<'div', 'onChange' | 'value' | 'defaultValue'> {\n  /** Key of `theme.colors` or any valid CSS color, controls color of track and thumb @default theme.primaryColor */\n  color?: MantineColor;\n\n  /** Key of `theme.radius` or any valid CSS value to set `border-radius`, numbers are converted to rem @default 'xl' */\n  radius?: MantineRadius;\n\n  /** Controls size of the track @default 'md' */\n  size?: MantineSize | (string & {}) | number;\n\n  /** Minimal possible value @default 0 */\n  min?: number;\n\n  /** Maximum possible value @default 100 */\n  max?: number;\n\n  /** Domain of the slider, defines the selectable value range independently of min/max. Useful when you want to display a wider track range (min/max) but restrict actual selection to a subset (domain). @default [min, max] */\n  domain?: [number, number];\n\n  /** Number by which value will be incremented/decremented with thumb drag and arrows @default 1 */\n  step?: number;\n\n  /** Number of significant digits after the decimal point */\n  precision?: number;\n\n  /** Controlled component value */\n  value?: RangeSliderValue;\n\n  /** Uncontrolled component default value */\n  defaultValue?: RangeSliderValue;\n\n  /** Called when value changes */\n  onChange?: (value: RangeSliderValue) => void;\n\n  /** Called when user stops dragging slider or changes value with arrows */\n  onChangeEnd?: (value: RangeSliderValue) => void;\n\n  /** Hidden input name, use with uncontrolled component */\n  name?: string;\n\n  /** Marks displayed on the track */\n  marks?: SliderMark[];\n\n  /** Function to generate label or any react node to render instead, set to null to disable label */\n  label?: React.ReactNode | ((value: number) => React.ReactNode);\n\n  /** Props passed down to the `Transition` component @default { transition: 'fade', duration: 0 } */\n  labelTransitionProps?: TransitionOverride;\n\n  /** Determines whether the label should be visible when the slider is not being dragged or hovered @default false */\n  labelAlwaysOn?: boolean;\n\n  /** Determines whether the label should be displayed when the slider is hovered @default true */\n  showLabelOnHover?: boolean;\n\n  /** Content rendered inside thumb */\n  thumbChildren?: React.ReactNode;\n\n  /** Disables slider */\n  disabled?: boolean;\n\n  /** Thumb `width` and `height`, by default value is computed based on `size` prop */\n  thumbSize?: number | string;\n\n  /** A transformation function to change the scale of the slider */\n  scale?: (value: number) => number;\n\n  /** Determines whether track values representation should be inverted @default false */\n  inverted?: boolean;\n\n  /** Slider orientation @default 'horizontal' */\n  orientation?: 'horizontal' | 'vertical';\n\n  /** Minimal range interval between the two thumbs. Consider this value relative to the total range (max - min). @default 10 */\n  minRange?: number;\n\n  /** Maximum range interval @default Infinity */\n  maxRange?: number;\n\n  /** `aria-label` for both thumbs (overridden by thumbFromLabel/thumbToLabel if provided) */\n  thumbLabel?: string;\n\n  /** First thumb `aria-label` */\n  thumbFromLabel?: string;\n\n  /** Second thumb `aria-label` */\n  thumbToLabel?: string;\n\n  /** Props passed down to the hidden input */\n  hiddenInputProps?: React.ComponentProps<'input'>;\n\n  /** Determines whether the selection should be only allowed from the given marks array @default false */\n  restrictToMarks?: boolean;\n\n  /** Props passed down to thumb element based on the thumb index */\n  thumbProps?: (index: 0 | 1) => React.ComponentProps<'div'>;\n\n  /** Determines whether the other thumb should be pushed by the current thumb dragging when `minRange`/`maxRange` is reached @default true */\n  pushOnOverlap?: boolean;\n}\n\nexport type RangeSliderFactory = Factory<{\n  props: RangeSliderProps;\n  ref: HTMLDivElement;\n  stylesNames: SliderStylesNames;\n  vars: SliderCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<RangeSliderFactory>(\n  (theme, { size, color, thumbSize, radius }) => ({\n    root: {\n      '--slider-size': getSize(size, 'slider-size'),\n      '--slider-color': color ? getThemeColor(color, theme) : undefined,\n      '--slider-radius': radius === undefined ? undefined : getRadius(radius),\n      '--slider-thumb-size':\n        thumbSize !== undefined ? rem(thumbSize) : 'calc(var(--slider-size) * 2)',\n    },\n  })\n);\n\nconst defaultProps = {\n  min: 0,\n  max: 100,\n  minRange: 10,\n  step: 1,\n  marks: [],\n  label: (f) => f,\n  labelTransitionProps: { transition: 'fade', duration: 0 },\n  labelAlwaysOn: false,\n  showLabelOnHover: true,\n  disabled: false,\n  pushOnOverlap: true,\n  scale: (v) => v,\n  size: 'md',\n  maxRange: Infinity,\n} satisfies Partial<RangeSliderProps>;\n\nexport const RangeSlider = factory<RangeSliderFactory>((_props) => {\n  const props = useProps('RangeSlider', defaultProps, _props);\n  const {\n    classNames,\n    styles,\n    value,\n    onChange,\n    onChangeEnd,\n    size,\n    min,\n    max,\n    domain,\n    minRange,\n    maxRange,\n    step,\n    precision: _precision,\n    defaultValue,\n    name,\n    marks,\n    label,\n    labelTransitionProps,\n    labelAlwaysOn,\n    thumbFromLabel,\n    thumbToLabel,\n    showLabelOnHover,\n    thumbChildren,\n    disabled,\n    unstyled,\n    scale,\n    inverted,\n    orientation,\n    className,\n    style,\n    vars,\n    hiddenInputProps,\n    restrictToMarks,\n    thumbProps,\n    pushOnOverlap,\n    attributes,\n    ref,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<RangeSliderFactory>({\n    name: 'RangeSlider',\n    props,\n    classes,\n    classNames,\n    className,\n    styles,\n    style,\n    attributes,\n    vars,\n    varsResolver,\n    unstyled,\n  });\n\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const { dir } = useDirection();\n  const [focused, setFocused] = useState(-1);\n  const [hovered, setHovered] = useState(false);\n  const [_value, setValue] = useUncontrolled<RangeSliderValue>({\n    value,\n    defaultValue,\n    finalValue: [min, max],\n    onChange,\n  });\n  const valueRef = useRef(_value);\n  const thumbs = useRef<HTMLDivElement[]>([]);\n  const root = useRef<HTMLDivElement>(null);\n  const thumbIndex = useRef<number | undefined>(undefined);\n  const [domainMin, domainMax] = domain || [min!, max!];\n  const positions = [\n    getPosition({ value: _value[0], min: domainMin, max: domainMax }),\n    getPosition({ value: _value[1], min: domainMin, max: domainMax }),\n  ];\n\n  const precision = _precision ?? getPrecision(step);\n\n  const _setValue = (val: RangeSliderValue) => {\n    setValue(val);\n    valueRef.current = val;\n  };\n\n  useEffect(\n    () => {\n      if (Array.isArray(value)) {\n        valueRef.current = value;\n      }\n    },\n    Array.isArray(value) ? [value[0], value[1]] : [null, null]\n  );\n\n  const setRangedValue = (val: number, index: number, triggerChangeEnd: boolean) => {\n    if (index === -1) {\n      return;\n    }\n\n    const clone: RangeSliderValue = [...valueRef.current];\n\n    if (restrictToMarks && marks) {\n      const closest = findClosestNumber(\n        val,\n        marks.map((m) => m.value)\n      );\n\n      const current = clone[index];\n      clone[index] = closest;\n      const otherIndex = index === 0 ? 1 : 0;\n\n      const lastMarkValue = getLastMarkValue(marks);\n      const firstMarkValue = getFirstMarkValue(marks);\n\n      if (closest === lastMarkValue && clone[otherIndex] === lastMarkValue) {\n        clone[index] = current;\n      } else if (closest === firstMarkValue && clone[otherIndex] === firstMarkValue) {\n        clone[index] = current;\n      } else if (closest === clone[otherIndex]) {\n        if (current > clone[otherIndex]) {\n          clone[otherIndex] = getPreviousMarkValue(closest, marks);\n        } else {\n          clone[otherIndex] = getNextMarkValue(closest, marks);\n        }\n      }\n    } else {\n      const clampedVal = clamp(val, min!, max!);\n      clone[index] = clampedVal;\n\n      if (index === 0) {\n        if (clampedVal > clone[1] - (minRange - 0.000000001)) {\n          if (pushOnOverlap) {\n            clone[1] = Math.min(val + minRange, max);\n          } else {\n            clone[index] = valueRef.current[index];\n          }\n        }\n\n        if (clampedVal > (max - (minRange - 0.000000001) || min)) {\n          clone[index] = valueRef.current[index];\n        }\n\n        if (clone[1] - val > maxRange) {\n          if (pushOnOverlap) {\n            clone[1] = val + maxRange;\n          } else {\n            clone[index] = valueRef.current[index];\n          }\n        }\n      }\n\n      if (index === 1) {\n        if (clampedVal < clone[0] + minRange) {\n          if (pushOnOverlap) {\n            clone[0] = Math.max(val - minRange, min);\n          } else {\n            clone[index] = valueRef.current[index];\n          }\n        }\n\n        if (clampedVal < clone[0] + minRange) {\n          clone[index] = valueRef.current[index];\n        }\n\n        if (clampedVal - clone[0] > maxRange) {\n          if (pushOnOverlap) {\n            clone[0] = val - maxRange;\n          } else {\n            clone[index] = valueRef.current[index];\n          }\n        }\n      }\n    }\n\n    clone[0] = getFloatingValue(clone[0], precision);\n    clone[1] = getFloatingValue(clone[1], precision);\n\n    if (clone[0] > clone[1]) {\n      const temp = clone[0];\n      clone[0] = clone[1];\n      clone[1] = temp;\n    }\n\n    _setValue(clone);\n\n    if (triggerChangeEnd) {\n      onChangeEnd?.(valueRef.current);\n    }\n  };\n\n  const handleChange = (val: number) => {\n    if (!disabled && thumbIndex.current !== undefined) {\n      const nextValue = getChangeValue({\n        value: val,\n        min: domainMin,\n        max: domainMax,\n        step,\n        precision,\n      });\n      setRangedValue(nextValue, thumbIndex.current, false);\n    }\n  };\n\n  const { ref: useMoveRef, active } = useMove(\n    ({ x, y }) => handleChange(orientation === 'vertical' ? 1 - y : x),\n    { onScrubEnd: () => !disabled && onChangeEnd?.(valueRef.current) },\n    dir\n  );\n\n  function handleThumbMouseDown(index: number) {\n    thumbIndex.current = index;\n  }\n\n  const handleTrackMouseDownCapture = (\n    event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n  ) => {\n    if (containerRef.current) {\n      containerRef.current.focus();\n      const rect = containerRef.current.getBoundingClientRect();\n      const changePosition = getClientPosition(event.nativeEvent, orientation);\n\n      const changeValue =\n        orientation === 'vertical'\n          ? getChangeValue({\n              value: rect.bottom - changePosition,\n              max,\n              min,\n              step,\n              containerWidth: rect.height,\n            })\n          : getChangeValue({\n              value: changePosition - rect.left,\n              max,\n              min,\n              step,\n              containerWidth: rect.width,\n            });\n\n      const nearestHandle =\n        Math.abs(_value[0] - changeValue) > Math.abs(_value[1] - changeValue) ? 1 : 0;\n      const _nearestHandle =\n        orientation === 'vertical'\n          ? nearestHandle\n          : dir === 'ltr'\n            ? nearestHandle\n            : nearestHandle === 1\n              ? 0\n              : 1;\n\n      thumbIndex.current = _nearestHandle;\n    }\n  };\n\n  const getFocusedThumbIndex = () => {\n    if (focused !== 1 && focused !== 0) {\n      setFocused(0);\n      return 0;\n    }\n\n    return focused;\n  };\n\n  const handleTrackKeydownCapture = (event: React.KeyboardEvent<HTMLDivElement>) => {\n    if (!disabled) {\n      switch (event.key) {\n        case 'ArrowUp': {\n          event.preventDefault();\n          const focusedIndex = getFocusedThumbIndex();\n          thumbs.current[focusedIndex].focus();\n          const nextValue =\n            restrictToMarks && marks\n              ? getNextMarkValue(valueRef.current[focusedIndex], marks)\n              : Math.min(Math.max(valueRef.current[focusedIndex] + step, domainMin), domainMax);\n          setRangedValue(getFloatingValue(nextValue, precision), focusedIndex, true);\n          break;\n        }\n\n        case 'ArrowRight': {\n          event.preventDefault();\n          const focusedIndex = getFocusedThumbIndex();\n          thumbs.current[focusedIndex].focus();\n\n          const nextValue =\n            restrictToMarks && marks\n              ? (dir === 'rtl' ? getPreviousMarkValue : getNextMarkValue)(\n                  valueRef.current[focusedIndex],\n                  marks\n                )\n              : Math.min(\n                  Math.max(\n                    dir === 'rtl'\n                      ? valueRef.current[focusedIndex] - step\n                      : valueRef.current[focusedIndex] + step,\n                    domainMin\n                  ),\n                  domainMax\n                );\n\n          setRangedValue(getFloatingValue(nextValue, precision), focusedIndex, true);\n          break;\n        }\n\n        case 'ArrowDown': {\n          event.preventDefault();\n          const focusedIndex = getFocusedThumbIndex();\n          thumbs.current[focusedIndex].focus();\n          const nextValue =\n            restrictToMarks && marks\n              ? getPreviousMarkValue(valueRef.current[focusedIndex], marks)\n              : Math.min(Math.max(valueRef.current[focusedIndex] - step, domainMin), domainMax);\n          setRangedValue(getFloatingValue(nextValue, precision), focusedIndex, true);\n          break;\n        }\n\n        case 'ArrowLeft': {\n          event.preventDefault();\n          const focusedIndex = getFocusedThumbIndex();\n          thumbs.current[focusedIndex].focus();\n\n          const nextValue =\n            restrictToMarks && marks\n              ? (dir === 'rtl' ? getNextMarkValue : getPreviousMarkValue)(\n                  valueRef.current[focusedIndex],\n                  marks\n                )\n              : Math.min(\n                  Math.max(\n                    dir === 'rtl'\n                      ? valueRef.current[focusedIndex] + step\n                      : valueRef.current[focusedIndex] - step,\n                    domainMin\n                  ),\n                  domainMax\n                );\n\n          setRangedValue(getFloatingValue(nextValue, precision), focusedIndex, true);\n          break;\n        }\n\n        default: {\n          break;\n        }\n      }\n    }\n  };\n\n  const sharedThumbProps = {\n    max,\n    min,\n    size,\n    labelTransitionProps,\n    labelAlwaysOn,\n    orientation,\n    onBlur: () => setFocused(-1),\n  };\n\n  const hasArrayThumbChildren = Array.isArray(thumbChildren);\n\n  return (\n    <SliderProvider value={{ getStyles }}>\n      <SliderRoot\n        {...others}\n        size={size}\n        ref={useMergedRef(ref, root)}\n        disabled={disabled}\n        orientation={orientation}\n        onMouseDownCapture={() => root.current?.focus()}\n        onKeyDownCapture={() => {\n          if (thumbs.current[0]?.parentElement?.contains(document.activeElement)) {\n            return;\n          }\n          thumbs.current[0]?.focus();\n        }}\n      >\n        <Track\n          offset={positions[0]}\n          marksOffset={_value[0]}\n          filled={positions[1] - positions[0]}\n          marks={marks}\n          inverted={inverted}\n          min={domainMin}\n          max={domainMax}\n          value={_value[1]}\n          disabled={disabled}\n          containerProps={{\n            ref: useMergedRef(containerRef, useMoveRef) as any,\n            onMouseEnter: showLabelOnHover ? () => setHovered(true) : undefined,\n            onMouseLeave: showLabelOnHover ? () => setHovered(false) : undefined,\n            onTouchStartCapture: handleTrackMouseDownCapture,\n            onTouchEndCapture: () => {\n              thumbIndex.current = -1;\n            },\n            onMouseDownCapture: handleTrackMouseDownCapture,\n            onMouseUpCapture: () => {\n              thumbIndex.current = -1;\n            },\n            onKeyDownCapture: handleTrackKeydownCapture,\n          }}\n        >\n          <Thumb\n            {...sharedThumbProps}\n            value={scale(_value[0])}\n            position={positions[0]}\n            dragging={active}\n            label={\n              typeof label === 'function'\n                ? label(getFloatingValue(scale(_value[0]), precision))\n                : label\n            }\n            ref={(node) => {\n              if (node) {\n                thumbs.current[0] = node;\n              }\n            }}\n            thumbLabel={thumbFromLabel}\n            onMouseDown={() => handleThumbMouseDown(0)}\n            onFocus={() => setFocused(0)}\n            showLabelOnHover={showLabelOnHover}\n            isHovered={hovered}\n            disabled={disabled}\n            {...thumbProps?.(0)}\n          >\n            {hasArrayThumbChildren ? thumbChildren[0] : thumbChildren}\n          </Thumb>\n\n          <Thumb\n            {...sharedThumbProps}\n            thumbLabel={thumbToLabel}\n            value={scale(_value[1])}\n            position={positions[1]}\n            dragging={active}\n            label={\n              typeof label === 'function'\n                ? label(getFloatingValue(scale(_value[1]), precision))\n                : label\n            }\n            ref={(node) => {\n              if (node) {\n                thumbs.current[1] = node;\n              }\n            }}\n            onMouseDown={() => handleThumbMouseDown(1)}\n            onFocus={() => setFocused(1)}\n            showLabelOnHover={showLabelOnHover}\n            isHovered={hovered}\n            disabled={disabled}\n            {...thumbProps?.(1)}\n          >\n            {hasArrayThumbChildren ? thumbChildren[1] : thumbChildren}\n          </Thumb>\n        </Track>\n\n        <input type=\"hidden\" name={`${name}_from`} value={_value[0]} {...hiddenInputProps} />\n        <input type=\"hidden\" name={`${name}_to`} value={_value[1]} {...hiddenInputProps} />\n      </SliderRoot>\n    </SliderProvider>\n  );\n});\n\nRangeSlider.classes = classes;\nRangeSlider.varsResolver = varsResolver;\nRangeSlider.displayName = '@mantine/core/RangeSlider';\n"],"mappings":"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"}