UNPKG

@hitachivantara/uikit-react-core

Version:

Core React components for the NEXT Design System.

99 lines (98 loc) 3.29 kB
"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;