mirror of
https://github.com/Redocly/redoc.git
synced 2025-06-05 05:23:07 +03:00
Merge 90c8f3131e
into 3ae251b7e4
This commit is contained in:
commit
110f225764
|
@ -9,10 +9,10 @@ export const PropertiesTableCaption = styled.caption`
|
|||
`;
|
||||
|
||||
export const PropertyCell = styled.td<{ kind?: string }>`
|
||||
border-left: 1px solid ${props => props.theme.schema.linesColor};
|
||||
border-left: 1px dashed ${props => props.theme.schema.linesColor};
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
padding: 10px 10px 10px 0;
|
||||
padding: 10px;
|
||||
|
||||
${media.lessThan('small')`
|
||||
display: block;
|
||||
|
@ -28,23 +28,28 @@ export const PropertyCell = styled.td<{ kind?: string }>`
|
|||
}
|
||||
|
||||
tr:first-of-type > & {
|
||||
background-image: linear-gradient(
|
||||
to bottom,
|
||||
transparent 0%,
|
||||
transparent 22px,
|
||||
${props => props.theme.schema.linesColor} 22px,
|
||||
${props => props.theme.schema.linesColor} 100%
|
||||
background-image: repeating-linear-gradient(
|
||||
0deg,
|
||||
${props => props.theme.schema.linesColor},
|
||||
${props => props.theme.schema.linesColor} 3px,
|
||||
transparent 3px,
|
||||
transparent 5px,
|
||||
${props => props.theme.schema.linesColor} 5px
|
||||
);
|
||||
background-position: 0 10px;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
tr.last > & {
|
||||
background-image: linear-gradient(
|
||||
to bottom,
|
||||
${props => props.theme.schema.linesColor} 0%,
|
||||
${props => props.theme.schema.linesColor} 22px,
|
||||
transparent 22px,
|
||||
transparent 100%
|
||||
background-image: repeating-linear-gradient(
|
||||
0deg,
|
||||
${props => props.theme.schema.linesColor},
|
||||
${props => props.theme.schema.linesColor} 3px,
|
||||
transparent 3px,
|
||||
transparent 5px,
|
||||
${props => props.theme.schema.linesColor} 5px
|
||||
);
|
||||
background-size: 1px 22px;
|
||||
}
|
||||
|
||||
tr.last + tr > & {
|
||||
|
@ -97,7 +102,7 @@ export const PropertyNameCell = styled(PropertyCell)`
|
|||
`;
|
||||
|
||||
export const PropertyDetailsCell = styled.td`
|
||||
border-bottom: 1px solid #9fb4be;
|
||||
border-bottom: 1px solid rgb(228, 231, 235);
|
||||
padding: 10px 0;
|
||||
width: ${props => props.theme.schema.defaultDetailsWidth};
|
||||
box-sizing: border-box;
|
||||
|
@ -109,12 +114,15 @@ export const PropertyDetailsCell = styled.td`
|
|||
${media.lessThan('small')`
|
||||
padding: 0 20px;
|
||||
border-bottom: none;
|
||||
border-left: 1px solid ${props => props.theme.schema.linesColor};
|
||||
border-left: 1px dashed ${props => props.theme.schema.linesColor};
|
||||
|
||||
tr.last > & {
|
||||
border-left: none;
|
||||
}
|
||||
`}
|
||||
tr:first-of-type > & {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
${extensionsHook('PropertyDetailsCell')};
|
||||
`;
|
||||
|
@ -163,6 +171,7 @@ export const PropertiesTable = styled.table`
|
|||
display: block;
|
||||
> tr, > tbody > tr {
|
||||
display: block;
|
||||
padding-bottom:10px;
|
||||
}
|
||||
`}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ export const ClickablePropertyNameCell = styled(PropertyNameCell)`
|
|||
`;
|
||||
|
||||
export const FieldLabel = styled.span`
|
||||
vertical-align: middle;
|
||||
vertical-align: top;
|
||||
font-size: ${({ theme }) => theme.typography.code.fontSize};
|
||||
line-height: 20px;
|
||||
`;
|
||||
|
@ -82,7 +82,6 @@ export const RequiredLabel = styled(FieldLabel).attrs({
|
|||
color: ${props => props.theme.schema.requireLabelColor};
|
||||
font-size: ${props => props.theme.schema.labelsTextSize};
|
||||
font-weight: normal;
|
||||
margin-left: 20px;
|
||||
line-height: 1;
|
||||
`;
|
||||
|
||||
|
|
|
@ -35,20 +35,24 @@ export const H3 = styled.h2`
|
|||
${extensionsHook('H3')};
|
||||
`;
|
||||
|
||||
export const RightPanelHeader = styled.h3`
|
||||
color: ${({ theme }) => theme.rightPanel.textColor};
|
||||
|
||||
export const RightPanelHeader = styled.div`
|
||||
color: #ffffff;
|
||||
padding: 10px;
|
||||
font-weight: 700;
|
||||
border-radius: 4px 4px 0 0;
|
||||
background: rgb(50, 63, 75);
|
||||
${extensionsHook('RightPanelHeader')};
|
||||
`;
|
||||
|
||||
export const UnderlinedHeader = styled.h5`
|
||||
border-bottom: 1px solid rgba(38, 50, 56, 0.3);
|
||||
margin: 1em 0 1em 0;
|
||||
color: rgba(38, 50, 56, 0.5);
|
||||
font-weight: normal;
|
||||
color: rgb(96, 106, 119);
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.929em;
|
||||
line-height: 20px;
|
||||
border-bottom: 1px solid rgb(228, 231, 235);
|
||||
padding-bottom: 0.8em;
|
||||
|
||||
${extensionsHook('UnderlinedHeader')};
|
||||
`;
|
||||
|
|
|
@ -12,6 +12,12 @@ export const MiddlePanel = styled.div<{ $compact?: boolean }>`
|
|||
theme.spacing.sectionHorizontal
|
||||
}px`};
|
||||
`};
|
||||
${({ $compact, theme }) =>
|
||||
media.lessThan('small', true)`
|
||||
padding: ${`${$compact ? 0 : theme.spacing.sectionVertical / 2}px ${
|
||||
theme.spacing.sectionHorizontal / 2
|
||||
}px`};
|
||||
`};
|
||||
`;
|
||||
|
||||
export const Section = styled.div.attrs(props => ({
|
||||
|
@ -41,7 +47,6 @@ export const Section = styled.div.attrs(props => ({
|
|||
width: 100%;
|
||||
display: block;
|
||||
content: '';
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
`) ||
|
||||
''}
|
||||
|
@ -58,6 +63,13 @@ export const RightPanel = styled.div`
|
|||
padding: ${props =>
|
||||
`${props.theme.spacing.sectionVertical}px ${props.theme.spacing.sectionHorizontal}px`};
|
||||
`};
|
||||
${media.lessThan('small', true)`
|
||||
width: 100%;
|
||||
padding: ${props =>
|
||||
`${props.theme.spacing.sectionVertical / 2}px ${
|
||||
props.theme.spacing.sectionHorizontal / 2
|
||||
}px`};
|
||||
`};
|
||||
`;
|
||||
|
||||
export const DarkRightPanel = styled(RightPanel)`
|
||||
|
|
|
@ -39,6 +39,9 @@ export const StyledPre = styled(PrismDiv).attrs({
|
|||
font-size: ${props => props.theme.typography.code.fontSize};
|
||||
overflow-x: auto;
|
||||
margin: 0;
|
||||
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
background-color: rgb(50, 63, 75);
|
||||
contain: content;
|
||||
white-space: ${({ theme }) => (theme.typography.code.wrap ? 'pre-wrap' : 'pre')};
|
||||
`;
|
||||
|
|
|
@ -6,70 +6,59 @@ import styled from '../styled-components';
|
|||
export { Tab, TabList, TabPanel } from 'react-tabs';
|
||||
|
||||
export const Tabs = styled(ReactTabs)`
|
||||
padding: 10px 20px 20px;
|
||||
color: rgb(245, 247, 250);
|
||||
border-radius: 0 0 4px 4px;
|
||||
background-color: rgb(82, 96, 109);
|
||||
|
||||
> ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin: 0 -5px;
|
||||
|
||||
margin: 0 0 10px;
|
||||
border-bottom: 4px solid rgb(97, 110, 124);
|
||||
> li {
|
||||
padding: 5px 10px;
|
||||
display: inline-block;
|
||||
|
||||
background-color: ${({ theme }) => theme.codeBlock.backgroundColor};
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.5);
|
||||
background-color: rgb(82, 96, 109);
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
outline: none;
|
||||
color: ${({ theme }) => darken(theme.colors.tonalOffset, theme.rightPanel.textColor)};
|
||||
margin: 0
|
||||
${({ theme }) => `${theme.spacing.unit}px ${theme.spacing.unit}px ${theme.spacing.unit}px`};
|
||||
border: 1px solid ${({ theme }) => darken(0.05, theme.codeBlock.backgroundColor)};
|
||||
border-radius: 5px;
|
||||
min-width: 60px;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
|
||||
&.react-tabs__tab--selected {
|
||||
color: ${props => props.theme.colors.text.primary};
|
||||
background: ${({ theme }) => theme.rightPanel.textColor};
|
||||
&:focus {
|
||||
outline: auto;
|
||||
}
|
||||
color: white;
|
||||
background: rgb(50, 63, 75);
|
||||
border-bottom: 4px solid rgb(89, 195, 255);
|
||||
margin-bottom: -4px;
|
||||
}
|
||||
|
||||
&:only-child {
|
||||
flex: none;
|
||||
min-width: 100px;
|
||||
}
|
||||
}
|
||||
|
||||
&.tab-success {
|
||||
color: ${props => props.theme.colors.responses.success.tabTextColor};
|
||||
}
|
||||
> li:first-of-type {
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
|
||||
&.tab-redirect {
|
||||
color: ${props => props.theme.colors.responses.redirect.tabTextColor};
|
||||
}
|
||||
|
||||
&.tab-info {
|
||||
color: ${props => props.theme.colors.responses.info.tabTextColor};
|
||||
}
|
||||
|
||||
&.tab-error {
|
||||
color: ${props => props.theme.colors.responses.error.tabTextColor};
|
||||
}
|
||||
> li:last-of-type {
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
}
|
||||
> .react-tabs__tab-panel {
|
||||
background: ${({ theme }) => theme.codeBlock.backgroundColor};
|
||||
& > div,
|
||||
& > pre {
|
||||
padding: ${props => props.theme.spacing.unit * 4}px;
|
||||
margin: 0;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
& > div > pre {
|
||||
padding: 0;
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
@ -101,7 +90,7 @@ export const SmallTabs = styled(Tabs)`
|
|||
> .react-tabs__tab-panel {
|
||||
& > div,
|
||||
& > pre {
|
||||
padding: ${props => props.theme.spacing.unit * 2}px 0;
|
||||
padding: ${props => props.theme.spacing.unit * 2}px 10px;
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
|
@ -3,7 +3,7 @@ import styled from '../../styled-components';
|
|||
export const OperationEndpointWrap = styled.div`
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
margin-bottom: 10px;
|
||||
`;
|
||||
|
||||
export const ServerRelativeURL = styled.span`
|
||||
|
@ -21,9 +21,8 @@ export const EndpointInfo = styled.button<{ $expanded?: boolean; $inverted?: boo
|
|||
text-align: left;
|
||||
cursor: pointer;
|
||||
padding: 10px 30px 10px ${props => (props.$inverted ? '10px' : '20px')};
|
||||
border-radius: ${props => (props.$inverted ? '0' : '4px 4px 0 0')};
|
||||
background-color: ${props =>
|
||||
props.$inverted ? 'transparent' : props.theme.codeBlock.backgroundColor};
|
||||
border-radius: ${props => (props.$inverted ? '0' : '4px')};
|
||||
background-color: rgb(50, 63, 75);
|
||||
display: flex;
|
||||
white-space: nowrap;
|
||||
align-items: center;
|
||||
|
@ -54,6 +53,7 @@ export const HttpVerb = styled.span.attrs((props: { type: string; $compact?: boo
|
|||
text-transform: uppercase;
|
||||
font-family: ${props => props.theme.typography.headings.fontFamily};
|
||||
margin: 0;
|
||||
border-radius: 16px;
|
||||
`;
|
||||
|
||||
export const ServersOverlay = styled.div<{ $expanded: boolean }>`
|
||||
|
|
|
@ -9,7 +9,6 @@ import {
|
|||
import { FieldDetails } from './FieldDetails';
|
||||
import {
|
||||
InnerPropertiesWrap,
|
||||
PropertyBullet,
|
||||
PropertyCellWithInner,
|
||||
PropertyDetailsCell,
|
||||
PropertyNameCell,
|
||||
|
@ -74,7 +73,6 @@ export class Field extends React.Component<FieldProps> {
|
|||
kind={kind}
|
||||
title={name}
|
||||
>
|
||||
<PropertyBullet />
|
||||
<button
|
||||
onClick={this.toggle}
|
||||
onKeyPress={this.handleKeyPress}
|
||||
|
@ -91,7 +89,6 @@ export class Field extends React.Component<FieldProps> {
|
|||
</ClickablePropertyNameCell>
|
||||
) : (
|
||||
<PropertyNameCell className={deprecated ? 'deprecated' : undefined} kind={kind} title={name}>
|
||||
<PropertyBullet />
|
||||
{!hidePropertiesPrefix &&
|
||||
fieldParentsName.map(
|
||||
name => name + '.\u200B', // zero-width space, a special character is used for correct line breaking
|
||||
|
|
|
@ -10,7 +10,10 @@ export const jsonStyles = css`
|
|||
font-size: ${props => props.theme.typography.code.fontSize};
|
||||
|
||||
white-space: ${({ theme }) => (theme.typography.code.wrap ? 'pre-wrap' : 'pre')};
|
||||
border-radius: 4px;
|
||||
contain: content;
|
||||
background-color: rgb(50, 63, 75);
|
||||
padding: 10px;
|
||||
overflow-x: auto;
|
||||
|
||||
.callback-function {
|
||||
|
|
|
@ -35,6 +35,9 @@ export const StyledMarkdownBlock = styled(
|
|||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
&:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
${({ $compact }) =>
|
||||
|
|
|
@ -3,7 +3,7 @@ import * as React from 'react';
|
|||
|
||||
import { DropdownOption, DropdownProps } from '../../common-elements/Dropdown';
|
||||
import { MediaContentModel, MediaTypeModel, SchemaModel } from '../../services/models';
|
||||
import { DropdownLabel, DropdownWrapper } from '../PayloadSamples/styled.elements';
|
||||
import { DropdownWrapper } from '../PayloadSamples/styled.elements';
|
||||
|
||||
export interface MediaTypeChildProps {
|
||||
schema: SchemaModel;
|
||||
|
@ -41,14 +41,7 @@ export class MediaTypesSwitch extends React.Component<MediaTypesSwitchProps> {
|
|||
});
|
||||
|
||||
const Wrapper = ({ children }) =>
|
||||
this.props.withLabel ? (
|
||||
<DropdownWrapper>
|
||||
<DropdownLabel>Content type</DropdownLabel>
|
||||
{children}
|
||||
</DropdownWrapper>
|
||||
) : (
|
||||
children
|
||||
);
|
||||
this.props.withLabel ? <DropdownWrapper>{children}</DropdownWrapper> : children;
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
|
@ -13,6 +13,7 @@ import { Markdown } from '../Markdown/Markdown';
|
|||
import { ConstraintsView } from '../Fields/FieldConstraints';
|
||||
import { RequiredLabel } from '../../common-elements/fields';
|
||||
import styled from '../../styled-components';
|
||||
import { ParameterDescriptionWrap } from './styled.elements';
|
||||
|
||||
function safePush(obj, prop, item) {
|
||||
if (!obj[prop]) {
|
||||
|
@ -101,7 +102,11 @@ export function BodyContent(props: {
|
|||
{({ schema }) => {
|
||||
return (
|
||||
<>
|
||||
{description !== undefined && <Markdown source={description} />}
|
||||
{description !== undefined && <p></p> && (
|
||||
<ParameterDescriptionWrap>
|
||||
<Markdown source={description} />
|
||||
</ParameterDescriptionWrap>
|
||||
)}
|
||||
{schema?.type === 'object' && (
|
||||
<ConstraintsView constraints={schema?.constraints || []} />
|
||||
)}
|
||||
|
|
5
src/components/Parameters/styled.elements.tsx
Normal file
5
src/components/Parameters/styled.elements.tsx
Normal file
|
@ -0,0 +1,5 @@
|
|||
import styled from '../../styled-components';
|
||||
|
||||
export const ParameterDescriptionWrap = styled.div`
|
||||
padding-bottom: 10px;
|
||||
`;
|
|
@ -6,7 +6,7 @@ import { DropdownOption, DropdownProps } from '../../common-elements';
|
|||
import { MediaTypeModel } from '../../services/models';
|
||||
import { Markdown } from '../Markdown/Markdown';
|
||||
import { Example } from './Example';
|
||||
import { DropdownLabel, DropdownWrapper, NoSampleLabel } from './styled.elements';
|
||||
import { DropdownWrapper, NoSampleLabel } from './styled.elements';
|
||||
|
||||
export interface PayloadSamplesProps {
|
||||
mediaType: MediaTypeModel;
|
||||
|
@ -54,7 +54,6 @@ export class MediaTypeSamples extends React.Component<PayloadSamplesProps, Media
|
|||
return (
|
||||
<SamplesWrapper>
|
||||
<DropdownWrapper>
|
||||
<DropdownLabel>Example</DropdownLabel>
|
||||
{this.props.renderDropdown({
|
||||
value: options[activeIdx].value,
|
||||
options,
|
||||
|
|
|
@ -4,12 +4,13 @@ import { Dropdown } from '../../common-elements/Dropdown';
|
|||
|
||||
export const MimeLabel = styled.div`
|
||||
padding: 0.9em;
|
||||
background-color: ${({ theme }) => transparentize(0.6, theme.rightPanel.backgroundColor)};
|
||||
background-color: rgb(50, 63, 75);
|
||||
margin: 0 0 10px 0;
|
||||
display: block;
|
||||
font-family: ${({ theme }) => theme.typography.headings.fontFamily};
|
||||
font-size: 0.929em;
|
||||
line-height: 1.5em;
|
||||
border-radius: 4px;
|
||||
`;
|
||||
|
||||
export const DropdownLabel = styled.span`
|
||||
|
@ -20,10 +21,11 @@ export const DropdownLabel = styled.span`
|
|||
top: -11px;
|
||||
left: 12px;
|
||||
font-weight: ${({ theme }) => theme.typography.fontWeightBold};
|
||||
color: ${({ theme }) => transparentize(0.3, theme.rightPanel.textColor)};
|
||||
color: ${({ theme }) => transparentize(0.1, theme.rightPanel.textColor)};
|
||||
`;
|
||||
|
||||
export const DropdownWrapper = styled.div`
|
||||
margin-top: 15px;
|
||||
position: relative;
|
||||
`;
|
||||
|
||||
|
@ -39,15 +41,16 @@ export const InvertedSimpleDropdown = styled(Dropdown)`
|
|||
}
|
||||
margin: 0 0 10px 0;
|
||||
display: block;
|
||||
background-color: ${({ theme }) => transparentize(0.6, theme.rightPanel.backgroundColor)};
|
||||
background-color: rgb(50, 63, 75);
|
||||
border: none;
|
||||
padding: 0.9em 1.6em 0.9em 0.9em;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
box-shadow: none;
|
||||
&:hover,
|
||||
&:focus-within {
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
background-color: ${({ theme }) => transparentize(0.3, theme.rightPanel.backgroundColor)};
|
||||
}
|
||||
`;
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import { SourceCodeWithCopy } from '../SourceCode/SourceCode';
|
|||
import { RightPanelHeader, Tab, TabList, TabPanel, Tabs } from '../../common-elements';
|
||||
import { OptionsContext } from '../OptionsProvider';
|
||||
import { l } from '../../services/Labels';
|
||||
import { RequestSamplesWrap } from './styled.elements';
|
||||
|
||||
export interface RequestSamplesProps {
|
||||
operation: OperationModel;
|
||||
|
@ -26,7 +27,7 @@ export class RequestSamples extends React.Component<RequestSamplesProps> {
|
|||
const hideTabList = samples.length === 1 ? this.context.hideSingleRequestSampleTab : false;
|
||||
return (
|
||||
(hasSamples && (
|
||||
<div>
|
||||
<RequestSamplesWrap>
|
||||
<RightPanelHeader> {l('requestSamples')} </RightPanelHeader>
|
||||
|
||||
<Tabs defaultIndex={0}>
|
||||
|
@ -49,7 +50,7 @@ export class RequestSamples extends React.Component<RequestSamplesProps> {
|
|||
</TabPanel>
|
||||
))}
|
||||
</Tabs>
|
||||
</div>
|
||||
</RequestSamplesWrap>
|
||||
)) ||
|
||||
null
|
||||
);
|
||||
|
|
8
src/components/RequestSamples/styled.elements.ts
Normal file
8
src/components/RequestSamples/styled.elements.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
import styled from '../../styled-components';
|
||||
|
||||
export const RequestSamplesWrap = styled.div`
|
||||
position: relative;
|
||||
margin-bottom: 10px;
|
||||
background-color: rgb(82, 96, 109);
|
||||
border-radius: 4px;
|
||||
`;
|
|
@ -6,6 +6,7 @@ import { OperationModel } from '../../services/models';
|
|||
import { RightPanelHeader, Tab, TabList, TabPanel, Tabs } from '../../common-elements';
|
||||
import { PayloadSamples } from '../PayloadSamples/PayloadSamples';
|
||||
import { l } from '../../services/Labels';
|
||||
import { ResponseSamplesWrap } from './styled.elements';
|
||||
|
||||
export interface ResponseSamplesProps {
|
||||
operation: OperationModel;
|
||||
|
@ -23,7 +24,7 @@ export class ResponseSamples extends React.Component<ResponseSamplesProps> {
|
|||
|
||||
return (
|
||||
(responses.length > 0 && (
|
||||
<div>
|
||||
<ResponseSamplesWrap>
|
||||
<RightPanelHeader> {l('responseSamples')} </RightPanelHeader>
|
||||
|
||||
<Tabs defaultIndex={0}>
|
||||
|
@ -42,7 +43,7 @@ export class ResponseSamples extends React.Component<ResponseSamplesProps> {
|
|||
</TabPanel>
|
||||
))}
|
||||
</Tabs>
|
||||
</div>
|
||||
</ResponseSamplesWrap>
|
||||
)) ||
|
||||
null
|
||||
);
|
||||
|
|
8
src/components/ResponseSamples/styled.elements.ts
Normal file
8
src/components/ResponseSamples/styled.elements.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
import styled from '../../styled-components';
|
||||
|
||||
export const ResponseSamplesWrap = styled.div`
|
||||
position: relative;
|
||||
margin-bottom: 10px;
|
||||
background-color: rgb(82, 96, 109);
|
||||
border-radius: 4px;
|
||||
`;
|
|
@ -3,7 +3,7 @@ import { observer } from 'mobx-react';
|
|||
|
||||
import type { ResponseModel, MediaTypeModel } from '../../services/models';
|
||||
import { ResponseDetails } from './ResponseDetails';
|
||||
import { ResponseDetailsWrap, StyledResponseTitle } from './styled.elements';
|
||||
import { ResponseDetailsWrap, ResponseWrap, StyledResponseTitle } from './styled.elements';
|
||||
|
||||
export interface ResponseViewProps {
|
||||
response: ResponseModel;
|
||||
|
@ -28,7 +28,7 @@ export const ResponseView = observer(({ response }: ResponseViewProps): React.Re
|
|||
);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<ResponseWrap $type={type}>
|
||||
<StyledResponseTitle
|
||||
onClick={() => response.toggle()}
|
||||
type={type}
|
||||
|
@ -42,6 +42,6 @@ export const ResponseView = observer(({ response }: ResponseViewProps): React.Re
|
|||
<ResponseDetails response={response} />
|
||||
</ResponseDetailsWrap>
|
||||
)}
|
||||
</div>
|
||||
</ResponseWrap>
|
||||
);
|
||||
});
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import * as React from 'react';
|
||||
|
||||
import { Code } from './styled.elements';
|
||||
import { Code, ResponseTitleWrap } from './styled.elements';
|
||||
import { ShelfIcon } from '../../common-elements';
|
||||
import { Markdown } from '../Markdown/Markdown';
|
||||
|
||||
|
@ -16,7 +16,6 @@ export interface ResponseTitleProps {
|
|||
|
||||
function ResponseTitleComponent({
|
||||
title,
|
||||
type,
|
||||
empty,
|
||||
code,
|
||||
opened,
|
||||
|
@ -30,16 +29,18 @@ function ResponseTitleComponent({
|
|||
aria-expanded={opened}
|
||||
disabled={empty}
|
||||
>
|
||||
<ResponseTitleWrap>
|
||||
<Code>{code} </Code>
|
||||
<Markdown compact={true} inline={true} source={title} />
|
||||
</ResponseTitleWrap>
|
||||
{!empty && (
|
||||
<ShelfIcon
|
||||
size={'1.5em'}
|
||||
color={type}
|
||||
size={'1.3em'}
|
||||
color={'rgb(102, 102, 102)'}
|
||||
direction={opened ? 'down' : 'right'}
|
||||
float={'left'}
|
||||
/>
|
||||
)}
|
||||
<Code>{code} </Code>
|
||||
<Markdown compact={true} inline={true} source={title} />
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -3,26 +3,24 @@ import styled from '../../styled-components';
|
|||
import { ResponseTitle } from './ResponseTitle';
|
||||
|
||||
export const StyledResponseTitle = styled(ResponseTitle)`
|
||||
display: block;
|
||||
border: 0;
|
||||
display: flex;
|
||||
font-size: 14px;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
white-space: normal;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
padding: 10px;
|
||||
border-radius: 2px;
|
||||
margin-bottom: 4px;
|
||||
padding: 10px 20px;
|
||||
border-radius: 4px;
|
||||
background: none;
|
||||
border: none;
|
||||
line-height: 1.5em;
|
||||
cursor: pointer;
|
||||
|
||||
color: ${props => props.theme.colors.responses[props.type].color};
|
||||
background-color: ${props => props.theme.colors.responses[props.type].backgroundColor};
|
||||
&:focus {
|
||||
outline: auto ${props => props.theme.colors.responses[props.type].color};
|
||||
}
|
||||
${props =>
|
||||
(props.empty &&
|
||||
`
|
||||
cursor: default;
|
||||
&::before {
|
||||
&::after {
|
||||
content: "—";
|
||||
font-weight: bold;
|
||||
width: 1.5em;
|
||||
|
@ -38,7 +36,10 @@ cursor: default;
|
|||
`;
|
||||
|
||||
export const ResponseDetailsWrap = styled.div`
|
||||
padding: 10px;
|
||||
padding: 20px;
|
||||
background-color: rgb(255, 255, 255);
|
||||
border-radius: 0 0 4px 4px;
|
||||
overflow-x: auto;
|
||||
`;
|
||||
|
||||
export const HeadersCaption = styled(UnderlinedHeader).attrs({
|
||||
|
@ -52,3 +53,15 @@ export const HeadersCaption = styled(UnderlinedHeader).attrs({
|
|||
export const Code = styled.strong`
|
||||
vertical-align: top;
|
||||
`;
|
||||
export const ResponseTitleWrap = styled.div`
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
align-items: baseline;
|
||||
`;
|
||||
|
||||
export const ResponseWrap = styled.div<{ $type: string }>`
|
||||
border: 1px solid ${props => props.theme.colors.responses[props.$type].color};
|
||||
background-color: ${props => props.theme.colors.responses[props.$type].backgroundColor};
|
||||
border-radius: 4px;
|
||||
margin-bottom: 10px;
|
||||
`;
|
||||
|
|
|
@ -10,6 +10,7 @@ import { ObjectSchema } from './ObjectSchema';
|
|||
|
||||
const PaddedSchema = styled.div`
|
||||
padding-left: ${({ theme }) => theme.spacing.unit * 2}px;
|
||||
padding-top: ${({ theme }) => theme.spacing.unit * 2}px;
|
||||
`;
|
||||
|
||||
export class ArraySchema extends React.PureComponent<SchemaProps> {
|
||||
|
|
|
@ -58,7 +58,7 @@ export function SecurityRequirements(props: SecurityRequirementsProps) {
|
|||
operationSecuritySchemes.map((scheme, idx) => (
|
||||
<SecurityDetailsStyle key={idx}>
|
||||
<h5>
|
||||
<LockIcon /> {AUTH_TYPES[scheme.type] || scheme.type}: {scheme.id}
|
||||
<LockIcon /> {AUTH_TYPES[scheme.type] || scheme.type}: {scheme.displayName}
|
||||
</h5>
|
||||
<Markdown source={scheme.description || ''} />
|
||||
<SecurityDetails
|
||||
|
|
|
@ -102,6 +102,7 @@ export const Wrap = styled.div<{ $expanded?: boolean }>`
|
|||
width: 100%;
|
||||
display: flex;
|
||||
margin: 1em 0;
|
||||
padding-bottom: 0.8em;
|
||||
flex-direction: ${p => (p.$expanded ? 'column' : 'row')};
|
||||
${media.lessThan('small')`
|
||||
flex-direction: column;
|
||||
|
|
|
@ -8,7 +8,6 @@ import { MenuItems } from './MenuItems';
|
|||
|
||||
import { PerfectScrollbarWrap } from '../../common-elements/perfect-scrollbar';
|
||||
import { RedocAttribution } from './styled.elements';
|
||||
import RedoclyLogo from './Logo';
|
||||
|
||||
@observer
|
||||
export class SideMenu extends React.Component<{ menu: MenuStore; className?: string }> {
|
||||
|
@ -29,7 +28,6 @@ export class SideMenu extends React.Component<{ menu: MenuStore; className?: str
|
|||
<MenuItems items={store.items} onActivate={this.activate} root={true} />
|
||||
<RedocAttribution>
|
||||
<a target="_blank" rel="noopener noreferrer" href="https://redocly.com/redoc/">
|
||||
<RedoclyLogo />
|
||||
API docs by Redocly
|
||||
</a>
|
||||
</RedocAttribution>
|
||||
|
|
|
@ -183,7 +183,7 @@ export const RedocAttribution = styled.div`
|
|||
position: fixed;
|
||||
width: ${theme.sidebar.width};
|
||||
bottom: 0;
|
||||
background: ${theme.sidebar.backgroundColor};
|
||||
opacity: 0.5;
|
||||
|
||||
a,
|
||||
a:visited,
|
||||
|
|
|
@ -21,9 +21,7 @@ export class MenuBuilder {
|
|||
|
||||
const items: ContentItemModel[] = [];
|
||||
const tags = [...(spec.tags || [])];
|
||||
const hasAutogenerated = tags.find(
|
||||
tag => tag?.name === schemaDefinitionsTagName,
|
||||
);
|
||||
const hasAutogenerated = tags.find(tag => tag?.name === schemaDefinitionsTagName);
|
||||
|
||||
if (!hasAutogenerated && schemaDefinitionsTagName) {
|
||||
tags.push({ name: schemaDefinitionsTagName });
|
||||
|
|
Loading…
Reference in New Issue
Block a user