UNPKG

@breakaway/react-core

Version:

This library provides a set of common React components for use with the PatternFly reference implementation.

60 lines 5.34 kB
import { __rest } from "tslib"; // @ts-nocheck import * as React from 'react'; import styleKeys from '@breakaway/react-styles/css/components/Button/button.module.js'; import variables from '@breakaway/react-styles/css/base/base.module.css'; import styles from '@breakaway/react-styles/css/components/Button/button.module.css'; import { css } from '@breakaway/react-styles'; import { Spinner, spinnerSize } from '../Spinner'; import { useOUIAProps } from '../../helpers'; import { Badge } from '../Badge'; export var NewButtonVariant; (function (NewButtonVariant) { NewButtonVariant["primary"] = "primary"; NewButtonVariant["secondary"] = "secondary"; NewButtonVariant["tertiary"] = "tertiary"; NewButtonVariant["danger"] = "danger"; NewButtonVariant["warning"] = "warning"; NewButtonVariant["link"] = "link"; NewButtonVariant["plain"] = "plain"; NewButtonVariant["control"] = "control"; })(NewButtonVariant || (NewButtonVariant = {})); export var NewButtonType; (function (NewButtonType) { NewButtonType["button"] = "button"; NewButtonType["submit"] = "submit"; NewButtonType["reset"] = "reset"; })(NewButtonType || (NewButtonType = {})); const ButtonBase = (_a) => { var { children = null, className = '', component = 'button', isActive = false, isBlock = false, isDisabled = false, isAriaDisabled = false, isLoading = null, isDanger = false, spinnerAriaValueText, spinnerAriaLabelledBy, spinnerAriaLabel, isSmall = false, isLarge = false, inoperableEvents = ['onClick', 'onKeyPress'], isInline = false, type = NewButtonType.button, variant = NewButtonVariant.primary, iconPosition = 'left', 'aria-label': ariaLabel = null, icon = null, ouiaId, ouiaSafe = true, tabIndex = null, innerRef, countOptions, useDarkTheme = false } = _a, props = __rest(_a, ["children", "className", "component", "isActive", "isBlock", "isDisabled", "isAriaDisabled", "isLoading", "isDanger", "spinnerAriaValueText", "spinnerAriaLabelledBy", "spinnerAriaLabel", "isSmall", "isLarge", "inoperableEvents", "isInline", "type", "variant", "iconPosition", 'aria-label', "icon", "ouiaId", "ouiaSafe", "tabIndex", "innerRef", "countOptions", "useDarkTheme"]); const ouiaProps = useOUIAProps(NewButton.displayName, ouiaId, ouiaSafe, variant); const Component = component; const isButtonElement = Component === 'button'; const isInlineSpan = isInline && Component === 'span'; const preventedEvents = inoperableEvents.reduce((handlers, eventToPrevent) => (Object.assign(Object.assign({}, handlers), { [eventToPrevent]: (event) => { event.preventDefault(); } })), {}); const getDefaultTabIdx = () => { if (isDisabled) { return isButtonElement ? null : -1; } else if (isAriaDisabled) { return null; } else if (isInlineSpan) { return 0; } }; return (React.createElement(Component, Object.assign({}, props, (isAriaDisabled ? preventedEvents : null), { "aria-disabled": isDisabled || isAriaDisabled, "aria-label": ariaLabel, className: css(variables.root, styles[styleKeys.button], styles[styleKeys.modifiers[variant]], isBlock && styles[styleKeys.modifiers.block], isDisabled && styles[styleKeys.modifiers.disabled], isAriaDisabled && styles[styleKeys.modifiers.ariaDisabled], isActive && styles[styleKeys.modifiers.active], isInline && variant === NewButtonVariant.link && styles[styleKeys.modifiers.inline], isDanger && (variant === NewButtonVariant.secondary || variant === NewButtonVariant.link) && styles[styleKeys.modifiers.danger], isLoading !== null && children !== null && styles[styleKeys.modifiers.progress], isLoading && styles[styleKeys.modifiers.inProgress], isSmall && styles[styleKeys.modifiers.small], isLarge && styles[styleKeys.modifiers.displayLg], useDarkTheme && styles[styleKeys.themeDark], className), disabled: isButtonElement ? isDisabled : null, tabIndex: tabIndex !== null ? tabIndex : getDefaultTabIdx(), type: isButtonElement || isInlineSpan ? type : null, role: isInlineSpan ? 'button' : null, ref: innerRef }, ouiaProps), isLoading && (React.createElement("span", { className: css(styles[styleKeys.buttonProgress]) }, React.createElement(Spinner, { size: spinnerSize.md, "aria-valuetext": spinnerAriaValueText, "aria-label": spinnerAriaLabel, "aria-labelledby": spinnerAriaLabelledBy }))), variant === NewButtonVariant.plain && children === null && icon ? icon : null, variant !== NewButtonVariant.plain && icon && iconPosition === 'left' && (React.createElement("span", { className: css(styles[styleKeys.buttonIcon], styles[styleKeys.modifiers.start]) }, icon)), children, variant !== NewButtonVariant.plain && icon && iconPosition === 'right' && (React.createElement("span", { className: css(styles[styleKeys.buttonIcon], styles[styleKeys.modifiers.end]) }, icon)), countOptions && (React.createElement("span", { className: css(styles[styleKeys.buttonCount], countOptions.className) }, React.createElement(Badge, { isRead: countOptions.isRead }, countOptions.count))))); }; export const NewButton = React.forwardRef((props, ref) => (React.createElement(ButtonBase, Object.assign({ innerRef: ref }, props)))); NewButton.displayName = 'NewButton'; //# sourceMappingURL=NewButton.js.map