UNPKG

primereact

Version:

PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime

199 lines (185 loc) 6.67 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var ripple = require('primereact/ripple'); var tooltip = require('primereact/tooltip'); var utils = require('primereact/utils'); function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n["default"] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespace(React); function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var ButtonBase = { defaultProps: { __TYPE: 'Button', label: null, icon: null, iconPos: 'left', badge: null, severity: null, rounded: false, raised: false, outlined: false, text: false, link: false, badgeClassName: null, tooltip: null, size: null, tooltipOptions: null, disabled: false, loading: false, loadingIcon: 'pi pi-spinner pi-spin', visible: true, children: undefined }, getProps: function getProps(props) { return utils.ObjectUtils.getMergedProps(props, ButtonBase.defaultProps); }, getOtherProps: function getOtherProps(props) { return utils.ObjectUtils.getDiffProps(props, ButtonBase.defaultProps); } }; var Button = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.forwardRef(function (inProps, ref) { var _classNames2; var props = ButtonBase.getProps(inProps); var elementRef = React__namespace.useRef(ref); React__namespace.useEffect(function () { utils.ObjectUtils.combinedRefs(elementRef, ref); }, [elementRef, ref]); if (props.visible === false) { return null; } var createIcon = function createIcon() { var icon = props.loading ? props.loadingIcon : props.icon; var className = utils.classNames('p-button-icon p-c', _defineProperty({ 'p-button-loading-icon': props.loading }, "p-button-icon-".concat(props.iconPos), props.label)); return utils.IconUtils.getJSXIcon(icon, { className: className }, { props: props }); }; var createLabel = function createLabel() { if (props.label) { return /*#__PURE__*/React__namespace.createElement("span", { className: "p-button-label p-c" }, props.label); } return !props.children && !props.label && /*#__PURE__*/React__namespace.createElement("span", { className: "p-button-label p-c", dangerouslySetInnerHTML: { __html: '&nbsp;' } }); }; var createBadge = function createBadge() { if (props.badge) { var badgeClassName = utils.classNames('p-badge', props.badgeClassName); return /*#__PURE__*/React__namespace.createElement("span", { className: badgeClassName }, props.badge); } return null; }; var disabled = props.disabled || props.loading; var showTooltip = !disabled || props.tooltipOptions && props.tooltipOptions.showOnDisabled; var hasTooltip = utils.ObjectUtils.isNotEmpty(props.tooltip) && showTooltip; var otherProps = ButtonBase.getOtherProps(props); var sizeMapping = { large: 'lg', small: 'sm' }; var size = sizeMapping[props.size]; var className = utils.classNames('p-button p-component', props.className, (_classNames2 = { 'p-button-icon-only': (props.icon || props.loading && props.loadingIcon) && !props.label && !props.children, 'p-button-vertical': (props.iconPos === 'top' || props.iconPos === 'bottom') && props.label, 'p-disabled': disabled, 'p-button-loading': props.loading, 'p-button-outlined': props.outlined, 'p-button-raised': props.raised, 'p-button-link': props.link, 'p-button-text': props.text, 'p-button-rounded': props.rounded, 'p-button-loading-label-only': props.loading && !props.icon && props.label }, _defineProperty(_classNames2, "p-button-loading-".concat(props.iconPos), props.loading && props.loadingIcon && props.label), _defineProperty(_classNames2, "p-button-".concat(size), size), _defineProperty(_classNames2, "p-button-".concat(props.severity), props.severity), _classNames2)); var icon = createIcon(); var label = createLabel(); var badge = createBadge(); var defaultAriaLabel = props.label ? props.label + (props.badge ? ' ' + props.badge : '') : props['aria-label']; return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("button", _extends({ ref: elementRef, "aria-label": defaultAriaLabel }, otherProps, { className: className, disabled: disabled }), icon, label, props.children, badge, /*#__PURE__*/React__namespace.createElement(ripple.Ripple, null)), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({ target: elementRef, content: props.tooltip }, props.tooltipOptions))); })); Button.displayName = 'Button'; exports.Button = Button;