UNPKG

@carbon/ibm-cloud-cognitive-cdai

Version:
145 lines (144 loc) 6.63 kB
import _extends from "@babel/runtime/helpers/extends"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // // Copyright IBM Corp. 2020, 2020 // // This source code is licensed under the Apache-2.0 license found in the // LICENSE file in the root directory of this source tree. // import React from 'react'; import PropTypes from 'prop-types'; import { Button } from 'carbon-components-react'; import { Close16 } from '@carbon/icons-react'; import { createInteractionHandler } from '../../component_helpers/A11yHelper'; import FocusTrap from 'focus-trap-react'; import { idePrefix } from '../../globals/js/settings'; var IdeSlideOverPanel = function IdeSlideOverPanel(_ref) { var open = _ref.open, size = _ref.size, title = _ref.title, onClose = _ref.onClose, onOverlayClose = _ref.onOverlayClose, className = _ref.className, children = _ref.children, danger = _ref.danger, closeButtonIconDescription = _ref.closeButtonIconDescription, controls = _ref.controls, footer = _ref.footer, onPrimaryClick = _ref.onPrimaryClick, onSecondaryClick = _ref.onSecondaryClick, secondaryButtonText = _ref.secondaryButtonText, primaryButtonDisabled = _ref.primaryButtonDisabled, secondaryButtonDisabled = _ref.secondaryButtonDisabled, primaryButtonText = _ref.primaryButtonText, primaryButtonIcon = _ref.primaryButtonIcon, secondaryButtonIcon = _ref.secondaryButtonIcon, withOverlay = _ref.withOverlay, focusTrapOptions = _ref.focusTrapOptions; size = size || 'small'; var classes = "".concat(idePrefix, "-slide-over-panel ").concat(idePrefix, "-slide-over-panel--") + size + (className ? ' ' + className : '') + (open ? " ".concat(idePrefix, "-slide-over-panel--open") : ''); var overlayClasses = "".concat(idePrefix, "-slide-over-overlay") + (open ? " ".concat(idePrefix, "-slide-over-overlay--open") : ''); var panelFooter = controls && /*#__PURE__*/React.createElement("div", { className: "".concat(idePrefix, "-slide-over-panel--footer") }, footer, /*#__PURE__*/React.createElement("div", { className: "".concat(idePrefix, "-slide-over-panel--footer-content") }, /*#__PURE__*/React.createElement(Button, { kind: "secondary", className: "".concat(idePrefix, "-slide-over-panel--secondary"), disabled: secondaryButtonDisabled, renderIcon: secondaryButtonIcon, onClick: onSecondaryClick }, secondaryButtonText), /*#__PURE__*/React.createElement(Button, { className: "".concat(idePrefix, "-slide-over-panel--primary"), kind: danger ? 'danger' : 'primary', disabled: primaryButtonDisabled, renderIcon: primaryButtonIcon, onClick: onPrimaryClick }, primaryButtonText))); var panelContents = /*#__PURE__*/React.createElement("aside", { className: classes }, /*#__PURE__*/React.createElement("div", { className: "".concat(idePrefix, "-slide-over-panel--contents") }, /*#__PURE__*/React.createElement("header", null, /*#__PURE__*/React.createElement("h3", null, title), /*#__PURE__*/React.createElement(Button, { className: "".concat(idePrefix, "-slide-over-panel--close"), disabled: false, hasIconOnly: true, iconDescription: closeButtonIconDescription, kind: "ghost", onClick: onClose, renderIcon: Close16, size: "default", tooltipAlignment: "center", tooltipPosition: "bottom", type: "button" })), /*#__PURE__*/React.createElement("div", { className: "".concat(idePrefix, "-slide-over-panel--children") }, children), panelFooter)); if (withOverlay) { var interactions = createInteractionHandler(onOverlayClose || onClose); var defaultFocusTrapOptions = { escapeDeactivates: false, clickOutsideDeactivates: true }; var mergedFocusTrapOptions = _objectSpread(_objectSpread({}, defaultFocusTrapOptions), focusTrapOptions); return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FocusTrap, { active: !!open, focusTrapOptions: mergedFocusTrapOptions }, panelContents), /*#__PURE__*/React.createElement("div", _extends({ role: "presentation", className: overlayClasses }, interactions))); } else { return panelContents; } }; IdeSlideOverPanel.propTypes = { children: PropTypes.node, className: PropTypes.string, closeButtonIconDescription: PropTypes.string, controls: PropTypes.bool, danger: PropTypes.bool, focusTrapOptions: PropTypes.shape({ onActivate: PropTypes.func, onDeactivate: PropTypes.func, initialFocus: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.func]), fallbackFocus: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.func]), escapeDeactivates: PropTypes.bool, clickOutsideDeactivates: PropTypes.bool, returnFocusOnDeactivate: PropTypes.bool, setReturnFocus: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.func]), allowOutsideClick: PropTypes.func, preventScroll: PropTypes.bool }), footer: PropTypes.object, onClose: PropTypes.func.isRequired, onOverlayClose: PropTypes.func, onPrimaryClick: PropTypes.func, onSecondaryClick: PropTypes.func, open: PropTypes.bool, primaryButtonDisabled: PropTypes.bool, primaryButtonIcon: PropTypes.object, primaryButtonText: PropTypes.string, secondaryButtonDisabled: PropTypes.bool, secondaryButtonIcon: PropTypes.object, secondaryButtonText: PropTypes.string, size: PropTypes.string, title: PropTypes.string, withOverlay: PropTypes.bool }; IdeSlideOverPanel.defaultProps = { open: false, controls: false, danger: false, withOverlay: false, secondaryButtonText: 'Cancel', primaryButtonText: 'Save', closeButtonIconDescription: 'Close', focusTrapOptions: { initialFocus: '.ide-slide-over-panel--close', fallbackFocus: '.ide-slide-over-panel--close' } }; export default IdeSlideOverPanel;