@atlaskit/dropdown-menu
Version:
A dropdown menu displays a list of actions or options to a user.
159 lines (158 loc) • 6.58 kB
JavaScript
/* dropdown-menu-item-new.tsx generated by @compiled/babel-plugin v3.0.2 */
import "./dropdown-menu-item-new.compiled.css";
import * as React from 'react';
import { ax, ix } from "@compiled/react/runtime";
import { forwardRef, Fragment, memo, useContext } from 'react';
import { cx } from '@atlaskit/css';
import CheckMarkIcon from '@atlaskit/icon/core/check-mark';
import ChevronRightIcon from '@atlaskit/icon/core/chevron-right';
import { fg } from '@atlaskit/platform-feature-flags/fg';
import { Anchor } from '@atlaskit/primitives/compiled/anchor';
import { Pressable } from '@atlaskit/primitives/compiled/pressable';
import { Stack } from '@atlaskit/primitives/compiled/stack';
import { Text } from '@atlaskit/primitives/compiled/text';
import KeyboardShortcut from './internal/components/keyboard-shortcut';
import { DropdownTriggerContext } from './internal/context/dropdown-trigger-context';
import { NewSpacingContext } from './internal/context/spacing-context';
var styles = {
root: "_19itglyw _12ji1r31 _1qu2glyw _12y3idpf _4bfu1r31 _1hmsglyw _ajmmnqa1 _19pkidpf _2hwxidpf _otyridpf _18u0idpf _2rko1qi0 _18zrutpp _1rjcu2gc _1e0c1txw _2lx2vrvc _gy1putpp _4cvr1h6o _1bah1yb4 _16jlkb7n _bfhksm61 _y3gnv2br _syazazsu _1bsb1osq _kqswh2mm _nt751v1w _1bg41i6y _49pcnqa1 _1hvwdkaa _f8pjazsu _mizu1v1w _1ah31i6y _ra3xnqa1 _128mdkaa _9oik1r31 _1bnxglyw _jf4cnqa1 _irr31dpa _30l3azsu _1di6fcek",
compact: "_18zru2gc _1rjc12x7 _gy1pu2gc",
beforeAfterElement: "_1e0c1txw _4cvr1h6o _1bah1h6o _1ul97vkz _1tke7vkz _1o9zidpf",
textContainer: "_y4tiutpp",
selected: "_bfhk15s3 _syazi7uo _f8pji7uo _irr3ufnl _30l3i7uo _1di6nozp",
disabled: "_80om13gf _syaz1gmx _irr3sm61 _30l31gmx _1di6sm61",
disabledAndSelected: "_80om13gf _syaz1gmx _bfhk15s3 _irr315s3 _30l31gmx _1di615s3",
danger: "_syaz1tmw _f8pj1tmw _30l31tmw"
};
function getTitleColor(_ref) {
var isLink = _ref.isLink,
isDisabled = _ref.isDisabled,
isSelected = _ref.isSelected,
isDanger = _ref.isDanger;
if (isLink) {
return isSelected ? 'color.text' : 'color.text.subtle';
}
if (isDisabled) {
return 'color.text.disabled';
}
if (isSelected) {
return 'color.text';
}
if (isDanger) {
return 'color.text.danger';
}
return 'color.text.subtle';
}
function getDescriptionColor(_ref2) {
var isLink = _ref2.isLink,
isDisabled = _ref2.isDisabled;
if (isLink || !isDisabled) {
return 'color.text.subtlest';
}
return 'color.text.disabled';
}
var NewDropdownMenuItem = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function (_ref3, ref) {
var title = _ref3.title,
description = _ref3.description,
elemBefore = _ref3.elemBefore,
elemAfter = _ref3.elemAfter,
shouldTitleWrap = _ref3.shouldTitleWrap,
shouldDescriptionWrap = _ref3.shouldDescriptionWrap,
isSelected = _ref3.isSelected,
isDisabled = _ref3.isDisabled,
hasNestedMenuProp = _ref3.hasNestedMenu,
shortcut = _ref3.shortcut,
appearance = _ref3.appearance,
href = _ref3.href,
onClick = _ref3.onClick,
target = _ref3.target,
rel = _ref3.rel,
testId = _ref3.testId,
id = _ref3.id,
_ref3$role = _ref3.role,
role = _ref3$role === void 0 ? 'menuitem' : _ref3$role,
ariaChecked = _ref3['aria-checked'],
ariaHasPopup = _ref3['aria-haspopup'],
ariaExpanded = _ref3['aria-expanded'];
var isDropdownTrigger = useContext(DropdownTriggerContext);
var hasNestedMenu = isDropdownTrigger || hasNestedMenuProp;
var spacing = useContext(NewSpacingContext);
var isCompact = spacing === 'compact';
var isLink = !!href;
var isDanger = appearance === 'danger';
var titleMaxLines = shouldTitleWrap ? undefined : 1;
var descMaxLines = shouldDescriptionWrap ? undefined : 1;
var titleColor = getTitleColor({
isLink: isLink,
isDisabled: isDisabled,
isSelected: isSelected,
isDanger: isDanger
});
var descColor = getDescriptionColor({
isLink: isLink,
isDisabled: isDisabled
});
// Just to force the toggle in atlaspack workbench
// @ts-ignore
var _nothing = fg('platform-dst-tokens-finesse');
var menuItem = /*#__PURE__*/React.createElement(Fragment, null, elemBefore && /*#__PURE__*/React.createElement("span", {
"data-testid": testId && "".concat(testId, "--elem-before"),
className: ax([styles.beforeAfterElement])
}, elemBefore), /*#__PURE__*/React.createElement(Stack, {
grow: "fill",
space: "space.025",
xcss: styles.textContainer
}, /*#__PURE__*/React.createElement(Text, {
weight: "medium",
color: titleColor,
maxLines: titleMaxLines,
testId: testId && "".concat(testId, "--title")
}, title), description && /*#__PURE__*/React.createElement(Text, {
color: descColor,
maxLines: descMaxLines,
testId: testId && "".concat(testId, "--description")
}, description)), shortcut && /*#__PURE__*/React.createElement(KeyboardShortcut, {
shortcut: shortcut
}), elemAfter && /*#__PURE__*/React.createElement("span", {
"data-testid": testId && "".concat(testId, "--elem-after"),
className: ax([styles.beforeAfterElement])
}, elemAfter), hasNestedMenu && /*#__PURE__*/React.createElement("span", {
"data-testid": testId && "".concat(testId, "--chevron"),
className: ax([styles.beforeAfterElement])
}, /*#__PURE__*/React.createElement(ChevronRightIcon, {
size: "small",
label: ""
})), isSelected && role === 'menuitem' && !hasNestedMenu && /*#__PURE__*/React.createElement("span", {
"data-testid": testId && "".concat(testId, "--selected"),
className: ax([styles.beforeAfterElement])
}, /*#__PURE__*/React.createElement(CheckMarkIcon, {
label: ""
})));
if (href) {
return /*#__PURE__*/React.createElement(Anchor, {
href: href,
target: target,
rel: rel,
onClick: onClick,
xcss: cx(styles.root, isCompact && styles.compact, isSelected && styles.selected, isDanger && styles.danger),
testId: testId,
role: role,
id: id,
ref: ref,
"aria-current": isSelected ? 'page' : undefined
}, menuItem);
}
return /*#__PURE__*/React.createElement(Pressable, {
onClick: onClick,
isDisabled: isDisabled,
xcss: cx(styles.root, isCompact && styles.compact, isSelected && styles.selected, isDisabled && styles.disabled, isSelected && isDisabled && styles.disabledAndSelected, isDanger && styles.danger),
testId: testId,
role: role,
"aria-checked": ariaChecked,
"aria-haspopup": ariaHasPopup,
"aria-expanded": ariaExpanded,
id: id,
ref: ref
}, menuItem);
}));
export default NewDropdownMenuItem;