UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

89 lines (81 loc) 2.91 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var clsx = require('clsx'); var Details_module = require('./Details.module.css.js'); var useMergedRefs = require('../internal/hooks/useMergedRefs.js'); var defaultSxProp = require('../utils/defaultSxProp.js'); var Box = require('../Box/Box.js'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefault(React); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const Root = /*#__PURE__*/React__default.default.forwardRef(({ className, children, sx: sxProp = defaultSxProp.defaultSxProp, ...rest }, forwardRef) => { const detailsRef = React__default.default.useRef(null); const ref = useMergedRefs.useMergedRefs(forwardRef, detailsRef); const [hasSummary, setHasSummary] = React.useState(false); React.useEffect(() => { const { current: details } = detailsRef; if (!details) { return; } const updateSummary = () => { const summary = details.querySelector('summary:not([data-default-summary])'); setHasSummary(!!summary); }; // Update summary on mount updateSummary(); const observer = new MutationObserver(() => { updateSummary(); }); observer.observe(details, { childList: true, subtree: true }); return () => { observer.disconnect(); }; }, []); if (sxProp !== defaultSxProp.defaultSxProp) { return /*#__PURE__*/React__default.default.createElement(Box, _extends({ as: 'details', className: clsx.clsx(className, Details_module.Details) }, rest, { sx: sxProp, ref: ref }), !hasSummary && /*#__PURE__*/React__default.default.createElement(Details.Summary, { "data-default-summary": true }, 'See Details'), children); } return /*#__PURE__*/React__default.default.createElement("details", _extends({ className: clsx.clsx(className, Details_module.Details) }, rest, { ref: ref }), !hasSummary && /*#__PURE__*/React__default.default.createElement(Details.Summary, { "data-default-summary": true }, 'See Details'), children); }); Root.displayName = 'Details'; function Summary({ as, children, ...props }) { const Component = as !== null && as !== undefined ? as : 'summary'; return /*#__PURE__*/React__default.default.createElement(Component, _extends({ as: Component === 'summary' ? null : 'summary' }, props), children); } Summary.displayName = "Summary"; Summary.displayName = 'Summary'; const Details = Object.assign(Root, { Summary }); exports.Summary = Summary; exports.default = Details;