UNPKG

@awsui/components-react

Version:

AWS UI is a collection of [React](https://reactjs.org/) components that help create intuitive, responsive, and accessible user experiences for web applications. It is developed by Amazon Web Services (AWS). This work is available under the terms of the [A

42 lines (41 loc) 2.8 kB
import { __assign, __rest } from "tslib"; import React, { useRef, useCallback } from 'react'; import clsx from 'clsx'; import { getBaseProps } from '../../base-component'; import Icon from '../../../icon'; import styles from './styles.css.js'; import { fireCancelableEvent, fireKeyboardEvent } from '../../events'; import useFocusVisible from '../../hooks/focus-visible'; import useForwardFocus from '../../hooks/forward-focus'; var ButtonTrigger = function (_a, ref) { var _b; var children = _a.children, pressed = _a.pressed, disabled = _a.disabled, invalid = _a.invalid, ariaLabel = _a.ariaLabel, ariaLabelledby = _a.ariaLabelledby, ariaDescribedby = _a.ariaDescribedby, onKeyDown = _a.onKeyDown, onKeyUp = _a.onKeyUp, onClick = _a.onClick, restProps = __rest(_a, ["children", "pressed", "disabled", "invalid", "ariaLabel", "ariaLabelledby", "ariaDescribedby", "onKeyDown", "onKeyUp", "onClick"]); var baseProps = getBaseProps(restProps); var focusVisible = useFocusVisible(); var buttonRef = useRef(null); useForwardFocus(ref, buttonRef); var handleClick = useCallback(function (event) { if (disabled) { return event.preventDefault(); } var altKey = event.altKey, button = event.button, ctrlKey = event.ctrlKey, metaKey = event.metaKey, shiftKey = event.shiftKey; fireCancelableEvent(onClick, { altKey: altKey, button: button, ctrlKey: ctrlKey, metaKey: metaKey, shiftKey: shiftKey }, event); }, [disabled, onClick]); var handleKeyDown = useCallback(function (event) { onKeyDown && fireKeyboardEvent(onKeyDown, event); }, [onKeyDown]); var handleKeyUp = useCallback(function (event) { onKeyUp && fireKeyboardEvent(onKeyUp, event); }, [onKeyUp]); var preventDefault = useCallback(function (event) { event.preventDefault(); }, []); var attributes = __assign(__assign((_b = { type: 'button', tabIndex: disabled ? -1 : undefined, className: clsx(styles['button-trigger'], pressed && styles.pressed, disabled && styles.disabled, invalid && styles.invalid) }, _b['aria-disabled'] = disabled, _b['aria-expanded'] = pressed, _b['aria-label'] = ariaLabel, _b['aria-labelledby'] = ariaLabelledby, _b['aria-describedby'] = ariaDescribedby, _b['aria-haspopup'] = 'listbox', _b.onKeyDown = handleKeyDown, _b.onKeyUp = handleKeyUp, _b.onClick = handleClick, _b.onMouseDown = preventDefault, _b), focusVisible), baseProps); if (invalid) { attributes['aria-invalid'] = invalid; } return (React.createElement("button", __assign({ ref: buttonRef }, attributes), children, React.createElement(Icon, { className: styles.arrow, name: "caret-down-filled", variant: disabled ? 'disabled' : 'normal' }))); }; export default React.forwardRef(ButtonTrigger);