diff --git a/src/common-elements/fields-layout.ts b/src/common-elements/fields-layout.ts index 9e7fce0b..8ca50deb 100644 --- a/src/common-elements/fields-layout.ts +++ b/src/common-elements/fields-layout.ts @@ -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; } `} diff --git a/src/common-elements/fields.ts b/src/common-elements/fields.ts index f95781f4..de5d6588 100644 --- a/src/common-elements/fields.ts +++ b/src/common-elements/fields.ts @@ -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; `; diff --git a/src/common-elements/headers.ts b/src/common-elements/headers.ts index e5be1649..3bb7161d 100644 --- a/src/common-elements/headers.ts +++ b/src/common-elements/headers.ts @@ -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')}; `; diff --git a/src/common-elements/panels.ts b/src/common-elements/panels.ts index cacdb685..80dc1c2b 100644 --- a/src/common-elements/panels.ts +++ b/src/common-elements/panels.ts @@ -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)` diff --git a/src/common-elements/samples.tsx b/src/common-elements/samples.tsx index ce4a9632..0d3858ae 100644 --- a/src/common-elements/samples.tsx +++ b/src/common-elements/samples.tsx @@ -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')}; `; diff --git a/src/common-elements/tabs.ts b/src/common-elements/tabs.ts index fe41e34f..e33907da 100644 --- a/src/common-elements/tabs.ts +++ b/src/common-elements/tabs.ts @@ -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; } } `; diff --git a/src/components/Endpoint/styled.elements.ts b/src/components/Endpoint/styled.elements.ts index 01fbd4ae..2acdb814 100644 --- a/src/components/Endpoint/styled.elements.ts +++ b/src/components/Endpoint/styled.elements.ts @@ -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 }>` diff --git a/src/components/Fields/Field.tsx b/src/components/Fields/Field.tsx index 8ac4ef7c..62a67a78 100644 --- a/src/components/Fields/Field.tsx +++ b/src/components/Fields/Field.tsx @@ -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 { kind={kind} title={name} > - ); } diff --git a/src/components/Responses/styled.elements.ts b/src/components/Responses/styled.elements.ts index 65a3c9cc..b1cd0533 100644 --- a/src/components/Responses/styled.elements.ts +++ b/src/components/Responses/styled.elements.ts @@ -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; +`; diff --git a/src/components/Schema/ArraySchema.tsx b/src/components/Schema/ArraySchema.tsx index 13a82fef..4297bc8c 100644 --- a/src/components/Schema/ArraySchema.tsx +++ b/src/components/Schema/ArraySchema.tsx @@ -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 { diff --git a/src/components/SecurityRequirement/SecurityRequirement.tsx b/src/components/SecurityRequirement/SecurityRequirement.tsx index d578284e..f4e993cf 100644 --- a/src/components/SecurityRequirement/SecurityRequirement.tsx +++ b/src/components/SecurityRequirement/SecurityRequirement.tsx @@ -58,7 +58,7 @@ export function SecurityRequirements(props: SecurityRequirementsProps) { operationSecuritySchemes.map((scheme, idx) => (
- {AUTH_TYPES[scheme.type] || scheme.type}: {scheme.id} + {AUTH_TYPES[scheme.type] || scheme.type}: {scheme.displayName}
` width: 100%; display: flex; margin: 1em 0; + padding-bottom: 0.8em; flex-direction: ${p => (p.$expanded ? 'column' : 'row')}; ${media.lessThan('small')` flex-direction: column; diff --git a/src/components/SideMenu/SideMenu.tsx b/src/components/SideMenu/SideMenu.tsx index cb206ba0..f13f1348 100644 --- a/src/components/SideMenu/SideMenu.tsx +++ b/src/components/SideMenu/SideMenu.tsx @@ -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 - API docs by Redocly diff --git a/src/components/SideMenu/styled.elements.ts b/src/components/SideMenu/styled.elements.ts index 33de76ab..4b242877 100644 --- a/src/components/SideMenu/styled.elements.ts +++ b/src/components/SideMenu/styled.elements.ts @@ -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, diff --git a/src/services/MenuBuilder.ts b/src/services/MenuBuilder.ts index d4b24507..aaf81a24 100644 --- a/src/services/MenuBuilder.ts +++ b/src/services/MenuBuilder.ts @@ -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 });