baseui
Version:
A React Component library implementing the Base design language
103 lines (101 loc) • 6.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.Sheet = void 0;
var React = _interopRequireWildcard(require("react"));
var _overrides = require("../helpers/overrides");
var _progressBar = require("../progress-bar");
var _button = require("../button");
var _divider = require("../divider");
var _actionButton = require("./action-button");
var _styledComponents = require("./styled-components");
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.
*/
function renderBodyContent(content) {
return typeof content === 'function' ? content() : content;
}
function renderActionButtonContent(content, buttonSize) {
if (typeof content === 'string') {
return content;
}
const Icon = content;
return /*#__PURE__*/React.createElement(Icon, {
size: buttonSize === _button.SIZE.compact ? 22 : 26
});
}
const Sheet = ({
children,
content,
description,
draggable = false,
leadingAction,
overrides = {},
progressBar,
title,
topPosition,
trailingAction
}) => {
const [Root, rootProps] = (0, _overrides.getOverrides)(overrides.Root, _styledComponents.StyledRoot);
const [TopContainer, topContainerProps] = (0, _overrides.getOverrides)(overrides.TopContainer, _styledComponents.StyledTopContainer);
const [BottomContainer, bottomContainerProps] = (0, _overrides.getOverrides)(overrides.BottomContainer, _styledComponents.StyledBottomContainer);
const [Header, headerProps] = (0, _overrides.getOverrides)(overrides.Header, _styledComponents.StyledHeader);
const [Grabber, grabberProps] = (0, _overrides.getOverrides)(overrides.Grabber, _styledComponents.StyledGrabber);
const [HeaderGrid, headerGridProps] = (0, _overrides.getOverrides)(overrides.HeaderGrid, _styledComponents.StyledHeaderGrid);
const [ActionButton, actionButtonProps] = (0, _overrides.getOverrides)(overrides.ActionButton, _actionButton.ActionButton);
const [EmptyDiv, emptyDivProps] = (0, _overrides.getOverrides)(overrides.EmptyDiv, _styledComponents.StyledEmptyDiv);
const [HeaderTextContainer, HeaderTextContainerProps] = (0, _overrides.getOverrides)(overrides.HeaderTextContainer, _styledComponents.StyledHeaderTextContainer);
const [Title, titleProps] = (0, _overrides.getOverrides)(overrides.Title, _styledComponents.StyledTitle);
const [Description, descriptionProps] = (0, _overrides.getOverrides)(overrides.Description, _styledComponents.StyledDescription);
const [Divider, dividerProps] = (0, _overrides.getOverrides)(overrides.Divider, _styledComponents.StyledDivider);
const [Body, bodyProps] = (0, _overrides.getOverrides)(overrides.Body, _styledComponents.StyledBody);
const hasTitle = Boolean(title);
const hasDescription = Boolean(description);
const hasLeadingAction = Boolean(leadingAction);
const hasTrailingAction = Boolean(trailingAction);
const buttonSize = hasTitle ? _button.SIZE.default : _button.SIZE.compact;
const shouldDisplayHeader = draggable || hasTitle || hasDescription || hasLeadingAction || hasTrailingAction;
return /*#__PURE__*/React.createElement(Root, _extends({
$draggable: draggable
}, rootProps), /*#__PURE__*/React.createElement(TopContainer, _extends({
$draggable: draggable,
$topPosition: topPosition
}, topContainerProps), children), /*#__PURE__*/React.createElement(BottomContainer, _extends({
$draggable: draggable,
$topPosition: topPosition
}, bottomContainerProps), shouldDisplayHeader && /*#__PURE__*/React.createElement(Header, headerProps, draggable && /*#__PURE__*/React.createElement(Grabber, grabberProps), /*#__PURE__*/React.createElement(HeaderGrid, _extends({
$hasLeadingAction: hasLeadingAction,
$hasTrailingAction: hasTrailingAction
}, headerGridProps), leadingAction && /*#__PURE__*/React.createElement(ActionButton, _extends({
onClick: leadingAction.onClick,
"aria-label": leadingAction.label,
size: buttonSize
}, actionButtonProps), renderActionButtonContent(leadingAction.renderIcon || leadingAction.label, buttonSize)), trailingAction && !leadingAction && /*#__PURE__*/React.createElement(EmptyDiv, emptyDivProps), (hasTitle || hasDescription) && /*#__PURE__*/React.createElement(HeaderTextContainer, _extends({
$draggable: draggable,
$hasTitle: hasTitle,
$hasDescription: hasDescription
}, HeaderTextContainerProps), title && /*#__PURE__*/React.createElement(Title, titleProps, title), description && /*#__PURE__*/React.createElement(Description, descriptionProps, description)), trailingAction && /*#__PURE__*/React.createElement(ActionButton, _extends({
onClick: trailingAction.onClick,
"aria-label": trailingAction.label,
size: buttonSize
}, actionButtonProps), renderActionButtonContent(trailingAction.renderIcon || trailingAction.label, buttonSize)), !trailingAction && leadingAction && /*#__PURE__*/React.createElement(EmptyDiv, emptyDivProps)), progressBar ? /*#__PURE__*/React.createElement(_progressBar.ProgressBar, _extends({
size: _progressBar.SIZE.small,
overrides: {
BarContainer: {
style: {
marginTop: 0,
marginBottom: 0
}
}
}
}, progressBar)) : /*#__PURE__*/React.createElement(Divider, _extends({
$size: _divider.SIZE.section
}, dividerProps))), /*#__PURE__*/React.createElement(Body, bodyProps, renderBodyContent(content))));
};
exports.Sheet = Sheet;
var _default = exports.default = Sheet;