UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

108 lines (107 loc) 2.81 kB
import * as React from 'react'; import cx from 'classnames'; import { useSafeContext, supportsHas, Box } from '../../utils/index.js'; let getSurfaceElevationValue = (elevation) => { switch (elevation) { case 0: return 'none'; case 1: return 'var(--iui-shadow-1)'; case 2: return 'var(--iui-shadow-2)'; case 3: return 'var(--iui-shadow-3)'; case 4: return 'var(--iui-shadow-4)'; case 5: return 'var(--iui-shadow-5)'; default: return; } }; let getBorderValue = (border) => { if ('string' == typeof border) return border; if (false === border) return 'none'; }; let SurfaceHeader = React.forwardRef((props, ref) => { let { children, className, ...rest } = props; let { setHasLayout } = useSafeContext(SurfaceContext); React.useEffect(() => { if (!supportsHas()) setHasLayout(true); }, [setHasLayout]); return React.createElement( Box, { className: cx('iui-surface-header', className), ref: ref, ...rest, }, children, ); }); if ('development' === process.env.NODE_ENV) SurfaceHeader.displayName = 'Surface.Header'; let SurfaceBody = React.forwardRef((props, ref) => { let { children, className, isPadded = false, ...rest } = props; let { setHasLayout } = useSafeContext(SurfaceContext); React.useEffect(() => { if (!supportsHas()) setHasLayout(true); }, [setHasLayout]); return React.createElement( Box, { className: cx('iui-surface-body', className), ref: ref, 'data-iui-padded': isPadded ? 'true' : void 0, ...rest, }, children, ); }); if ('development' === process.env.NODE_ENV) SurfaceBody.displayName = 'Surface.Body'; export const Surface = Object.assign( React.forwardRef((props, ref) => { let { elevation, border = true, className, style, children, ...rest } = props; let [hasLayout, setHasLayout] = React.useState(false); let _style = { '--iui-surface-elevation': getSurfaceElevationValue(elevation), '--iui-surface-border': getBorderValue(border), ...style, }; return React.createElement( Box, { className: cx('iui-surface', className), style: _style, ref: ref, 'data-iui-layout': hasLayout ? 'true' : void 0, ...rest, }, React.createElement( SurfaceContext.Provider, { value: { setHasLayout, }, }, children, ), ); }), { Header: SurfaceHeader, Body: SurfaceBody, }, ); if ('development' === process.env.NODE_ENV) Surface.displayName = 'Surface'; let SurfaceContext = React.createContext(void 0); if ('development' === process.env.NODE_ENV) SurfaceContext.displayName = 'SurfaceContext';