UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.

110 lines (109 loc) 4.02 kB
"use strict"; "use client"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; exports.__esModule = true; exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _Minus = _interopRequireDefault(require("../../icons/Minus")); var _Plus = _interopRequireDefault(require("../../icons/Plus")); var _ButtonPrimitive = _interopRequireDefault(require("../../primitives/ButtonPrimitive")); var _useTheme = _interopRequireDefault(require("../../hooks/useTheme")); const getMaxWidth = ({ maxWidth }) => { if (typeof maxWidth === "string") return maxWidth; return `${parseInt(maxWidth.toString(), 10)}px`; }; const stepperButtonMixin = ({ disabled, active }) => (0, _clsx.default)("[&_svg]:p-xxxs", "de:[&_svg]:h-icon-small de:[&_svg]:w-icon-small [&_svg]:h-icon-medium [&_svg]:w-icon-medium", "[&_svg]:rounded-circle", "focus:outline-0", "[&_svg]:focus:outline-blue-normal [&_svg]:focus:outline [&_svg]:focus:outline-2", !disabled && [active ? "[&_svg]:bg-blue-normal hover:[&_svg]:bg-blue-normal-hover [&_svg]:active:focus:shadow-[inset_0_0_0_2px_var(--palette-blue-light-active)]" : "[&_svg]:bg-cloud-normal hover:[&_svg]:bg-cloud-normal-hover [&_svg]:active:focus:shadow-[inset_0_0_0_2px_var(--palette-cloud-normal-active)]"], disabled && "[&_svg]:bg-cloud-normal"); const StepperStateless = ({ maxWidth = "120px", disabled, dataTest, id, value, active, name, minValue = -Infinity, maxValue = Infinity, onKeyDown, onBlur, onFocus, onIncrement, onDecrement, titleIncrement, titleDecrement, disabledIncrement, disabledDecrement }) => { const theme = (0, _useTheme.default)(); const iconStyles = { foreground: active ? theme.orbit.paletteWhite : theme.orbit.paletteInkDark }; const isMinusDisabled = disabled || disabledDecrement || typeof value === "number" && value <= +minValue; const isPlusDisabled = disabled || disabledIncrement || typeof value === "number" && value >= +maxValue; return /*#__PURE__*/React.createElement("div", { "data-test": dataTest, id: id, className: "flex w-full flex-auto", style: { maxWidth: getMaxWidth({ maxWidth }) } }, /*#__PURE__*/React.createElement(_ButtonPrimitive.default, { className: stepperButtonMixin({ disabled: isMinusDisabled, active }), disabled: isMinusDisabled, iconLeft: /*#__PURE__*/React.createElement(_Minus.default, { size: "small" }), onClick: ev => { if (onDecrement && !disabled) { onDecrement(ev); } }, title: titleDecrement, icons: iconStyles }), /*#__PURE__*/React.createElement("input", { className: (0, _clsx.default)("h-form-box-normal w-full min-w-0 border-0", "p-0 text-center", "text-large text-form-element-filled-foreground font-medium", "[&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none", "[&::-webkit-inner-spin-button]:m-0 [&::-webkit-outer-spin-button]:m-0", disabled ? "bg-transparent opacity-50" : "opacity-100", "focus:outline-0"), name: name, disabled: disabled, type: "text", value: Number(value) || 0, min: minValue, max: maxValue, onKeyDown: ev => { if (onKeyDown) { onKeyDown(ev); } }, onBlur: onBlur, onFocus: onFocus, readOnly: true }), /*#__PURE__*/React.createElement(_ButtonPrimitive.default, { className: stepperButtonMixin({ disabled: isPlusDisabled, active }), disabled: isPlusDisabled, iconLeft: /*#__PURE__*/React.createElement(_Plus.default, { size: "small" }), onClick: ev => { if (onIncrement && !disabled) { onIncrement(ev); } }, title: titleIncrement, icons: iconStyles })); }; var _default = StepperStateless; exports.default = _default;