braid-design-system
Version:
Themeable design system for the SEEK Group
74 lines (73 loc) • 3.31 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_Divider_Divider_cjs = require("../Divider/Divider.cjs");
const lib_components_Stack_Stack_cjs = require("../Stack/Stack.cjs");
const lib_components_private_buildDataAttributes_cjs = require("../private/buildDataAttributes.cjs");
const lib_components_Accordion_AccordionContext_cjs = require("./AccordionContext.cjs");
const lib_css_atoms_sprinkles_css_cjs = require("../../css/atoms/sprinkles.css.cjs");
const _interopDefaultCompat = (e) => e && typeof e === "object" && "default" in e ? e : { default: e };
const assert__default = /* @__PURE__ */ _interopDefaultCompat(assert);
const validSpaceValues = ["medium", "large", "xlarge"];
const defaultSize = "large";
const defaultSpaceForSize = {
divided: {
xsmall: "medium",
small: "medium",
standard: "medium",
large: "medium"
},
undivided: {
xsmall: "medium",
small: "medium",
standard: "large",
large: "large"
}
};
const Accordion = ({
children,
size = defaultSize,
tone,
weight,
space: spaceProp,
dividers = true,
data,
...restProps
}) => {
assert__default.default(
spaceProp === void 0 || Object.values(lib_css_atoms_sprinkles_css_cjs.normalizeResponsiveValue(spaceProp)).every(
(value) => value === void 0 || validSpaceValues.includes(value)
),
`To ensure adequate space for touch targets, 'space' prop values must be one of the following: ${validSpaceValues.map((x) => `"${x}"`).join(", ")}`
);
assert__default.default(
tone === void 0 || lib_components_Accordion_AccordionContext_cjs.validTones.includes(tone),
`The 'tone' prop should be one of the following: ${lib_components_Accordion_AccordionContext_cjs.validTones.map((x) => `"${x}"`).join(", ")}`
);
if (process.env.NODE_ENV !== "production") {
lib_components_private_buildDataAttributes_cjs.buildDataAttributes({ data, validateRestProps: restProps });
}
const contextValue = react.useMemo(
() => ({ size, tone, weight }),
[size, tone, weight]
);
const space = spaceProp ?? defaultSpaceForSize[dividers ? "divided" : "undivided"][size];
return /* @__PURE__ */ jsxRuntime.jsx(lib_components_Accordion_AccordionContext_cjs.AccordionContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(lib_components_Stack_Stack_cjs.Stack, { space, data, children: !dividers ? children : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(lib_components_Divider_Divider_cjs.Divider, {}),
react.Children.map(lib_utils_flattenChildren_cjs.flattenChildren(children), (child, index) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
index > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
lib_components_Divider_Divider_cjs.Divider,
{
weight: typeof dividers === "string" ? dividers : void 0
}
) : null,
child
] })),
/* @__PURE__ */ jsxRuntime.jsx(lib_components_Divider_Divider_cjs.Divider, {})
] }) }) });
};
exports.Accordion = Accordion;
exports.defaultSize = defaultSize;
exports.validSpaceValues = validSpaceValues;
;