UNPKG

@confi/conflux-react-ui-test-package

Version:

Modern and minimalist React UI library.

145 lines (129 loc) 7.94 kB
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _extends from "@babel/runtime/helpers/esm/extends"; import _JSXStyle from "styled-jsx/style"; import React, { useRef, useState, useMemo, useImperativeHandle } from 'react'; import useTheme from '../styles/use-theme'; import ButtonDrip from './button.drip'; import ButtonLoading from './button-loading'; import { filterPropsWithGroup, getButtonChildrenWithIcon } from './utils'; import { useButtonGroupContext } from '../button-group/button-group-context'; import { getButtonColors, getButtonCursor, getButtonDripColor, getButtonHoverColors, getButtonSize } from './styles'; var defaultProps = { type: 'default', size: 'medium', htmlType: 'button', ghost: false, loading: false, shadow: false, auto: false, effect: true, disabled: false, className: '' }; var Button = React.forwardRef(function (_ref, ref) { var btnProps = _extends({}, _ref); var theme = useTheme(); var buttonRef = useRef(null); useImperativeHandle(ref, function () { return buttonRef.current; }); var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), dripShow = _useState2[0], setDripShow = _useState2[1]; var _useState3 = useState(0), _useState4 = _slicedToArray(_useState3, 2), dripX = _useState4[0], setDripX = _useState4[1]; var _useState5 = useState(0), _useState6 = _slicedToArray(_useState5, 2), dripY = _useState6[0], setDripY = _useState6[1]; var groupConfig = useButtonGroupContext(); var filteredProps = filterPropsWithGroup(btnProps, groupConfig); var children = filteredProps.children, disabled = filteredProps.disabled, type = filteredProps.type, loading = filteredProps.loading, shadow = filteredProps.shadow, ghost = filteredProps.ghost, effect = filteredProps.effect, onClick = filteredProps.onClick, auto = filteredProps.auto, size = filteredProps.size, icon = filteredProps.icon, htmlType = filteredProps.htmlType, iconRight = filteredProps.iconRight, className = filteredProps.className, props = _objectWithoutProperties(filteredProps, ["children", "disabled", "type", "loading", "shadow", "ghost", "effect", "onClick", "auto", "size", "icon", "htmlType", "iconRight", "className"]); var _useMemo = useMemo(function () { return getButtonColors(theme.palette, filteredProps); }, [theme.palette, filteredProps]), bg = _useMemo.bg, border = _useMemo.border, color = _useMemo.color; var hover = useMemo(function () { return getButtonHoverColors(theme.palette, filteredProps); }, [theme.palette, filteredProps]); var _useMemo2 = useMemo(function () { return getButtonCursor(disabled, loading); }, [disabled, loading]), cursor = _useMemo2.cursor, events = _useMemo2.events; var _useMemo3 = useMemo(function () { return getButtonSize(size, auto); }, [size, auto]), height = _useMemo3.height, minWidth = _useMemo3.minWidth, padding = _useMemo3.padding, width = _useMemo3.width, fontSize = _useMemo3.fontSize; var dripColor = useMemo(function () { return getButtonDripColor(theme.palette, filteredProps); }, [theme.palette, filteredProps]); /* istanbul ignore next */ var dripCompletedHandle = function dripCompletedHandle() { setDripShow(false); setDripX(0); setDripY(0); }; var clickHandler = function clickHandler(event) { if (disabled || loading) return; var showDrip = !shadow && !ghost && effect; /* istanbul ignore next */ if (showDrip && buttonRef.current) { var rect = buttonRef.current.getBoundingClientRect(); setDripShow(true); setDripX(event.clientX - rect.left); setDripY(event.clientY - rect.top); } onClick && onClick(event); }; var childrenWithIcon = useMemo(function () { return getButtonChildrenWithIcon(auto, size, children, { icon: icon, iconRight: iconRight }); }, [auto, size, children, icon, iconRight]); return /*#__PURE__*/React.createElement("button", _extends({ ref: buttonRef, type: htmlType, disabled: disabled, onClick: clickHandler }, props, { className: _JSXStyle.dynamic([["143874157", [padding, height, height, minWidth, width, theme.layout.radius, fontSize, color, bg, border, cursor, events, shadow ? theme.expressiveness.shadowSmall : 'none', padding, height, color, bg, hover.color, hover.color, hover.bg, hover.border, cursor, events, shadow ? theme.expressiveness.shadowMedium : 'none', shadow ? '-1px' : '0px']]]) + " " + (props && props.className != null && props.className || "btn ".concat(className)) }), loading && /*#__PURE__*/React.createElement(ButtonLoading, { color: color }), childrenWithIcon, dripShow && /*#__PURE__*/React.createElement(ButtonDrip, { x: dripX, y: dripY, color: dripColor, onCompleted: dripCompletedHandle }), /*#__PURE__*/React.createElement(_JSXStyle, { id: "143874157", dynamic: [padding, height, height, minWidth, width, theme.layout.radius, fontSize, color, bg, border, cursor, events, shadow ? theme.expressiveness.shadowSmall : 'none', padding, height, color, bg, hover.color, hover.color, hover.bg, hover.border, cursor, events, shadow ? theme.expressiveness.shadowMedium : 'none', shadow ? '-1px' : '0px'] }, ".btn.__jsx-style-dynamic-selector{box-sizing:border-box;display:inline-block;padding:0 ".concat(padding, ";height:").concat(height, ";line-height:").concat(height, ";min-width:").concat(minWidth, ";width:").concat(width, ";border-radius:").concat(theme.layout.radius, ";font-weight:400;font-size:").concat(fontSize, ";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none;text-transform:capitalize;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;white-space:nowrap;-webkit-transition:background-color 200ms ease 0ms,box-shadow 200ms ease 0ms, border 200ms ease 0ms,color 200ms ease 0ms;transition:background-color 200ms ease 0ms,box-shadow 200ms ease 0ms, border 200ms ease 0ms,color 200ms ease 0ms;position:relative;overflow:hidden;color:").concat(color, ";background-color:").concat(bg, ";border:1px solid ").concat(border, ";cursor:").concat(cursor, ";pointer-events:").concat(events, ";box-shadow:").concat(shadow ? theme.expressiveness.shadowSmall : 'none', ";--zeit-ui-button-padding:").concat(padding, ";--zeit-ui-button-height:").concat(height, ";--zeit-ui-button-color:").concat(color, ";--zeit-ui-button-bg:").concat(bg, ";}.btn.__jsx-style-dynamic-selector:hover{color:").concat(hover.color, ";--zeit-ui-button-color:").concat(hover.color, ";background-color:").concat(hover.bg, ";border-color:").concat(hover.border, ";cursor:").concat(cursor, ";pointer-events:").concat(events, ";box-shadow:").concat(shadow ? theme.expressiveness.shadowMedium : 'none', ";-webkit-transform:translate3d(0px,").concat(shadow ? '-1px' : '0px', ",0px);-ms-transform:translate3d(0px,").concat(shadow ? '-1px' : '0px', ",0px);transform:translate3d(0px,").concat(shadow ? '-1px' : '0px', ",0px);}.btn.__jsx-style-dynamic-selector .text{position:relative;z-index:1;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center;line-height:inherit;top:-1px;}.btn.__jsx-style-dynamic-selector .text p,.btn.__jsx-style-dynamic-selector .text pre,.btn.__jsx-style-dynamic-selector .text div{margin:0;}"))); }); Button.defaultProps = defaultProps; export default React.memo(Button);