@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
93 lines (92 loc) • 3.5 kB
JavaScript
;
"use client";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = PopoverCloseButton;
var _react = _interopRequireDefault(require("react"));
var _clsx = _interopRequireDefault(require("clsx"));
var _Context = _interopRequireDefault(require("../../../shared/Context.js"));
var _SpacingUtils = require("../../space/SpacingUtils.js");
var _SkeletonHelper = require("../../skeleton/SkeletonHelper.js");
var _ButtonContent = _interopRequireDefault(require("../../button/internal/ButtonContent.js"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function PopoverCloseButton({
icon = 'close',
iconSize,
iconPosition = 'right',
variant = 'tertiary',
size,
className,
title,
text,
children,
type: buttonType,
stretch,
wrap,
skeleton,
...rest
}) {
var _rest$ariaLabel;
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.createElement(icon.type, {
...icon.props,
className: (0, _clsx.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 = iconSize;
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' && iconPosition === 'top') {
resolvedIconSize = 'medium';
}
const buttonProps = (0, _SpacingUtils.applySpacing)({
...rest,
stretch,
wrap,
skeleton
}, {
title,
'aria-label': resolvedAriaLabel,
className: (0, _clsx.default)(`dnb-button dnb-button--${resolvedVariant}`, (0, _SkeletonHelper.createSkeletonClass)(resolvedVariant === 'tertiary' ? 'font' : 'shape', skeleton, context), className, hasIcon && `dnb-button--icon-position-${iconPosition} dnb-button--has-icon` + (resolvedIconSize ? ` dnb-button--icon-size-${resolvedIconSize}` : ""), resolvedSize && resolvedSize !== 'default' && `dnb-button--size-${resolvedSize}`, hasContent && 'dnb-button--has-text', isIconOnly && 'dnb-button--icon-only', stretch && 'dnb-button--stretch', wrap && 'dnb-button--wrap'),
type: resolvedType,
...rest
});
return (0, _jsxRuntime.jsx)("button", {
...buttonProps,
children: (0, _jsxRuntime.jsx)(_ButtonContent.default, {
title: title,
content: content,
icon: icon,
iconSize: resolvedIconSize,
skeleton: skeleton,
isIconOnly: isIconOnly,
iconElement: iconElement
})
});
}
//# sourceMappingURL=PopoverCloseButton.js.map