@redocly/theme
Version:
Shared UI components lib
170 lines (155 loc) • 5.97 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Button = void 0;
exports.generateClassName = generateClassName;
const react_1 = __importDefault(require("react"));
const styled_components_1 = __importStar(require("styled-components"));
const Link_1 = require("../../components/Link/Link");
const getBlink = () => (0, styled_components_1.keyframes) `
0% {
color: var(--button-content-color);
background-color: var(--button-bg-color-active);
}
50% {
background-color: var(--button-bg-color);
}
100% {
color: var(--button-content-color);
background-color: var(--button-bg-color-active);
}
`;
const StyledButtonLink = (0, styled_components_1.default)(Link_1.Link) `
text-decoration: none;
&:focus-visible {
outline: 1px solid var(--button-border-color-focused);
}
border-radius: var(--button-border-radius);
`;
function generateClassName({ variant = 'secondary', tone = 'default', size = 'medium', extraClass = '', }) {
const classNames = [
extraClass,
`button-tone-${tone}`,
`button-variant-${variant}`,
`button-size-${size}`,
];
return classNames
.filter((className) => className)
.join(' ')
.trim();
}
const StyledButton = styled_components_1.default.button.attrs((props) => ({
className: generateClassName(props),
})) `
width: ${({ fullWidth }) => (fullWidth ? '100%' : 'auto')};
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--button-gap);
margin: var(--button-margin);
cursor: pointer;
text-wrap: var(--button-text-wrap);
color: var(--button-color);
background-color: var(--button-bg-color);
border: var(--button-border-width) var(--button-border-style) var(--button-border-color);
box-shadow: var(--button-box-shadow);
font-weight: var(--button-font-weight);
font-size: var(--button-font-size);
line-height: var(--button-line-height);
padding: ${({ icon, iconPosition, iconOnly }) => icon
? `var(--button-icon-${iconOnly ? '' : `${iconPosition || 'left'}-`}padding)`
: 'var(--button-padding)'};
border-radius: var(--button-border-radius);
svg {
width: var(--button-icon-size);
height: var(--button-icon-size);
}
&:hover {
background-color: var(--button-bg-color-hover);
color: var(--button-color-hover);
border-color: var(--button-border-color-hover);
}
&:active,
&.active {
background-color: var(--button-bg-color-active);
border-color: var(--button-border-color-active);
color: var(--button-color-active);
}
&:focus-visible {
outline: 1px solid var(--button-border-color-focused);
}
&.button-tone-danger {
color: var(--button-content-color-danger);
border-color: var(--button-border-color-danger);
background-color: var(--button-bg-color-danger);
&:hover {
color: var(--button-content-color-danger-hover);
border-color: var(--button-border-color-danger-hover);
background-color: var(--button-bg-color-danger-hover);
}
&:active {
color: var(--button-content-color-danger-pressed);
border-color: var(--button-border-color-danger-pressed);
background-color: var(--button-bg-color-danger-pressed);
}
}
&:disabled {
pointer-events: none;
background-color: var(--button-bg-color-disabled);
color: var(--button-content-color-disabled);
border-color: var(--button-border-color-disabled);
border-width: var(--button-border-width-disabled);
}
${({ variant, size }) => (variant === 'link' || variant === 'ghost') &&
size === 'small' &&
(0, styled_components_1.css) `
--button-font-size: var(--font-size-sm);
--button-line-height: var(--line-height-sm);
--button-icon-padding: var(--button-icon-padding-small) !important;
`}
${({ blinking }) => blinking &&
(0, styled_components_1.css) `
pointer-events: none;
animation: ${getBlink()} 1.2s infinite;
`}
`;
const ButtonComponent = (props) => {
const tabIndex = 'tabIndex' in props ? props.tabIndex : props.to ? -1 : undefined;
const button = (react_1.default.createElement(StyledButton, Object.assign({ "data-component-name": "Button/Button" }, props, { iconOnly: !props.children && props.icon !== null, tabIndex: tabIndex }),
props.icon && props.iconPosition !== 'right' && props.icon,
props.children,
props.icon && props.iconPosition === 'right' && props.icon));
if (props.to) {
return (react_1.default.createElement(StyledButtonLink, { to: props.to, onClick: props.onClick }, button));
}
else {
return button;
}
};
exports.Button = (0, styled_components_1.default)(ButtonComponent) ``;
//# sourceMappingURL=Button.js.map