-
Notifications
You must be signed in to change notification settings - Fork 112
/
DisclosureContent.tsx
39 lines (36 loc) · 1.31 KB
/
DisclosureContent.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import * as React from 'react';
import * as PropTypes from 'prop-types';
import {DisclosurePrimitiveContent, DisclosurePrimitiveContentProps} from '@twilio-paste/disclosure-primitive';
import {Box, BoxStyleProps} from '@twilio-paste/box';
import {DisclosureContext, Variants} from './Disclosure';
const getVariantStyles = (variant: Variants): BoxStyleProps => {
switch (variant) {
case 'contained':
return {
borderTopStyle: 'solid',
borderTopWidth: 'borderWidth20',
borderTopColor: 'colorBorderLighter',
padding: 'space50',
};
default:
return {};
}
};
export interface DisclosureContentProps extends Omit<DisclosurePrimitiveContentProps, keyof BoxStyleProps> {
children: NonNullable<React.ReactNode>;
}
const DisclosureContent = React.forwardRef<HTMLDivElement, DisclosureContentProps>(({children, ...props}, ref) => {
const {disclosure, variant} = React.useContext(DisclosureContext);
return (
<DisclosurePrimitiveContent {...disclosure} {...props} as={Box} ref={ref} {...getVariantStyles(variant)}>
{children}
</DisclosurePrimitiveContent>
);
});
DisclosureContent.displayName = 'DisclosureContent';
if (process.env.NODE_ENV === 'development') {
DisclosureContent.propTypes = {
children: PropTypes.node.isRequired,
};
}
export {DisclosureContent};