UNPKG

@wix/design-system

Version:

@wix/design-system

204 lines (201 loc) 9.01 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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _Focusable = require("../common/Focusable"); var _ToggleButton2 = require("./ToggleButton.classes"); var _Tooltip = _interopRequireDefault(require("../Tooltip")); var _Text = _interopRequireDefault(require("../Text")); var _constants = require("./constants"); var _context = require("../WixDesignSystemProvider/context"); var _ButtonCore = _interopRequireDefault(require("../Button/ButtonCore")); var _excluded = ["children", "size", "shape", "skin", "tooltipProps", "labelValue", "selected", "interactive", "dataHook", "labelPlacement", "labelEllipsis", "disabled", "border", "tooltipDisabled", "className"]; var _jsxFileName = "/home/builduser/work/57e038ea7326c1ec/packages/wix-design-system/dist/cjs/ToggleButton/ToggleButton.tsx"; 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); } var Icon = _ref => { var _icon$props; var children = _ref.children, size = _ref.size, shape = _ref.shape, labelPlacement = _ref.labelPlacement, focusableOnBlur = _ref.focusableOnBlur, focusableOnFocus = _ref.focusableOnFocus, className = _ref.className; var iconSize = _constants.iconChildSize[size]; var isLabelOutside = shape === 'round' && (labelPlacement === 'end' || labelPlacement === 'start'); var isLabelStart = labelPlacement === 'start'; var isLabelEnd = labelPlacement === 'end' || shape === 'pill' && !isLabelStart; var _ref2 = _react.default.Children.map(children, child => child), _ref3 = (0, _slicedToArray2.default)(_ref2, 2), first = _ref3[0], second = _ref3[1]; var icon = isLabelStart ? second : first; var topOutsideLabel = isLabelOutside && isLabelStart ? first : null; var topInsideLabel = !isLabelOutside && isLabelStart ? first : null; var bottomInsideLabel = !isLabelOutside && isLabelEnd ? second : null; var bottomOutsideLabel = isLabelOutside && isLabelEnd ? second : null; // TODO page is scrolled whenever icon focused and we press Space button return children && /*#__PURE__*/_react.default.createElement("span", { className: _ToggleButton2.classes.labelContainer(), __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 56, columnNumber: 7 } }, topOutsideLabel, /*#__PURE__*/_react.default.createElement("div", { className: _ToggleButton2.classes.icon({}, className), onBlur: focusableOnBlur, onFocus: focusableOnFocus, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 58, columnNumber: 9 } }, topInsideLabel, /*#__PURE__*/(0, _react.cloneElement)(icon, { className: _ToggleButton2.classes.rootIcon({}, (_icon$props = icon.props) == null ? void 0 : _icon$props.className), width: iconSize, height: iconSize }), bottomInsideLabel), bottomOutsideLabel); }; var ToggleButtonIcon = (0, _Focusable.withFocusable)(Icon); class ToggleButton extends _react.PureComponent { constructor() { super(...arguments); this.renderLabel = () => { var _this$props = this.props, disabled = _this$props.disabled, labelValue = _this$props.labelValue, labelEllipsis = _this$props.labelEllipsis; return /*#__PURE__*/_react.default.createElement(_Text.default, { className: _ToggleButton2.classes.label(), disabled: disabled, dataHook: _constants.dataHooks.label, weight: "thin", ellipsis: labelEllipsis, __self: this, __source: { fileName: _jsxFileName, lineNumber: 100, columnNumber: 7 } }, labelValue); }; } render() { var _this$props2 = this.props, children = _this$props2.children, _this$props2$size = _this$props2.size, size = _this$props2$size === void 0 ? ToggleButton.defaultProps.size : _this$props2$size, _this$props2$shape = _this$props2.shape, shape = _this$props2$shape === void 0 ? ToggleButton.defaultProps.shape : _this$props2$shape, skin = _this$props2.skin, tooltipProps = _this$props2.tooltipProps, labelValue = _this$props2.labelValue, selected = _this$props2.selected, interactive = _this$props2.interactive, dataHook = _this$props2.dataHook, labelPlacement = _this$props2.labelPlacement, labelEllipsis = _this$props2.labelEllipsis, disabled = _this$props2.disabled, _this$props2$border = _this$props2.border, border = _this$props2$border === void 0 ? ToggleButton.defaultProps.border : _this$props2$border, tooltipDisabled = _this$props2.tooltipDisabled, className = _this$props2.className, rest = (0, _objectWithoutProperties2.default)(_this$props2, _excluded); var hasIcon = Boolean(children && _react.default.Children.count(children) > 0); // A pill always renders an inline label, so it is never icon-only. var iconOnly = hasIcon && shape !== _constants.SHAPES['pill'] && (shape === _constants.SHAPES['round'] || labelPlacement === 'tooltip' || labelPlacement === 'bottom'); return /*#__PURE__*/_react.default.createElement(_context.WixDesignSystemContext.Consumer, { __self: this, __source: { fileName: _jsxFileName, lineNumber: 142, columnNumber: 7 } }, _ref4 => { var mobile = _ref4.mobile; return /*#__PURE__*/_react.default.createElement(_Tooltip.default, (0, _extends2.default)({ className: _ToggleButton2.classes.tooltip({ disabled, interactive }) }, tooltipProps, { size: "small", content: labelValue, disabled: !labelValue || tooltipDisabled || (tooltipProps == null ? void 0 : tooltipProps.disabled) || labelPlacement !== 'tooltip' || shape === 'pill' || mobile, "data-hook": dataHook, __self: this, __source: { fileName: _jsxFileName, lineNumber: 144, columnNumber: 11 } }), /*#__PURE__*/_react.default.createElement(_ButtonCore.default, (0, _extends2.default)({}, rest, { type: undefined, onFocus: rest == null ? void 0 : rest.onFocus, onBlur: rest == null ? void 0 : rest.onBlur, className: _ToggleButton2.classes.root({ disabled, selected, interactive, skin, labelPlacement, shape, mobile, size, hasIcon, border, iconOnly }, className), contentClassName: _ToggleButton2.classes.btnContent(), "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 == null ? void 0 : labelValue.toString(), __self: this, __source: { fileName: _jsxFileName, lineNumber: 159, columnNumber: 13 } }), /*#__PURE__*/_react.default.createElement(ToggleButtonIcon, { size: size, shape: shape, labelPlacement: labelPlacement, __self: this, __source: { fileName: _jsxFileName, lineNumber: 190, columnNumber: 15 } }, labelPlacement === 'start' ? this.renderLabel() : null, children, labelPlacement === 'end' || shape === _constants.SHAPES['pill'] && labelPlacement !== 'start' ? this.renderLabel() : null), labelPlacement === 'bottom' && shape !== _constants.SHAPES['pill'] ? this.renderLabel() : null)); }); } } ToggleButton.displayName = 'ToggleButton'; ToggleButton.defaultProps = { skin: 'standard', size: 'medium', shape: 'square', border: false, interactive: true, disabled: false, labelValue: '', labelPlacement: 'tooltip', labelEllipsis: false, tooltipProps: { placement: 'top' } }; var _default = exports.default = ToggleButton; //# sourceMappingURL=ToggleButton.js.map