UNPKG

@redocly/theme

Version:

Shared UI components lib

170 lines (155 loc) 5.97 kB
"use strict"; 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