@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
JavaScript
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);