@atlaskit/button
Version:
A button triggers an event or action. They let users know what will happen next.
237 lines (234 loc) • 15 kB
JavaScript
/* link.tsx generated by @compiled/babel-plugin v0.39.1 */
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("./link.compiled.css");
var _react = _interopRequireWildcard(require("react"));
var React = _react;
var _runtime = require("@compiled/react/runtime");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _css2 = require("@atlaskit/css");
var _mergeRefs = _interopRequireDefault(require("@atlaskit/ds-lib/merge-refs"));
var _useAutoFocus = _interopRequireDefault(require("@atlaskit/ds-lib/use-auto-focus"));
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
var _compiled = require("@atlaskit/primitives/compiled");
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
var _content = _interopRequireDefault(require("../shared/content"));
var _iconRenderer = _interopRequireDefault(require("../shared/icon-renderer"));
var _excluded = ["aria-label", "aria-labelledby", "analyticsContext", "appearance", "autoFocus", "href", "icon", "interactionName", "isDisabled", "isSelected", "isTooltipDisabled", "label", "onClick", "onClickCapture", "onKeyDownCapture", "onKeyUpCapture", "onMouseDownCapture", "onMouseUpCapture", "onPointerDownCapture", "onPointerUpCapture", "onTouchEndCapture", "onTouchStartCapture", "shape", "spacing", "testId", "tooltip"],
_excluded2 = ["className", "css", "as", "style"];
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var styles = {
base: "_2rkofajl _11c8fhey _v5649dqc _189eidpf _1rjc12x7 _1e0c116y _vchhusvi _1bsb1wug _p12f1osq _kqswh2mm _4cvr1q9y _1bah1h6o _gy1p1b66 _1o9zidpf _4t3iviql _k48p1wq8 _y4tiutpp _bozgutpp _y3gn1h6o _s7n4nkob _14mj1kw7 _9v7aze3t _1tv3nqa1 _39yqe4h9 _11fnglyw _18postnw",
baseT26Shape: "_2rko1qi0",
linkDecorationUnset: "_4bfu1snc _1hmsagmp _ajmmvv82 _1a3b1r31 _4fprglyw _5goinqa1 _9oik1r31 _1bnxglyw _jf4cnqa1 _1nrm1r31 _c2waglyw _1iohnqa1",
disabled: "_80om13gf _bfhkby5v _syaz1gmx _aetrglyw _irr3by5v _30l31gmx _1di6by5v _9h8h1gmx",
spacingCompact: "_1rjcv77o _gy1p1b66 _y4tiutpp _bozgutpp _s7n4nkob _4t3i1k8s _1bsb1k8s",
iconButton: "_4t3iviql _1bsbviql _y4tize3t _bozgze3t",
circle: "_2rko1rr0"
};
var defaultStyles = {
root: "_bfhksm61 _syazazsu _8l3m1l7x _aetrb3bt _1053azsu _f8pjazsu _irr31dpa _30l3azsu _1di6fcek _9h8hazsu"
};
var primaryStyles = {
root: "_bfhk1856 _syaz15cr _105315cr _30l315cr _irr3hf2y _9h8h15cr _1di6g6ey"
};
var discoveryStyles = {
root: "_bfhku5tj _syaz15cr _105315cr _30l315cr _irr3fqeg _9h8h15cr _1di61f1m"
};
var subtleStyles = {
root: "_bfhksm61 _syazazsu _1053azsu _f8pj1mjl _irr31dpa _30l3azsu _1di6fcek _9h8hazsu"
};
var selectedStyles = {
root: "_bfhk15s3 _syaz6x5g _8l3mq98m _aetrb3bt _10536x5g _f8pj6x5g _30l36x5g _9h8h6x5g",
discovery: "_bfhk15s3 _syaz6x5g _30l36x5g _irr315s3 _9h8h6x5g _1di615s3"
};
var LinkIconButtonBase = function LinkIconButtonBase(_ref, ref) {
var preventedAriaLabel = _ref['aria-label'],
ariaLabelledBy = _ref['aria-labelledby'],
analyticsContext = _ref.analyticsContext,
_ref$appearance = _ref.appearance,
appearance = _ref$appearance === void 0 ? 'default' : _ref$appearance,
_ref$autoFocus = _ref.autoFocus,
autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus,
href = _ref.href,
icon = _ref.icon,
interactionName = _ref.interactionName,
isDisabled = _ref.isDisabled,
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,
unsafeRest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
// @ts-expect-error
var _className = unsafeRest.className,
_css = unsafeRest.css,
_as = unsafeRest.as,
_style = unsafeRest.style,
saferRest = (0, _objectWithoutProperties2.default)(unsafeRest, _excluded2);
var localRef = (0, _react.useRef)(null);
(0, _useAutoFocus.default)(localRef, autoFocus);
if (!isTooltipDisabled) {
var _tooltip$content;
return /*#__PURE__*/React.createElement(_tooltip.default, {
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
}, function (triggerProps) {
return /*#__PURE__*/React.createElement(_compiled.Anchor, (0, _extends2.default)({}, saferRest, {
"aria-labelledby": ariaLabelledBy,
testId: testId,
componentName: "LinkIconButton",
analyticsContext: analyticsContext,
interactionName: interactionName
// Shared between tooltip and native props
,
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);
}
// Shared between tooltip and base props
,
onClick: function onClick(event, analyticsEvent) {
var _triggerProps$onClick;
_onClick === null || _onClick === void 0 || _onClick(event, analyticsEvent);
triggerProps === null || triggerProps === void 0 || (_triggerProps$onClick = triggerProps.onClick) === null || _triggerProps$onClick === void 0 || _triggerProps$onClick.call(triggerProps, event);
},
ref: (0, _mergeRefs.default)([localRef, ref, triggerProps.ref].filter(Boolean))
// Base props only
,
xcss: (0, _css2.cx)(styles.base, (0, _platformFeatureFlags.fg)('platform-dst-shape-theme-default') && styles.baseT26Shape, appearance === 'default' && defaultStyles.root, appearance === 'primary' && primaryStyles.root, appearance === 'discovery' && discoveryStyles.root, appearance === 'subtle' && subtleStyles.root, styles.linkDecorationUnset, isSelected && selectedStyles.root, isSelected && appearance === 'discovery' && selectedStyles.discovery, isDisabled && styles.disabled, styles.iconButton, spacing === 'compact' && styles.spacingCompact, shape === 'circle' && styles.circle),
onMouseDownCapture: onMouseDownCapture,
onMouseUpCapture: onMouseUpCapture,
onKeyDownCapture: onKeyDownCapture,
onKeyUpCapture: onKeyUpCapture,
onTouchStartCapture: onTouchStartCapture,
onTouchEndCapture: onTouchEndCapture,
onPointerDownCapture: onPointerDownCapture,
onPointerUpCapture: onPointerUpCapture,
onClickCapture: onClickCapture
/**
* Disable link in an accessible way using `href`, `role`, and `aria-disabled`.
* @see https://a11y-guidelines.orange.com/en/articles/disable-elements/#disable-a-link
*/
// @ts-expect-error (`href` is required, we could make it optional but don't want to encourage this pattern elsewhere)
,
href: isDisabled ? undefined : href,
role: isDisabled ? 'link' : undefined,
"aria-disabled": isDisabled === true ? true : undefined
}), /*#__PURE__*/React.createElement(_content.default, {
type: "icon",
isLoading: false
}, /*#__PURE__*/React.createElement(_iconRenderer.default, {
icon: icon
}), /*#__PURE__*/React.createElement(_visuallyHidden.default, null, label)));
});
}
return /*#__PURE__*/React.createElement(_compiled.Anchor
// eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
, (0, _extends2.default)({}, saferRest, {
// aria-label={preventedAriaLabel}
"aria-labelledby": ariaLabelledBy,
ref: (0, _mergeRefs.default)([localRef, ref]),
xcss: (0, _css2.cx)(styles.base, (0, _platformFeatureFlags.fg)('platform-dst-shape-theme-default') && styles.baseT26Shape, appearance === 'default' && defaultStyles.root, appearance === 'primary' && primaryStyles.root, appearance === 'discovery' && discoveryStyles.root, appearance === 'subtle' && subtleStyles.root, styles.linkDecorationUnset, isSelected && selectedStyles.root, isSelected && appearance === 'discovery' && selectedStyles.discovery, isDisabled && styles.disabled, styles.iconButton, spacing === 'compact' && styles.spacingCompact, shape === 'circle' && styles.circle),
onClick: _onClick,
onMouseDownCapture: onMouseDownCapture,
onMouseUpCapture: onMouseUpCapture,
onKeyDownCapture: onKeyDownCapture,
onKeyUpCapture: onKeyUpCapture,
onTouchStartCapture: onTouchStartCapture,
onTouchEndCapture: onTouchEndCapture,
onPointerDownCapture: onPointerDownCapture,
onPointerUpCapture: onPointerUpCapture,
onClickCapture: onClickCapture,
testId: testId
/**
* Disable link in an accessible way using `href`, `role`, and `aria-disabled`.
* @see https://a11y-guidelines.orange.com/en/articles/disable-elements/#disable-a-link
*/
// @ts-expect-error (`href` is required, we could make it optional but don't want to encourage this pattern elsewhere)
,
href: isDisabled ? undefined : href,
role: isDisabled ? 'link' : undefined,
"aria-disabled": isDisabled === true ? true : undefined,
componentName: "LinkIconButton",
analyticsContext: analyticsContext,
interactionName: interactionName
}), /*#__PURE__*/React.createElement(_content.default, {
type: "icon",
isLoading: false
}, /*#__PURE__*/React.createElement(_iconRenderer.default, {
icon: icon
}), /*#__PURE__*/React.createElement(_visuallyHidden.default, null, label)));
};
// Workarounds to support generic types with forwardRef + memo
var WithRef = /*#__PURE__*/(0, _react.forwardRef)(LinkIconButtonBase);
/**
* __Link Icon Button__
*
* Renders a link in the style of an icon button.
*
* - [Examples](https://atlassian.design/components/button/link-icon-button/examples)
* - [Code](https://atlassian.design/components/button/link-icon-button/code)
* - [Usage](https://atlassian.design/components/button/link-icon-button/usage)
*/
var LinkIconButton = /*#__PURE__*/(0, _react.memo)(WithRef);
var _default = exports.default = LinkIconButton;