import * as React from 'react'; import { useMemo } from 'react'; import { PropsComponentProps, useComponents } from 'docz'; import styled from 'styled-components'; import { get } from '../Playground/theme'; const Wrapper = styled.div` display: flex; flex-direction: column; & ~ & { margin-top: 20px; } `; const Title = styled.div` display: flex; border-bottom: 1px solid ${get('colors.propsBg')}; `; const PropName = styled.span` background: ${get('colors.propsBg')}; color: ${get('colors.primary')}; padding: 5px 10px; border-radius: 4px 4px 0 0; font-size: 16px; font-weight: 500; & ~ & { margin-left: 5px; } `; const PropType = styled(PropName)` color: ${get('colors.propsText')}; background: ${get('colors.propsBg')}; font-weight: 400; `; const PropDefaultValue = styled(PropType)` background: transparent; padding-left: 0; padding-right: 0; `; const PropRequired = styled(PropType)` flex: 1; text-align: right; background: transparent; opacity: 0.5; `; export const PropsRaw: React.SFC = ({ props, getPropType }) => { const entries = Object.entries(props); const components = useComponents(); const Paragraph = useMemo( () => styled(components.P || 'p')` font-size: 16px; color: ${get('colors.sidebarText')}; `, [] ); return ( {entries.map(([key, prop]) => { if (!prop.type && !prop.flowType) return null; return ( <PropName>{key}</PropName> <PropType>{getPropType(prop)}</PropType> {prop.defaultValue && ( <PropDefaultValue> {prop.defaultValue.value === "''" ? ( <em>= [Empty String]</em> ) : ( <em>= {prop.defaultValue.value.replace(/\'/g, '"')}</em> )} </PropDefaultValue> )} {prop.required && ( <PropRequired> <em>required</em> </PropRequired> )} {prop.description && {prop.description}} ); })} ); };