@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
85 lines (84 loc) • 3.37 kB
JavaScript
"use client";
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
import React from 'react';
import classnames from 'classnames';
import Context from "../../../shared/Context.js";
import { isTrue } from "../../../shared/component-helper.js";
import { createSpacingClasses } from "../../space/SpacingHelper.js";
import { createSkeletonClass } from "../../skeleton/SkeletonHelper.js";
import ButtonContent from "../../button/internal/ButtonContent.js";
export default 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.useContext(Context);
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.isValidElement(icon) ? React.cloneElement(icon, {
className: classnames(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 = classnames(`dnb-button dnb-button--${resolvedVariant}`, createSkeletonClass(resolvedVariant === 'tertiary' ? 'font' : 'shape', skeleton, context), 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', isTrue(stretch) && 'dnb-button--stretch', isTrue(wrap) && 'dnb-button--wrap');
return React.createElement("button", _extends({
title: title,
"aria-label": resolvedAriaLabel,
className: classes,
type: resolvedType
}, rest), React.createElement(ButtonContent, {
title: title,
content: content,
icon: icon,
icon_size: resolvedIconSize,
skeleton: isTrue(skeleton),
isIconOnly: isIconOnly,
iconElement: iconElement
}));
}
//# sourceMappingURL=PopoverCloseButton.js.map