@wordpress/components
Version:
UI components for WordPress.
8 lines (7 loc) • 11.9 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/number-control/index.tsx"],
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { useRef, forwardRef } from '@wordpress/element';\nimport { isRTL, __ } from '@wordpress/i18n';\nimport { plus as plusIcon, reset as resetIcon } from '@wordpress/icons';\nimport { useMergeRefs } from '@wordpress/compose';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { Input, SpinButton, styles } from './styles/number-control-styles';\nimport * as inputControlActionTypes from '../input-control/reducer/actions';\nimport { add, subtract, clamp, ensureValidStep } from '../utils/math';\nimport { ensureNumber, isValueEmpty } from '../utils/values';\nimport { HStack } from '../h-stack';\nimport { Spacer } from '../spacer';\nimport { useCx } from '../utils';\nimport { useDeprecated36pxDefaultSizeProp } from '../utils/use-deprecated-props';\nimport { maybeWarnDeprecated36pxSize } from '../utils/deprecated-36px-size';\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nconst noop = () => {};\nfunction UnforwardedNumberControl(props, forwardedRef) {\n const {\n __unstableStateReducer: stateReducerProp,\n className,\n dragDirection = 'n',\n hideHTMLArrows = false,\n spinControls = hideHTMLArrows ? 'none' : 'native',\n isDragEnabled = true,\n isShiftStepEnabled = true,\n label,\n max = Infinity,\n min = -Infinity,\n required = false,\n shiftStep = 10,\n step = 1,\n spinFactor = 1,\n type: typeProp = 'number',\n value: valueProp,\n size = 'default',\n suffix,\n onChange = noop,\n __shouldNotWarnDeprecated36pxSize,\n ...restProps\n } = useDeprecated36pxDefaultSizeProp(props);\n maybeWarnDeprecated36pxSize({\n componentName: 'NumberControl',\n size,\n __next40pxDefaultSize: restProps.__next40pxDefaultSize,\n __shouldNotWarnDeprecated36pxSize\n });\n if (hideHTMLArrows) {\n deprecated('wp.components.NumberControl hideHTMLArrows prop ', {\n alternative: 'spinControls=\"none\"',\n since: '6.2',\n version: '6.3'\n });\n }\n const inputRef = useRef(null);\n const mergedRef = useMergeRefs([inputRef, forwardedRef]);\n const isStepAny = step === 'any';\n const baseStep = isStepAny ? 1 : ensureNumber(step);\n const baseSpin = ensureNumber(spinFactor) * baseStep;\n const constrainValue = (value, stepOverride) => {\n // When step is not \"any\" the value must be a valid step.\n if (!isStepAny) {\n value = ensureValidStep(value, min, stepOverride ?? baseStep);\n }\n return `${clamp(value, min, max)}`;\n };\n const baseValue = constrainValue(0);\n const autoComplete = typeProp === 'number' ? 'off' : undefined;\n const classes = clsx('components-number-control', className);\n const cx = useCx();\n const spinButtonClasses = cx(size === 'small' && styles.smallSpinButtons);\n const spinValue = (value, direction, event) => {\n event?.preventDefault();\n const shift = event?.shiftKey && isShiftStepEnabled;\n const delta = shift ? ensureNumber(shiftStep) * baseSpin : baseSpin;\n let nextValue = isValueEmpty(value) ? baseValue : value;\n if (direction === 'up') {\n nextValue = add(nextValue, delta);\n } else if (direction === 'down') {\n nextValue = subtract(nextValue, delta);\n }\n return constrainValue(nextValue, shift ? delta : undefined);\n };\n\n /**\n * \"Middleware\" function that intercepts updates from InputControl.\n * This allows us to tap into actions to transform the (next) state for\n * InputControl.\n *\n * @return The updated state to apply to InputControl\n */\n const numberControlStateReducer = (state, action) => {\n const nextState = {\n ...state\n };\n const {\n type,\n payload\n } = action;\n const event = payload.event;\n const currentValue = nextState.value;\n\n /**\n * Handles custom UP and DOWN Keyboard events\n */\n if (type === inputControlActionTypes.PRESS_UP || type === inputControlActionTypes.PRESS_DOWN) {\n nextState.value = spinValue(currentValue, type === inputControlActionTypes.PRESS_UP ? 'up' : 'down', event);\n }\n\n /**\n * Handles drag to update events\n */\n if (type === inputControlActionTypes.DRAG && isDragEnabled) {\n const [x, y] = payload.delta;\n const enableShift = payload.shiftKey && isShiftStepEnabled;\n const modifier = enableShift ? ensureNumber(shiftStep) * baseSpin : baseSpin;\n let directionModifier;\n let delta;\n switch (dragDirection) {\n case 'n':\n delta = y;\n directionModifier = -1;\n break;\n case 'e':\n delta = x;\n directionModifier = isRTL() ? -1 : 1;\n break;\n case 's':\n delta = y;\n directionModifier = 1;\n break;\n case 'w':\n delta = x;\n directionModifier = isRTL() ? 1 : -1;\n break;\n }\n if (delta !== 0) {\n delta = Math.ceil(Math.abs(delta)) * Math.sign(delta);\n const distance = delta * modifier * directionModifier;\n nextState.value = constrainValue(\n // @ts-expect-error TODO: Investigate if it's ok for currentValue to be undefined\n add(currentValue, distance), enableShift ? modifier : undefined);\n }\n }\n\n /**\n * Handles commit (ENTER key press or blur)\n */\n if (type === inputControlActionTypes.PRESS_ENTER || type === inputControlActionTypes.COMMIT) {\n const applyEmptyValue = required === false && currentValue === '';\n nextState.value = applyEmptyValue ? currentValue :\n // @ts-expect-error TODO: Investigate if it's ok for currentValue to be undefined\n constrainValue(currentValue);\n }\n return stateReducerProp?.(nextState, action) ?? nextState;\n };\n const buildSpinButtonClickHandler = direction => event => onChange(String(spinValue(valueProp, direction, event)), {\n // Set event.target to the <input> so that consumers can use\n // e.g. event.target.validity.\n event: {\n ...event,\n target: inputRef.current\n }\n });\n return /*#__PURE__*/_jsx(Input, {\n autoComplete: autoComplete,\n inputMode: \"numeric\",\n ...restProps,\n className: classes,\n dragDirection: dragDirection,\n hideHTMLArrows: spinControls !== 'native',\n isDragEnabled: isDragEnabled,\n label: label,\n max: max === Infinity ? undefined : max,\n min: min === -Infinity ? undefined : min,\n ref: mergedRef,\n required: required,\n step: step,\n type: typeProp\n // @ts-expect-error TODO: Resolve discrepancy between `value` types in InputControl based components\n ,\n value: valueProp,\n __unstableStateReducer: numberControlStateReducer,\n size: size,\n __shouldNotWarnDeprecated36pxSize: true,\n suffix: spinControls === 'custom' ? /*#__PURE__*/_jsxs(_Fragment, {\n children: [suffix, /*#__PURE__*/_jsx(Spacer, {\n marginBottom: 0,\n marginRight: 2,\n children: /*#__PURE__*/_jsxs(HStack, {\n spacing: 1,\n children: [/*#__PURE__*/_jsx(SpinButton, {\n className: spinButtonClasses,\n icon: plusIcon,\n size: \"small\",\n label: __('Increment'),\n onClick: buildSpinButtonClickHandler('up')\n }), /*#__PURE__*/_jsx(SpinButton, {\n className: spinButtonClasses,\n icon: resetIcon,\n size: \"small\",\n label: __('Decrement'),\n onClick: buildSpinButtonClickHandler('down')\n })]\n })\n })]\n }) : suffix,\n onChange: onChange\n });\n}\nexport const NumberControl = forwardRef(UnforwardedNumberControl);\nNumberControl.displayName = 'NumberControl';\nexport default NumberControl;"],
"mappings": "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",
"names": ["deprecated", "clsx", "_jsx", "_jsxs", "_Fragment", "plusIcon", "resetIcon"]
}