@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
JavaScript
;
"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;