panel.tsx 959 B

1234567891011121314151617181920212223242526272829
  1. import {forwardRef} from 'react';
  2. import isPropValid from '@emotion/is-prop-valid';
  3. import styled from '@emotion/styled';
  4. import {space} from 'sentry/styles/space';
  5. import PanelProvider from 'sentry/utils/panelProvider';
  6. interface PanelProps extends React.HTMLAttributes<HTMLDivElement> {
  7. dashedBorder?: boolean;
  8. 'data-test-id'?: string;
  9. }
  10. const Panel = styled(
  11. forwardRef<HTMLDivElement, PanelProps>(({children, ...props}, forwardedRef) => (
  12. <div ref={forwardedRef} {...props}>
  13. <PanelProvider>{children}</PanelProvider>
  14. </div>
  15. )),
  16. {shouldForwardProp: prop => typeof prop === 'string' && isPropValid(prop)}
  17. )`
  18. background: ${p => (p.dashedBorder ? p.theme.backgroundSecondary : p.theme.background)};
  19. border-radius: ${p => p.theme.panelBorderRadius};
  20. border: 1px
  21. ${p => (p.dashedBorder ? 'dashed' + p.theme.gray300 : 'solid ' + p.theme.border)};
  22. margin-bottom: ${space(2)};
  23. position: relative;
  24. `;
  25. export default Panel;