wix-style-react
Version:
239 lines (198 loc) • 8.78 kB
JavaScript
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;