braid-design-system
Version:
Themeable design system for the SEEK Group
46 lines (45 loc) • 1.82 kB
JavaScript
const jsxRuntime = require("react/jsx-runtime");
const assert = require("assert");
const react = require("react");
const lib_utils_flattenChildren_cjs = require("../../utils/flattenChildren.cjs");
const lib_components_Tabs_TabPanelsContext_cjs = require("./TabPanelsContext.cjs");
const lib_components_Tabs_Tabs_actions_cjs = require("./Tabs.actions.cjs");
const lib_components_Tabs_TabsProvider_cjs = require("./TabsProvider.cjs");
const _interopDefaultCompat = (e) => e && typeof e === "object" && "default" in e ? e : { default: e };
const assert__default = /* @__PURE__ */ _interopDefaultCompat(assert);
const TabPanels = ({
renderInactivePanels = false,
children
}) => {
const tabsContext = react.useContext(lib_components_Tabs_TabsProvider_cjs.TabsContext);
if (!tabsContext) {
throw new Error("TabPanels rendered outside TabsProvider context");
}
const { dispatch } = tabsContext;
const panelItems = [];
const panels = lib_utils_flattenChildren_cjs.flattenChildren(children).map((panel, index) => {
assert__default.default(
// @ts-expect-error
typeof panel === "object" && panel.type.__isTabPanel__,
"Only TabPanel elements can be direct children of a TabPanels"
);
panelItems.push(index);
return /* @__PURE__ */ jsxRuntime.jsx(
lib_components_Tabs_TabPanelsContext_cjs.TabPanelsContext.Provider,
{
value: {
renderInactive: renderInactivePanels,
panelIndex: index
},
children: panel
},
index
);
});
react.useEffect(() => {
dispatch({ type: lib_components_Tabs_Tabs_actions_cjs.TAB_PANELS_UPDATED, panels: panelItems });
}, [panelItems.join(), dispatch]);
return /* @__PURE__ */ jsxRuntime.jsx(react.Fragment, { children: panels });
};
exports.TabPanels = TabPanels;
;