beta/src/components/MDX/ConsoleBlock.tsx (65 lines of code) (raw):

/* * Copyright (c) Facebook, Inc. and its affiliates. */ import * as React from 'react'; import cn from 'classnames'; import {IconWarning} from '../Icon/IconWarning'; import {IconError} from '../Icon/IconError'; type LogLevel = 'info' | 'warning' | 'error'; interface ConsoleBlockProps { level?: LogLevel; children: React.ReactNode; } const Box = ({ width = '60px', height = '17px', className, customStyles, }: { width?: string; height?: string; className?: string; customStyles?: Record<string, string>; }) => ( <div className={className} style={{width, height, ...customStyles}}></div> ); Box.displayName = 'Box'; function ConsoleBlock({level = 'info', children}: ConsoleBlockProps) { let message: string | undefined; if (typeof children === 'string') { message = children; } else if ( React.isValidElement(children) && typeof children.props.children === 'string' ) { message = children.props.children; } return ( <div className="mb-4" translate="no"> <div className="flex w-full rounded-t-lg bg-gray-200 dark:bg-gray-80"> <div className="px-4 py-2 border-gray-300 dark:border-gray-90 border-r"> <Box className="bg-gray-300 dark:bg-gray-90" width="15px" /> </div> <div className="flex text-sm px-4"> <div className="border-b-2 border-gray-300 dark:border-gray-90"> Console </div> <div className="px-4 py-2 flex"> <Box className="mr-2 bg-gray-300 dark:bg-gray-90" /> <Box className="mr-2 hidden md:block bg-gray-300 dark:bg-gray-90" /> <Box className="hidden md:block bg-gray-300 dark:bg-gray-90" /> </div> </div> </div> <div className={cn( 'flex px-4 pt-4 pb-6 items-center content-center font-mono text-code rounded-b-md', { 'bg-red-30 text-red-40 bg-opacity-10': level === 'error', 'bg-yellow-5 text-yellow-50': level === 'warning', 'bg-gray-5 text-secondary dark:text-secondary-dark': level === 'info', } )}> {level === 'error' && <IconError className="self-start mt-1.5" />} {level === 'warning' && <IconWarning className="self-start mt-1" />} <div className="px-3">{message}</div> </div> </div> ); } export default ConsoleBlock;