@gravity-ui/uikit
Version:
Gravity UI base styling and components
49 lines (48 loc) • 2.82 kB
JavaScript
'use client';
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Disclosure = void 0;
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const React = tslib_1.__importStar(require("react"));
const isOfType_1 = require("../utils/isOfType.js");
const DisclosureContext_1 = require("./DisclosureContext.js");
const DisclosureDetails_1 = require("./DisclosureDetails/DisclosureDetails.js");
const DisclosureSummary_1 = require("./DisclosureSummary/DisclosureSummary.js");
const constants_1 = require("./constants.js");
require("./Disclosure.css");
const isDisclosureSummaryComponent = (0, isOfType_1.isOfType)(DisclosureSummary_1.DisclosureSummary);
// @ts-expect-error this ts-error is appears when forwarding ref. It complains that DisclosureComposition props is not provided initially
exports.Disclosure = React.forwardRef(function Disclosure(props, ref) {
const { size = 'm', disabled = false, defaultExpanded = false, arrowPosition = 'start', summary = '', className, keepMounted = true, children, onUpdate = () => { }, expanded, qa, } = props;
const [summaryContent, detailsContent] = prepareChildren(children, {
disclosureQa: qa,
});
return ((0, jsx_runtime_1.jsx)(DisclosureContext_1.DisclosureProvider, { disabled: disabled, defaultExpanded: defaultExpanded, expanded: expanded, keepMounted: keepMounted, size: size, summary: summary, arrowPosition: arrowPosition, onUpdate: onUpdate, children: (0, jsx_runtime_1.jsxs)("section", { ref: ref, className: (0, constants_1.b)({ size }, className), "data-qa": qa, children: [summaryContent, detailsContent] }) }));
});
function prepareChildren(children, { disclosureQa }) {
const items = React.Children.toArray(children);
let summary, details;
const content = [];
for (const item of items) {
const isDisclosureSummary = isDisclosureSummaryComponent(item);
if (isDisclosureSummary) {
if (summary) {
throw new Error('Only one <Disclosure.Summary> component is allowed');
}
summary = item;
continue;
}
content.push(item);
}
if (content.length > 0) {
details = ((0, jsx_runtime_1.jsx)(DisclosureDetails_1.DisclosureDetails, { qa: disclosureQa && `${disclosureQa}-details`, children: content }));
}
if (!summary) {
summary = ((0, jsx_runtime_1.jsx)(DisclosureSummary_1.DisclosureSummary, { qa: disclosureQa && `${disclosureQa}-summary`, children: (props) => (0, jsx_runtime_1.jsx)(DisclosureSummary_1.DefaultDisclosureSummary, { ...props }) }));
}
return [summary, details];
}
exports.Disclosure.Summary = DisclosureSummary_1.DisclosureSummary;
exports.Disclosure.displayName = 'Disclosure';
//# sourceMappingURL=Disclosure.js.map