UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

120 lines (94 loc) 5.07 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = exports.PageHeader = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _getValidProps = _interopRequireDefault(require("@helpscout/react-utils/dist/getValidProps")); var _Text = _interopRequireDefault(require("../Text")); var _classnames = _interopRequireDefault(require("classnames")); var _Page = require("./Page.css"); var _Page2 = require("./Page"); var _jsxRuntime = require("react/jsx-runtime"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(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; } var Title = function Title(props) { var headingLevel = props.headingLevel, isSecondary = props.isSecondary, className = props.className, children = props.children; var componentClassName = (0, _classnames.default)('c-PageHeading', className); return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { className: "c-PageHeader__title", children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Page.HeadingUI, { selector: headingLevel || 'h1', size: isSecondary ? 'h4' : 'md', className: componentClassName, children: children }) }); }; var Subtitle = function Subtitle(_ref) { var children = _ref.children; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Page.SubTitleUI, { className: "c-PageHeader__subtitle", children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, { shade: "muted", children: children }) }); }; var PageHeader = function PageHeader(props) { var _useContext = (0, _react.useContext)(_Page2.PageContext), isResponsive = _useContext.isResponsive; var className = props.className, render = props.render, title = props.title, subtitle = props.subtitle, withBorder = props.withBorder, withBottomMargin = props.withBottomMargin, rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "render", "title", "subtitle", "withBorder", "withBottomMargin"]); var componentClassName = (0, _classnames.default)('c-PageHeader', isResponsive && 'is-responsive', withBorder && 'is-withBorder', withBottomMargin && 'is-withBottomMargin', className); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Page.HeaderUI, (0, _extends2.default)({}, (0, _getValidProps.default)(rest), { className: componentClassName, children: render ? render({ Title: Title, Subtitle: Subtitle }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", { children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Title, { children: title }), subtitle && /*#__PURE__*/(0, _jsxRuntime.jsx)(Subtitle, { children: subtitle })] }) })); }; exports.PageHeader = PageHeader; PageHeader.defaultProps = { 'data-cy': 'PageHeader', title: 'Title', withBorder: true, withBottomMargin: true }; PageHeader.propTypes = { /** Custom class names to be added to the component. */ className: _propTypes.default.string, /** Enables responsive styles. Default `false`. */ isResponsive: _propTypes.default.bool, /** function with 2 arguments: `Title` and `Subtitle`, 2 React Components with styles ready */ render: _propTypes.default.func, /** Renders a border under the header. Default `true`. */ withBorder: _propTypes.default.bool, /** Renders bottom margin styles. Default `true`. */ withBottomMargin: _propTypes.default.bool, /** The `Heading` title to render. */ title: _propTypes.default.string, /** The `Text` subtitle to render. */ subtitle: _propTypes.default.string, /** Data attr for Cypress tests. */ 'data-cy': _propTypes.default.string }; var _default = PageHeader; exports.default = _default;