{"version":3,"file":"RangeSlider.cjs","sources":["../../../../src/components/Slider/RangeSlider/RangeSlider.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useMove, useUncontrolled } from '@raikou/hooks';\nimport {\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  getRadius,\n  getSize,\n  getThemeColor,\n  RaikouColor,\n  RaikouRadius,\n  RaikouSize,\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 { 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-gloating-value';\nimport { getPosition } from '../utils/get-position/get-position';\nimport { getPrecision } from '../utils/get-precision/get-precision';\nimport {\n  SliderLabelStyle,\n  SliderMarkLabelStyle,\n  SliderMarkStyle,\n  SliderMarkWrapperStyle,\n  SliderRootStyle,\n  SliderThumbStyle,\n  SliderTrackBarStyle,\n  SliderTrackContainerStyle,\n  SliderTrackStyle,\n} from '../Slider.css';\n\nexport type RangeSliderValue = [number, number];\n\nexport interface RangeSliderProps\n  extends 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, `theme.primaryColor` by default */\n  color?: RaikouColor;\n\n  /** Key of `theme.radius` or any valid CSS value to set `border-radius`, numbers are converted to rem, `'xl'` by default */\n  radius?: RaikouRadius;\n\n  /** Controls size of the track, `'md'` by default */\n  size?: RaikouSize | (string & {}) | number;\n\n  /** Minimal possible value, `0` by default */\n  min?: number;\n\n  /** Maximum possible value, `100` by default */\n  max?: number;\n\n  /** Number by which value will be incremented/decremented with thumb drag and arrows, `1` by default */\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?: { value: number; label?: React.ReactNode }[];\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, `{ transition: 'fade', duration: 0 }` by default */\n  labelTransitionProps?: TransitionOverride;\n\n  /** Determines whether the label should be visible when the slider is not being dragged or hovered, `false` by default */\n  labelAlwaysOn?: boolean;\n\n  /** Determines whether the label should be displayed when the slider is hovered, `true` by default */\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, `false` by default */\n  inverted?: boolean;\n\n  /** Minimal range interval, `10` by default */\n  minRange?: number;\n\n  /** Maximum range interval, `Infinity` by default */\n  maxRange?: number;\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.ComponentPropsWithoutRef<'input'>;\n\n  /** Props passed down to thumb element based on the thumb index */\n  thumbProps?: (index: 0 | 1) => React.ComponentPropsWithoutRef<'div'>;\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: Partial<RangeSliderProps> = {\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  scale: (v) => v,\n};\n\nexport const RangeSlider = factory<RangeSliderFactory>((_props, ref) => {\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    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    className,\n    style,\n    vars,\n    hiddenInputProps,\n    thumbProps,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<RangeSliderFactory>({\n    name: 'Slider',\n    props,\n    classes: {\n      root: SliderRootStyle,\n      label: SliderLabelStyle,\n      thumb: SliderThumbStyle,\n      trackContainer: SliderTrackContainerStyle,\n      track: SliderTrackStyle,\n      bar: SliderTrackBarStyle,\n      markWrapper: SliderMarkWrapperStyle,\n      mark: SliderMarkStyle,\n      markLabel: SliderMarkLabelStyle,\n    },\n    classNames,\n    className,\n    styles,\n    style,\n    vars,\n    varsResolver,\n    unstyled,\n  });\n\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 thumbIndex = useRef<number | undefined>(undefined);\n  const positions = [\n    getPosition({ value: _value[0], min: min!, max: max! }),\n    getPosition({ value: _value[1], min: min!, max: max! }),\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    const clone: RangeSliderValue = [...valueRef.current];\n    clone[index] = val;\n\n    if (index === 0) {\n      if (val > clone[1] - (minRange! - 0.000000001)) {\n        clone[1] = Math.min(val + minRange!, max!);\n      }\n\n      if (val > (max! - (minRange! - 0.000000001) || min!)) {\n        clone[index] = valueRef.current[index];\n      }\n\n      if (clone[1] - val > maxRange!) {\n        clone[1] = val + maxRange!;\n      }\n    }\n\n    if (index === 1) {\n      if (val < clone[0] + minRange!) {\n        clone[0] = Math.max(val - minRange!, min!);\n      }\n\n      if (val < clone[0] + minRange!) {\n        clone[index] = valueRef.current[index];\n      }\n\n      if (val - clone[0] > maxRange!) {\n        clone[0] = val - maxRange!;\n      }\n    }\n\n    clone[0] = getFloatingValue(clone[0], precision);\n    clone[1] = getFloatingValue(clone[1], precision);\n\n    _setValue(clone);\n\n    if (triggerChangeEnd) {\n      onChangeEnd?.(valueRef.current);\n    }\n  };\n\n  const handleChange = (val: number) => {\n    if (!disabled) {\n      const nextValue = getChangeValue({\n        value: val,\n        min: min!,\n        max: max!,\n        step: step!,\n        precision,\n      });\n      setRangedValue(nextValue, thumbIndex.current!, false);\n    }\n  };\n\n  const { ref: container, active } = useMove(\n    ({ x }) => handleChange(x),\n    { onScrubEnd: () => 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    container.current!.focus();\n    const rect = container.current!.getBoundingClientRect();\n    const changePosition = getClientPosition(event.nativeEvent);\n    const changeValue = getChangeValue({\n      value: changePosition - rect.left,\n      max: max!,\n      min: min!,\n      step: 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 = dir === 'ltr' ? nearestHandle : nearestHandle === 1 ? 0 : 1;\n\n    thumbIndex.current = _nearestHandle;\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          setRangedValue(\n            getFloatingValue(\n              Math.min(Math.max(valueRef.current[focusedIndex] + step!, min!), max!),\n              precision\n            ),\n            focusedIndex,\n            true\n          );\n          break;\n        }\n        case 'ArrowRight': {\n          event.preventDefault();\n          const focusedIndex = getFocusedThumbIndex();\n          thumbs.current[focusedIndex].focus();\n          setRangedValue(\n            getFloatingValue(\n              Math.min(\n                Math.max(\n                  dir === 'rtl'\n                    ? valueRef.current[focusedIndex] - step!\n                    : valueRef.current[focusedIndex] + step!,\n                  min!\n                ),\n                max!\n              ),\n              precision\n            ),\n            focusedIndex,\n            true\n          );\n          break;\n        }\n\n        case 'ArrowDown': {\n          event.preventDefault();\n          const focusedIndex = getFocusedThumbIndex();\n          thumbs.current[focusedIndex].focus();\n          setRangedValue(\n            getFloatingValue(\n              Math.min(Math.max(valueRef.current[focusedIndex] - step!, min!), max!),\n              precision\n            ),\n            focusedIndex,\n            true\n          );\n          break;\n        }\n        case 'ArrowLeft': {\n          event.preventDefault();\n          const focusedIndex = getFocusedThumbIndex();\n          thumbs.current[focusedIndex].focus();\n          setRangedValue(\n            getFloatingValue(\n              Math.min(\n                Math.max(\n                  dir === 'rtl'\n                    ? valueRef.current[focusedIndex] + step!\n                    : valueRef.current[focusedIndex] - step!,\n                  min!\n                ),\n                max!\n              ),\n              precision\n            ),\n            focusedIndex,\n            true\n          );\n          break;\n        }\n\n        default: {\n          break;\n        }\n      }\n    }\n  };\n\n  const sharedThumbProps = {\n    max: max!,\n    min: min!,\n    size,\n    labelTransitionProps,\n    labelAlwaysOn,\n    onBlur: () => setFocused(-1),\n  };\n\n  const hasArrayThumbChildren = Array.isArray(thumbChildren);\n\n  return (\n    <SliderProvider value={{ getStyles }}>\n      <SliderRoot {...others} size={size!} ref={ref} disabled={disabled}>\n        <Track\n          offset={positions[0]}\n          marksOffset={_value[0]}\n          filled={positions[1] - positions[0]}\n          marks={marks}\n          inverted={inverted}\n          min={min!}\n          max={max!}\n          value={_value[1]}\n          disabled={disabled}\n          containerProps={{\n            ref: container 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              thumbs.current[0] = node!;\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              thumbs.current[1] = node!;\n            }}\n            onMouseDown={() => handleThumbMouseDown(1)}\n            onFocus={() => setFocused(1)}\n            showLabelOnHover={showLabelOnHover}\n            isHovered={hovered}\n            disabled={disabled}\n            {...thumbProps?.(0)}\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.displayName = '@raikou/core/RangeSlider';\n"],"names":["createVarsResolver","getSize","getThemeColor","getRadius","rem","factory","useProps","useStyles","SliderRootStyle","SliderLabelStyle","SliderThumbStyle","SliderTrackContainerStyle","SliderTrackStyle","SliderTrackBarStyle","SliderMarkWrapperStyle","SliderMarkStyle","SliderMarkLabelStyle","useDirection","useState","useUncontrolled","useRef","getPosition","getPrecision","useEffect","getFloatingValue","getChangeValue","useMove","getClientPosition","jsx","SliderProvider","jsxs","SliderRoot","Track","Thumb"],"mappings":"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"}