{
  "version": 3,
  "sources": ["../../src/unit-control/index.tsx"],
  "sourcesContent": ["/**\n * External dependencies\n */\n\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\nimport { forwardRef, useMemo, useRef, useEffect } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\n\nimport { ValueInput } from './styles/unit-control-styles';\nimport UnitSelectControl from './unit-select-control';\nimport { CSS_UNITS, getParsedQuantityAndUnit, getUnitsWithCurrentUnit, getValidParsedQuantityAndUnit } from './utils';\nimport { useControlledState } from '../utils/hooks';\nimport { escapeRegExp } from '../utils/strings';\nimport { useDeprecated36pxDefaultSizeProp } from '../utils/use-deprecated-props';\nimport { maybeWarnDeprecated36pxSize } from '../utils/deprecated-36px-size';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction UnforwardedUnitControl(unitControlProps, forwardedRef) {\n  const {\n    __unstableStateReducer,\n    autoComplete = 'off',\n    // @ts-expect-error Ensure that children is omitted from restProps\n    children,\n    className,\n    disabled = false,\n    disableUnits = false,\n    isPressEnterToChange = false,\n    isResetValueOnUnitChange = false,\n    isUnitSelectTabbable = true,\n    label,\n    onChange: onChangeProp,\n    onUnitChange,\n    size = 'default',\n    unit: unitProp,\n    units: unitsProp = CSS_UNITS,\n    value: valueProp,\n    onFocus: onFocusProp,\n    __shouldNotWarnDeprecated36pxSize,\n    ...props\n  } = useDeprecated36pxDefaultSizeProp(unitControlProps);\n  maybeWarnDeprecated36pxSize({\n    componentName: 'UnitControl',\n    __next40pxDefaultSize: props.__next40pxDefaultSize,\n    size,\n    __shouldNotWarnDeprecated36pxSize\n  });\n  if ('unit' in unitControlProps) {\n    deprecated('UnitControl unit prop', {\n      since: '5.6',\n      hint: 'The unit should be provided within the `value` prop.',\n      version: '6.2'\n    });\n  }\n\n  // The `value` prop, in theory, should not be `null`, but the following line\n  // ensures it fallback to `undefined` in case a consumer of `UnitControl`\n  // still passes `null` as a `value`.\n  const nonNullValueProp = valueProp ?? undefined;\n  const [units, reFirstCharacterOfUnits] = useMemo(() => {\n    const list = getUnitsWithCurrentUnit(nonNullValueProp, unitProp, unitsProp);\n    const [{\n      value: firstUnitValue = ''\n    } = {}, ...rest] = list;\n    const firstCharacters = rest.reduce((carry, {\n      value\n    }) => {\n      const first = escapeRegExp(value?.substring(0, 1) || '');\n      return carry.includes(first) ? carry : `${carry}|${first}`;\n    }, escapeRegExp(firstUnitValue.substring(0, 1)));\n    return [list, new RegExp(`^(?:${firstCharacters})$`, 'i')];\n  }, [nonNullValueProp, unitProp, unitsProp]);\n  const [parsedQuantity, parsedUnit] = getParsedQuantityAndUnit(nonNullValueProp, unitProp, units);\n  const [unit, setUnit] = useControlledState(units.length === 1 ? units[0].value : unitProp, {\n    initial: parsedUnit,\n    fallback: ''\n  });\n  useEffect(() => {\n    if (parsedUnit !== undefined) {\n      setUnit(parsedUnit);\n    }\n  }, [parsedUnit, setUnit]);\n  const classes = clsx('components-unit-control',\n  // This class is added for legacy purposes to maintain it on the outer\n  // wrapper. See: https://github.com/WordPress/gutenberg/pull/45139\n  'components-unit-control-wrapper', className);\n  const handleOnQuantityChange = (nextQuantityValue, changeProps) => {\n    if (nextQuantityValue === '' || typeof nextQuantityValue === 'undefined' || nextQuantityValue === null) {\n      onChangeProp?.('', changeProps);\n      return;\n    }\n\n    /*\n     * Customizing the onChange callback.\n     * This allows as to broadcast a combined value+unit to onChange.\n     */\n    const onChangeValue = getValidParsedQuantityAndUnit(nextQuantityValue, units, parsedQuantity, unit).join('');\n    onChangeProp?.(onChangeValue, changeProps);\n  };\n  const handleOnUnitChange = (nextUnitValue, changeProps) => {\n    const {\n      data\n    } = changeProps;\n    let nextValue = `${parsedQuantity ?? ''}${nextUnitValue}`;\n    if (isResetValueOnUnitChange && data?.default !== undefined) {\n      nextValue = `${data.default}${nextUnitValue}`;\n    }\n    onChangeProp?.(nextValue, changeProps);\n    onUnitChange?.(nextUnitValue, changeProps);\n    setUnit(nextUnitValue);\n  };\n  let handleOnKeyDown;\n  if (!disableUnits && isUnitSelectTabbable && units.length) {\n    handleOnKeyDown = event => {\n      props.onKeyDown?.(event);\n      // Unless the meta or ctrl key was pressed (to avoid interfering with\n      // shortcuts, e.g. pastes), move focus to the unit select if a key\n      // matches the first character of a unit.\n      if (!event.metaKey && !event.ctrlKey && reFirstCharacterOfUnits.test(event.key)) {\n        refInputSuffix.current?.focus();\n      }\n    };\n  }\n  const refInputSuffix = useRef(null);\n  const inputSuffix = !disableUnits ? /*#__PURE__*/_jsx(UnitSelectControl, {\n    ref: refInputSuffix,\n    \"aria-label\": __('Select unit'),\n    disabled: disabled,\n    isUnitSelectTabbable: isUnitSelectTabbable,\n    onChange: handleOnUnitChange,\n    size: ['small', 'compact'].includes(size) || size === 'default' && !props.__next40pxDefaultSize ? 'small' : 'default',\n    unit: unit,\n    units: units,\n    onFocus: onFocusProp,\n    onBlur: unitControlProps.onBlur\n  }) : null;\n  let step = props.step;\n\n  /*\n   * If no step prop has been passed, lookup the active unit and\n   * try to get step from `units`, or default to a value of `1`\n   */\n  if (!step && units) {\n    const activeUnit = units.find(option => option.value === unit);\n    step = activeUnit?.step ?? 1;\n  }\n  return /*#__PURE__*/_jsx(ValueInput, {\n    ...props,\n    __shouldNotWarnDeprecated36pxSize: true,\n    autoComplete: autoComplete,\n    className: classes,\n    disabled: disabled,\n    spinControls: \"none\",\n    isPressEnterToChange: isPressEnterToChange,\n    label: label,\n    onKeyDown: handleOnKeyDown,\n    onChange: handleOnQuantityChange,\n    ref: forwardedRef,\n    size: size,\n    suffix: inputSuffix,\n    type: isPressEnterToChange ? 'text' : 'number',\n    value: parsedQuantity ?? '',\n    step: step,\n    onFocus: onFocusProp,\n    __unstableStateReducer: __unstableStateReducer\n  });\n}\n\n/**\n * `UnitControl` allows the user to set a numeric quantity as well as a unit (e.g. `px`).\n *\n *\n * ```jsx\n * import { __experimentalUnitControl as UnitControl } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const Example = () => {\n *   const [ value, setValue ] = useState( '10px' );\n *\n *   return <UnitControl __next40pxDefaultSize onChange={ setValue } value={ value } />;\n * };\n * ```\n */\nexport const UnitControl = forwardRef(UnforwardedUnitControl);\nUnitControl.displayName = 'UnitControl';\nexport { parseQuantityAndUnitFromRawValue, useCustomUnits } from './utils';\nexport default UnitControl;"],
  "mappings": "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",
  "names": ["import_utils", "deprecated", "clsx", "_jsx", "UnitSelectControl"]
}
