{
  "version": 3,
  "sources": ["../../src/range-control/index.tsx"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { useRef, useState, forwardRef } from '@wordpress/element';\nimport { useInstanceId, useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BaseControl from '../base-control';\nimport Button from '../button';\nimport Icon from '../icon';\nimport { COLORS } from '../utils';\nimport { floatClamp, useControlledRangeValue } from './utils';\nimport { clamp } from '../utils/math';\nimport InputRange from './input-range';\nimport RangeRail from './rail';\nimport SimpleTooltip from './tooltip';\nimport { ActionRightWrapper, AfterIconWrapper, BeforeIconWrapper, InputNumber, Root, Track, ThumbWrapper, Thumb, Wrapper } from './styles/range-control-styles';\nimport { space } from '../utils/space';\nimport { maybeWarnDeprecated36pxSize } from '../utils/deprecated-36px-size';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst noop = () => {};\n\n/**\n * Computes the value that `RangeControl` should reset to when pressing\n * the reset button.\n */\nfunction computeResetValue({\n  resetFallbackValue,\n  initialPosition\n}) {\n  if (resetFallbackValue !== undefined) {\n    return !Number.isNaN(resetFallbackValue) ? resetFallbackValue : null;\n  }\n  if (initialPosition !== undefined) {\n    return !Number.isNaN(initialPosition) ? initialPosition : null;\n  }\n  return null;\n}\nfunction UnforwardedRangeControl(props, forwardedRef) {\n  const {\n    __nextHasNoMarginBottom: _,\n    // Prevent passing to internal component\n    afterIcon,\n    allowReset = false,\n    beforeIcon,\n    className,\n    color: colorProp = COLORS.theme.accent,\n    currentInput,\n    disabled = false,\n    help,\n    hideLabelFromVision = false,\n    initialPosition,\n    isShiftStepEnabled = true,\n    label,\n    marks = false,\n    max = 100,\n    min = 0,\n    onBlur = noop,\n    onChange = noop,\n    onFocus = noop,\n    onMouseLeave = noop,\n    onMouseMove = noop,\n    railColor,\n    renderTooltipContent = v => v,\n    resetFallbackValue,\n    __next40pxDefaultSize = false,\n    shiftStep = 10,\n    showTooltip: showTooltipProp,\n    step = 1,\n    trackColor,\n    value: valueProp,\n    withInputField = true,\n    __shouldNotWarnDeprecated36pxSize,\n    ...otherProps\n  } = props;\n  const [value, setValue] = useControlledRangeValue({\n    min,\n    max,\n    value: valueProp ?? null,\n    initial: initialPosition\n  });\n  const isResetPendent = useRef(false);\n  let hasTooltip = showTooltipProp;\n  let hasInputField = withInputField;\n  if (step === 'any') {\n    // The tooltip and number input field are hidden when the step is \"any\"\n    // because the decimals get too lengthy to fit well.\n    hasTooltip = false;\n    hasInputField = false;\n  }\n  const [showTooltip, setShowTooltip] = useState(hasTooltip);\n  const [isFocused, setIsFocused] = useState(false);\n  const inputRef = useRef(null);\n  const isCurrentlyFocused = inputRef.current?.matches(':focus');\n  const isThumbFocused = !disabled && isFocused;\n  const isValueReset = value === null;\n  const currentValue = value !== undefined ? value : currentInput;\n  const inputSliderValue = isValueReset ? '' : currentValue;\n  const rangeFillValue = isValueReset ? (max - min) / 2 + min : value;\n  const fillValue = isValueReset ? 50 : (value - min) / (max - min) * 100;\n  const fillValueOffset = `${clamp(fillValue, 0, 100)}%`;\n  const classes = clsx('components-range-control', className);\n  const wrapperClasses = clsx('components-range-control__wrapper', !!marks && 'is-marked');\n  const id = useInstanceId(UnforwardedRangeControl, 'inspector-range-control');\n  const describedBy = !!help ? `${id}__help` : undefined;\n  const enableTooltip = hasTooltip !== false && Number.isFinite(value);\n  const handleOnRangeChange = event => {\n    const nextValue = parseFloat(event.target.value);\n    setValue(nextValue);\n    onChange(nextValue);\n  };\n  const handleOnChange = next => {\n    // @ts-expect-error TODO: Investigate if it's problematic for setValue() to\n    // potentially receive a NaN when next is undefined.\n    let nextValue = parseFloat(next);\n    setValue(nextValue);\n\n    /*\n     * Calls onChange only when nextValue is numeric\n     * otherwise may queue a reset for the blur event.\n     */\n    if (!isNaN(nextValue)) {\n      if (nextValue < min || nextValue > max) {\n        nextValue = floatClamp(nextValue, min, max);\n      }\n      onChange(nextValue);\n      isResetPendent.current = false;\n    } else if (allowReset) {\n      isResetPendent.current = true;\n    }\n  };\n  const handleOnInputNumberBlur = () => {\n    if (isResetPendent.current) {\n      handleOnReset();\n      isResetPendent.current = false;\n    }\n  };\n  const handleOnReset = () => {\n    // Reset to `resetFallbackValue` if defined, otherwise set internal value\n    // to `null` \u2014 which, if propagated to the `value` prop, will cause\n    // the value to be reset to the `initialPosition` prop if defined.\n    const resetValue = Number.isNaN(resetFallbackValue) ? null : resetFallbackValue ?? null;\n    setValue(resetValue);\n\n    /**\n     * Previously, this callback would always receive undefined as\n     * an argument. This behavior is unexpected, specifically\n     * when resetFallbackValue is defined.\n     *\n     * The value of undefined is not ideal. Passing it through\n     * to internal <input /> elements would change it from a\n     * controlled component to an uncontrolled component.\n     *\n     * For now, to minimize unexpected regressions, we're going to\n     * preserve the undefined callback argument, except when a\n     * resetFallbackValue is defined.\n     */\n    onChange(resetValue ?? undefined);\n  };\n  const handleShowTooltip = () => setShowTooltip(true);\n  const handleHideTooltip = () => setShowTooltip(false);\n  const handleOnBlur = event => {\n    onBlur(event);\n    setIsFocused(false);\n    handleHideTooltip();\n  };\n  const handleOnFocus = event => {\n    onFocus(event);\n    setIsFocused(true);\n    handleShowTooltip();\n  };\n  const offsetStyle = {\n    [isRTL() ? 'right' : 'left']: fillValueOffset\n  };\n\n  // Add default size deprecation warning.\n  maybeWarnDeprecated36pxSize({\n    componentName: 'RangeControl',\n    __next40pxDefaultSize,\n    size: undefined,\n    __shouldNotWarnDeprecated36pxSize\n  });\n  return /*#__PURE__*/_jsx(BaseControl, {\n    className: classes,\n    label: label,\n    hideLabelFromVision: hideLabelFromVision,\n    id: `${id}`,\n    help: help,\n    children: /*#__PURE__*/_jsxs(Root, {\n      className: \"components-range-control__root\",\n      __next40pxDefaultSize: __next40pxDefaultSize,\n      children: [beforeIcon && /*#__PURE__*/_jsx(BeforeIconWrapper, {\n        children: /*#__PURE__*/_jsx(Icon, {\n          icon: beforeIcon\n        })\n      }), /*#__PURE__*/_jsxs(Wrapper, {\n        className: wrapperClasses,\n        color: colorProp,\n        marks: !!marks,\n        children: [/*#__PURE__*/_jsx(InputRange, {\n          ...otherProps,\n          className: \"components-range-control__slider\",\n          describedBy: describedBy,\n          disabled: disabled,\n          id: `${id}`,\n          label: label,\n          max: max,\n          min: min,\n          onBlur: handleOnBlur,\n          onChange: handleOnRangeChange,\n          onFocus: handleOnFocus,\n          onMouseMove: onMouseMove,\n          onMouseLeave: onMouseLeave,\n          ref: useMergeRefs([inputRef, forwardedRef]),\n          step: step,\n          value: inputSliderValue ?? undefined\n        }), /*#__PURE__*/_jsx(RangeRail, {\n          \"aria-hidden\": true,\n          disabled: disabled,\n          marks: marks,\n          max: max,\n          min: min,\n          railColor: railColor,\n          step: step,\n          value: rangeFillValue\n        }), /*#__PURE__*/_jsx(Track, {\n          \"aria-hidden\": true,\n          className: \"components-range-control__track\",\n          disabled: disabled,\n          style: {\n            width: fillValueOffset\n          },\n          trackColor: trackColor\n        }), /*#__PURE__*/_jsx(ThumbWrapper, {\n          className: \"components-range-control__thumb-wrapper\",\n          style: offsetStyle,\n          disabled: disabled,\n          children: /*#__PURE__*/_jsx(Thumb, {\n            \"aria-hidden\": true,\n            isFocused: isThumbFocused,\n            disabled: disabled\n          })\n        }), enableTooltip && /*#__PURE__*/_jsx(SimpleTooltip, {\n          className: \"components-range-control__tooltip\",\n          inputRef: inputRef,\n          tooltipPlacement: \"bottom\",\n          renderTooltipContent: renderTooltipContent,\n          show: isCurrentlyFocused || showTooltip,\n          style: offsetStyle,\n          value: value\n        })]\n      }), afterIcon && /*#__PURE__*/_jsx(AfterIconWrapper, {\n        children: /*#__PURE__*/_jsx(Icon, {\n          icon: afterIcon\n        })\n      }), hasInputField && /*#__PURE__*/_jsx(InputNumber, {\n        \"aria-label\": label,\n        className: \"components-range-control__number\",\n        disabled: disabled,\n        inputMode: \"decimal\",\n        isShiftStepEnabled: isShiftStepEnabled,\n        max: max,\n        min: min,\n        onBlur: handleOnInputNumberBlur,\n        onChange: handleOnChange,\n        shiftStep: shiftStep,\n        size: __next40pxDefaultSize ? '__unstable-large' : 'default',\n        __unstableInputWidth: __next40pxDefaultSize ? space(20) : space(16),\n        step: step\n        // @ts-expect-error TODO: Investigate if the `null` value is necessary\n        ,\n        value: inputSliderValue,\n        __shouldNotWarnDeprecated36pxSize: true\n      }), allowReset && /*#__PURE__*/_jsx(ActionRightWrapper, {\n        children: /*#__PURE__*/_jsx(Button, {\n          className: \"components-range-control__reset\"\n          // If the RangeControl itself is disabled, the reset button shouldn't be in the tab sequence.\n          ,\n          accessibleWhenDisabled: !disabled\n          // The reset button should be disabled if RangeControl itself is disabled,\n          // or if the current `value` is equal to the value that would be currently\n          // assigned when clicking the button.\n          ,\n          disabled: disabled || value === computeResetValue({\n            resetFallbackValue,\n            initialPosition\n          }),\n          variant: \"secondary\",\n          size: \"small\",\n          onClick: handleOnReset,\n          children: __('Reset')\n        })\n      })]\n    })\n  });\n}\n\n/**\n * RangeControls are used to make selections from a range of incremental values.\n *\n * ```jsx\n * import { RangeControl } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const MyRangeControl = () => {\n *   const [ value, setValue ] = useState();\n *   return (\n *     <RangeControl\n *       __next40pxDefaultSize\n *       help=\"Please select how transparent you would like this.\"\n *       initialPosition={ 50 }\n *       label=\"Opacity\"\n *       max={ 100 }\n *       min={ 0 }\n *       value={ value }\n *       onChange={ setValue }\n *     />\n *   );\n * };\n * ```\n */\nexport const RangeControl = forwardRef(UnforwardedRangeControl);\nRangeControl.displayName = 'RangeControl';\nexport default RangeControl;"],
  "mappings": "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",
  "names": []
}
