Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
180 lines
5.5 KiB
Plaintext
180 lines
5.5 KiB
Plaintext
'use client';
|
|
|
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
import React, { Fragment, isValidElement } from 'react';
|
|
import { ChevronIcon } from '../../icons/Chevron/index.js';
|
|
import { EditIcon } from '../../icons/Edit/index.js';
|
|
import { LinkIcon } from '../../icons/Link/index.js';
|
|
import { PlusIcon } from '../../icons/Plus/index.js';
|
|
import { SwapIcon } from '../../icons/Swap/index.js';
|
|
import { XIcon } from '../../icons/X/index.js';
|
|
import { Link } from '../Link/index.js';
|
|
import { Popup } from '../Popup/index.js';
|
|
import './index.scss';
|
|
import { Tooltip } from '../Tooltip/index.js';
|
|
const icons = {
|
|
chevron: ChevronIcon,
|
|
edit: EditIcon,
|
|
link: LinkIcon,
|
|
plus: PlusIcon,
|
|
swap: SwapIcon,
|
|
x: XIcon
|
|
};
|
|
const baseClass = 'btn';
|
|
export const ButtonContents = ({
|
|
children,
|
|
icon,
|
|
showTooltip,
|
|
tooltip
|
|
}) => {
|
|
const BuiltInIcon = icons[icon];
|
|
return /*#__PURE__*/_jsxs(Fragment, {
|
|
children: [tooltip && /*#__PURE__*/_jsx(Tooltip, {
|
|
className: `${baseClass}__tooltip`,
|
|
show: showTooltip,
|
|
children: tooltip
|
|
}), /*#__PURE__*/_jsxs("span", {
|
|
className: `${baseClass}__content`,
|
|
children: [children && /*#__PURE__*/_jsx("span", {
|
|
className: `${baseClass}__label`,
|
|
children: children
|
|
}), icon && /*#__PURE__*/_jsxs("span", {
|
|
className: `${baseClass}__icon`,
|
|
children: [/*#__PURE__*/isValidElement(icon) && icon, BuiltInIcon && /*#__PURE__*/_jsx(BuiltInIcon, {})]
|
|
})]
|
|
})]
|
|
});
|
|
};
|
|
export const Button = props => {
|
|
const {
|
|
id,
|
|
type = 'button',
|
|
'aria-label': ariaLabel,
|
|
buttonStyle = 'primary',
|
|
children,
|
|
className,
|
|
disabled,
|
|
el = 'button',
|
|
enableSubMenu,
|
|
extraButtonProps = {},
|
|
icon,
|
|
iconPosition = 'right',
|
|
iconStyle = 'without-border',
|
|
margin = true,
|
|
newTab,
|
|
onClick,
|
|
onMouseDown,
|
|
ref,
|
|
round,
|
|
size = 'medium',
|
|
SubMenuPopupContent,
|
|
to,
|
|
tooltip,
|
|
url
|
|
} = props;
|
|
const [showTooltip, setShowTooltip] = React.useState(false);
|
|
const classes = [baseClass, className && className, icon && `${baseClass}--icon`, iconStyle && `${baseClass}--icon-style-${iconStyle}`, icon && !children && `${baseClass}--icon-only`, size && `${baseClass}--size-${size}`, icon && iconPosition && `${baseClass}--icon-position-${iconPosition}`, tooltip && `${baseClass}--has-tooltip`, !SubMenuPopupContent && `${baseClass}--withoutPopup`, !margin && `${baseClass}--no-margin`].filter(Boolean).join(' ');
|
|
function handleClick(event) {
|
|
setShowTooltip(false);
|
|
if (type !== 'submit' && onClick) {
|
|
event.preventDefault();
|
|
}
|
|
if (onClick) {
|
|
onClick(event);
|
|
}
|
|
}
|
|
const styleClasses = [buttonStyle && `${baseClass}--style-${buttonStyle}`, disabled && `${baseClass}--disabled`, round && `${baseClass}--round`, SubMenuPopupContent ? `${baseClass}--withPopup` : `${baseClass}--withoutPopup`].filter(Boolean).join(' ');
|
|
const buttonProps = {
|
|
id,
|
|
type,
|
|
'aria-disabled': disabled,
|
|
'aria-label': ariaLabel,
|
|
className: !SubMenuPopupContent ? [classes, styleClasses].join(' ') : classes,
|
|
disabled,
|
|
onClick: !disabled ? handleClick : undefined,
|
|
onMouseDown: !disabled ? onMouseDown : undefined,
|
|
onPointerEnter: tooltip ? () => setShowTooltip(true) : undefined,
|
|
onPointerLeave: tooltip ? () => setShowTooltip(false) : undefined,
|
|
rel: newTab ? 'noopener noreferrer' : undefined,
|
|
target: newTab ? '_blank' : undefined,
|
|
title: ariaLabel,
|
|
...extraButtonProps
|
|
};
|
|
let buttonElement;
|
|
switch (el) {
|
|
case 'anchor':
|
|
buttonElement = /*#__PURE__*/_jsx("a", {
|
|
...buttonProps,
|
|
href: !disabled ? url : undefined,
|
|
ref: ref,
|
|
children: /*#__PURE__*/_jsx(ButtonContents, {
|
|
icon: icon,
|
|
showTooltip: showTooltip,
|
|
tooltip: tooltip,
|
|
children: children
|
|
})
|
|
});
|
|
break;
|
|
case 'link':
|
|
if (disabled) {
|
|
buttonElement = /*#__PURE__*/_jsx("div", {
|
|
...buttonProps,
|
|
children: /*#__PURE__*/_jsx(ButtonContents, {
|
|
icon: icon,
|
|
showTooltip: showTooltip,
|
|
tooltip: tooltip,
|
|
children: children
|
|
})
|
|
});
|
|
}
|
|
buttonElement = /*#__PURE__*/_jsx(Link, {
|
|
...buttonProps,
|
|
href: to || url,
|
|
prefetch: false,
|
|
children: /*#__PURE__*/_jsx(ButtonContents, {
|
|
icon: icon,
|
|
showTooltip: showTooltip,
|
|
tooltip: tooltip,
|
|
children: children
|
|
})
|
|
});
|
|
break;
|
|
default:
|
|
const Tag = el // eslint-disable-line no-case-declarations
|
|
;
|
|
buttonElement = /*#__PURE__*/_jsx(Tag, {
|
|
ref: ref,
|
|
...buttonProps,
|
|
children: /*#__PURE__*/_jsx(ButtonContents, {
|
|
icon: icon,
|
|
showTooltip: showTooltip,
|
|
tooltip: tooltip,
|
|
children: children
|
|
})
|
|
});
|
|
break;
|
|
}
|
|
if (SubMenuPopupContent) {
|
|
return /*#__PURE__*/_jsxs("div", {
|
|
className: styleClasses,
|
|
children: [buttonElement, /*#__PURE__*/_jsx(Popup, {
|
|
button: /*#__PURE__*/_jsx(ChevronIcon, {}),
|
|
buttonSize: size,
|
|
className: disabled && !enableSubMenu ? `${baseClass}--popup-disabled` : '',
|
|
disabled: disabled && !enableSubMenu,
|
|
horizontalAlign: "right",
|
|
id: `${id}-popup`,
|
|
noBackground: true,
|
|
render: ({
|
|
close
|
|
}) => SubMenuPopupContent({
|
|
close: () => close()
|
|
}),
|
|
size: "large",
|
|
verticalAlign: "bottom"
|
|
})]
|
|
});
|
|
}
|
|
return buttonElement;
|
|
};
|
|
//# sourceMappingURL=index.js.map |