docusaurus-theme-openapi-docs 1.6.1 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +1 -1
- package/lib/theme/ApiDemoPanel/Body/index.js +10 -4
- package/lib/theme/ApiDemoPanel/CodeTabs/_CodeTabs.scss +216 -0
- package/lib/theme/ApiDemoPanel/CodeTabs/index.js +132 -137
- package/lib/theme/ApiDemoPanel/Curl/index.js +3 -5
- package/lib/theme/ApiDemoPanel/Execute/index.js +5 -1
- package/lib/theme/ApiDemoPanel/Execute/makeRequest.js +1 -1
- package/lib/theme/ApiDemoPanel/FloatingButton/_FloatingButton.scss +25 -0
- package/lib/theme/ApiDemoPanel/FloatingButton/index.js +1 -2
- package/lib/theme/ApiDemoPanel/FormFileUpload/{styles.module.css → _FormFileUpload.scss} +32 -35
- package/lib/theme/ApiDemoPanel/FormFileUpload/index.js +3 -4
- package/lib/theme/ApiDemoPanel/FormItem/_FormItem.scss +12 -0
- package/lib/theme/ApiDemoPanel/FormItem/index.js +2 -3
- package/lib/theme/ApiDemoPanel/FormMultiSelect/_FormMultiSelect.scss +26 -0
- package/lib/theme/ApiDemoPanel/FormMultiSelect/index.js +1 -2
- package/{lib-next/theme/ApiDemoPanel/FormSelect/styles.module.css → lib/theme/ApiDemoPanel/FormSelect/_FormSelect.scss} +14 -22
- package/lib/theme/ApiDemoPanel/FormSelect/index.js +1 -2
- package/{lib-next/theme/ApiDemoPanel/FormTextInput/styles.module.css → lib/theme/ApiDemoPanel/FormTextInput/_FormTextInput.scss} +4 -10
- package/lib/theme/ApiDemoPanel/FormTextInput/index.js +1 -2
- package/lib/theme/ApiDemoPanel/LiveEditor/_LiveEditor.scss +15 -0
- package/lib/theme/ApiDemoPanel/LiveEditor/index.js +2 -3
- package/lib/theme/ApiDemoPanel/MethodEndpoint/_MethodEndpoint.scss +6 -0
- package/lib/theme/ApiDemoPanel/MethodEndpoint/index.js +28 -9
- package/{lib-next/theme/ApiDemoPanel/ParamOptions/styles.module.css → lib/theme/ApiDemoPanel/ParamOptions/_ParamOptions.scss} +29 -64
- package/lib/theme/ApiDemoPanel/ParamOptions/index.js +5 -6
- package/lib/theme/ApiDemoPanel/Request/_Request.scss +48 -0
- package/lib/theme/ApiDemoPanel/Request/index.js +7 -8
- package/lib/theme/ApiDemoPanel/Response/_Response.scss +27 -0
- package/lib/theme/ApiDemoPanel/Response/index.js +43 -8
- package/lib/theme/ApiDemoPanel/Response/slice.js +22 -2
- package/lib/theme/ApiDemoPanel/SecuritySchemes/index.js +3 -3
- package/{src/theme/ApiDemoPanel/Request/styles.module.css → lib/theme/ApiDemoPanel/Server/_Server.scss} +5 -7
- package/lib/theme/ApiDemoPanel/Server/index.js +1 -2
- package/lib/theme/ApiDemoPanel/index.js +0 -6
- package/{src/theme/ApiTabs/styles.module.css → lib/theme/ApiTabs/_ApiTabs.scss} +54 -41
- package/lib/theme/ApiTabs/index.js +118 -195
- package/lib/theme/DiscriminatorTabs/_DiscriminatorTabs.scss +94 -0
- package/lib/theme/DiscriminatorTabs/index.js +116 -194
- package/lib/theme/Markdown/Details/_Details.scss +36 -0
- package/lib/theme/MimeTabs/_MimeTabs.scss +64 -0
- package/lib/theme/MimeTabs/index.js +137 -202
- package/lib/theme/ParamsItem/_ParamsItem.scss +39 -0
- package/lib/theme/ParamsItem/index.js +3 -5
- package/lib/theme/ResponseSamples/_ResponseSamples.scss +3 -0
- package/lib/theme/ResponseSamples/index.js +2 -7
- package/lib/theme/SchemaItem/_SchemaItem.scss +53 -0
- package/lib/theme/SchemaItem/index.js +18 -18
- package/lib/theme/SchemaTabs/_SchemaTabs.scss +58 -0
- package/lib/theme/SchemaTabs/index.js +102 -186
- package/lib/theme/styles.scss +117 -0
- package/lib/theme-openapi.d.ts +1 -1
- package/lib-next/index.js +1 -1
- package/lib-next/theme/ApiDemoPanel/Body/index.js +6 -2
- package/lib-next/theme/ApiDemoPanel/CodeTabs/_CodeTabs.scss +216 -0
- package/lib-next/theme/ApiDemoPanel/CodeTabs/index.js +100 -145
- package/lib-next/theme/ApiDemoPanel/Curl/index.js +6 -5
- package/lib-next/theme/ApiDemoPanel/Execute/index.js +13 -2
- package/lib-next/theme/ApiDemoPanel/Execute/makeRequest.js +1 -1
- package/lib-next/theme/ApiDemoPanel/FloatingButton/_FloatingButton.scss +25 -0
- package/lib-next/theme/ApiDemoPanel/FloatingButton/index.js +1 -2
- package/{src/theme/ApiDemoPanel/FormFileUpload/styles.module.css → lib-next/theme/ApiDemoPanel/FormFileUpload/_FormFileUpload.scss} +32 -35
- package/lib-next/theme/ApiDemoPanel/FormFileUpload/index.js +5 -4
- package/lib-next/theme/ApiDemoPanel/FormItem/_FormItem.scss +12 -0
- package/lib-next/theme/ApiDemoPanel/FormItem/index.js +2 -3
- package/lib-next/theme/ApiDemoPanel/FormMultiSelect/_FormMultiSelect.scss +26 -0
- package/lib-next/theme/ApiDemoPanel/FormMultiSelect/index.js +1 -2
- package/{src/theme/ApiDemoPanel/FormSelect/styles.module.css → lib-next/theme/ApiDemoPanel/FormSelect/_FormSelect.scss} +14 -22
- package/lib-next/theme/ApiDemoPanel/FormSelect/index.js +5 -2
- package/{src/theme/ApiDemoPanel/FormTextInput/styles.module.css → lib-next/theme/ApiDemoPanel/FormTextInput/_FormTextInput.scss} +4 -10
- package/lib-next/theme/ApiDemoPanel/FormTextInput/index.js +1 -2
- package/lib-next/theme/ApiDemoPanel/LiveEditor/_LiveEditor.scss +15 -0
- package/lib-next/theme/ApiDemoPanel/LiveEditor/index.js +2 -3
- package/lib-next/theme/ApiDemoPanel/MethodEndpoint/_MethodEndpoint.scss +6 -0
- package/lib-next/theme/ApiDemoPanel/MethodEndpoint/index.js +32 -14
- package/{src/theme/ApiDemoPanel/ParamOptions/styles.module.css → lib-next/theme/ApiDemoPanel/ParamOptions/_ParamOptions.scss} +29 -64
- package/lib-next/theme/ApiDemoPanel/ParamOptions/index.js +13 -6
- package/lib-next/theme/ApiDemoPanel/Request/_Request.scss +48 -0
- package/lib-next/theme/ApiDemoPanel/Request/index.js +7 -8
- package/lib-next/theme/ApiDemoPanel/Response/_Response.scss +27 -0
- package/lib-next/theme/ApiDemoPanel/Response/index.js +68 -9
- package/lib-next/theme/ApiDemoPanel/Response/slice.js +20 -1
- package/lib-next/theme/ApiDemoPanel/SecuritySchemes/index.js +3 -3
- package/{lib/theme/ApiDemoPanel/Request/styles.module.css → lib-next/theme/ApiDemoPanel/Server/_Server.scss} +5 -7
- package/lib-next/theme/ApiDemoPanel/Server/index.js +1 -2
- package/lib-next/theme/ApiDemoPanel/index.js +0 -3
- package/lib-next/theme/ApiTabs/{styles.module.css → _ApiTabs.scss} +54 -41
- package/lib-next/theme/ApiTabs/index.js +118 -195
- package/lib-next/theme/DiscriminatorTabs/_DiscriminatorTabs.scss +94 -0
- package/lib-next/theme/DiscriminatorTabs/index.js +116 -194
- package/lib-next/theme/Markdown/Details/_Details.scss +36 -0
- package/lib-next/theme/MimeTabs/_MimeTabs.scss +64 -0
- package/lib-next/theme/MimeTabs/index.js +137 -202
- package/lib-next/theme/ParamsItem/_ParamsItem.scss +39 -0
- package/lib-next/theme/ParamsItem/index.js +3 -5
- package/lib-next/theme/ResponseSamples/_ResponseSamples.scss +3 -0
- package/lib-next/theme/ResponseSamples/index.js +2 -7
- package/lib-next/theme/SchemaItem/_SchemaItem.scss +53 -0
- package/lib-next/theme/SchemaItem/index.js +18 -18
- package/lib-next/theme/SchemaTabs/_SchemaTabs.scss +58 -0
- package/lib-next/theme/SchemaTabs/index.js +102 -186
- package/lib-next/theme/styles.scss +117 -0
- package/lib-next/theme-openapi.d.ts +1 -1
- package/package.json +8 -6
- package/src/index.ts +1 -1
- package/src/theme/ApiDemoPanel/Body/index.tsx +6 -2
- package/src/theme/ApiDemoPanel/CodeTabs/_CodeTabs.scss +216 -0
- package/src/theme/ApiDemoPanel/CodeTabs/index.js +156 -0
- package/src/theme/ApiDemoPanel/Curl/index.tsx +8 -10
- package/src/theme/ApiDemoPanel/Execute/index.tsx +13 -2
- package/src/theme/ApiDemoPanel/Execute/makeRequest.ts +1 -1
- package/src/theme/ApiDemoPanel/FloatingButton/_FloatingButton.scss +25 -0
- package/src/theme/ApiDemoPanel/FloatingButton/index.tsx +1 -3
- package/{lib-next/theme/ApiDemoPanel/FormFileUpload/styles.module.css → src/theme/ApiDemoPanel/FormFileUpload/_FormFileUpload.scss} +32 -35
- package/src/theme/ApiDemoPanel/FormFileUpload/index.tsx +5 -5
- package/src/theme/ApiDemoPanel/FormItem/_FormItem.scss +12 -0
- package/src/theme/ApiDemoPanel/FormItem/index.tsx +2 -4
- package/src/theme/ApiDemoPanel/FormMultiSelect/_FormMultiSelect.scss +26 -0
- package/src/theme/ApiDemoPanel/FormMultiSelect/index.tsx +1 -3
- package/{lib/theme/ApiDemoPanel/FormSelect/styles.module.css → src/theme/ApiDemoPanel/FormSelect/_FormSelect.scss} +14 -22
- package/src/theme/ApiDemoPanel/FormSelect/index.tsx +5 -3
- package/{lib/theme/ApiDemoPanel/FormTextInput/styles.module.css → src/theme/ApiDemoPanel/FormTextInput/_FormTextInput.scss} +4 -10
- package/src/theme/ApiDemoPanel/FormTextInput/index.tsx +1 -3
- package/src/theme/ApiDemoPanel/LiveEditor/_LiveEditor.scss +15 -0
- package/src/theme/ApiDemoPanel/LiveEditor/index.tsx +2 -4
- package/src/theme/ApiDemoPanel/MethodEndpoint/_MethodEndpoint.scss +6 -0
- package/src/theme/ApiDemoPanel/MethodEndpoint/index.tsx +37 -14
- package/{lib/theme/ApiDemoPanel/ParamOptions/styles.module.css → src/theme/ApiDemoPanel/ParamOptions/_ParamOptions.scss} +29 -64
- package/src/theme/ApiDemoPanel/ParamOptions/index.tsx +13 -6
- package/src/theme/ApiDemoPanel/Request/_Request.scss +48 -0
- package/src/theme/ApiDemoPanel/Request/index.tsx +7 -9
- package/src/theme/ApiDemoPanel/Response/_Response.scss +27 -0
- package/src/theme/ApiDemoPanel/Response/index.tsx +68 -9
- package/src/theme/ApiDemoPanel/Response/slice.ts +22 -1
- package/src/theme/ApiDemoPanel/SecuritySchemes/index.tsx +3 -3
- package/{lib-next/theme/ApiDemoPanel/Request/styles.module.css → src/theme/ApiDemoPanel/Server/_Server.scss} +5 -7
- package/src/theme/ApiDemoPanel/Server/index.tsx +1 -2
- package/src/theme/ApiDemoPanel/index.tsx +0 -3
- package/{lib/theme/ApiTabs/styles.module.css → src/theme/ApiTabs/_ApiTabs.scss} +54 -41
- package/src/theme/ApiTabs/index.js +118 -195
- package/src/theme/DiscriminatorTabs/_DiscriminatorTabs.scss +94 -0
- package/src/theme/DiscriminatorTabs/index.js +116 -194
- package/src/theme/Markdown/Details/_Details.scss +36 -0
- package/src/theme/MimeTabs/_MimeTabs.scss +64 -0
- package/src/theme/MimeTabs/index.js +137 -202
- package/src/theme/ParamsItem/_ParamsItem.scss +39 -0
- package/src/theme/ParamsItem/index.js +3 -5
- package/src/theme/ResponseSamples/_ResponseSamples.scss +3 -0
- package/src/theme/ResponseSamples/index.js +2 -7
- package/src/theme/SchemaItem/_SchemaItem.scss +53 -0
- package/src/theme/SchemaItem/index.js +18 -18
- package/src/theme/SchemaTabs/_SchemaTabs.scss +58 -0
- package/src/theme/SchemaTabs/index.js +102 -186
- package/src/theme/styles.scss +117 -0
- package/src/theme-openapi.d.ts +1 -1
- package/lib/theme/ApiDemoPanel/CodeTabs/styles.module.css +0 -17
- package/lib/theme/ApiDemoPanel/Curl/styles.module.css +0 -89
- package/lib/theme/ApiDemoPanel/FloatingButton/styles.module.css +0 -26
- package/lib/theme/ApiDemoPanel/FormItem/styles.module.css +0 -12
- package/lib/theme/ApiDemoPanel/FormMultiSelect/styles.module.css +0 -38
- package/lib/theme/ApiDemoPanel/LiveEditor/styles.module.css +0 -35
- package/lib/theme/ApiDemoPanel/Server/styles.module.css +0 -56
- package/lib/theme/DiscriminatorTabs/styles.module.css +0 -115
- package/lib/theme/MimeTabs/styles.module.css +0 -126
- package/lib/theme/ParamsItem/styles.module.css +0 -24
- package/lib/theme/ResponseSamples/styles.module.css +0 -7
- package/lib/theme/SchemaItem/styles.module.css +0 -38
- package/lib/theme/SchemaTabs/styles.module.css +0 -110
- package/lib/theme/styles.css +0 -485
- package/lib-next/theme/ApiDemoPanel/CodeTabs/styles.module.css +0 -17
- package/lib-next/theme/ApiDemoPanel/Curl/styles.module.css +0 -89
- package/lib-next/theme/ApiDemoPanel/FloatingButton/styles.module.css +0 -26
- package/lib-next/theme/ApiDemoPanel/FormItem/styles.module.css +0 -12
- package/lib-next/theme/ApiDemoPanel/FormMultiSelect/styles.module.css +0 -38
- package/lib-next/theme/ApiDemoPanel/LiveEditor/styles.module.css +0 -35
- package/lib-next/theme/ApiDemoPanel/Server/styles.module.css +0 -56
- package/lib-next/theme/DiscriminatorTabs/styles.module.css +0 -115
- package/lib-next/theme/MimeTabs/styles.module.css +0 -126
- package/lib-next/theme/ParamsItem/styles.module.css +0 -24
- package/lib-next/theme/ResponseSamples/styles.module.css +0 -7
- package/lib-next/theme/SchemaItem/styles.module.css +0 -38
- package/lib-next/theme/SchemaTabs/styles.module.css +0 -110
- package/lib-next/theme/styles.css +0 -485
- package/src/theme/ApiDemoPanel/CodeTabs/index.tsx +0 -239
- package/src/theme/ApiDemoPanel/CodeTabs/styles.module.css +0 -17
- package/src/theme/ApiDemoPanel/Curl/styles.module.css +0 -89
- package/src/theme/ApiDemoPanel/FloatingButton/styles.module.css +0 -26
- package/src/theme/ApiDemoPanel/FormItem/styles.module.css +0 -12
- package/src/theme/ApiDemoPanel/FormMultiSelect/styles.module.css +0 -38
- package/src/theme/ApiDemoPanel/LiveEditor/styles.module.css +0 -35
- package/src/theme/ApiDemoPanel/Server/styles.module.css +0 -56
- package/src/theme/DiscriminatorTabs/styles.module.css +0 -115
- package/src/theme/MimeTabs/styles.module.css +0 -126
- package/src/theme/ParamsItem/styles.module.css +0 -24
- package/src/theme/ResponseSamples/styles.module.css +0 -7
- package/src/theme/SchemaItem/styles.module.css +0 -38
- package/src/theme/SchemaTabs/styles.module.css +0 -110
- package/src/theme/styles.css +0 -485
|
@@ -5,133 +5,35 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
* ========================================================================== */
|
|
7
7
|
|
|
8
|
-
import React, {
|
|
9
|
-
Children,
|
|
10
|
-
cloneElement,
|
|
11
|
-
isValidElement,
|
|
12
|
-
useEffect,
|
|
13
|
-
useRef,
|
|
14
|
-
useState,
|
|
15
|
-
} from "react";
|
|
8
|
+
import React, { cloneElement, useEffect, useState, useRef } from "react";
|
|
16
9
|
|
|
17
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
useScrollPositionBlocker,
|
|
12
|
+
useTabs,
|
|
13
|
+
} from "@docusaurus/theme-common/internal";
|
|
18
14
|
import useIsBrowser from "@docusaurus/useIsBrowser";
|
|
19
15
|
import { setAccept } from "@theme/ApiDemoPanel/Accept/slice";
|
|
20
16
|
import { setContentType } from "@theme/ApiDemoPanel/ContentType/slice";
|
|
21
17
|
import { useTypedDispatch, useTypedSelector } from "@theme/ApiItem/hooks";
|
|
22
18
|
import clsx from "clsx";
|
|
23
19
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return typeof comp.props.value !== "undefined";
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function MimeTabsComponent(props) {
|
|
36
|
-
const {
|
|
37
|
-
lazy,
|
|
38
|
-
block,
|
|
39
|
-
defaultValue: defaultValueProp,
|
|
40
|
-
values: valuesProp,
|
|
41
|
-
groupId,
|
|
42
|
-
className,
|
|
43
|
-
schemaType,
|
|
44
|
-
} = props;
|
|
45
|
-
const children = Children.map(props.children, (child) => {
|
|
46
|
-
if (isValidElement(child) && isTabItem(child)) {
|
|
47
|
-
return child;
|
|
48
|
-
} // child.type.name will give non-sensical values in prod because of
|
|
49
|
-
// minification, but we assume it won't throw in prod.
|
|
50
|
-
|
|
51
|
-
throw new Error(
|
|
52
|
-
`Docusaurus error: Bad <Tabs> child <${
|
|
53
|
-
// @ts-expect-error: guarding against unexpected cases
|
|
54
|
-
typeof child.type === "string" ? child.type : child.type.name
|
|
55
|
-
}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`
|
|
56
|
-
);
|
|
57
|
-
});
|
|
58
|
-
const values =
|
|
59
|
-
valuesProp ?? // We only pick keys that we recognize. MDX would inject some keys by default
|
|
60
|
-
children.map(({ props: { value, label, attributes } }) => ({
|
|
61
|
-
value,
|
|
62
|
-
label,
|
|
63
|
-
attributes,
|
|
64
|
-
}));
|
|
65
|
-
const dup = duplicates(values, (a, b) => a.value === b.value);
|
|
66
|
-
|
|
67
|
-
if (dup.length > 0) {
|
|
68
|
-
throw new Error(
|
|
69
|
-
`Docusaurus error: Duplicate values "${dup
|
|
70
|
-
.map((a) => a.value)
|
|
71
|
-
.join(", ")}" found in <Tabs>. Every value needs to be unique.`
|
|
72
|
-
);
|
|
73
|
-
} // When defaultValueProp is null, don't show a default tab
|
|
74
|
-
|
|
75
|
-
const defaultValue =
|
|
76
|
-
defaultValueProp === null
|
|
77
|
-
? defaultValueProp
|
|
78
|
-
: defaultValueProp ??
|
|
79
|
-
children.find((child) => child.props.default)?.props.value ??
|
|
80
|
-
children[0]?.props.value;
|
|
81
|
-
|
|
82
|
-
if (defaultValue !== null && !values.some((a) => a.value === defaultValue)) {
|
|
83
|
-
throw new Error(
|
|
84
|
-
`Docusaurus error: The <Tabs> has a defaultValue "${defaultValue}" but none of its children has the corresponding value. Available values are: ${values
|
|
85
|
-
.map((a) => a.value)
|
|
86
|
-
.join(
|
|
87
|
-
", "
|
|
88
|
-
)}. If you intend to show no default tab, use defaultValue={null} instead.`
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const { tabGroupChoices, setTabGroupChoices } = useTabGroupChoice();
|
|
93
|
-
const [selectedValue, setSelectedValue] = useState(defaultValue);
|
|
20
|
+
function TabList({
|
|
21
|
+
className,
|
|
22
|
+
block,
|
|
23
|
+
selectedValue: selectedValueProp,
|
|
24
|
+
selectValue,
|
|
25
|
+
tabValues,
|
|
26
|
+
schemaType,
|
|
27
|
+
}) {
|
|
94
28
|
const tabRefs = [];
|
|
95
29
|
const { blockElementScrollPositionUntilNextRender } =
|
|
96
30
|
useScrollPositionBlocker();
|
|
97
31
|
|
|
98
|
-
|
|
99
|
-
const relevantTabGroupChoice = tabGroupChoices[groupId];
|
|
100
|
-
|
|
101
|
-
if (
|
|
102
|
-
relevantTabGroupChoice != null &&
|
|
103
|
-
relevantTabGroupChoice !== selectedValue &&
|
|
104
|
-
values.some((value) => value.value === relevantTabGroupChoice)
|
|
105
|
-
) {
|
|
106
|
-
setSelectedValue(relevantTabGroupChoice);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
32
|
+
// custom
|
|
110
33
|
const dispatch = useTypedDispatch();
|
|
111
34
|
const isRequestSchema = schemaType?.toLowerCase() === "request";
|
|
112
35
|
|
|
113
|
-
const
|
|
114
|
-
event.preventDefault();
|
|
115
|
-
const newTab = event.currentTarget;
|
|
116
|
-
const newTabIndex = tabRefs.indexOf(newTab);
|
|
117
|
-
const newTabValue = values[newTabIndex].value;
|
|
118
|
-
|
|
119
|
-
if (newTabValue !== selectedValue) {
|
|
120
|
-
if (isRequestSchema) {
|
|
121
|
-
dispatch(setContentType(newTabValue));
|
|
122
|
-
} else {
|
|
123
|
-
dispatch(setAccept(newTabValue));
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
blockElementScrollPositionUntilNextRender(newTab);
|
|
127
|
-
setSelectedValue(newTabValue);
|
|
128
|
-
|
|
129
|
-
if (groupId != null) {
|
|
130
|
-
setTabGroupChoices(groupId, newTabValue);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
|
|
36
|
+
const [selectedValue, setSelectedValue] = useState(selectedValueProp);
|
|
135
37
|
const contentTypeVal = useTypedSelector((state) => state.contentType.value);
|
|
136
38
|
const acceptTypeVal = useTypedSelector((state) => state.accept.value);
|
|
137
39
|
|
|
@@ -146,26 +48,43 @@ function MimeTabsComponent(props) {
|
|
|
146
48
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
147
49
|
}, [contentTypeVal, acceptTypeVal]);
|
|
148
50
|
|
|
51
|
+
const handleTabChange = (event) => {
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
const newTab = event.currentTarget;
|
|
54
|
+
const newTabIndex = tabRefs.indexOf(newTab);
|
|
55
|
+
const newTabValue = tabValues[newTabIndex].value;
|
|
56
|
+
// custom
|
|
57
|
+
if (newTabValue !== selectedValue) {
|
|
58
|
+
if (isRequestSchema) {
|
|
59
|
+
dispatch(setContentType(newTabValue));
|
|
60
|
+
} else {
|
|
61
|
+
dispatch(setAccept(newTabValue));
|
|
62
|
+
}
|
|
63
|
+
blockElementScrollPositionUntilNextRender(newTab);
|
|
64
|
+
selectValue(newTabValue);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
149
68
|
const handleKeydown = (event) => {
|
|
150
69
|
let focusElement = null;
|
|
151
|
-
|
|
152
70
|
switch (event.key) {
|
|
71
|
+
case "Enter": {
|
|
72
|
+
handleTabChange(event);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
153
75
|
case "ArrowRight": {
|
|
154
76
|
const nextTab = tabRefs.indexOf(event.currentTarget) + 1;
|
|
155
|
-
focusElement = tabRefs[nextTab]
|
|
77
|
+
focusElement = tabRefs[nextTab] ?? tabRefs[0];
|
|
156
78
|
break;
|
|
157
79
|
}
|
|
158
|
-
|
|
159
80
|
case "ArrowLeft": {
|
|
160
81
|
const prevTab = tabRefs.indexOf(event.currentTarget) - 1;
|
|
161
|
-
focusElement = tabRefs[prevTab]
|
|
82
|
+
focusElement = tabRefs[prevTab] ?? tabRefs[tabRefs.length - 1];
|
|
162
83
|
break;
|
|
163
84
|
}
|
|
164
|
-
|
|
165
85
|
default:
|
|
166
86
|
break;
|
|
167
87
|
}
|
|
168
|
-
|
|
169
88
|
focusElement?.focus();
|
|
170
89
|
};
|
|
171
90
|
|
|
@@ -173,12 +92,21 @@ function MimeTabsComponent(props) {
|
|
|
173
92
|
const [showTabArrows, setShowTabArrows] = useState(false);
|
|
174
93
|
|
|
175
94
|
useEffect(() => {
|
|
176
|
-
const
|
|
177
|
-
|
|
95
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
96
|
+
for (let entry of entries) {
|
|
97
|
+
if (entry.target.offsetWidth < entry.target.scrollWidth) {
|
|
98
|
+
setShowTabArrows(true);
|
|
99
|
+
} else {
|
|
100
|
+
setShowTabArrows(false);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
178
104
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
105
|
+
resizeObserver.observe(tabItemListContainerRef.current);
|
|
106
|
+
|
|
107
|
+
return () => {
|
|
108
|
+
resizeObserver.disconnect();
|
|
109
|
+
};
|
|
182
110
|
}, []);
|
|
183
111
|
|
|
184
112
|
const handleRightClick = () => {
|
|
@@ -191,93 +119,100 @@ function MimeTabsComponent(props) {
|
|
|
191
119
|
|
|
192
120
|
return (
|
|
193
121
|
<div className="tabs__container">
|
|
194
|
-
<div className=
|
|
195
|
-
{
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
"tabs",
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
},
|
|
213
|
-
className
|
|
214
|
-
)}
|
|
215
|
-
>
|
|
216
|
-
{values.map(({ value, label, attributes }) => {
|
|
217
|
-
return (
|
|
218
|
-
<li
|
|
219
|
-
role="tab"
|
|
220
|
-
tabIndex={selectedValue === value ? 0 : -1}
|
|
221
|
-
aria-selected={selectedValue === value}
|
|
222
|
-
key={value}
|
|
223
|
-
ref={(tabControl) => tabRefs.push(tabControl)}
|
|
224
|
-
onKeyDown={handleKeydown}
|
|
225
|
-
onFocus={handleTabChange}
|
|
226
|
-
onClick={(e) => handleTabChange(e)}
|
|
227
|
-
{...attributes}
|
|
228
|
-
className={clsx(
|
|
229
|
-
"tabs__item",
|
|
230
|
-
styles.tabItem,
|
|
231
|
-
attributes?.className,
|
|
232
|
-
{
|
|
233
|
-
[styles.mimeTabActive]: selectedValue === value,
|
|
234
|
-
}
|
|
235
|
-
)}
|
|
236
|
-
>
|
|
237
|
-
{/* <div
|
|
238
|
-
className={clsx(styles.mimeTabDot, mimeTabDotStyle)}
|
|
239
|
-
/> */}
|
|
240
|
-
{label ?? value}
|
|
241
|
-
</li>
|
|
242
|
-
);
|
|
243
|
-
})}
|
|
244
|
-
</ul>
|
|
245
|
-
{showTabArrows && (
|
|
246
|
-
<button
|
|
247
|
-
className={clsx(styles.tabArrow, styles.tabArrowRight)}
|
|
248
|
-
onClick={handleRightClick}
|
|
249
|
-
/>
|
|
122
|
+
<div className="openapi-tabs__mime-container">
|
|
123
|
+
{showTabArrows && (
|
|
124
|
+
<button
|
|
125
|
+
className={clsx("openapi-tabs__arrow", "left")}
|
|
126
|
+
onClick={handleLeftClick}
|
|
127
|
+
/>
|
|
128
|
+
)}
|
|
129
|
+
<ul
|
|
130
|
+
ref={tabItemListContainerRef}
|
|
131
|
+
role="tablist"
|
|
132
|
+
aria-orientation="horizontal"
|
|
133
|
+
className={clsx(
|
|
134
|
+
"openapi-tabs__mime-list-container",
|
|
135
|
+
"tabs",
|
|
136
|
+
{
|
|
137
|
+
"tabs--block": block,
|
|
138
|
+
},
|
|
139
|
+
className
|
|
250
140
|
)}
|
|
251
|
-
|
|
141
|
+
>
|
|
142
|
+
{tabValues.map(({ value, label, attributes }) => {
|
|
143
|
+
return (
|
|
144
|
+
<li
|
|
145
|
+
role="tab"
|
|
146
|
+
tabIndex={selectedValue === value ? 0 : -1}
|
|
147
|
+
aria-selected={selectedValue === value}
|
|
148
|
+
key={value}
|
|
149
|
+
ref={(tabControl) => tabRefs.push(tabControl)}
|
|
150
|
+
onKeyDown={handleKeydown}
|
|
151
|
+
onFocus={handleTabChange}
|
|
152
|
+
onClick={(e) => handleTabChange(e)}
|
|
153
|
+
{...attributes}
|
|
154
|
+
className={clsx(
|
|
155
|
+
"tabs__item",
|
|
156
|
+
"openapi-tabs__mime-item",
|
|
157
|
+
attributes?.className,
|
|
158
|
+
{
|
|
159
|
+
active: selectedValue === value,
|
|
160
|
+
}
|
|
161
|
+
)}
|
|
162
|
+
>
|
|
163
|
+
{label ?? value}
|
|
164
|
+
</li>
|
|
165
|
+
);
|
|
166
|
+
})}
|
|
167
|
+
</ul>
|
|
168
|
+
{showTabArrows && (
|
|
169
|
+
<button
|
|
170
|
+
className={clsx("openapi-tabs__arrow", "right")}
|
|
171
|
+
onClick={handleRightClick}
|
|
172
|
+
/>
|
|
173
|
+
)}
|
|
252
174
|
</div>
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
175
|
+
</div>
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
function TabContent({ lazy, children, selectedValue }) {
|
|
179
|
+
// eslint-disable-next-line no-param-reassign
|
|
180
|
+
children = Array.isArray(children) ? children : [children];
|
|
181
|
+
if (lazy) {
|
|
182
|
+
const selectedTabItem = children.find(
|
|
183
|
+
(tabItem) => tabItem.props.value === selectedValue
|
|
184
|
+
);
|
|
185
|
+
if (!selectedTabItem) {
|
|
186
|
+
// fail-safe or fail-fast? not sure what's best here
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
return cloneElement(selectedTabItem, { className: "margin-top--md" });
|
|
190
|
+
}
|
|
191
|
+
return (
|
|
192
|
+
<div className="margin-top--md">
|
|
193
|
+
{children.map((tabItem, i) =>
|
|
194
|
+
cloneElement(tabItem, {
|
|
195
|
+
key: i,
|
|
196
|
+
hidden: tabItem.props.value !== selectedValue,
|
|
197
|
+
})
|
|
272
198
|
)}
|
|
273
199
|
</div>
|
|
274
200
|
);
|
|
275
201
|
}
|
|
276
|
-
|
|
202
|
+
function TabsComponent(props) {
|
|
203
|
+
const tabs = useTabs(props);
|
|
204
|
+
return (
|
|
205
|
+
<div className="tabs-container">
|
|
206
|
+
<TabList {...props} {...tabs} />
|
|
207
|
+
<TabContent {...props} {...tabs} />
|
|
208
|
+
</div>
|
|
209
|
+
);
|
|
210
|
+
}
|
|
277
211
|
export default function MimeTabs(props) {
|
|
278
212
|
const isBrowser = useIsBrowser();
|
|
279
213
|
return (
|
|
280
|
-
<
|
|
214
|
+
<TabsComponent
|
|
215
|
+
// Remount tabs after hydration
|
|
281
216
|
// Temporary fix for https://github.com/facebook/docusaurus/issues/5653
|
|
282
217
|
key={String(isBrowser)}
|
|
283
218
|
{...props}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.openapi-params__list-item {
|
|
2
|
+
margin: 0 0 0 1rem !important;
|
|
3
|
+
position: relative;
|
|
4
|
+
padding-left: 1rem;
|
|
5
|
+
border-left: thin solid var(--ifm-color-gray-500) !important;
|
|
6
|
+
margin-top: unset !important;
|
|
7
|
+
|
|
8
|
+
// Horizonal line styling for param attributes
|
|
9
|
+
&::before {
|
|
10
|
+
position: absolute;
|
|
11
|
+
top: 10px;
|
|
12
|
+
left: 0;
|
|
13
|
+
width: 0.7rem;
|
|
14
|
+
/* width of horizontal line */
|
|
15
|
+
height: 0.5rem;
|
|
16
|
+
/* vertical position of line */
|
|
17
|
+
vertical-align: top;
|
|
18
|
+
border-bottom: thin solid var(--ifm-color-gray-500);
|
|
19
|
+
content: "";
|
|
20
|
+
display: inline-block;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.openapi-params__list-item:hover {
|
|
25
|
+
background-color: var(--ifm-menu-color-background-active);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.openapi-params__list-item:focus {
|
|
29
|
+
background-color: var(--ifm-menu-color-background-active);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.openapi-schema__type {
|
|
33
|
+
opacity: 0.6;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.openapi-schema__required {
|
|
37
|
+
font-size: var(--ifm-code-font-size);
|
|
38
|
+
color: var(--openapi-required);
|
|
39
|
+
}
|
|
@@ -25,8 +25,6 @@ import {
|
|
|
25
25
|
import ReactMarkdown from "react-markdown";
|
|
26
26
|
import rehypeRaw from "rehype-raw";
|
|
27
27
|
|
|
28
|
-
import styles from "./styles.module.css";
|
|
29
|
-
|
|
30
28
|
function ParamsItem({
|
|
31
29
|
param: { description, example, examples, name, required, schema },
|
|
32
30
|
}) {
|
|
@@ -35,11 +33,11 @@ function ParamsItem({
|
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
const renderSchemaName = guard(schema, (schema) => (
|
|
38
|
-
<span className=
|
|
36
|
+
<span className="openapi-schema__type"> {getSchemaName(schema)}</span>
|
|
39
37
|
));
|
|
40
38
|
|
|
41
39
|
const renderSchemaRequired = guard(required, () => (
|
|
42
|
-
<strong className=
|
|
40
|
+
<strong className="openapi-schema__required"> required</strong>
|
|
43
41
|
));
|
|
44
42
|
|
|
45
43
|
const renderSchema = guard(getQualifierMessage(schema), (message) => (
|
|
@@ -119,7 +117,7 @@ function ParamsItem({
|
|
|
119
117
|
});
|
|
120
118
|
|
|
121
119
|
return (
|
|
122
|
-
<li className=
|
|
120
|
+
<li className="openapi-params__list-item">
|
|
123
121
|
<strong>{name}</strong>
|
|
124
122
|
{renderSchemaName}
|
|
125
123
|
{renderSchemaRequired}
|
|
@@ -9,15 +9,10 @@ import React from "react";
|
|
|
9
9
|
|
|
10
10
|
import CodeBlock from "@theme/CodeBlock";
|
|
11
11
|
|
|
12
|
-
import styles from "./styles.module.css";
|
|
13
|
-
|
|
14
12
|
function ResponseSamples({ responseExample, language }) {
|
|
15
13
|
return (
|
|
16
|
-
<div className=
|
|
17
|
-
<CodeBlock
|
|
18
|
-
language={language ? language : "json"}
|
|
19
|
-
className={styles.responseSamplesCodeBlock}
|
|
20
|
-
>
|
|
14
|
+
<div className="openapi-code__response-samples-container">
|
|
15
|
+
<CodeBlock language={language ? language : "json"}>
|
|
21
16
|
{responseExample}
|
|
22
17
|
</CodeBlock>
|
|
23
18
|
</div>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
.openapi-schema__list-item {
|
|
2
|
+
list-style: none;
|
|
3
|
+
position: relative;
|
|
4
|
+
margin: 0 !important;
|
|
5
|
+
padding: 5px 0 5px 1rem;
|
|
6
|
+
border-left: thin solid var(--ifm-color-gray-500) !important;
|
|
7
|
+
|
|
8
|
+
// Horizontal line styling for schema properties
|
|
9
|
+
&::before {
|
|
10
|
+
position: absolute;
|
|
11
|
+
top: 10px;
|
|
12
|
+
left: 0;
|
|
13
|
+
width: 0.7rem;
|
|
14
|
+
/* width of horizontal line */
|
|
15
|
+
height: 0.5rem;
|
|
16
|
+
/* vertical position of line */
|
|
17
|
+
vertical-align: top;
|
|
18
|
+
border-bottom: thin solid var(--ifm-color-gray-500);
|
|
19
|
+
content: "";
|
|
20
|
+
display: inline-block;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.openapi-schema__list-item:hover {
|
|
25
|
+
background-color: var(--ifm-menu-color-background-active);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.openapi-schema__list-item:focus {
|
|
29
|
+
background-color: var(--ifm-menu-color-background-active);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.openapi-schema__name {
|
|
33
|
+
opacity: 0.6;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.openapi-schema__required {
|
|
37
|
+
font-size: var(--ifm-code-font-size);
|
|
38
|
+
color: var(--openapi-required);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.openapi-schema__deprecated {
|
|
42
|
+
font-size: var(--ifm-code-font-size);
|
|
43
|
+
color: var(--openapi-deprecated);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.openapi-schema__nullable {
|
|
47
|
+
font-size: var(--ifm-code-font-size);
|
|
48
|
+
color: var(--openapi-nullable);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.openapi-schema__strikethrough {
|
|
52
|
+
text-decoration: line-through;
|
|
53
|
+
}
|
|
@@ -11,15 +11,10 @@ import CodeBlock from "@theme/CodeBlock";
|
|
|
11
11
|
/* eslint-disable import/no-extraneous-dependencies*/
|
|
12
12
|
import { createDescription } from "docusaurus-theme-openapi-docs/lib/markdown/createDescription";
|
|
13
13
|
/* eslint-disable import/no-extraneous-dependencies*/
|
|
14
|
-
import {
|
|
15
|
-
guard,
|
|
16
|
-
toString,
|
|
17
|
-
} from "docusaurus-theme-openapi-docs/lib/markdown/utils";
|
|
14
|
+
import { guard } from "docusaurus-theme-openapi-docs/lib/markdown/utils";
|
|
18
15
|
import ReactMarkdown from "react-markdown";
|
|
19
16
|
import rehypeRaw from "rehype-raw";
|
|
20
17
|
|
|
21
|
-
import styles from "./styles.module.css";
|
|
22
|
-
|
|
23
18
|
function SchemaItem({
|
|
24
19
|
children: collapsibleSchemaContent,
|
|
25
20
|
collapsible,
|
|
@@ -42,15 +37,15 @@ function SchemaItem({
|
|
|
42
37
|
|
|
43
38
|
const renderRequired = guard(
|
|
44
39
|
Array.isArray(required) ? required.includes(name) : required,
|
|
45
|
-
() => <strong className=
|
|
40
|
+
() => <strong className="openapi-schema__required"> required</strong>
|
|
46
41
|
);
|
|
47
42
|
|
|
48
43
|
const renderDeprecated = guard(deprecated, () => (
|
|
49
|
-
<strong className=
|
|
44
|
+
<strong className="openapi-schema__deprecated"> deprecated</strong>
|
|
50
45
|
));
|
|
51
46
|
|
|
52
47
|
const renderNullable = guard(nullable, () => (
|
|
53
|
-
<strong className=
|
|
48
|
+
<strong className="openapi-schema__nullable"> nullable</strong>
|
|
54
49
|
));
|
|
55
50
|
|
|
56
51
|
const renderSchemaDescription = guard(schemaDescription, (description) => (
|
|
@@ -75,7 +70,7 @@ function SchemaItem({
|
|
|
75
70
|
));
|
|
76
71
|
|
|
77
72
|
const renderQualifierMessage = guard(qualifierMessage, (message) => (
|
|
78
|
-
<div
|
|
73
|
+
<div>
|
|
79
74
|
<ReactMarkdown
|
|
80
75
|
children={createDescription(message)}
|
|
81
76
|
rehypePlugins={[rehypeRaw]}
|
|
@@ -83,16 +78,21 @@ function SchemaItem({
|
|
|
83
78
|
</div>
|
|
84
79
|
));
|
|
85
80
|
|
|
86
|
-
const renderDefaultValue = guard(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
const renderDefaultValue = guard(
|
|
82
|
+
typeof defaultValue === "boolean" ? defaultValue.toString() : defaultValue,
|
|
83
|
+
(value) => (
|
|
84
|
+
<div className="">
|
|
85
|
+
<ReactMarkdown children={`**Default value:** \`${value}\``} />
|
|
86
|
+
</div>
|
|
87
|
+
)
|
|
88
|
+
);
|
|
91
89
|
|
|
92
90
|
const schemaContent = (
|
|
93
91
|
<div>
|
|
94
|
-
<strong className={deprecated &&
|
|
95
|
-
|
|
92
|
+
<strong className={deprecated && "openapi-schema__strikethrough"}>
|
|
93
|
+
{name}
|
|
94
|
+
</strong>
|
|
95
|
+
<span className="openapi-schema__name"> {schemaName}</span>
|
|
96
96
|
{renderNullable}
|
|
97
97
|
{!deprecated && renderRequired}
|
|
98
98
|
{renderDeprecated}
|
|
@@ -103,7 +103,7 @@ function SchemaItem({
|
|
|
103
103
|
);
|
|
104
104
|
|
|
105
105
|
return (
|
|
106
|
-
<li className=
|
|
106
|
+
<li className="openapi-schema__list-item">
|
|
107
107
|
{collapsible ? collapsibleSchemaContent : schemaContent}
|
|
108
108
|
</li>
|
|
109
109
|
);
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.openapi-tabs__schema-item {
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
height: 1.8rem;
|
|
13
|
+
margin-top: 0 !important;
|
|
14
|
+
margin-right: 0.5rem;
|
|
15
|
+
border: 1px solid var(--ifm-color-primary);
|
|
16
|
+
border-radius: var(--ifm-global-radius);
|
|
17
|
+
color: var(--ifm-color-primary);
|
|
18
|
+
font-size: 12px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.openapi-tabs__schema-item:not(.active) {
|
|
22
|
+
opacity: 0.65;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.openapi-tabs__schema-item:hover {
|
|
26
|
+
opacity: 1;
|
|
27
|
+
background-color: var(--ifm-color-emphasis-100);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.openapi-tabs__schema-item:last-child {
|
|
31
|
+
margin-right: 0 !important;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.openapi-tabs__schema-list-container {
|
|
35
|
+
overflow-y: hidden;
|
|
36
|
+
overflow-x: scroll;
|
|
37
|
+
scroll-behavior: smooth;
|
|
38
|
+
|
|
39
|
+
&::-webkit-scrollbar {
|
|
40
|
+
display: none;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&.active {
|
|
44
|
+
background-color: var(--ifm-color-emphasis-100);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.openapi-tabs__schema-label {
|
|
49
|
+
white-space: nowrap;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.openapi-tabs__schema-container {
|
|
53
|
+
width: 100%;
|
|
54
|
+
margin-top: 1rem;
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
}
|