UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

91 lines (90 loc) 4.07 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = PopoverCloseButton; var _react = _interopRequireDefault(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _Context = _interopRequireDefault(require("../../../shared/Context.js")); var _componentHelper = require("../../../shared/component-helper.js"); var _SpacingHelper = require("../../space/SpacingHelper.js"); var _SkeletonHelper = require("../../skeleton/SkeletonHelper.js"); var _ButtonContent = _interopRequireDefault(require("../../button/internal/ButtonContent.js")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function PopoverCloseButton({ icon = 'close', icon_size, icon_position = 'right', variant = 'tertiary', size, className, title, text, children, type: buttonType, stretch, wrap, skeleton, ...rest }) { var _rest$ariaLabel, _context$theme; const context = _react.default.useContext(_Context.default); const hasIcon = Boolean(icon); const content = text !== null && text !== void 0 ? text : children; const hasContent = Boolean(content); const isIconOnly = Boolean(hasIcon && !hasContent); const iconElement = _react.default.isValidElement(icon) ? _react.default.cloneElement(icon, { className: (0, _classnames.default)(icon.props.className, 'dnb-button__icon') }) : null; const resolvedAriaLabel = (_rest$ariaLabel = rest['aria-label']) !== null && _rest$ariaLabel !== void 0 ? _rest$ariaLabel : typeof title === 'string' ? title : undefined; const resolvedType = buttonType === 'button' || buttonType === 'submit' || buttonType === 'reset' ? buttonType : 'button'; let resolvedVariant = variant; let resolvedSize = size; let resolvedIconSize = icon_size; if (isIconOnly) { if (!resolvedVariant) { resolvedVariant = 'secondary'; } if (!resolvedSize) { resolvedSize = 'medium'; } if (!resolvedIconSize && (resolvedSize === 'default' || resolvedSize === 'large')) { resolvedIconSize = 'medium'; } } else if (hasContent) { if (!resolvedVariant) { resolvedVariant = 'primary'; } if (!resolvedSize) { resolvedSize = 'default'; } } if (!resolvedIconSize && resolvedVariant === 'tertiary' && icon_position === 'top') { resolvedIconSize = 'medium'; } const classes = (0, _classnames.default)(`dnb-button dnb-button--${resolvedVariant}`, (0, _SkeletonHelper.createSkeletonClass)(resolvedVariant === 'tertiary' ? 'font' : 'shape', skeleton, context), (0, _SpacingHelper.createSpacingClasses)({ ...rest, ...{ stretch, wrap, skeleton } }), className, hasIcon && `dnb-button--icon-position-${icon_position} dnb-button--has-icon` + (resolvedIconSize ? ` dnb-button--icon-size-${resolvedIconSize}` : ""), resolvedSize && resolvedSize !== 'default' && `dnb-button--size-${resolvedSize}`, (context === null || context === void 0 || (_context$theme = context.theme) === null || _context$theme === void 0 ? void 0 : _context$theme.darkBackground) && 'dnb-button--on-dark-background', hasContent && 'dnb-button--has-text', (0, _componentHelper.isTrue)(stretch) && 'dnb-button--stretch', (0, _componentHelper.isTrue)(wrap) && 'dnb-button--wrap'); return _react.default.createElement("button", _extends({ title: title, "aria-label": resolvedAriaLabel, className: classes, type: resolvedType }, rest), _react.default.createElement(_ButtonContent.default, { title: title, content: content, icon: icon, icon_size: resolvedIconSize, skeleton: (0, _componentHelper.isTrue)(skeleton), isIconOnly: isIconOnly, iconElement: iconElement })); } //# sourceMappingURL=PopoverCloseButton.js.map