UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

49 lines (48 loc) 2.82 kB
'use client'; "use strict"; 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