UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

94 lines (87 loc) 4.92 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var styled = require('styled-components'); var sx = require('../sx.js'); var getSegmentedControlStyles = require('./getSegmentedControlStyles.js'); var Box = require('../Box/Box.js'); var defaultSxProp = require('../utils/defaultSxProp.js'); var reactIs = require('react-is'); var getGlobalFocusStyles = require('../internal/utils/getGlobalFocusStyles.js'); require('../FeatureFlags/FeatureFlags.js'); var useFeatureFlag = require('../FeatureFlags/useFeatureFlag.js'); require('../FeatureFlags/DefaultFeatureFlags.js'); var SegmentedControl_module = require('./SegmentedControl.module.css.js'); var clsx = require('clsx'); var toggleStyledComponent = require('../internal/utils/toggleStyledComponent.js'); var Tooltip = require('../TooltipV2/Tooltip.js'); var merge = require('deepmerge'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefault(React); var styled__default = /*#__PURE__*/_interopDefault(styled); var merge__default = /*#__PURE__*/_interopDefault(merge); 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 SegmentedControlIconButtonStyled = toggleStyledComponent.toggleStyledComponent(getSegmentedControlStyles.SEGMENTED_CONTROL_CSS_MODULES_FEATURE_FLAG, 'button', styled__default.default.button.withConfig({ displayName: "SegmentedControlIconButton__SegmentedControlIconButtonStyled", componentId: "sc-oxh6a9-0" })(["", ";", ";"], getGlobalFocusStyles('-1px'), sx.default)); const SegmentedControlIconButton = ({ 'aria-label': ariaLabel, icon: Icon, selected, sx: sxProp = defaultSxProp.defaultSxProp, className, description, tooltipDirection, ...rest }) => { const enabled = useFeatureFlag.useFeatureFlag(getSegmentedControlStyles.SEGMENTED_CONTROL_CSS_MODULES_FEATURE_FLAG); const mergedSx = enabled ? sxProp : merge__default.default({ width: '32px', // TODO: use primitive `control.medium.size` when it is available ...getSegmentedControlStyles.getSegmentedControlListItemStyles() }, sxProp); const tooltipFlagEnabled = useFeatureFlag.useFeatureFlag('primer_react_segmented_control_tooltip'); if (tooltipFlagEnabled) { return /*#__PURE__*/React__default.default.createElement(Box, { as: "li", sx: mergedSx, className: clsx.clsx(enabled && SegmentedControl_module.Item, className), "data-selected": selected || undefined }, /*#__PURE__*/React__default.default.createElement(Tooltip.Tooltip, { type: description ? undefined : 'label', text: description ? description : ariaLabel, direction: tooltipDirection }, /*#__PURE__*/React__default.default.createElement(SegmentedControlIconButtonStyled, _extends({ "aria-current": selected // If description is provided, we will use the tooltip to describe the button, so we need to keep the aria-label to label the button. , "aria-label": description ? ariaLabel : undefined, sx: enabled ? undefined : getSegmentedControlStyles.getSegmentedControlButtonStyles({ selected }), className: clsx.clsx(enabled && SegmentedControl_module.Button, enabled && SegmentedControl_module.IconButton) }, rest), /*#__PURE__*/React__default.default.createElement("span", { className: clsx.clsx(enabled ? SegmentedControl_module.Content : 'segmentedControl-content') }, reactIs.isElement(Icon) ? Icon : /*#__PURE__*/React__default.default.createElement(Icon, null))))); } else { // This can be removed when primer_react_segmented_control_tooltip feature flag is GA-ed. return /*#__PURE__*/React__default.default.createElement(Box, { as: "li", sx: mergedSx, className: clsx.clsx(enabled && SegmentedControl_module.Item, className), "data-selected": selected || undefined }, /*#__PURE__*/React__default.default.createElement(SegmentedControlIconButtonStyled, _extends({ "aria-label": ariaLabel, "aria-current": selected, sx: enabled ? undefined : getSegmentedControlStyles.getSegmentedControlButtonStyles({ selected }), className: clsx.clsx(enabled && SegmentedControl_module.Button, enabled && SegmentedControl_module.IconButton) }, rest), /*#__PURE__*/React__default.default.createElement("span", { className: clsx.clsx(enabled ? SegmentedControl_module.Content : 'segmentedControl-content') }, reactIs.isElement(Icon) ? Icon : /*#__PURE__*/React__default.default.createElement(Icon, null)))); } }; exports.SegmentedControlIconButton = SegmentedControlIconButton; exports.default = SegmentedControlIconButton;