UNPKG

@xo-union/tk-component-header-nav

Version:
307 lines (304 loc) • 11.7 kB
"use strict"; var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property"); var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); _Object$defineProperty(exports, "__esModule", { value: true }); exports.SubCategoryLink = exports.SeeAllSubCategoryLink = exports.MainCategorySecondaryLink = exports.MainCategoryPrimaryLink = exports.MainCategoryLinkMenu = exports.LinkSection = exports.LinkColumn = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _tkComponentGrid = require("@xo-union/tk-component-grid"); var _tkUiTypography = require("@xo-union/tk-ui-typography"); var _reactCssModules = require("@xo-union/react-css-modules"); var _tkComponentIcons = _interopRequireDefault(require("@xo-union/tk-component-icons")); var _componentBlankButton = _interopRequireDefault(require("@xo-union/component-blank-button")); var _MegaMenuCoreCjs = require("./MegaMenuCore.cjs.js"); var _ContextCjs = require("../Context.cjs.js"); var _indexCjs = _interopRequireDefault(require("../Link/index.cjs.js")); var _useToggleCjs = require("../useToggle.cjs.js"); var _MenuSectionsCjs = require("./MenuSections.cjs.js"); const MainCategoryLinkMenuButton = _ref => { let { isOpen, onClick, children, ...props } = _ref; const { classes } = (0, _ContextCjs.useHeaderNavContext)(); return /*#__PURE__*/_react.default.createElement(_tkUiTypography.Body2, (0, _extends2.default)({ as: _componentBlankButton.default, className: (0, _classnames.default)(classes['sub-menu-button'], classes['menu-item-interactive-item']), onClick: onClick, bold: true, "aria-expanded": isOpen, type: "button" }, props), /*#__PURE__*/_react.default.createElement("span", null, children), /*#__PURE__*/_react.default.createElement(_tkComponentIcons.default, { className: classes['menu-button-caret'], size: "md", name: isOpen ? 'caret_up' : 'caret_down', "aria-hidden": "true" })); }; process.env.NODE_ENV !== "production" ? MainCategoryLinkMenuButton.propTypes = { children: _propTypes.default.node, isOpen: _propTypes.default.bool, onClick: _propTypes.default.func } : void 0; const MainCategoryLinkMenuHeading = _ref2 => { let { children, ...props } = _ref2; const { classes } = (0, _ContextCjs.useHeaderNavContext)(); return /*#__PURE__*/_react.default.createElement(_tkUiTypography.Body2, (0, _extends2.default)({ role: "heading", "aria-level": "1", as: "div", bold: true, className: classes['sub-menu-heading'] }, props), children); }; process.env.NODE_ENV !== "production" ? MainCategoryLinkMenuHeading.propTypes = { children: _propTypes.default.node } : void 0; const MainCategoryLinkMenu = props => { const { classes } = (0, _ContextCjs.useHeaderNavContext)(); const { className, headingContent, href, children, linkProps, id, isOpenByDefault = false } = props; const [isOpen, menuActions] = (0, _useToggleCjs.useToggle)(isOpenByDefault); const headingID = `${id}-sub-menu-heading`; return /*#__PURE__*/_react.default.createElement("div", { role: "listitem", className: (0, _classnames.default)(classes['menu-item'], classes['menu-item-space-accent-on-desktop'], isOpen && classes['menu-item-space-accent-on-mobile'], !isOpen && classes['sub-menu-is-closed'], className) }, /*#__PURE__*/_react.default.createElement(MainCategoryLinkMenuButton, { isOpen: isOpen, onClick: menuActions.toggle }, headingContent), /*#__PURE__*/_react.default.createElement(_MenuSectionsCjs.Menu3, { "aria-labelledby": headingID }, /*#__PURE__*/_react.default.createElement(MainCategoryLinkMenuHeading, { id: headingID }, /*#__PURE__*/_react.default.createElement(_indexCjs.default, (0, _extends2.default)({ href: href, className: classes['menu-item-interactive-item'] }, linkProps), headingContent)), /*#__PURE__*/_react.default.createElement("ul", { role: "list", className: (0, _classnames.default)(classes['sub-menu-nav-list']) }, children))); }; exports.MainCategoryLinkMenu = MainCategoryLinkMenu; process.env.NODE_ENV !== "production" ? MainCategoryLinkMenu.propTypes = { children: _propTypes.default.node, className: _propTypes.default.string, headingContent: _propTypes.default.node, href: _propTypes.default.string, menuID: _propTypes.default.string, isOpenByDefault: _propTypes.default.bool, linkProps: _propTypes.default.shape({}), id: _propTypes.default.string } : void 0; MainCategoryLinkMenu.defaultProps = { isOpenByDefault: false }; const MenuLink = _ref3 => { let { pushSelfDown, spaceAccent, hide, bold, className, ...rest } = _ref3; const { classes } = (0, _ContextCjs.useHeaderNavContext)(); const spaceAccentDesktopClass = classes['menu-item-space-accent-on-desktop']; const pushSelfDownDesktopClass = classes['menu-item-push-self-down-on-desktop']; return /*#__PURE__*/_react.default.createElement(_tkUiTypography.Body2, { role: "listitem", className: (0, _classnames.default)(classes['menu-item'], spaceAccent === 'desktop' && spaceAccentDesktopClass, pushSelfDown === 'desktop' && pushSelfDownDesktopClass, hide === 'desktop' && classes['hide-in-desktop'], bold === true && classes.bold, bold === 'mobile' && classes['bold-in-mobile'], className) }, /*#__PURE__*/_react.default.createElement(GenericMenuItemLink, rest)); }; process.env.NODE_ENV !== "production" ? MenuLink.propTypes = { pushSelfDown: _propTypes.default.oneOf(['desktop']), hide: _propTypes.default.oneOf(['desktop']), spaceAccent: _propTypes.default.oneOf(['desktop']), bold: _propTypes.default.oneOf([true, 'mobile']), className: _propTypes.default.string, children: _propTypes.default.node } : void 0; const GenericMenuItemLink = _ref4 => { let { children, leftIcon, rightIcon, ...props } = _ref4; const { classes } = (0, _ContextCjs.useHeaderNavContext)(); return /*#__PURE__*/_react.default.createElement(_indexCjs.default, (0, _extends2.default)({}, props, { className: (0, _classnames.default)(classes['menu-item-interactive-item']) }), leftIcon && /*#__PURE__*/_react.default.createElement(_tkComponentIcons.default, { className: classes['menu-item-left-icon'], name: leftIcon, size: "sm", "aria-hidden": "true" }), children, rightIcon && /*#__PURE__*/_react.default.createElement(_tkComponentIcons.default, { className: classes['menu-item-right-icon'], name: rightIcon, size: "sm", "aria-hidden": "true" })); }; process.env.NODE_ENV !== "production" ? GenericMenuItemLink.propTypes = { children: _propTypes.default.node, leftIcon: _propTypes.default.string, rightIcon: _propTypes.default.string } : void 0; const LinkSectionHeading = _ref5 => { let { headingContent, headingTextProps, id } = _ref5; const { classes } = (0, _ContextCjs.useHeaderNavContext)(); return /*#__PURE__*/_react.default.createElement(_tkUiTypography.Subhead, { bold: true, role: "heading", "aria-level": "1", as: "div", className: classes['heading-text-container'], id: id }, /*#__PURE__*/_react.default.createElement("a", (0, _extends2.default)({ className: classes['heading-text'] }, headingTextProps, { "data-trackable": "" }), headingContent, /*#__PURE__*/_react.default.createElement("div", { "aria-hidden": "true", className: classes['arrow-long-right'] }))); }; process.env.NODE_ENV !== "production" ? LinkSectionHeading.propTypes = { children: _propTypes.default.node, headingContent: _propTypes.default.string, headingTextProps: _propTypes.default.shape({}), id: _propTypes.default.string } : void 0; const LinkSectionContainer = _ref6 => { let { children } = _ref6; const { classes } = (0, _ContextCjs.useHeaderNavContext)(); return /*#__PURE__*/_react.default.createElement("div", { className: classes['list-section-container'] }, children); }; process.env.NODE_ENV !== "production" ? LinkSectionContainer.propTypes = { children: _propTypes.default.node } : void 0; const LinkSection = _ref7 => { let { children, headingContent, headingTextProps } = _ref7; const layout = (0, _MegaMenuCoreCjs.useMegaMenuLayout)(); const menuID = (0, _MegaMenuCoreCjs.useMegaMenuID)(); const { classes } = (0, _ContextCjs.useHeaderNavContext)(); const headingID = `header-${menuID}-mega-menu-heading`; const columnProps = { [layout.alignSectionsBreakpoint]: true }; return /*#__PURE__*/_react.default.createElement(_tkComponentGrid.Column, (0, _extends2.default)({ as: _MenuSectionsCjs.Menu2, className: classes['link-section'], "aria-labelledby": headingID, xs: "12" }, columnProps), /*#__PURE__*/_react.default.createElement(LinkSectionHeading, { id: headingID, headingContent: headingContent, headingTextProps: headingTextProps }), /*#__PURE__*/_react.default.createElement(LinkSectionContainer, null, /*#__PURE__*/_react.default.createElement(_tkComponentGrid.Row, { classes: (0, _reactCssModules.compose)({ row: (0, _classnames.default)(classes['link-section-list']) }), role: "list" }, children))); }; exports.LinkSection = LinkSection; process.env.NODE_ENV !== "production" ? LinkSection.propTypes = { children: _propTypes.default.node, headingContent: _propTypes.default.node, headingTextProps: _propTypes.default.shape({}), columnProps: _propTypes.default.shape({}) } : void 0; const LinkColumn = _ref8 => { let { children } = _ref8; const { classes } = (0, _ContextCjs.useHeaderNavContext)(); const layout = (0, _MegaMenuCoreCjs.useMegaMenuLayout)(); return /*#__PURE__*/_react.default.createElement(_tkComponentGrid.Column, (0, _extends2.default)({ role: "presentation", className: classes['link-column'], xs: "12", md: true }, layout.linkColumnProps), children); }; exports.LinkColumn = LinkColumn; process.env.NODE_ENV !== "production" ? LinkColumn.propTypes = { children: _propTypes.default.node } : void 0; // Bold links that are only bold on mobile const MainCategorySecondaryLink = props => /*#__PURE__*/_react.default.createElement(MenuLink, props); // Bold links that are emphasized with extra space and stay bold on mobile and desktop exports.MainCategorySecondaryLink = MainCategorySecondaryLink; const MainCategoryPrimaryLink = props => /*#__PURE__*/_react.default.createElement(MenuLink, (0, _extends2.default)({ bold: true, spaceAccent: "desktop" }, props)); exports.MainCategoryPrimaryLink = MainCategoryPrimaryLink; const SeeAllSubCategoryLink = props => /*#__PURE__*/_react.default.createElement(SubCategoryLink, (0, _extends2.default)({ hide: "desktop" }, props)); exports.SeeAllSubCategoryLink = SeeAllSubCategoryLink; const SubCategoryLink = _ref9 => { let { hide, ...rest } = _ref9; const { classes } = (0, _ContextCjs.useHeaderNavContext)(); return /*#__PURE__*/_react.default.createElement(_tkUiTypography.Body2, { as: "li", className: (0, _classnames.default)(classes['sub-menu-item'], hide === 'desktop' && classes['hide-in-desktop']) }, /*#__PURE__*/_react.default.createElement(GenericMenuItemLink, rest)); }; exports.SubCategoryLink = SubCategoryLink; process.env.NODE_ENV !== "production" ? SubCategoryLink.propTypes = { hide: _propTypes.default.oneOf(['desktop']) } : void 0;