UNPKG

@primer/components

Version:
276 lines (241 loc) • 13.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Item = exports.TextContainer = void 0; var _octiconsReact = require("@primer/octicons-react"); var _react = _interopRequireWildcard(require("react")); var _constants = require("../constants"); var _sx = _interopRequireDefault(require("../sx")); var _Truncate = _interopRequireDefault(require("../Truncate")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _Header = require("./Header"); var _Divider = require("./Divider"); var _ThemeProvider = require("../ThemeProvider"); var _focusZone = require("../behaviors/focusZone"); var _ssr = require("@react-aria/ssr"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } const getItemVariant = (variant = 'default', disabled) => { if (disabled) { return { color: (0, _constants.get)('colors.primer.fg.disabled'), iconColor: (0, _constants.get)('colors.primer.fg.disabled'), annotationColor: (0, _constants.get)('colors.primer.fg.disabled'), hoverCursor: 'default' }; } switch (variant) { case 'danger': return { color: (0, _constants.get)('colors.danger.fg'), iconColor: (0, _constants.get)('colors.danger.fg'), annotationColor: (0, _constants.get)('colors.fg.muted'), hoverCursor: 'pointer', hoverBg: (0, _constants.get)('colors.actionListItem.danger.hoverBg'), focusBg: (0, _constants.get)('colors.actionListItem.danger.activeBg'), hoverText: (0, _constants.get)('colors.actionListItem.danger.hoverText') }; default: return { color: (0, _constants.get)('colors.fg.default'), iconColor: (0, _constants.get)('colors.fg.muted'), annotationColor: (0, _constants.get)('colors.fg.muted'), hoverCursor: 'pointer', hoverBg: (0, _constants.get)('colors.actionListItem.default.hoverBg'), focusBg: (0, _constants.get)('colors.actionListItem.default.activeBg') }; } }; const DividedContent = _styledComponents.default.div.withConfig({ displayName: "Item__DividedContent", componentId: "sc-jqpvy8-0" })(["display:flex;min-width:0;position:relative;flex-grow:1;"]); const MainContent = _styledComponents.default.div.withConfig({ displayName: "Item__MainContent", componentId: "sc-jqpvy8-1" })(["align-items:baseline;display:flex;min-width:0;flex-direction:var(--main-content-flex-direction);flex-grow:1;"]); const StyledItem = _styledComponents.default.div.withConfig({ displayName: "Item__StyledItem", componentId: "sc-jqpvy8-2" })(["padding:6px ", ";display:flex;border-radius:", ";color:", ";transition:background 33.333ms linear;text-decoration:none;@media (hover:hover) and (pointer:fine){:hover{background:var( --item-hover-bg-override,", " );color:", ";cursor:", ";}}:not(:first-of-type):not(", " + &):not(", " + &){margin-top:", ";", "::before{content:' ';display:block;position:absolute;width:100%;top:-7px;border:0 solid ", ";border-top-width:", ";}}&:hover ", "::before,:hover + * ", "::before{border-color:var(--item-hover-divider-border-color-override,transparent) !important;}&:focus ", "::before,:focus + * ", "::before,&[", "] ", "::before,[", "] + & ", "::before{border-color:transparent !important;}&[", "='", "']{background:", ";}&[", "='", "']{background:", ";}&:focus{background:", ";outline:none;}&:active{background:", ";}", ""], (0, _constants.get)('space.2'), (0, _constants.get)('radii.2'), ({ variant, item }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).color, ({ variant, item }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).hoverBg, ({ variant, item }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).hoverText, ({ variant, item }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).hoverCursor, _Divider.StyledDivider, _Header.StyledHeader, ({ showDivider }) => showDivider ? `1px` : '0', DividedContent, (0, _constants.get)('colors.border.muted'), ({ showDivider }) => showDivider ? `1px` : '0', DividedContent, DividedContent, DividedContent, DividedContent, _focusZone.isActiveDescendantAttribute, DividedContent, _focusZone.isActiveDescendantAttribute, DividedContent, _focusZone.isActiveDescendantAttribute, _focusZone.activeDescendantActivatedDirectly, ({ variant, item }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).focusBg, _focusZone.isActiveDescendantAttribute, _focusZone.activeDescendantActivatedIndirectly, ({ variant, item }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).hoverBg, ({ variant, item }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).focusBg, ({ variant, item }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).focusBg, _sx.default); const TextContainer = _styledComponents.default.span.withConfig({ displayName: "Item__TextContainer", componentId: "sc-jqpvy8-3" })([""]); exports.TextContainer = TextContainer; const BaseVisualContainer = _styledComponents.default.div.withConfig({ displayName: "Item__BaseVisualContainer", componentId: "sc-jqpvy8-4" })(["height:20px;width:", ";margin-right:", ";display:flex;justify-content:center;align-items:center;flex-shrink:0;"], (0, _constants.get)('space.3'), (0, _constants.get)('space.2')); const ColoredVisualContainer = (0, _styledComponents.default)(BaseVisualContainer).withConfig({ displayName: "Item__ColoredVisualContainer", componentId: "sc-jqpvy8-5" })(["svg{fill:", ";font-size:", ";}"], ({ variant, disabled }) => getItemVariant(variant, disabled).iconColor, (0, _constants.get)('fontSizes.0')); const LeadingVisualContainer = (0, _styledComponents.default)(ColoredVisualContainer).withConfig({ displayName: "Item__LeadingVisualContainer", componentId: "sc-jqpvy8-6" })(["display:flex;flex-direction:column;justify-content:center;"]); const TrailingContent = (0, _styledComponents.default)(ColoredVisualContainer).withConfig({ displayName: "Item__TrailingContent", componentId: "sc-jqpvy8-7" })(["color:", "};margin-left:", ";margin-right:0;width:auto;div:nth-child(2){margin-left:", ";}"], ({ variant, disabled }) => getItemVariant(variant, disabled).annotationColor, (0, _constants.get)('space.2'), (0, _constants.get)('space.2')); const DescriptionContainer = _styledComponents.default.span.withConfig({ displayName: "Item__DescriptionContainer", componentId: "sc-jqpvy8-8" })(["color:", ";font-size:", ";line-height:16px;margin-left:var(--description-container-margin-left);min-width:0;flex-grow:1;flex-basis:var(--description-container-flex-basis);"], (0, _constants.get)('colors.fg.muted'), (0, _constants.get)('fontSizes.0')); const MultiSelectIcon = _styledComponents.default.svg.withConfig({ displayName: "Item__MultiSelectIcon", componentId: "sc-jqpvy8-9" })(["rect{fill:", ";stroke:", ";shape-rendering:auto;}path{fill:", ";boxshadow:", ";opacity:", ";}"], ({ selected }) => selected ? (0, _constants.get)('colors.accent.fg') : (0, _constants.get)('colors.canvas.default'), ({ selected }) => selected ? (0, _constants.get)('colors.accent.fg') : (0, _constants.get)('colors.border.default'), (0, _constants.get)('colors.fg.onEmphasis'), (0, _constants.get)('shadow.small'), ({ selected }) => selected ? 1 : 0); /** * An actionable or selectable `Item` with an optional icon and description. */ const Item = /*#__PURE__*/_react.default.forwardRef((itemProps, ref) => { const { as: Component, text, description, descriptionVariant = 'inline', selected, selectionVariant, leadingVisual: LeadingVisual, trailingIcon: TrailingIcon, trailingVisual: TrailingVisual, trailingText, variant = 'default', showDivider, disabled, onAction, onKeyPress, children, onClick, id, ...props } = itemProps; const labelId = (0, _ssr.useSSRSafeId)(); const descriptionId = (0, _ssr.useSSRSafeId)(); const keyPressHandler = (0, _react.useCallback)(event => { if (disabled) { return; } onKeyPress === null || onKeyPress === void 0 ? void 0 : onKeyPress(event); if (!event.defaultPrevented && [' ', 'Enter'].includes(event.key)) { onAction === null || onAction === void 0 ? void 0 : onAction(itemProps, event); } }, [onAction, disabled, itemProps, onKeyPress]); const clickHandler = (0, _react.useCallback)(event => { if (disabled) { return; } onClick === null || onClick === void 0 ? void 0 : onClick(event); if (!event.defaultPrevented) { onAction === null || onAction === void 0 ? void 0 : onAction(itemProps, event); } }, [onAction, disabled, itemProps, onClick]); const { theme } = (0, _ThemeProvider.useTheme)(); return /*#__PURE__*/_react.default.createElement(StyledItem, _extends({ ref: ref, as: Component, tabIndex: disabled ? undefined : -1, variant: variant, showDivider: showDivider, "aria-selected": selected, "aria-labelledby": text ? labelId : undefined, "aria-describedby": description ? descriptionId : undefined }, props, { "data-id": id, onKeyPress: keyPressHandler, onClick: clickHandler }), !!selected === selected && /*#__PURE__*/_react.default.createElement(BaseVisualContainer, null, selectionVariant === 'multiple' ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(MultiSelectIcon, { selected: selected, width: "16", height: "16", viewBox: "0 0 16 16", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, /*#__PURE__*/_react.default.createElement("rect", { x: "2", y: "2", width: "12", height: "12", rx: "4" }), /*#__PURE__*/_react.default.createElement("path", { fillRule: "evenodd", strokeWidth: "0", d: "M4.03231 8.69862C3.84775 8.20646 4.49385 7.77554 4.95539 7.77554C5.41693 7.77554 6.80154 9.85246 6.80154 9.85246C6.80154 9.85246 10.2631 4.314 10.4938 4.08323C10.7246 3.85246 11.8785 4.08323 11.4169 5.00631C11.0081 5.82388 7.26308 11.4678 7.26308 11.4678C7.26308 11.4678 6.80154 12.1602 6.34 11.4678C5.87846 10.7755 4.21687 9.19077 4.03231 8.69862Z" }))) : selected && /*#__PURE__*/_react.default.createElement(_octiconsReact.CheckIcon, { fill: theme === null || theme === void 0 ? void 0 : theme.colors.fg.default })), LeadingVisual && /*#__PURE__*/_react.default.createElement(LeadingVisualContainer, { variant: variant, disabled: disabled }, /*#__PURE__*/_react.default.createElement(LeadingVisual, null)), /*#__PURE__*/_react.default.createElement(DividedContent, null, /*#__PURE__*/_react.default.createElement(MainContent, { style: { '--main-content-flex-direction': descriptionVariant === 'inline' ? 'row' : 'column' } }, children, text ? /*#__PURE__*/_react.default.createElement(TextContainer, { id: labelId }, text) : null, description ? /*#__PURE__*/_react.default.createElement(DescriptionContainer, { id: descriptionId, style: { '--description-container-margin-left': descriptionVariant === 'inline' ? (0, _constants.get)('space.2')(theme) : 0, '--description-container-flex-basis': descriptionVariant === 'inline' ? 0 : 'auto' } }, descriptionVariant === 'block' ? description : /*#__PURE__*/_react.default.createElement(_Truncate.default, { title: description, inline: true, maxWidth: "100%" }, description)) : null), TrailingVisual ? /*#__PURE__*/_react.default.createElement(TrailingContent, { variant: variant, disabled: disabled }, typeof TrailingVisual === 'function' ? /*#__PURE__*/_react.default.createElement(TrailingVisual, null) : TrailingVisual) : TrailingIcon || trailingText ? /*#__PURE__*/_react.default.createElement(TrailingContent, { variant: variant, disabled: disabled }, trailingText, TrailingIcon && /*#__PURE__*/_react.default.createElement(TrailingIcon, null)) : null)); }); exports.Item = Item; Item.displayName = 'ActionList.Item';