@atlaskit/button
Version:
A button triggers an event or action. They let users know what will happen next.
183 lines • 9.89 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
var _excluded = ["aria-label", "aria-labelledby", "analyticsContext", "appearance", "autoFocus", "icon", "interactionName", "isDisabled", "isLoading", "isSelected", "isTooltipDisabled", "label", "onClick", "onClickCapture", "onKeyDownCapture", "onKeyUpCapture", "onMouseDownCapture", "onMouseUpCapture", "onPointerDownCapture", "onPointerUpCapture", "onTouchEndCapture", "onTouchStartCapture", "shape", "spacing", "testId", "tooltip", "type"],
_excluded2 = ["className", "css", "as", "style"];
import React from 'react';
import mergeRefs from '@atlaskit/ds-lib/merge-refs';
import Tooltip from '@atlaskit/tooltip';
import VisuallyHidden from '@atlaskit/visually-hidden';
import ButtonBase from '../shared/button-base';
import Content from '../shared/content';
import IconRenderer from '../shared/icon-renderer';
/**
* __Icon Button__
*
* Renders an icon-only button lets people take a common and recognizable action where space is limited.
*
* - [Examples](https://atlassian.design/components/button/icon-button/examples)
* - [Code](https://atlassian.design/components/button/icon-button/code)
* - [Usage](https://atlassian.design/components/button/icon-button/usage)
*/
var IconButton = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function Button(_ref, ref) {
var _tooltip$content;
var preventedAriaLabel = _ref['aria-label'],
ariaLabelledBy = _ref['aria-labelledby'],
analyticsContext = _ref.analyticsContext,
appearance = _ref.appearance,
autoFocus = _ref.autoFocus,
icon = _ref.icon,
interactionName = _ref.interactionName,
isDisabled = _ref.isDisabled,
_ref$isLoading = _ref.isLoading,
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
isSelected = _ref.isSelected,
_ref$isTooltipDisable = _ref.isTooltipDisabled,
isTooltipDisabled = _ref$isTooltipDisable === void 0 ? true : _ref$isTooltipDisable,
label = _ref.label,
_onClick = _ref.onClick,
onClickCapture = _ref.onClickCapture,
onKeyDownCapture = _ref.onKeyDownCapture,
onKeyUpCapture = _ref.onKeyUpCapture,
onMouseDownCapture = _ref.onMouseDownCapture,
onMouseUpCapture = _ref.onMouseUpCapture,
onPointerDownCapture = _ref.onPointerDownCapture,
onPointerUpCapture = _ref.onPointerUpCapture,
onTouchEndCapture = _ref.onTouchEndCapture,
onTouchStartCapture = _ref.onTouchStartCapture,
shape = _ref.shape,
spacing = _ref.spacing,
testId = _ref.testId,
tooltip = _ref.tooltip,
_ref$type = _ref.type,
type = _ref$type === void 0 ? 'button' : _ref$type,
unsafeRest = _objectWithoutProperties(_ref, _excluded);
// @ts-expect-error
var _className = unsafeRest.className,
_css = unsafeRest.css,
_as = unsafeRest.as,
_style = unsafeRest.style,
saferRest = _objectWithoutProperties(unsafeRest, _excluded2);
if (isTooltipDisabled) {
return /*#__PURE__*/React.createElement(ButtonBase, _extends({}, saferRest, {
ref: ref,
appearance: appearance,
autoFocus: autoFocus,
isDisabled: isDisabled,
isLoading: isLoading,
isSelected: isSelected,
isIconButton: true,
isCircle: shape === 'circle',
hasIconBefore: !!icon,
spacing: spacing,
ariaLabelledBy: ariaLabelledBy,
onClick: _onClick,
onClickCapture: onClickCapture,
onKeyDownCapture: onKeyDownCapture,
onKeyUpCapture: onKeyUpCapture,
onMouseDownCapture: onMouseDownCapture,
onMouseUpCapture: onMouseUpCapture,
onPointerDownCapture: onPointerDownCapture,
onPointerUpCapture: onPointerUpCapture,
onTouchStartCapture: onTouchStartCapture,
onTouchEndCapture: onTouchEndCapture,
testId: testId,
componentName: "IconButton",
analyticsContext: analyticsContext,
type: type,
interactionName: interactionName
}), /*#__PURE__*/React.createElement(Content, {
type: "icon",
isLoading: isLoading
}, /*#__PURE__*/React.createElement(IconRenderer, {
icon: icon
}), /*#__PURE__*/React.createElement(VisuallyHidden, null, label)));
}
return /*#__PURE__*/React.createElement(Tooltip, {
content: (_tooltip$content = tooltip === null || tooltip === void 0 ? void 0 : tooltip.content) !== null && _tooltip$content !== void 0 ? _tooltip$content : label,
testId: tooltip === null || tooltip === void 0 ? void 0 : tooltip.testId,
position: tooltip === null || tooltip === void 0 ? void 0 : tooltip.position,
delay: tooltip === null || tooltip === void 0 ? void 0 : tooltip.delay,
onShow: tooltip === null || tooltip === void 0 ? void 0 : tooltip.onShow,
onHide: tooltip === null || tooltip === void 0 ? void 0 : tooltip.onHide,
mousePosition: tooltip === null || tooltip === void 0 ? void 0 : tooltip.mousePosition,
analyticsContext: tooltip === null || tooltip === void 0 ? void 0 : tooltip.analyticsContext,
strategy: tooltip === null || tooltip === void 0 ? void 0 : tooltip.strategy,
tag: tooltip === null || tooltip === void 0 ? void 0 : tooltip.tag,
truncate: tooltip === null || tooltip === void 0 ? void 0 : tooltip.truncate,
component: tooltip === null || tooltip === void 0 ? void 0 : tooltip.component,
hideTooltipOnClick: tooltip === null || tooltip === void 0 ? void 0 : tooltip.hideTooltipOnClick,
hideTooltipOnMouseDown: tooltip === null || tooltip === void 0 ? void 0 : tooltip.hideTooltipOnMouseDown,
ignoreTooltipPointerEvents: tooltip === null || tooltip === void 0 ? void 0 : tooltip.ignoreTooltipPointerEvents,
shortcut: tooltip === null || tooltip === void 0 ? void 0 : tooltip.shortcut
}, function (triggerProps) {
return /*#__PURE__*/React.createElement(ButtonBase, _extends({}, saferRest, {
appearance: appearance,
autoFocus: autoFocus,
isDisabled: isDisabled,
isLoading: isLoading,
isSelected: isSelected,
isIconButton: true,
isCircle: shape === 'circle',
hasIconBefore: false,
spacing: spacing,
ariaLabelledBy: ariaLabelledBy,
onClick: function onClick(e, analyticsEvent) {
var _triggerProps$onClick;
_onClick === null || _onClick === void 0 || _onClick(e, analyticsEvent);
(_triggerProps$onClick = triggerProps.onClick) === null || _triggerProps$onClick === void 0 || _triggerProps$onClick.call(triggerProps, e);
},
onMouseOver: function onMouseOver(e) {
var _triggerProps$onMouse, _saferRest$onMouseOve;
(_triggerProps$onMouse = triggerProps.onMouseOver) === null || _triggerProps$onMouse === void 0 || _triggerProps$onMouse.call(triggerProps, e);
(_saferRest$onMouseOve = saferRest.onMouseOver) === null || _saferRest$onMouseOve === void 0 || _saferRest$onMouseOve.call(saferRest, e);
},
onMouseOut: function onMouseOut(e) {
var _triggerProps$onMouse2, _saferRest$onMouseOut;
(_triggerProps$onMouse2 = triggerProps.onMouseOut) === null || _triggerProps$onMouse2 === void 0 || _triggerProps$onMouse2.call(triggerProps, e);
(_saferRest$onMouseOut = saferRest.onMouseOut) === null || _saferRest$onMouseOut === void 0 || _saferRest$onMouseOut.call(saferRest, e);
},
onMouseMove: function onMouseMove(e) {
var _triggerProps$onMouse3, _saferRest$onMouseMov;
(_triggerProps$onMouse3 = triggerProps.onMouseMove) === null || _triggerProps$onMouse3 === void 0 || _triggerProps$onMouse3.call(triggerProps, e);
(_saferRest$onMouseMov = saferRest.onMouseMove) === null || _saferRest$onMouseMov === void 0 || _saferRest$onMouseMov.call(saferRest, e);
},
onMouseDown: function onMouseDown(e) {
var _triggerProps$onMouse4, _saferRest$onMouseDow;
(_triggerProps$onMouse4 = triggerProps.onMouseDown) === null || _triggerProps$onMouse4 === void 0 || _triggerProps$onMouse4.call(triggerProps, e);
(_saferRest$onMouseDow = saferRest.onMouseDown) === null || _saferRest$onMouseDow === void 0 || _saferRest$onMouseDow.call(saferRest, e);
},
onFocus: function onFocus(e) {
var _triggerProps$onFocus, _saferRest$onFocus;
(_triggerProps$onFocus = triggerProps.onFocus) === null || _triggerProps$onFocus === void 0 || _triggerProps$onFocus.call(triggerProps, e);
(_saferRest$onFocus = saferRest.onFocus) === null || _saferRest$onFocus === void 0 || _saferRest$onFocus.call(saferRest, e);
},
onBlur: function onBlur(e) {
var _triggerProps$onBlur, _saferRest$onBlur;
(_triggerProps$onBlur = triggerProps.onBlur) === null || _triggerProps$onBlur === void 0 || _triggerProps$onBlur.call(triggerProps, e);
(_saferRest$onBlur = saferRest.onBlur) === null || _saferRest$onBlur === void 0 || _saferRest$onBlur.call(saferRest, e);
},
ref: mergeRefs([ref, triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.ref].filter(Boolean)),
onMouseDownCapture: onMouseDownCapture,
onMouseUpCapture: onMouseUpCapture,
onKeyDownCapture: onKeyDownCapture,
onKeyUpCapture: onKeyUpCapture,
onTouchStartCapture: onTouchStartCapture,
onTouchEndCapture: onTouchEndCapture,
onPointerDownCapture: onPointerDownCapture,
onPointerUpCapture: onPointerUpCapture,
onClickCapture: onClickCapture,
type: type,
testId: testId,
analyticsContext: analyticsContext,
interactionName: interactionName,
componentName: "IconButton"
}), /*#__PURE__*/React.createElement(Content, {
type: "icon",
isLoading: isLoading
}, /*#__PURE__*/React.createElement(IconRenderer, {
icon: icon
}), /*#__PURE__*/React.createElement(VisuallyHidden, null, label)));
});
}));
IconButton.displayName = 'IconButton';
export default IconButton;