diff --git a/packages/ui-modal/src/Modal/v2/ModalBody/index.tsx b/packages/ui-modal/src/Modal/v2/ModalBody/index.tsx index f21376d0ca..c87f0078d6 100644 --- a/packages/ui-modal/src/Modal/v2/ModalBody/index.tsx +++ b/packages/ui-modal/src/Modal/v2/ModalBody/index.tsx @@ -105,8 +105,16 @@ class ModalBody extends Component { } render() { - const { as, elementRef, overflow, variant, padding, children, ...rest } = - this.props + const { + as, + elementRef, + overflow, + variant, + padding, + spacing, + children, + ...rest + } = this.props const passthroughProps = View.omitViewProps( omitProps(rest, ModalBody.allowedProps), @@ -135,7 +143,7 @@ class ModalBody extends Component { elementRef={this.handleRef} as={as} css={this.props.styles?.modalBody} - padding={padding} + padding={spacing ? undefined : padding} // check if there is a scrollbar, if so, the element has to be tabbable {...(hasScrollbar ? { diff --git a/packages/ui-modal/src/Modal/v2/ModalBody/props.ts b/packages/ui-modal/src/Modal/v2/ModalBody/props.ts index 2e22407ad8..cab7d37854 100644 --- a/packages/ui-modal/src/Modal/v2/ModalBody/props.ts +++ b/packages/ui-modal/src/Modal/v2/ModalBody/props.ts @@ -42,6 +42,7 @@ type ModalBodyOwnProps = { as?: AsElementType variant?: 'default' | 'inverse' overflow?: 'scroll' | 'fit' + spacing?: 'default' | 'compact' } type PropKeys = keyof ModalBodyOwnProps @@ -63,7 +64,8 @@ const allowedProps: AllowedPropKeys = [ 'elementRef', 'as', 'variant', - 'overflow' + 'overflow', + 'spacing' ] export type { ModalBodyProps, ModalBodyState, ModalBodyStyle } diff --git a/packages/ui-modal/src/Modal/v2/ModalBody/styles.ts b/packages/ui-modal/src/Modal/v2/ModalBody/styles.ts index 8e5aa4fc75..3d00a7ea93 100644 --- a/packages/ui-modal/src/Modal/v2/ModalBody/styles.ts +++ b/packages/ui-modal/src/Modal/v2/ModalBody/styles.ts @@ -40,7 +40,12 @@ const generateStyle = ( componentTheme: NewComponentTypes['ModalBody'], props: ModalBodyProps ): ModalBodyStyle => { - const { variant } = props + const { variant, spacing } = props + + const sizeVariants = { + default: { padding: componentTheme.padding }, + compact: { padding: componentTheme.paddingCompact } + } const backgroundStyle = variant === 'inverse' @@ -52,6 +57,7 @@ const generateStyle = ( return { modalBody: { label: 'modalBody', + borderRadius: 0, boxSizing: 'border-box', flex: '1 1 auto', '&:focus': { @@ -61,6 +67,7 @@ const generateStyle = ( '@media (min-height: 20rem)': { overflowY: 'auto' }, + ...(spacing ? sizeVariants[spacing] : {}), ...backgroundStyle } } diff --git a/packages/ui-modal/src/Modal/v2/ModalFooter/props.ts b/packages/ui-modal/src/Modal/v2/ModalFooter/props.ts index 6bec777346..585051a3f9 100644 --- a/packages/ui-modal/src/Modal/v2/ModalFooter/props.ts +++ b/packages/ui-modal/src/Modal/v2/ModalFooter/props.ts @@ -32,6 +32,7 @@ import type { WithStyleProps, ComponentStyle } from '@instructure/emotion' type ModalFooterOwnProps = { children?: React.ReactNode variant?: 'default' | 'inverse' + spacing?: 'default' | 'compact' } type PropKeys = keyof ModalFooterOwnProps @@ -43,7 +44,7 @@ type ModalFooterProps = ModalFooterOwnProps & OtherHTMLAttributes type ModalFooterStyle = ComponentStyle<'modalFooter'> -const allowedProps: AllowedPropKeys = ['children', 'variant'] +const allowedProps: AllowedPropKeys = ['children', 'variant', 'spacing'] export type { ModalFooterProps, ModalFooterStyle } export { allowedProps } diff --git a/packages/ui-modal/src/Modal/v2/ModalFooter/styles.ts b/packages/ui-modal/src/Modal/v2/ModalFooter/styles.ts index 148c3aa3e3..e52bd94203 100644 --- a/packages/ui-modal/src/Modal/v2/ModalFooter/styles.ts +++ b/packages/ui-modal/src/Modal/v2/ModalFooter/styles.ts @@ -40,7 +40,7 @@ const generateStyle = ( componentTheme: NewComponentTypes['ModalFooter'], props: ModalFooterProps ): ModalFooterStyle => { - const { variant } = props + const { variant, spacing } = props const backgroundStyle = variant === 'inverse' @@ -58,7 +58,10 @@ const generateStyle = ( label: 'modalFooter', flex: '0 0 auto', boxSizing: 'border-box', - padding: componentTheme.padding, + padding: + spacing === 'compact' + ? componentTheme.paddingCompact + : componentTheme.padding, borderBottomRightRadius: componentTheme.borderRadius, borderBottomLeftRadius: componentTheme.borderRadius, display: 'flex', diff --git a/packages/ui-modal/src/Modal/v2/README.md b/packages/ui-modal/src/Modal/v2/README.md index 63ad59824f..27e3f7d192 100644 --- a/packages/ui-modal/src/Modal/v2/README.md +++ b/packages/ui-modal/src/Modal/v2/README.md @@ -135,7 +135,7 @@ const Example = () => { - + @@ -262,7 +262,7 @@ const Example = () => { margin="0 auto" /> - + diff --git a/packages/ui-modal/src/Modal/v2/styles.ts b/packages/ui-modal/src/Modal/v2/styles.ts index 8d8c9a82be..fcabbb7916 100644 --- a/packages/ui-modal/src/Modal/v2/styles.ts +++ b/packages/ui-modal/src/Modal/v2/styles.ts @@ -102,6 +102,7 @@ const generateStyle = ( boxSizing: 'border-box', boxShadow: boxShadowObjectsToCSSString(componentTheme.boxShadow), borderRadius: componentTheme.borderRadius, + overflow: 'hidden', ...sizeStyles[size!], ...backgroundStyles }, @@ -113,7 +114,6 @@ const generateStyle = ( height: '100%' }, joinedHeaderAndBody: { - borderRadius: componentTheme.borderRadius, display: 'flex', flexDirection: 'column', overflow: 'hidden',