@primer/react
Version:
An implementation of GitHub's Primer Design System using React
54 lines (48 loc) • 2.02 kB
JavaScript
;
var React = require('react');
var ButtonGroup_module = require('./ButtonGroup.module.css.js');
var clsx = require('clsx');
var useFocusZone = require('../hooks/useFocusZone.js');
var useProvidedRefOrCreate = require('../hooks/useProvidedRefOrCreate.js');
require('@primer/behaviors/utils');
var behaviors = require('@primer/behaviors');
var Box = require('../Box/Box.js');
var defaultSxProp = require('../utils/defaultSxProp.js');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var React__default = /*#__PURE__*/_interopDefault(React);
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__default.default.forwardRef(function ButtonGroup({
children,
className,
role,
sx,
...rest
}, forwardRef) {
const buttons = React__default.default.Children.map(children, (child, index) => /*#__PURE__*/React__default.default.createElement("div", {
key: index
}, child));
const buttonRef = useProvidedRefOrCreate.useProvidedRefOrCreate(forwardRef);
useFocusZone.useFocusZone({
containerRef: buttonRef,
disabled: role !== 'toolbar',
bindKeys: behaviors.FocusKeys.ArrowHorizontal,
focusOutBehavior: 'wrap'
});
if (sx !== defaultSxProp.defaultSxProp) {
return /*#__PURE__*/React__default.default.createElement(Box, _extends({
as: "div",
className: clsx.clsx(className, ButtonGroup_module.ButtonGroup),
role: role
}, rest, {
sx: sx,
ref: buttonRef
}), buttons);
}
return /*#__PURE__*/React__default.default.createElement("div", _extends({
ref: buttonRef,
className: clsx.clsx(className, ButtonGroup_module.ButtonGroup),
role: role
}, rest), buttons);
});
ButtonGroup.displayName = 'ButtonGroup';
module.exports = ButtonGroup;