@primer/react
Version:
An implementation of GitHub's Primer Design System using React
48 lines (45 loc) • 1.68 kB
JavaScript
import React from 'react';
import classes from './ButtonGroup.module.css.js';
import { clsx } from 'clsx';
import { useFocusZone } from '../hooks/useFocusZone.js';
import { useProvidedRefOrCreate } from '../hooks/useProvidedRefOrCreate.js';
import '@primer/behaviors/utils';
import { FocusKeys } from '@primer/behaviors';
import Box from '../Box/Box.js';
import { defaultSxProp } from '../utils/defaultSxProp.js';
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
const ButtonGroup = /*#__PURE__*/React.forwardRef(function ButtonGroup({
children,
className,
role,
sx,
...rest
}, forwardRef) {
const buttons = React.Children.map(children, (child, index) => /*#__PURE__*/React.createElement("div", {
key: index
}, child));
const buttonRef = useProvidedRefOrCreate(forwardRef);
useFocusZone({
containerRef: buttonRef,
disabled: role !== 'toolbar',
bindKeys: FocusKeys.ArrowHorizontal,
focusOutBehavior: 'wrap'
});
if (sx !== defaultSxProp) {
return /*#__PURE__*/React.createElement(Box, _extends({
as: "div",
className: clsx(className, classes.ButtonGroup),
role: role
}, rest, {
sx: sx,
ref: buttonRef
}), buttons);
}
return /*#__PURE__*/React.createElement("div", _extends({
ref: buttonRef,
className: clsx(className, classes.ButtonGroup),
role: role
}, rest), buttons);
});
ButtonGroup.displayName = 'ButtonGroup';
export { ButtonGroup as default };