braid-design-system
Version:
Themeable design system for the SEEK Group
63 lines (62 loc) • 1.81 kB
JavaScript
const jsxRuntime = require("react/jsx-runtime");
const react = require("react");
const lib_components_Box_Box_cjs = require("../Box/Box.cjs");
const lib_components_TextLink_TextLink_cjs = require("../TextLink/TextLink.cjs");
const lib_components_private_buildDataAttributes_cjs = require("../private/buildDataAttributes.cjs");
const noop = () => {
};
const TextLinkButton = ({
weight,
hitArea,
id,
onClick = noop,
data,
children,
"aria-controls": ariaControls,
"aria-expanded": ariaExpanded,
"aria-describedby": ariaDescribedBy,
"aria-label": ariaLabel,
tabIndex,
icon,
iconPosition,
...restProps
}) => {
const buttonRef = react.useRef(null);
const classes = lib_components_TextLink_TextLink_cjs.useLinkStyles({
reset: false,
weight,
hitArea
});
const handleKeyboard = react.useCallback(
(event) => {
var _a;
if (event.key === "Enter" || event.key === " ") {
event.preventDefault();
(_a = buttonRef.current) == null ? void 0 : _a.click();
}
},
[buttonRef]
);
return /* @__PURE__ */ jsxRuntime.jsx(
lib_components_Box_Box_cjs.Box,
{
ref: buttonRef,
role: "button",
tabIndex: tabIndex ?? 0,
component: "span",
outline: "focus",
onClick,
onKeyDown: handleKeyboard,
"aria-controls": ariaControls,
"aria-expanded": ariaExpanded,
"aria-describedby": ariaDescribedBy,
"aria-label": ariaLabel,
id,
className: classes,
...lib_components_private_buildDataAttributes_cjs.buildDataAttributes({ data, validateRestProps: restProps }),
children: /* @__PURE__ */ jsxRuntime.jsx(lib_components_TextLink_TextLink_cjs.TextLinkContent, { icon, iconPosition, children })
}
);
};
exports.TextLinkButton = TextLinkButton;
;