UNPKG

@chakra-ui/core

Version:

Responsive and accessible React UI components built with React and Emotion

218 lines (184 loc) 9.1 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.NumberDecrementStepper = exports.NumberIncrementStepper = exports.NumberInputStepper = exports.NumberInputField = exports.NumberInput = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _react = _interopRequireWildcard(require("react")); var _ColorModeProvider = require("../ColorModeProvider"); var _Flex = _interopRequireDefault(require("../Flex")); var _Icon = _interopRequireDefault(require("../Icon")); var _Input = _interopRequireDefault(require("../Input")); var _PseudoBox = _interopRequireDefault(require("../PseudoBox")); var _useNumberInput = _interopRequireDefault(require("../useNumberInput")); var _utils = require("../utils"); var _styles = _interopRequireDefault(require("./styles")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var NumberInputContext = (0, _react.createContext)({}); var useNumberInputContext = function useNumberInputContext() { var context = (0, _react.useContext)(NumberInputContext); if (context == null) { throw new Error("This component must be used within the `NumberInput` "); } return context; }; var NumberInput = (0, _react.forwardRef)(function (_ref2, ref) { var value = _ref2.value, onChange = _ref2.onChange, defaultValue = _ref2.defaultValue, focusInputOnChange = _ref2.focusInputOnChange, clampValueOnBlur = _ref2.clampValueOnBlur, keepWithinRange = _ref2.keepWithinRange, min = _ref2.min, max = _ref2.max, step = _ref2.step, precision = _ref2.precision, getAriaValueText = _ref2.getAriaValueText, isReadOnly = _ref2.isReadOnly, isInvalid = _ref2.isInvalid, isDisabled = _ref2.isDisabled, isFullWidth = _ref2.isFullWidth, _ref2$size = _ref2.size, size = _ref2$size === void 0 ? "md" : _ref2$size, children = _ref2.children, rest = (0, _objectWithoutPropertiesLoose2["default"])(_ref2, ["value", "onChange", "defaultValue", "focusInputOnChange", "clampValueOnBlur", "keepWithinRange", "min", "max", "step", "precision", "getAriaValueText", "isReadOnly", "isInvalid", "isDisabled", "isFullWidth", "size", "children"]); var context = (0, _useNumberInput["default"])({ value: value, onChange: onChange, defaultValue: defaultValue, focusInputOnChange: focusInputOnChange, clampValueOnBlur: clampValueOnBlur, keepWithinRange: keepWithinRange, min: min, max: max, step: step, precision: precision, getAriaValueText: getAriaValueText, isReadOnly: isReadOnly, isInvalid: isInvalid, isDisabled: isDisabled }); var _children = children || _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(NumberInputField, null), _react["default"].createElement(NumberInputStepper, null, _react["default"].createElement(NumberIncrementStepper, null), _react["default"].createElement(NumberDecrementStepper, null))); return _react["default"].createElement(NumberInputContext.Provider, { value: _objectSpread({}, context, { size: size }) }, _react["default"].createElement(_Flex["default"], (0, _extends2["default"])({ ref: ref, align: "stretch", w: isFullWidth ? "full" : null, pos: "relative" }, rest), _children)); }); exports.NumberInput = NumberInput; NumberInput.displayName = "NumberInput"; var NumberInputField = (0, _react.forwardRef)(function (_ref3, ref) { var onBlur = _ref3.onBlur, onFocus = _ref3.onFocus, onKeyDown = _ref3.onKeyDown, onChange = _ref3.onChange, props = (0, _objectWithoutPropertiesLoose2["default"])(_ref3, ["onBlur", "onFocus", "onKeyDown", "onChange"]); var _useNumberInputContex = useNumberInputContext(), size = _useNumberInputContex.size, _useNumberInputContex2 = _useNumberInputContex.input, _ref = _useNumberInputContex2.ref, _onBlur = _useNumberInputContex2.onBlur, _onFocus = _useNumberInputContex2.onFocus, _onChange = _useNumberInputContex2.onChange, _onKeyDown = _useNumberInputContex2.onKeyDown, isDisabled = _useNumberInputContex2.disabled, isReadOnly = _useNumberInputContex2.readOnly, otherInputProps = (0, _objectWithoutPropertiesLoose2["default"])(_useNumberInputContex2, ["ref", "onBlur", "onFocus", "onChange", "onKeyDown", "disabled", "readOnly"]); var inputRef = (0, _utils.useForkRef)(_ref, ref); var handleBlur = (0, _utils.wrapEvent)(onBlur, _onBlur); var handleFocus = (0, _utils.wrapEvent)(onFocus, _onFocus); var handleKeyDown = (0, _utils.wrapEvent)(onKeyDown, _onKeyDown); var handleChange = (0, _utils.wrapEvent)(onChange, _onChange); return _react["default"].createElement(_Input["default"], (0, _extends2["default"])({ ref: inputRef, isReadOnly: isReadOnly, isDisabled: isDisabled, onBlur: handleBlur, onFocus: handleFocus, onKeyDown: handleKeyDown, onChange: handleChange, size: size }, otherInputProps, props)); }); exports.NumberInputField = NumberInputField; NumberInputField.displayName = "NumberInputField"; var NumberInputStepper = (0, _react.forwardRef)(function (props, ref) { return _react["default"].createElement(_Flex["default"], (0, _extends2["default"])({ ref: ref, direction: "column", "aria-hidden": true, width: "24px", margin: "1px", position: "absolute", right: "0px", zIndex: "1", height: "calc(100% - 2px)" }, props)); }); exports.NumberInputStepper = NumberInputStepper; var StepperButton = (0, _react.forwardRef)(function (props, ref) { var _useColorMode = (0, _ColorModeProvider.useColorMode)(), colorMode = _useColorMode.colorMode; var _useNumberInputContex3 = useNumberInputContext(), isDisabled = _useNumberInputContex3.isDisabled, size = _useNumberInputContex3.size; return _react["default"].createElement(_PseudoBox["default"], (0, _extends2["default"])({ ref: ref, display: "flex", justifyContent: "center", alignItems: "center", flex: "1", transition: "all 0.3s", role: "button", tabindex: "-1", userSelect: "none", "aria-disabled": isDisabled, pointerEvents: isDisabled ? "none" : undefined, cursor: "pointer", lineHeight: "normal" }, (0, _styles["default"])({ colorMode: colorMode, size: size }), props)); }); NumberInputStepper.displayName = "NumberInputStepper"; var NumberIncrementStepper = (0, _react.forwardRef)(function (props, ref) { var _useNumberInputContex4 = useNumberInputContext(), incrementStepper = _useNumberInputContex4.incrementStepper, size = _useNumberInputContex4.size; var iconSize = size === "sm" ? "11px" : "15px"; var children = props.children || _react["default"].createElement(_Icon["default"], { name: "triangle-up", size: "0.6em" }); return _react["default"].createElement(StepperButton, (0, _extends2["default"])({ fontSize: iconSize, ref: ref }, props, incrementStepper), children); }); exports.NumberIncrementStepper = NumberIncrementStepper; NumberIncrementStepper.displayName = "NumberIncrementStepper"; var NumberDecrementStepper = (0, _react.forwardRef)(function (props, ref) { var _useNumberInputContex5 = useNumberInputContext(), decrementStepper = _useNumberInputContex5.decrementStepper, size = _useNumberInputContex5.size; var iconSize = size === "sm" ? "11px" : "15px"; var children = props.children || _react["default"].createElement(_Icon["default"], { name: "triangle-down", size: "0.6em" }); return _react["default"].createElement(StepperButton, (0, _extends2["default"])({ fontSize: iconSize, ref: ref }, props, decrementStepper), children); }); exports.NumberDecrementStepper = NumberDecrementStepper; NumberDecrementStepper.displayName = "NumberDecrementStepper";