UNPKG

wix-style-react

Version:
239 lines (198 loc) • 8.78 kB
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _extends from "@babel/runtime/helpers/extends"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; import _createClass from "@babel/runtime/helpers/createClass"; import _inherits from "@babel/runtime/helpers/inherits"; import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf"; var _excluded = ["children", "size", "shape", "skin", "tooltipProps", "labelValue", "selected", "dataHook", "labelPlacement", "labelEllipsis", "disabled", "border"]; function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } import React, { cloneElement, PureComponent } from 'react'; import PropTypes from 'prop-types'; import { ButtonNext } from "wix-ui-core/dist/es/src/components/button-next"; import { withFocusable } from "wix-ui-core/dist/es/src/hocs/Focusable/FocusableHOC"; import { st, classes } from './ToggleButton.st.css'; import Tooltip from '../Tooltip'; import Text from '../Text'; import { iconChildSize, dataHooks } from './constants'; import { TooltipCommonProps } from '../common/PropTypes/TooltipCommon'; var Icon = /*#__PURE__*/function (_PureComponent) { _inherits(Icon, _PureComponent); var _super = _createSuper(Icon); function Icon() { _classCallCheck(this, Icon); return _super.apply(this, arguments); } _createClass(Icon, [{ key: "render", value: function render() { var _this$props = this.props, children = _this$props.children, size = _this$props.size, shape = _this$props.shape, border = _this$props.border, tooltipProps = _this$props.tooltipProps, tooltipDisabled = _this$props.tooltipDisabled, labelValue = _this$props.labelValue, labelPlacement = _this$props.labelPlacement, focusableOnBlur = _this$props.focusableOnBlur, focusableOnFocus = _this$props.focusableOnFocus, className = _this$props.className; var iconSize = iconChildSize[size]; var isLabelOutside = shape === 'round' && labelPlacement === 'end'; var _React$Children$map = React.Children.map(children, (children, function (child) { return child; })), _React$Children$map2 = _slicedToArray(_React$Children$map, 2), icon = _React$Children$map2[0], label = _React$Children$map2[1]; // TODO page is scrolled whenever icon focused and we press Space button return children && /*#__PURE__*/React.createElement(Tooltip, _extends({ className: st(classes.tooltip) }, tooltipProps, { dataHook: dataHooks.tooltip, size: "small", content: labelValue, disabled: tooltipDisabled || tooltipProps.disabled }), /*#__PURE__*/React.createElement("span", { className: isLabelOutside ? classes.labelContainer : '' }, /*#__PURE__*/React.createElement("div", { className: st(classes.icon, { size: size, border: border }, className), tabIndex: 1, onBlur: focusableOnBlur, onFocus: focusableOnFocus }, /*#__PURE__*/cloneElement(icon, { width: iconSize, height: iconSize }), !isLabelOutside && label), isLabelOutside && label)); } }]); return Icon; }(PureComponent); var ToggleButtonIcon = withFocusable(Icon); var ToggleButton = /*#__PURE__*/function (_PureComponent2) { _inherits(ToggleButton, _PureComponent2); var _super2 = _createSuper(ToggleButton); function ToggleButton() { var _this; _classCallCheck(this, ToggleButton); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super2.call.apply(_super2, [this].concat(args)); _defineProperty(_assertThisInitialized(_this), "renderLabel", function () { var _this$props2 = _this.props, disabled = _this$props2.disabled, size = _this$props2.size, labelValue = _this$props2.labelValue, labelPlacement = _this$props2.labelPlacement, labelEllipsis = _this$props2.labelEllipsis; return /*#__PURE__*/React.createElement(Text, { className: st(classes.label, { placement: labelPlacement, size: size }), disabled: disabled, dataHook: dataHooks.label, size: "tiny", weight: "thin", ellipsis: labelEllipsis }, labelValue); }); return _this; } _createClass(ToggleButton, [{ key: "render", value: function render() { var _this$props3 = this.props, children = _this$props3.children, size = _this$props3.size, shape = _this$props3.shape, skin = _this$props3.skin, tooltipProps = _this$props3.tooltipProps, labelValue = _this$props3.labelValue, selected = _this$props3.selected, dataHook = _this$props3.dataHook, labelPlacement = _this$props3.labelPlacement, labelEllipsis = _this$props3.labelEllipsis, disabled = _this$props3.disabled, border = _this$props3.border, rest = _objectWithoutProperties(_this$props3, _excluded); return /*#__PURE__*/React.createElement(ButtonNext, _extends({}, rest, { className: st(classes.root, { disabled: disabled, selected: selected, skin: skin, labelPlacement: labelPlacement, shape: shape }), tabIndex: -1, "data-hook": dataHook, "data-placement": labelPlacement, "data-selected": selected, "data-skin": skin, disabled: disabled }), /*#__PURE__*/React.createElement(ToggleButtonIcon, { size: size, shape: shape, border: border, tooltipProps: tooltipProps, labelValue: labelValue, labelPlacement: labelPlacement, tooltipDisabled: labelPlacement !== 'tooltip' }, children, labelPlacement === 'end' ? this.renderLabel() : null), labelPlacement === 'bottom' ? this.renderLabel() : null); } }]); return ToggleButton; }(PureComponent); _defineProperty(ToggleButton, "displayName", 'ToggleButton'); _defineProperty(ToggleButton, "propTypes", { /** render as some other component or DOM tag */ as: PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.string]), /** Used for passing any wix-style-react icon. For external icon make sure to follow ux sizing guidelines */ children: PropTypes.node, /** Button skins */ skin: PropTypes.oneOf(['standard', 'dark', 'inverted', 'destructive', 'success']), /** Button size */ size: PropTypes.oneOf(['tiny', 'small', 'medium', 'large']), /** Button shape */ shape: PropTypes.oneOf(['square', 'round']), /** Label content */ labelValue: PropTypes.node, /** Label placement */ labelPlacement: PropTypes.oneOf(['tooltip', 'bottom', 'end']), /** Whether label should have ellipsis */ labelEllipsis: PropTypes.bool, /** Click event handler */ onClick: PropTypes.func, /** Applies selected styles */ selected: PropTypes.bool, /** Applies disabled styles */ disabled: PropTypes.bool, /** Applies border */ border: PropTypes.bool, /** String based data hook */ dataHook: PropTypes.string, /** Tooltip props for label. Applied only when `labelPlacement` is `tooltip`. */ tooltipProps: PropTypes.shape(TooltipCommonProps) }); _defineProperty(ToggleButton, "defaultProps", { skin: 'standard', size: 'medium', shape: 'square', border: false, disabled: false, labelValue: '', labelPlacement: 'tooltip', labelEllipsis: false, tooltipProps: { placement: 'top' } }); export default ToggleButton;