UNPKG

nishant-design-system

Version:
203 lines (202 loc) 8.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SubMenuItemText = exports.SubMenuItemIcon = exports.SubMenuItemAction = exports.SubMenuItem = exports.SubMenuGroup = exports.SubMenu = void 0; var React = _interopRequireWildcard(require("react")); var _classify = _interopRequireDefault(require("../../utils/classify")); var _Button = require("../Button"); var _Icon = require("../Icon"); var _Text = require("../Text"); var _SubMenuModule = _interopRequireDefault(require("./SubMenu.module.css")); 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 ? 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); } const SubMenuItemIcon = _ref => { let { className, ...props } = _ref; return /*#__PURE__*/React.createElement(_Icon.Icon, _extends({}, props, { size: "small", color: _Text.TEXT_COLORS.inverseSecondary, className: (0, _classify.default)(_SubMenuModule.default.menuIcon, className) })); }; exports.SubMenuItemIcon = SubMenuItemIcon; SubMenuItemIcon.displayName = 'SubMenuItemIcon'; const SubMenuItemText = _ref2 => { let { children, className, ...props } = _ref2; return /*#__PURE__*/React.createElement(_Text.ButtonTextSmall, _extends({}, props, { className: (0, _classify.default)(_SubMenuModule.default.subMenuItemText, className), color: _Text.TEXT_COLORS.inversePrimary }), children); }; exports.SubMenuItemText = SubMenuItemText; SubMenuItemText.displayName = 'SubMenuItemText'; const SubMenuItemAction = _ref3 => { let { children, className, ...props } = _ref3; return /*#__PURE__*/React.createElement("div", _extends({}, props, { className: (0, _classify.default)(_SubMenuModule.default.subMenuItemAction, className) }), children); }; exports.SubMenuItemAction = SubMenuItemAction; SubMenuItemAction.displayName = 'SubMenuItemAction'; const SubMenuItem = /*#__PURE__*/React.forwardRef((_ref4, ref) => { let { children, selectedMenuKey, disabled, classNames, onChange, menuKey, ...props } = _ref4; const onChangeHandler = () => { if (!disabled) { onChange && onChange(menuKey); } }; const onKeyDownHandler = e => { if (e.key === 'Enter') { onChangeHandler(); } }; const selected = selectedMenuKey === menuKey; const getNamedComp = comp => { const childrenArray = React.Children.toArray(children); if (childrenArray.length) { const nodes = []; for (const child of childrenArray) { if (child?.type?.displayName === comp) { nodes.push( /*#__PURE__*/React.cloneElement(child, { selected, disabled })); } } return nodes.length > 1 ? nodes : nodes[0]; } return null; }; return /*#__PURE__*/React.createElement("div", _extends({}, props, { className: (0, _classify.default)(_SubMenuModule.default.menuItem, { [_SubMenuModule.default.selected]: selected, [_SubMenuModule.default.disabled]: disabled }, classNames?.wrapper), onKeyDown: onKeyDownHandler, onClick: onChangeHandler, ref: ref, tabIndex: disabled ? '-1' : 0 }), /*#__PURE__*/React.createElement("div", { className: _SubMenuModule.default.menuIconName }, getNamedComp('SubMenuItemIcon'), getNamedComp('SubMenuItemText')), getNamedComp('SubMenuItemAction')); }); exports.SubMenuItem = SubMenuItem; const SubMenuGroup = _ref5 => { let { children, groupTitle, collapsible = false, disabled = false, onChange, selectedMenuKey, classNames } = _ref5; const [collapsed, setCollapsed] = React.useState(false); const collapseHandler = () => { collapsible && setCollapsed(!collapsed); }; const onChangeHandler = value => { if (onChange) { onChange(value); } }; const onKeyDownHandlerHeader = e => { if (e.key === 'Enter') { collapseHandler(); } }; const childrenWithProps = React.Children.map(children, child => { if ( /*#__PURE__*/React.isValidElement(child)) { const { disabled: disabledChild } = child.props; return /*#__PURE__*/React.cloneElement(child, { selectedMenuKey, onChange: onChangeHandler, disabled: disabledChild || disabled }); } return child; }); return /*#__PURE__*/React.createElement("div", { className: (0, _classify.default)(_SubMenuModule.default.subMenuGroupWrapper, classNames?.wrapper) }, /*#__PURE__*/React.createElement("div", { className: (0, _classify.default)(_SubMenuModule.default.subMenuGroupHeader, { [_SubMenuModule.default.collapsible]: collapsible }, classNames?.groupHeader), onClick: collapseHandler, onKeyDown: onKeyDownHandlerHeader, tabIndex: collapsible ? 0 : -1 }, /*#__PURE__*/React.createElement(_Text.SubTitleExtraSmall, { color: _Text.TEXT_COLORS.inverseSecondary, className: _SubMenuModule.default.groupTitle }, groupTitle), collapsible && /*#__PURE__*/React.createElement(_Icon.Icon, { color: _Text.TEXT_COLORS.inverseSecondary, name: collapsed ? 'chevron-down' : 'chevron-up', size: "small" })), /*#__PURE__*/React.createElement("div", { className: (0, _classify.default)(_SubMenuModule.default.subMenuGroup, { [_SubMenuModule.default.collapsed]: collapsible && collapsed }, classNames?.menuGroup) }, childrenWithProps)); }; exports.SubMenuGroup = SubMenuGroup; const SubMenu = /*#__PURE__*/React.forwardRef((_ref6, ref) => { let { classNames, children, title, onClose, showClose = false } = _ref6; const childrenWithProps = React.Children.map(children, child => { if ( /*#__PURE__*/React.isValidElement(child)) { return /*#__PURE__*/React.createElement("div", { className: _SubMenuModule.default.menuChildWrap }, child); } }); return /*#__PURE__*/React.createElement("div", { className: (0, _classify.default)(_SubMenuModule.default.subMenuWrapper, classNames?.wrapper), ref: ref }, /*#__PURE__*/React.createElement("div", { className: _SubMenuModule.default.subMenuTitleAndButton }, /*#__PURE__*/React.createElement(_Text.SubTitleMedium, { className: _SubMenuModule.default.subMenuHeader, color: _Text.TEXT_COLORS.inversePrimary }, title), showClose && /*#__PURE__*/React.createElement(_Button.Button, { ariaLabel: "Icon Button", iconRightName: "close", onClick: onClose, size: "small", type: "ghost", actionType: "button", classNames: { wrapper: _SubMenuModule.default.subMenuCloseButton, icon: _SubMenuModule.default.subMenuCloseIcon } })), childrenWithProps); }); exports.SubMenu = SubMenu; SubMenu.displayName = 'SubMenu';