baseui
Version:
A React Component library implementing the Base design language
151 lines (149 loc) • 7.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _styledComponents = require("./styled-components");
var _button = require("../button");
var _delete = _interopRequireDefault(require("../icon/delete"));
var _index = require("../styles/index");
var _ = require("../");
var _utils = require("./utils");
var _tokens = require("../tokens");
var _overrides = require("../helpers/overrides");
var _constants = require("./constants");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); } /*
Copyright (c) Uber Technologies, Inc.
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.
*/
const ButtonAlwaysLightTheme = ({
children,
...restProps
}) => /*#__PURE__*/React.createElement(_.ThemeProvider, {
theme: _.LightTheme
}, /*#__PURE__*/React.createElement(_button.Button, restProps, children));
const DefaultDismissButton = props => /*#__PURE__*/React.createElement(_button.Button, _extends({
size: _button.SIZE.compact,
shape: _button.SHAPE.circle,
kind: _button.KIND.secondary
}, props), /*#__PURE__*/React.createElement(_delete.default, {
size: 32
}));
const MessageCard = ({
backgroundColor = _tokens.primitiveColors.white,
backgroundColorType: backgroundColorTypeProp,
buttonKind = _constants.BUTTON_KIND.secondary,
buttonLabel,
heading,
image,
onClick,
onDismiss,
overrides = {},
paragraph
}) => {
const {
src,
layout = _constants.IMAGE_LAYOUT.top,
backgroundPosition,
ariaLabel
} = image || {};
const [, theme] = (0, _index.useStyletron)();
const [Root, rootProps] = (0, _overrides.getOverrides)(overrides.Root, _styledComponents.StyledRoot);
const [ContentContainer, ContentContainerProps] = (0, _overrides.getOverrides)(overrides.ContentContainer, _styledComponents.StyledContentContainer);
const [HeadingContainer, headingContainerProps] = (0, _overrides.getOverrides)(overrides.HeadingContainer, _styledComponents.StyledHeadingContainer);
const [ParagraphContainer, paragraphContainerProps] = (0, _overrides.getOverrides)(overrides.ParagraphContainer, _styledComponents.StyledParagraphContainer);
const [Image, imageProps] = (0, _overrides.getOverrides)(overrides.Image, _styledComponents.StyledImage);
const [ActionButton, actionButtonProps] = (0, _overrides.getOverrides)(overrides.Button, ButtonAlwaysLightTheme);
const [DismissButton, dismissButtonProps] = (0, _overrides.getOverrides)(overrides.DismissButton, DefaultDismissButton);
const defaultActionButtonOverrides = {
BaseButton: {
style: {
textAlign: 'center',
...(onDismiss ? {} : {
pointerEvents: 'none'
}),
...(buttonKind === _constants.BUTTON_KIND.tertiary ? {
marginTop: theme.sizing.scale100,
transform: theme.direction === 'rtl' ? `translateX(${theme.sizing.scale500})` : `translateX(-${theme.sizing.scale500})`
} : {
marginTop: theme.sizing.scale500
})
}
}
};
actionButtonProps.overrides = (0, _overrides.mergeOverrides)(defaultActionButtonOverrides, actionButtonProps.overrides);
const defaultDismissButtonOverrides = {
BaseButton: {
style: {
position: 'absolute',
top: theme.sizing.scale200,
right: theme.sizing.scale200,
// using a pseudo-element to acheive a 48px tap target
':after': {
content: '""',
position: 'absolute',
height: '48px',
width: '48px'
}
}
}
};
dismissButtonProps.overrides = (0, _overrides.mergeOverrides)(defaultDismissButtonOverrides, dismissButtonProps.overrides);
let backgroundColorType = backgroundColorTypeProp || (0, _utils.getBackgroundColorType)(backgroundColor);
if (!backgroundColorType) {
backgroundColorType = _constants.BACKGROUND_COLOR_TYPE.dark;
if (process.env.NODE_ENV !== "production") {
console.warn(`The provided value for 'backgroundColor', ${backgroundColor}, is not recognized as a \
Base Web primitive color. Please use the 'backgroundColorType' prop to indicate whether\
this color is light or dark so the rest of the component can be styled accordingly.`);
}
}
let buttonColors;
if (buttonKind === _constants.BUTTON_KIND.tertiary && backgroundColorType === _constants.BACKGROUND_COLOR_TYPE.dark) {
buttonColors = {
color: theme.colors.contentOnColor,
backgroundColor: theme.colors.buttonTertiaryFill
};
}
if (buttonKind !== _constants.BUTTON_KIND.tertiary && backgroundColor !== _tokens.primitiveColors.white) {
buttonColors = {
color: theme.colors.contentOnColorInverse,
backgroundColor: theme.colors.backgroundAlwaysLight
};
}
return /*#__PURE__*/React.createElement(Root, _extends({}, onDismiss ? {
$as: 'div'
} : {
onClick
}, {
$backgroundColor: backgroundColor,
$backgroundColorType: backgroundColorType,
$imageLayout: layout,
$isClickable: !onDismiss
}, rootProps), onDismiss && /*#__PURE__*/React.createElement(DismissButton, _extends({
onClick: onDismiss
}, dismissButtonProps)), image && /*#__PURE__*/React.createElement(Image, _extends({
role: "img",
"aria-label": ariaLabel,
$src: src,
$imageLayout: layout,
$backgroundPosition: backgroundPosition
}, imageProps)), /*#__PURE__*/React.createElement(ContentContainer, ContentContainerProps, heading && /*#__PURE__*/React.createElement(HeadingContainer, headingContainerProps, heading), paragraph && /*#__PURE__*/React.createElement(ParagraphContainer, paragraphContainerProps, paragraph), buttonLabel && /*#__PURE__*/React.createElement(ActionButton, _extends({}, onDismiss ? {
onClick
} : {
$as: 'div',
tabIndex: -1,
role: 'none'
}, {
kind: buttonKind,
shape: _button.SHAPE.pill,
size: _button.SIZE.compact,
colors: buttonColors
}, actionButtonProps), buttonLabel)));
};
var _default = exports.default = MessageCard;