UNPKG

wix-style-react

Version:
232 lines (229 loc) • 8.79 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _Focusable = require("../common/Focusable"); var _ToggleButtonSt = require("./ToggleButton.st.css"); var _Tooltip = _interopRequireDefault(require("../Tooltip")); var _Text = _interopRequireDefault(require("../Text")); var _constants = require("./constants"); var _TooltipCommon = require("../common/PropTypes/TooltipCommon"); var _context = require("../WixStyleReactProvider/context"); var _ButtonCore = _interopRequireDefault(require("../Button/ButtonCore")); var _excluded = ["children", "size", "shape", "skin", "tooltipProps", "labelValue", "selected", "dataHook", "labelPlacement", "labelEllipsis", "disabled", "border", "tooltipDisabled"]; var _jsxFileName = "/home/builduser/work/a9c1ac8876d5057c/packages/wix-style-react/dist/cjs/ToggleButton/ToggleButton.js"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } class Icon extends _react.PureComponent { render() { var { children, size, shape, border, labelValue, labelPlacement, focusableOnBlur, focusableOnFocus, className } = this.props; var iconSize = _constants.iconChildSize[size]; var isLabelOutside = shape === 'round' && labelPlacement === 'end'; var [icon, label] = _react.default.Children.map(children, (children, child => child)); // TODO page is scrolled whenever icon focused and we press Space button return children && /*#__PURE__*/_react.default.createElement("span", { className: isLabelOutside ? _ToggleButtonSt.classes.labelContainer : '', __self: this, __source: { fileName: _jsxFileName, lineNumber: 42, columnNumber: 9 } }, /*#__PURE__*/_react.default.createElement("div", { className: (0, _ToggleButtonSt.st)(_ToggleButtonSt.classes.icon, { size, border }, className), onBlur: focusableOnBlur, onFocus: focusableOnFocus, __self: this, __source: { fileName: _jsxFileName, lineNumber: 43, columnNumber: 11 } }, /*#__PURE__*/(0, _react.cloneElement)(icon, { width: iconSize, height: iconSize }), !isLabelOutside && label), isLabelOutside && label); } } var ToggleButtonIcon = (0, _Focusable.withFocusable)(Icon); class ToggleButton extends _react.PureComponent { constructor() { super(...arguments); this.renderLabel = () => { var { disabled, size, labelValue, labelPlacement, labelEllipsis, shape } = this.props; var textSize = shape === _constants.SHAPES['pill'] ? _constants.pillTextSizesMap[size] : 'tiny'; var textWeight = shape === _constants.SHAPES['pill'] && size === 'tiny' ? 'bold' : 'thin'; return /*#__PURE__*/_react.default.createElement(_Text.default, { className: (0, _ToggleButtonSt.st)(_ToggleButtonSt.classes.label, { placement: shape !== _constants.SHAPES['pill'] && labelPlacement, size, shape }), disabled: disabled, dataHook: _constants.dataHooks.label, size: textSize, weight: textWeight, ellipsis: labelEllipsis, __self: this, __source: { fileName: _jsxFileName, lineNumber: 131, columnNumber: 7 } }, labelValue); }; } render() { var _this$props = this.props, { children, size, shape, skin, tooltipProps, labelValue, selected, dataHook, labelPlacement, labelEllipsis, disabled, border, tooltipDisabled } = _this$props, rest = (0, _objectWithoutProperties2.default)(_this$props, _excluded); return /*#__PURE__*/_react.default.createElement(_context.WixStyleReactContext.Consumer, { __self: this, __source: { fileName: _jsxFileName, lineNumber: 166, columnNumber: 7 } }, _ref => { var { newColorsBranding } = _ref; return /*#__PURE__*/_react.default.createElement(_Tooltip.default, (0, _extends2.default)({ className: (0, _ToggleButtonSt.st)(_ToggleButtonSt.classes.tooltip) }, tooltipProps, { size: "small", content: labelValue, disabled: tooltipDisabled || tooltipProps.disabled || labelPlacement !== 'tooltip' || shape === 'pill', "data-hook": dataHook, __self: this, __source: { fileName: _jsxFileName, lineNumber: 168, columnNumber: 11 } }), /*#__PURE__*/_react.default.createElement(_ButtonCore.default, (0, _extends2.default)({}, rest, { className: (0, _ToggleButtonSt.st)(_ToggleButtonSt.classes.root, { disabled, selected, skin, labelPlacement, shape, newColorsBranding }), "data-hook": _constants.dataHooks.button, "data-placement": labelPlacement, "data-selected": selected, "data-skin": skin, "data-shape": shape, "aria-pressed": selected, disabled: disabled, "aria-label": labelValue, __self: this, __source: { fileName: _jsxFileName, lineNumber: 181, columnNumber: 13 } }), /*#__PURE__*/_react.default.createElement(ToggleButtonIcon, { size: size, shape: shape, border: border, tooltipProps: tooltipProps, labelValue: labelValue, labelPlacement: labelPlacement, __self: this, __source: { fileName: _jsxFileName, lineNumber: 200, columnNumber: 15 } }, children, labelPlacement === 'end' || shape === _constants.SHAPES['pill'] ? this.renderLabel() : null), labelPlacement === 'bottom' && shape !== _constants.SHAPES['pill'] ? this.renderLabel() : null)); }); } } ToggleButton.displayName = 'ToggleButton'; ToggleButton.propTypes = { /** render as some other component or DOM tag */ as: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.string]), /** Used for passing any wix-style-react icon. For external icon make sure to follow ux sizing guidelines */ children: _propTypes.default.node, /** Button skins */ skin: _propTypes.default.oneOf(['standard', 'dark', 'inverted', 'destructive', 'success']), /** Button size */ size: _propTypes.default.oneOf(['tiny', 'small', 'medium', 'large']), /** Button shape */ shape: _propTypes.default.oneOf(['square', 'round', 'pill']), /** Label content */ labelValue: _propTypes.default.node, /** Label placement */ labelPlacement: _propTypes.default.oneOf(['tooltip', 'bottom', 'end']), /** Whether label should have ellipsis */ labelEllipsis: _propTypes.default.bool, /** Click event handler */ onClick: _propTypes.default.func, /** Applies selected styles */ selected: _propTypes.default.bool, /** Applies disabled styles */ disabled: _propTypes.default.bool, /** Applies border */ border: _propTypes.default.bool, /** String based data hook */ dataHook: _propTypes.default.string, /** Tooltip props for label. Applied only when `labelPlacement` is `tooltip`. * @linkTypeTo components-overlays--tooltip * @setTypeName TooltipCommonProps */ tooltipProps: _propTypes.default.shape(_TooltipCommon.TooltipCommonProps) }; ToggleButton.defaultProps = { skin: 'standard', size: 'medium', shape: 'square', border: false, disabled: false, labelValue: '', labelPlacement: 'tooltip', labelEllipsis: false, tooltipProps: { placement: 'top' } }; var _default = exports.default = ToggleButton; //# sourceMappingURL=ToggleButton.js.map