@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
99 lines (98 loc) • 3.29 kB
JavaScript
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const jsxRuntime = require("react/jsx-runtime");
const React = require("react");
const uikitReactUtils = require("@hitachivantara/uikit-react-utils");
const uikitStyles = require("@hitachivantara/uikit-styles");
const generic = require("../types/generic.cjs");
const Button_styles = require("./Button.styles.cjs");
function parseVariant(variant) {
if (variant === "semantic") return ["inherit", "ghost"];
if (variant === "secondary") return ["secondary", "subtle"];
if (variant === "ghost") return ["primary", "ghost"];
if (variant === "contained" || variant === "subtle") {
return ["secondary", variant];
}
const result = variant.split(/(?=[A-Z])/);
if (!result[1]) return [result[0], "contained"];
return result.map((x) => x.toLowerCase());
}
const HvButton = generic.fixedForwardRef(function HvButton2(props, ref) {
const {
classes: classesProp,
children,
icon = false,
variant: variantProp = icon ? "secondaryGhost" : "primary",
color: colorProp,
disabled = false,
className,
startIcon,
endIcon,
size,
radius,
overrideIconColors,
component: Component = "button",
focusableWhenDisabled,
onClick: onClickProp,
onMouseDown: onMouseDownProp,
selected,
style,
...others
} = uikitReactUtils.useDefaultProps("HvButton", props);
const { classes, css, cx } = Button_styles.useClasses(classesProp);
const [parsedColor, variant] = parseVariant(variantProp);
const color = colorProp ?? parsedColor;
const handleClick = (e) => {
if (disabled) return;
onClickProp?.(e);
};
const handleMouseDown = (e) => {
if (disabled) return;
onMouseDownProp?.(e);
};
const sizeStyles = React.useMemo(
() => size && (icon ? Button_styles.getIconSizeStyles(size) : Button_styles.getSizeStyles(size)),
[size, icon]
);
return /* @__PURE__ */ jsxRuntime.jsxs(
Component,
{
ref,
style: uikitReactUtils.mergeStyles(style, {
"--color": color && uikitStyles.getColor(color),
"--radius": radius && uikitStyles.theme.radii[radius],
"--HvButton-height": sizeStyles?.height ?? "32px"
}),
className: cx(
classes.root,
classes[variant],
classes[variantProp],
// Placed after type and color CSS for DS3 override
{
[classes.icon]: icon,
[classes.disabled]: disabled
},
sizeStyles && css(sizeStyles),
className
),
"data-color": color,
onClick: handleClick,
onMouseDown: handleMouseDown,
...Component === "button" && { type: "button" },
...disabled && {
disabled: !focusableWhenDisabled,
tabIndex: focusableWhenDisabled ? 0 : -1,
"aria-disabled": true
},
...selected != null && { "aria-pressed": selected },
...others,
children: [
startIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: classes.startIcon, children: startIcon }),
children,
endIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: classes.endIcon, children: endIcon })
]
}
);
});
exports.buttonClasses = Button_styles.staticClasses;
exports.HvButton = HvButton;