@gechiui/components
Version:
UI components for GeChiUI.
110 lines (101 loc) • 3.16 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createElement, Fragment } from "@gechiui/element";
/**
* External dependencies
*/
// eslint-disable-next-line no-restricted-imports
// eslint-disable-next-line no-restricted-imports
import { Radio } from 'reakit';
/**
* GeChiUI dependencies
*/
import { useInstanceId } from '@gechiui/compose';
/**
* Internal dependencies
*/
import { contextConnect, useContextSystem } from '../../ui/context';
import { useToggleGroupControlContext } from '../context';
import * as styles from './styles';
import { useCx } from '../../utils/hooks';
import Tooltip from '../../tooltip';
const {
ButtonContentView,
LabelPlaceholderView,
LabelView
} = styles;
const WithToolTip = _ref => {
let {
showTooltip,
text,
children
} = _ref;
if (showTooltip && text) {
return createElement(Tooltip, {
text: text,
position: "top center"
}, children);
}
return createElement(Fragment, null, children);
};
function ToggleGroupControlOption(props, forwardedRef) {
const toggleGroupControlContext = useToggleGroupControlContext();
const id = useInstanceId(ToggleGroupControlOption, toggleGroupControlContext.baseId || 'toggle-group-control-option');
const buttonProps = useContextSystem({ ...props,
id
}, 'ToggleGroupControlOption');
const {
className,
isBlock = false,
label,
value,
showTooltip = false,
...radioProps
} = { ...toggleGroupControlContext,
...buttonProps
};
const isActive = radioProps.state === value;
const cx = useCx();
const labelViewClasses = cx(isBlock && styles.labelBlock);
const classes = cx(styles.buttonView, className, isActive && styles.buttonActive);
const optionLabel = !!radioProps['aria-label'] ? radioProps['aria-label'] : label;
return createElement(LabelView, {
className: labelViewClasses,
"data-active": isActive
}, createElement(WithToolTip, {
showTooltip: showTooltip,
text: optionLabel
}, createElement(Radio, _extends({}, radioProps, {
as: "button",
"aria-label": optionLabel,
className: classes,
"data-value": value,
ref: forwardedRef,
value: value
}), createElement(ButtonContentView, null, label), createElement(LabelPlaceholderView, {
"aria-hidden": true
}, label))));
}
/**
* `ToggleGroupControlOption` is a form component and is meant to be used as a
* child of `ToggleGroupControl`.
*
* @example
* ```jsx
* import {
* __experimentalToggleGroupControl as ToggleGroupControl,
* __experimentalToggleGroupControlOption as ToggleGroupControlOption,
* } from '@gechiui/components';
*
* function Example() {
* return (
* <ToggleGroupControl label="my label" value="vertical" isBlock>
* <ToggleGroupControlOption value="horizontal" label="Horizontal" />
* <ToggleGroupControlOption value="vertical" label="Vertical" />
* </ToggleGroupControl>
* );
* }
* ```
*/
const ConnectedToggleGroupControlOption = contextConnect(ToggleGroupControlOption, 'ToggleGroupControlOption');
export default ConnectedToggleGroupControlOption;
//# sourceMappingURL=component.js.map