docusaurus-theme-openapi-docs 0.0.0-1294 → 0.0.0-1310
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/markdown/schema.js +4 -5
- package/lib/theme/ApiExplorer/ApiCodeBlock/Container/index.js +4 -2
- package/lib/theme/ApiExplorer/ApiCodeBlock/Content/String.js +9 -6
- package/lib/theme/ApiExplorer/ApiCodeBlock/Line/index.d.ts +1 -1
- package/lib/theme/ApiExplorer/ApiCodeBlock/index.d.ts +1 -1
- package/lib/theme/ApiExplorer/Authorization/index.js +9 -10
- package/lib/theme/ApiExplorer/Body/index.js +4 -5
- package/lib/theme/ApiExplorer/CodeTabs/index.d.ts +1 -1
- package/lib/theme/ApiExplorer/CodeTabs/index.js +6 -5
- package/lib/theme/ApiExplorer/Export/index.js +9 -2
- package/lib/theme/ApiExplorer/FormFileUpload/index.js +1 -2
- package/lib/theme/ApiExplorer/FormLabel/index.js +1 -2
- package/lib/theme/ApiExplorer/FormTextInput/index.js +1 -2
- package/lib/theme/ApiExplorer/LiveEditor/index.js +1 -2
- package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.js +5 -3
- package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.js +1 -2
- package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.js +1 -2
- package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.js +1 -2
- package/lib/theme/ApiExplorer/ParamOptions/index.js +2 -3
- package/lib/theme/ApiExplorer/Request/index.js +17 -18
- package/lib/theme/ApiExplorer/Response/index.js +7 -11
- package/lib/theme/ApiExplorer/SecuritySchemes/index.js +57 -50
- package/lib/theme/ApiExplorer/Server/index.js +2 -3
- package/lib/theme/ApiTabs/index.d.ts +1 -1
- package/lib/theme/ApiTabs/index.js +7 -7
- package/lib/theme/DiscriminatorTabs/index.d.ts +1 -1
- package/lib/theme/DiscriminatorTabs/index.js +6 -5
- package/lib/theme/Example/index.js +3 -4
- package/lib/theme/MimeTabs/index.d.ts +1 -1
- package/lib/theme/MimeTabs/index.js +6 -5
- package/lib/theme/OperationTabs/index.d.ts +1 -1
- package/lib/theme/OperationTabs/index.js +6 -5
- package/lib/theme/ParamsDetails/index.js +1 -2
- package/lib/theme/ParamsItem/index.js +7 -8
- package/lib/theme/RequestSchema/index.js +4 -6
- package/lib/theme/ResponseExamples/index.js +3 -4
- package/lib/theme/ResponseSchema/index.js +2 -3
- package/lib/theme/Schema/index.js +8 -9
- package/lib/theme/SchemaExpansion/index.js +4 -5
- package/lib/theme/SchemaItem/index.js +9 -10
- package/lib/theme/SchemaTabs/index.d.ts +1 -1
- package/lib/theme/SchemaTabs/index.js +6 -5
- package/lib/theme/StatusCodes/index.js +2 -4
- package/lib/theme/TabItem/index.d.ts +5 -0
- package/lib/theme/TabItem/index.js +51 -0
- package/lib/theme/TabItem/styles.module.css +3 -0
- package/lib/theme/Tabs/index.d.ts +5 -0
- package/lib/theme/Tabs/index.js +148 -0
- package/lib/theme/Tabs/styles.module.css +7 -0
- package/lib/theme/translationIds.d.ts +1 -99
- package/lib/theme/translationIds.js +0 -116
- package/lib/theme/utils/codeBlockUtils.d.ts +28 -0
- package/lib/theme/utils/codeBlockUtils.js +223 -0
- package/lib/theme/utils/reactUtils.d.ts +1 -0
- package/lib/theme/utils/reactUtils.js +23 -0
- package/lib/theme/utils/scrollUtils.d.ts +7 -0
- package/lib/theme/utils/scrollUtils.js +175 -0
- package/lib/theme/utils/tabsUtils.d.ts +47 -0
- package/lib/theme/utils/tabsUtils.js +299 -0
- package/lib/theme/utils/useCodeWordWrap.d.ts +8 -0
- package/lib/theme/utils/useCodeWordWrap.js +84 -0
- package/lib/theme/utils/useMutationObserver.d.ts +3 -0
- package/lib/theme/utils/useMutationObserver.js +34 -0
- package/package.json +4 -4
- package/src/markdown/schema.ts +4 -5
- package/src/theme/ApiExplorer/ApiCodeBlock/Container/index.tsx +2 -1
- package/src/theme/ApiExplorer/ApiCodeBlock/Content/String.tsx +8 -7
- package/src/theme/ApiExplorer/ApiCodeBlock/Line/index.tsx +1 -1
- package/src/theme/ApiExplorer/ApiCodeBlock/index.tsx +1 -1
- package/src/theme/ApiExplorer/Authorization/index.tsx +9 -10
- package/src/theme/ApiExplorer/Body/index.tsx +7 -5
- package/src/theme/ApiExplorer/CodeTabs/index.tsx +5 -5
- package/src/theme/ApiExplorer/Export/index.tsx +6 -2
- package/src/theme/ApiExplorer/FormFileUpload/index.tsx +1 -2
- package/src/theme/ApiExplorer/FormLabel/index.tsx +1 -2
- package/src/theme/ApiExplorer/FormTextInput/index.tsx +1 -2
- package/src/theme/ApiExplorer/LiveEditor/index.tsx +1 -2
- package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.tsx +5 -3
- package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.tsx +1 -2
- package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.tsx +1 -2
- package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.tsx +1 -2
- package/src/theme/ApiExplorer/ParamOptions/index.tsx +2 -3
- package/src/theme/ApiExplorer/Request/index.tsx +23 -18
- package/src/theme/ApiExplorer/Response/index.tsx +10 -8
- package/src/theme/ApiExplorer/SecuritySchemes/index.tsx +60 -52
- package/src/theme/ApiExplorer/Server/index.tsx +8 -3
- package/src/theme/ApiTabs/index.tsx +8 -8
- package/src/theme/DiscriminatorTabs/index.tsx +6 -5
- package/src/theme/Example/index.tsx +3 -4
- package/src/theme/MimeTabs/index.tsx +9 -8
- package/src/theme/OperationTabs/index.tsx +5 -4
- package/src/theme/ParamsDetails/index.tsx +1 -2
- package/src/theme/ParamsItem/index.tsx +13 -8
- package/src/theme/RequestSchema/index.tsx +4 -5
- package/src/theme/ResponseExamples/index.tsx +3 -4
- package/src/theme/ResponseSchema/index.tsx +2 -3
- package/src/theme/Schema/index.tsx +8 -9
- package/src/theme/SchemaExpansion/index.tsx +4 -5
- package/src/theme/SchemaItem/index.tsx +18 -10
- package/src/theme/SchemaTabs/index.tsx +6 -5
- package/src/theme/StatusCodes/index.tsx +2 -3
- package/src/theme/TabItem/index.tsx +61 -0
- package/src/theme/TabItem/styles.module.css +3 -0
- package/src/theme/Tabs/index.tsx +164 -0
- package/src/theme/Tabs/styles.module.css +7 -0
- package/src/theme/translationIds.ts +37 -113
- package/src/theme/utils/codeBlockUtils.ts +296 -0
- package/src/theme/utils/reactUtils.ts +22 -0
- package/src/theme/utils/scrollUtils.tsx +153 -0
- package/src/theme/utils/tabsUtils.tsx +329 -0
- package/src/theme/utils/useCodeWordWrap.ts +110 -0
- package/src/theme/utils/useMutationObserver.ts +43 -0
- package/src/theme-classic.d.ts +0 -96
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
* Portions Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
* Portions Copyright (c) Palo Alto Networks
|
|
4
|
+
*
|
|
5
|
+
* Vendored from @docusaurus/theme-common/src/utils/tabsUtils.tsx (MIT) to
|
|
6
|
+
* remove the dependency on @docusaurus/theme-common/internal. The
|
|
7
|
+
* useQueryStringValue dependency from theme-common's historyUtils is inlined
|
|
8
|
+
* below to avoid pulling another internal module.
|
|
9
|
+
* See: https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/issues/1140
|
|
10
|
+
*
|
|
11
|
+
* This source code is licensed under the MIT license found in the
|
|
12
|
+
* LICENSE file in the root directory of this source tree.
|
|
13
|
+
* ========================================================================== */
|
|
14
|
+
|
|
15
|
+
import React, {
|
|
16
|
+
createContext,
|
|
17
|
+
isValidElement,
|
|
18
|
+
useCallback,
|
|
19
|
+
useMemo,
|
|
20
|
+
useState,
|
|
21
|
+
useSyncExternalStore,
|
|
22
|
+
type ReactElement,
|
|
23
|
+
type ReactNode,
|
|
24
|
+
} from "react";
|
|
25
|
+
|
|
26
|
+
import { useHistory } from "@docusaurus/router";
|
|
27
|
+
import { duplicates, useStorageSlot } from "@docusaurus/theme-common";
|
|
28
|
+
import useIsomorphicLayoutEffect from "@docusaurus/useIsomorphicLayoutEffect";
|
|
29
|
+
|
|
30
|
+
import { ScrollControllerProvider } from "./scrollUtils";
|
|
31
|
+
|
|
32
|
+
export interface TabValue {
|
|
33
|
+
readonly value: string;
|
|
34
|
+
readonly label?: string;
|
|
35
|
+
readonly attributes?: { [key: string]: unknown };
|
|
36
|
+
readonly default?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface TabsProps {
|
|
40
|
+
readonly lazy?: boolean;
|
|
41
|
+
readonly block?: boolean;
|
|
42
|
+
readonly children: ReactNode;
|
|
43
|
+
readonly defaultValue?: string | null;
|
|
44
|
+
readonly values?: readonly TabValue[];
|
|
45
|
+
readonly groupId?: string;
|
|
46
|
+
readonly className?: string;
|
|
47
|
+
readonly queryString?: string | boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Extended Tabs type used across the OpenAPI theme; preserves the historical
|
|
51
|
+
// shape that included an optional `length` field.
|
|
52
|
+
export interface TabProps extends TabsProps {
|
|
53
|
+
length?: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface TabItemProps {
|
|
57
|
+
readonly children: ReactNode;
|
|
58
|
+
readonly value: string;
|
|
59
|
+
readonly default?: boolean;
|
|
60
|
+
readonly label?: string;
|
|
61
|
+
readonly className?: string;
|
|
62
|
+
readonly attributes?: { [key: string]: unknown };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function sanitizeTabsChildren(children: ReactNode): ReactNode {
|
|
66
|
+
return React.Children.toArray(children).filter((child) => child !== "\n");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function extractChildrenTabValues(children: ReactNode): TabValue[] {
|
|
70
|
+
function isTabItemWithValueProp(
|
|
71
|
+
comp: ReactElement
|
|
72
|
+
): comp is ReactElement<TabItemProps> {
|
|
73
|
+
const { props } = comp;
|
|
74
|
+
return !!props && typeof props === "object" && "value" in props;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const elements = React.Children.toArray(children).flatMap((child) => {
|
|
78
|
+
if (!child) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
if (isValidElement(child) && isTabItemWithValueProp(child)) {
|
|
82
|
+
return [child];
|
|
83
|
+
}
|
|
84
|
+
const badChildTypeName =
|
|
85
|
+
// @ts-expect-error: guarding against unexpected cases
|
|
86
|
+
typeof child.type === "string" ? child.type : child.type.name;
|
|
87
|
+
throw new Error(
|
|
88
|
+
`Docusaurus error: Bad <Tabs> child <${badChildTypeName}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.
|
|
89
|
+
If you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`
|
|
90
|
+
);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
return elements.map(
|
|
94
|
+
({ props: { value, label, attributes, default: isDefault } }) => ({
|
|
95
|
+
value,
|
|
96
|
+
label,
|
|
97
|
+
attributes,
|
|
98
|
+
default: isDefault,
|
|
99
|
+
})
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function ensureNoDuplicateValue(values: readonly TabValue[]) {
|
|
104
|
+
const dup = duplicates(values, (a, b) => a.value === b.value);
|
|
105
|
+
if (dup.length > 0) {
|
|
106
|
+
throw new Error(
|
|
107
|
+
`Docusaurus error: Duplicate values "${dup
|
|
108
|
+
.map((a) => `'${a.value}'`)
|
|
109
|
+
.join(", ")}" found in <Tabs>. Every value needs to be unique.`
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function useTabValues(
|
|
115
|
+
props: Pick<TabsProps, "values" | "children">
|
|
116
|
+
): readonly TabValue[] {
|
|
117
|
+
const { values: valuesProp, children } = props;
|
|
118
|
+
return useMemo(() => {
|
|
119
|
+
const values = valuesProp ?? extractChildrenTabValues(children);
|
|
120
|
+
ensureNoDuplicateValue(values);
|
|
121
|
+
return values;
|
|
122
|
+
}, [valuesProp, children]);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function isValidValue({
|
|
126
|
+
value,
|
|
127
|
+
tabValues,
|
|
128
|
+
}: {
|
|
129
|
+
value: string | null | undefined;
|
|
130
|
+
tabValues: readonly TabValue[];
|
|
131
|
+
}) {
|
|
132
|
+
return tabValues.some((a) => a.value === value);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function getInitialStateValue({
|
|
136
|
+
defaultValue,
|
|
137
|
+
tabValues,
|
|
138
|
+
}: {
|
|
139
|
+
defaultValue: TabsProps["defaultValue"];
|
|
140
|
+
tabValues: readonly TabValue[];
|
|
141
|
+
}): string {
|
|
142
|
+
if (tabValues.length === 0) {
|
|
143
|
+
throw new Error(
|
|
144
|
+
"Docusaurus error: the <Tabs> component requires at least one <TabItem> children component"
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
if (defaultValue) {
|
|
148
|
+
if (!isValidValue({ value: defaultValue, tabValues })) {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`Docusaurus error: The <Tabs> has a defaultValue "${defaultValue}" but none of its children has the corresponding value. Available values are: ${tabValues
|
|
151
|
+
.map((a) => a.value)
|
|
152
|
+
.join(
|
|
153
|
+
", "
|
|
154
|
+
)}. If you intend to show no default tab, use defaultValue={null} instead.`
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
return defaultValue;
|
|
158
|
+
}
|
|
159
|
+
const defaultTabValue =
|
|
160
|
+
tabValues.find((tabValue) => tabValue.default) ?? tabValues[0];
|
|
161
|
+
if (!defaultTabValue) {
|
|
162
|
+
throw new Error("Unexpected error: 0 tabValues");
|
|
163
|
+
}
|
|
164
|
+
return defaultTabValue.value;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function getStorageKey(groupId: string | undefined) {
|
|
168
|
+
if (!groupId) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
return `docusaurus.tab.${groupId}`;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function getQueryStringKey({
|
|
175
|
+
queryString = false,
|
|
176
|
+
groupId,
|
|
177
|
+
}: Pick<TabsProps, "queryString" | "groupId">) {
|
|
178
|
+
if (typeof queryString === "string") {
|
|
179
|
+
return queryString;
|
|
180
|
+
}
|
|
181
|
+
if (queryString === false) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
if (queryString === true && !groupId) {
|
|
185
|
+
throw new Error(
|
|
186
|
+
`Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".`
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
return groupId ?? null;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Inlined from @docusaurus/theme-common/internal historyUtils.useQueryStringValue
|
|
193
|
+
function useQueryStringValue(key: string | null): string | null {
|
|
194
|
+
const history = useHistory();
|
|
195
|
+
return useSyncExternalStore(
|
|
196
|
+
history.listen,
|
|
197
|
+
() =>
|
|
198
|
+
key === null
|
|
199
|
+
? null
|
|
200
|
+
: new URLSearchParams(history.location.search).get(key),
|
|
201
|
+
() => null
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function useTabQueryString({
|
|
206
|
+
queryString = false,
|
|
207
|
+
groupId,
|
|
208
|
+
}: Pick<TabsProps, "queryString" | "groupId">) {
|
|
209
|
+
const history = useHistory();
|
|
210
|
+
const key = getQueryStringKey({ queryString, groupId });
|
|
211
|
+
const value = useQueryStringValue(key);
|
|
212
|
+
|
|
213
|
+
const setValue = useCallback(
|
|
214
|
+
(newValue: string) => {
|
|
215
|
+
if (!key) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const searchParams = new URLSearchParams(history.location.search);
|
|
219
|
+
searchParams.set(key, newValue);
|
|
220
|
+
history.replace({ ...history.location, search: searchParams.toString() });
|
|
221
|
+
},
|
|
222
|
+
[key, history]
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
return [value, setValue] as const;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function useTabStorage({ groupId }: Pick<TabsProps, "groupId">) {
|
|
229
|
+
const key = getStorageKey(groupId);
|
|
230
|
+
const [value, storageSlot] = useStorageSlot(key);
|
|
231
|
+
|
|
232
|
+
const setValue = useCallback(
|
|
233
|
+
(newValue: string) => {
|
|
234
|
+
if (!key) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
storageSlot.set(newValue);
|
|
238
|
+
},
|
|
239
|
+
[key, storageSlot]
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
return [value, setValue] as const;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
type TabsContextValue = {
|
|
246
|
+
selectedValue: string;
|
|
247
|
+
selectValue: (value: string) => void;
|
|
248
|
+
tabValues: readonly TabValue[];
|
|
249
|
+
lazy: boolean;
|
|
250
|
+
block: boolean;
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
export function useTabsContextValue(props: TabsProps): TabsContextValue {
|
|
254
|
+
const { defaultValue, queryString = false, groupId } = props;
|
|
255
|
+
const tabValues = useTabValues(props);
|
|
256
|
+
|
|
257
|
+
const [selectedValue, setSelectedValue] = useState(() =>
|
|
258
|
+
getInitialStateValue({ defaultValue, tabValues })
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
const [queryStringValue, setQueryString] = useTabQueryString({
|
|
262
|
+
queryString,
|
|
263
|
+
groupId,
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
const [storageValue, setStorageValue] = useTabStorage({
|
|
267
|
+
groupId,
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
const valueToSync = (() => {
|
|
271
|
+
const value = queryStringValue ?? storageValue;
|
|
272
|
+
if (!isValidValue({ value, tabValues })) {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
return value;
|
|
276
|
+
})();
|
|
277
|
+
|
|
278
|
+
useIsomorphicLayoutEffect(() => {
|
|
279
|
+
if (valueToSync) {
|
|
280
|
+
setSelectedValue(valueToSync);
|
|
281
|
+
}
|
|
282
|
+
}, [valueToSync]);
|
|
283
|
+
|
|
284
|
+
const selectValue = useCallback(
|
|
285
|
+
(newValue: string) => {
|
|
286
|
+
if (!isValidValue({ value: newValue, tabValues })) {
|
|
287
|
+
throw new Error(`Can't select invalid tab value=${newValue}`);
|
|
288
|
+
}
|
|
289
|
+
setSelectedValue(newValue);
|
|
290
|
+
setQueryString(newValue);
|
|
291
|
+
setStorageValue(newValue);
|
|
292
|
+
},
|
|
293
|
+
[setQueryString, setStorageValue, tabValues]
|
|
294
|
+
);
|
|
295
|
+
|
|
296
|
+
return {
|
|
297
|
+
selectedValue,
|
|
298
|
+
selectValue,
|
|
299
|
+
tabValues,
|
|
300
|
+
lazy: props.lazy ?? false,
|
|
301
|
+
block: props.block ?? false,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const TabsContext = createContext<TabsContextValue | null>(null);
|
|
306
|
+
|
|
307
|
+
export function useTabs(): TabsContextValue {
|
|
308
|
+
const contextValue = React.useContext(TabsContext);
|
|
309
|
+
if (!contextValue) {
|
|
310
|
+
throw new Error("useTabsContext() must be used within a Tabs component");
|
|
311
|
+
}
|
|
312
|
+
return contextValue;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export function TabsProvider(props: {
|
|
316
|
+
children: ReactNode;
|
|
317
|
+
value: TabsContextValue;
|
|
318
|
+
}): ReactNode {
|
|
319
|
+
// ScrollControllerProvider is mounted here so every tab consumer
|
|
320
|
+
// (our six OpenAPI tab variants + the swizzled @theme/Tabs) gets a working
|
|
321
|
+
// useScrollPositionBlocker without callers needing a separate provider.
|
|
322
|
+
return (
|
|
323
|
+
<ScrollControllerProvider>
|
|
324
|
+
<TabsContext.Provider value={props.value}>
|
|
325
|
+
{props.children}
|
|
326
|
+
</TabsContext.Provider>
|
|
327
|
+
</ScrollControllerProvider>
|
|
328
|
+
);
|
|
329
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
* Portions Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
* Portions Copyright (c) Palo Alto Networks
|
|
4
|
+
*
|
|
5
|
+
* Vendored from @docusaurus/theme-common/src/hooks/useCodeWordWrap.ts (MIT)
|
|
6
|
+
* to remove the dependency on @docusaurus/theme-common/internal.
|
|
7
|
+
* See: https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/issues/1140
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the MIT license found in the
|
|
10
|
+
* LICENSE file in the root directory of this source tree.
|
|
11
|
+
* ========================================================================== */
|
|
12
|
+
|
|
13
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
14
|
+
import type { RefObject } from "react";
|
|
15
|
+
|
|
16
|
+
import { useMutationObserver } from "./useMutationObserver";
|
|
17
|
+
|
|
18
|
+
// Callback fires when the "hidden" attribute of a tabpanel changes
|
|
19
|
+
// See https://github.com/facebook/docusaurus/pull/7485
|
|
20
|
+
function useTabBecameVisibleCallback(
|
|
21
|
+
codeBlockRef: RefObject<HTMLPreElement | null>,
|
|
22
|
+
callback: () => void
|
|
23
|
+
) {
|
|
24
|
+
const [hiddenTabElement, setHiddenTabElement] = useState<
|
|
25
|
+
Element | null | undefined
|
|
26
|
+
>();
|
|
27
|
+
|
|
28
|
+
const updateHiddenTabElement = useCallback(() => {
|
|
29
|
+
setHiddenTabElement(
|
|
30
|
+
codeBlockRef.current?.closest("[role=tabpanel][hidden]")
|
|
31
|
+
);
|
|
32
|
+
}, [codeBlockRef, setHiddenTabElement]);
|
|
33
|
+
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
updateHiddenTabElement();
|
|
36
|
+
}, [updateHiddenTabElement]);
|
|
37
|
+
|
|
38
|
+
useMutationObserver(
|
|
39
|
+
hiddenTabElement,
|
|
40
|
+
(mutations: MutationRecord[]) => {
|
|
41
|
+
mutations.forEach((mutation) => {
|
|
42
|
+
if (
|
|
43
|
+
mutation.type === "attributes" &&
|
|
44
|
+
mutation.attributeName === "hidden"
|
|
45
|
+
) {
|
|
46
|
+
callback();
|
|
47
|
+
updateHiddenTabElement();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
attributes: true,
|
|
53
|
+
characterData: false,
|
|
54
|
+
childList: false,
|
|
55
|
+
subtree: false,
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type WordWrap = {
|
|
61
|
+
readonly codeBlockRef: RefObject<HTMLPreElement | null>;
|
|
62
|
+
readonly isEnabled: boolean;
|
|
63
|
+
readonly isCodeScrollable: boolean;
|
|
64
|
+
readonly toggle: () => void;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export function useCodeWordWrap(): WordWrap {
|
|
68
|
+
const [isEnabled, setIsEnabled] = useState(false);
|
|
69
|
+
const [isCodeScrollable, setIsCodeScrollable] = useState<boolean>(false);
|
|
70
|
+
const codeBlockRef = useRef<HTMLPreElement>(null);
|
|
71
|
+
|
|
72
|
+
const toggle = useCallback(() => {
|
|
73
|
+
const codeElement = codeBlockRef.current!.querySelector("code")!;
|
|
74
|
+
|
|
75
|
+
if (isEnabled) {
|
|
76
|
+
codeElement.removeAttribute("style");
|
|
77
|
+
} else {
|
|
78
|
+
codeElement.style.whiteSpace = "pre-wrap";
|
|
79
|
+
codeElement.style.overflowWrap = "anywhere";
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
setIsEnabled((value) => !value);
|
|
83
|
+
}, [codeBlockRef, isEnabled]);
|
|
84
|
+
|
|
85
|
+
const updateCodeIsScrollable = useCallback(() => {
|
|
86
|
+
const { scrollWidth, clientWidth } = codeBlockRef.current!;
|
|
87
|
+
const isScrollable =
|
|
88
|
+
scrollWidth > clientWidth ||
|
|
89
|
+
codeBlockRef.current!.querySelector("code")!.hasAttribute("style");
|
|
90
|
+
setIsCodeScrollable(isScrollable);
|
|
91
|
+
}, [codeBlockRef]);
|
|
92
|
+
|
|
93
|
+
useTabBecameVisibleCallback(codeBlockRef, updateCodeIsScrollable);
|
|
94
|
+
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
updateCodeIsScrollable();
|
|
97
|
+
}, [isEnabled, updateCodeIsScrollable]);
|
|
98
|
+
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
window.addEventListener("resize", updateCodeIsScrollable, {
|
|
101
|
+
passive: true,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
return () => {
|
|
105
|
+
window.removeEventListener("resize", updateCodeIsScrollable);
|
|
106
|
+
};
|
|
107
|
+
}, [updateCodeIsScrollable]);
|
|
108
|
+
|
|
109
|
+
return { codeBlockRef, isEnabled, isCodeScrollable, toggle };
|
|
110
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
* Portions Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
* Portions Copyright (c) Palo Alto Networks
|
|
4
|
+
*
|
|
5
|
+
* Vendored from @docusaurus/theme-common/src/hooks/useMutationObserver.ts (MIT)
|
|
6
|
+
* to remove the dependency on @docusaurus/theme-common/internal.
|
|
7
|
+
* See: https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/issues/1140
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the MIT license found in the
|
|
10
|
+
* LICENSE file in the root directory of this source tree.
|
|
11
|
+
* ========================================================================== */
|
|
12
|
+
|
|
13
|
+
import { useEffect } from "react";
|
|
14
|
+
|
|
15
|
+
import { useEvent } from "@docusaurus/theme-common";
|
|
16
|
+
|
|
17
|
+
import { useShallowMemoObject } from "./reactUtils";
|
|
18
|
+
|
|
19
|
+
type Options = MutationObserverInit;
|
|
20
|
+
|
|
21
|
+
const DefaultOptions: Options = {
|
|
22
|
+
attributes: true,
|
|
23
|
+
characterData: true,
|
|
24
|
+
childList: true,
|
|
25
|
+
subtree: true,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export function useMutationObserver(
|
|
29
|
+
target: Element | undefined | null,
|
|
30
|
+
callback: MutationCallback,
|
|
31
|
+
options: Options = DefaultOptions
|
|
32
|
+
): void {
|
|
33
|
+
const stableCallback = useEvent(callback);
|
|
34
|
+
const stableOptions: Options = useShallowMemoObject(options);
|
|
35
|
+
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
const observer = new MutationObserver(stableCallback);
|
|
38
|
+
if (target) {
|
|
39
|
+
observer.observe(target, stableOptions);
|
|
40
|
+
}
|
|
41
|
+
return () => observer.disconnect();
|
|
42
|
+
}, [target, stableCallback, stableOptions]);
|
|
43
|
+
}
|
package/src/theme-classic.d.ts
CHANGED
|
@@ -6,99 +6,3 @@
|
|
|
6
6
|
* ========================================================================== */
|
|
7
7
|
|
|
8
8
|
/// <reference types="@docusaurus/theme-classic" />
|
|
9
|
-
|
|
10
|
-
declare module "@docusaurus/theme-common/internal" {
|
|
11
|
-
import { CSSProperties, ReactNode, RefObject } from "react";
|
|
12
|
-
|
|
13
|
-
import type { PropDocContent } from "@docusaurus/plugin-content-docs";
|
|
14
|
-
import { MagicCommentConfig } from "@docusaurus/theme-common/lib/utils/codeBlockUtils";
|
|
15
|
-
import {
|
|
16
|
-
TabsProps as ITabsProps,
|
|
17
|
-
TabValue,
|
|
18
|
-
} from "@docusaurus/theme-common/lib/utils/tabsUtils";
|
|
19
|
-
import { Props as ICodeBlockProps } from "@theme/CodeBlock";
|
|
20
|
-
import { Props as ICopyButtonProps } from "@theme/CodeBlock/CopyButton";
|
|
21
|
-
import { Props as ILineProps } from "@theme/CodeBlock/Line";
|
|
22
|
-
import { PrismTheme } from "prism-react-renderer";
|
|
23
|
-
|
|
24
|
-
export interface TabItemProps {
|
|
25
|
-
readonly children: ReactNode;
|
|
26
|
-
readonly value: string;
|
|
27
|
-
readonly default?: boolean;
|
|
28
|
-
readonly label?: string;
|
|
29
|
-
readonly className?: string;
|
|
30
|
-
readonly attributes?: { [key: string]: unknown };
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface TabProps extends ITabsProps {
|
|
34
|
-
length?: number;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface CopyButtonProps extends ICopyButtonProps {}
|
|
38
|
-
export interface LineProps extends ILineProps {}
|
|
39
|
-
export interface CodeBlockProps extends ICodeBlockProps {}
|
|
40
|
-
|
|
41
|
-
export function usePrismTheme(): PrismTheme;
|
|
42
|
-
|
|
43
|
-
export function sanitizeTabsChildren(children: TabProps["children"]);
|
|
44
|
-
|
|
45
|
-
export function getPrismCssVariables(prismTheme: PrismTheme): CSSProperties;
|
|
46
|
-
|
|
47
|
-
export function parseCodeBlockTitle(metastring?: string): string;
|
|
48
|
-
|
|
49
|
-
export function parseLanguage(className: string): string | undefined;
|
|
50
|
-
|
|
51
|
-
export function containsLineNumbers(metastring?: string): boolean;
|
|
52
|
-
|
|
53
|
-
export function useScrollPositionBlocker(): {
|
|
54
|
-
blockElementScrollPositionUntilNextRender: (el: HTMLElement) => void;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
export function DocProvider({
|
|
58
|
-
children,
|
|
59
|
-
content,
|
|
60
|
-
}: {
|
|
61
|
-
children: ReactNode;
|
|
62
|
-
content: PropDocContent;
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
export function useTabsContextValue(props: TabProps): {
|
|
66
|
-
selectedValue: string;
|
|
67
|
-
selectValue: (value: string) => void;
|
|
68
|
-
tabValues: readonly TabValue[];
|
|
69
|
-
lazy: boolean;
|
|
70
|
-
block: boolean;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
export function useTabs(): {
|
|
74
|
-
selectedValue: string;
|
|
75
|
-
selectValue: (value: string) => void;
|
|
76
|
-
tabValues: readonly TabValue[];
|
|
77
|
-
lazy: boolean;
|
|
78
|
-
block: boolean;
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export function TabsProvider(props: {
|
|
82
|
-
children: ReactNode;
|
|
83
|
-
value: ReturnType<typeof useTabsContextValue>;
|
|
84
|
-
}): ReactNode;
|
|
85
|
-
|
|
86
|
-
export function parseLines(
|
|
87
|
-
content: string,
|
|
88
|
-
options: {
|
|
89
|
-
metastring: string | undefined;
|
|
90
|
-
language: string | undefined;
|
|
91
|
-
magicComments: MagicCommentConfig[];
|
|
92
|
-
}
|
|
93
|
-
): {
|
|
94
|
-
lineClassNames: { [lineIndex: number]: string[] };
|
|
95
|
-
code: string;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
export function useCodeWordWrap(): {
|
|
99
|
-
readonly codeBlockRef: RefObject<HTMLPreElement>;
|
|
100
|
-
readonly isEnabled: boolean;
|
|
101
|
-
readonly isCodeScrollable: boolean;
|
|
102
|
-
readonly toggle: () => void;
|
|
103
|
-
};
|
|
104
|
-
}
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/index.ts","./src/plugin-content-docs.d.ts","./src/postman-code-generators.d.ts","./src/react-magic-dropzone.d.ts","./src/theme-classic.d.ts","./src/theme-openapi.d.ts","./src/types.d.ts","./src/markdown/createDescription.ts","./src/markdown/schema.test.ts","./src/markdown/schema.ts","./src/markdown/utils.test.ts","./src/markdown/utils.ts","./src/theme/translationIds.ts","./src/theme/ApiExplorer/buildPostmanRequest.ts","./src/theme/ApiExplorer/index.tsx","./src/theme/ApiExplorer/persistenceMiddleware.ts","./src/theme/ApiExplorer/storage-utils.ts","./src/theme/ApiExplorer/Accept/index.tsx","./src/theme/ApiExplorer/Accept/slice.ts","./src/theme/ApiExplorer/ApiCodeBlock/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/Container/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/Content/Element.tsx","./src/theme/ApiExplorer/ApiCodeBlock/Content/String.tsx","./src/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/ExitButton/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/ExpandButton/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/Line/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/index.tsx","./src/theme/ApiExplorer/Authorization/auth-types.ts","./src/theme/ApiExplorer/Authorization/index.tsx","./src/theme/ApiExplorer/Authorization/slice.ts","./src/theme/ApiExplorer/Body/index.tsx","./src/theme/ApiExplorer/Body/json2xml.d.ts","./src/theme/ApiExplorer/Body/resolveSchemaWithSelections.ts","./src/theme/ApiExplorer/Body/slice.ts","./src/theme/ApiExplorer/Body/FileArrayFormBodyItem/index.tsx","./src/theme/ApiExplorer/Body/FormBodyItem/index.tsx","./src/theme/ApiExplorer/CodeSnippets/code-snippets-types.ts","./src/theme/ApiExplorer/CodeSnippets/index.tsx","./src/theme/ApiExplorer/CodeSnippets/languages.test.ts","./src/theme/ApiExplorer/CodeSnippets/languages.ts","./src/theme/ApiExplorer/CodeTabs/index.tsx","./src/theme/ApiExplorer/ContentType/index.tsx","./src/theme/ApiExplorer/ContentType/slice.ts","./src/theme/ApiExplorer/EncodingSelection/slice.ts","./src/theme/ApiExplorer/EncodingSelection/useResolvedEncoding.ts","./src/theme/ApiExplorer/Export/index.tsx","./src/theme/ApiExplorer/FloatingButton/index.tsx","./src/theme/ApiExplorer/FormFileUpload/index.tsx","./src/theme/ApiExplorer/FormItem/index.tsx","./src/theme/ApiExplorer/FormLabel/index.tsx","./src/theme/ApiExplorer/FormMultiSelect/index.tsx","./src/theme/ApiExplorer/FormSelect/index.tsx","./src/theme/ApiExplorer/FormTextInput/index.tsx","./src/theme/ApiExplorer/LiveEditor/index.tsx","./src/theme/ApiExplorer/MethodEndpoint/index.tsx","./src/theme/ApiExplorer/ParamOptions/index.tsx","./src/theme/ApiExplorer/ParamOptions/slice.ts","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.tsx","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.tsx","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.tsx","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.tsx","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamTextFormItem.tsx","./src/theme/ApiExplorer/Request/index.tsx","./src/theme/ApiExplorer/Request/makeRequest.ts","./src/theme/ApiExplorer/Response/index.tsx","./src/theme/ApiExplorer/Response/slice.ts","./src/theme/ApiExplorer/SchemaSelection/index.ts","./src/theme/ApiExplorer/SchemaSelection/slice.ts","./src/theme/ApiExplorer/SecuritySchemes/index.tsx","./src/theme/ApiExplorer/Server/index.tsx","./src/theme/ApiExplorer/Server/slice.ts","./src/theme/ApiItem/hooks.ts","./src/theme/ApiItem/index.tsx","./src/theme/ApiItem/store.ts","./src/theme/ApiItem/Layout/index.tsx","./src/theme/ApiLogo/index.tsx","./src/theme/ApiTabs/index.tsx","./src/theme/ArrayBrackets/index.tsx","./src/theme/CodeSamples/index.tsx","./src/theme/DiscriminatorTabs/index.tsx","./src/theme/Example/index.tsx","./src/theme/Markdown/index.d.ts","./src/theme/MimeTabs/index.tsx","./src/theme/OperationTabs/index.tsx","./src/theme/ParamsDetails/index.tsx","./src/theme/ParamsItem/index.tsx","./src/theme/RequestSchema/index.tsx","./src/theme/ResponseExamples/index.tsx","./src/theme/ResponseHeaders/index.tsx","./src/theme/ResponseSchema/index.tsx","./src/theme/Schema/index.tsx","./src/theme/SchemaExpansion/context.tsx","./src/theme/SchemaExpansion/index.tsx","./src/theme/SchemaItem/index.tsx","./src/theme/SchemaTabs/index.tsx","./src/theme/SkeletonLoader/index.tsx","./src/theme/StatusCodes/index.tsx"],"version":"5.9.3"}
|
|
1
|
+
{"root":["./src/index.ts","./src/plugin-content-docs.d.ts","./src/postman-code-generators.d.ts","./src/react-magic-dropzone.d.ts","./src/theme-classic.d.ts","./src/theme-openapi.d.ts","./src/types.d.ts","./src/markdown/createDescription.ts","./src/markdown/schema.test.ts","./src/markdown/schema.ts","./src/markdown/utils.test.ts","./src/markdown/utils.ts","./src/theme/translationIds.ts","./src/theme/ApiExplorer/buildPostmanRequest.ts","./src/theme/ApiExplorer/index.tsx","./src/theme/ApiExplorer/persistenceMiddleware.ts","./src/theme/ApiExplorer/storage-utils.ts","./src/theme/ApiExplorer/Accept/index.tsx","./src/theme/ApiExplorer/Accept/slice.ts","./src/theme/ApiExplorer/ApiCodeBlock/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/Container/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/Content/Element.tsx","./src/theme/ApiExplorer/ApiCodeBlock/Content/String.tsx","./src/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/ExitButton/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/ExpandButton/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/Line/index.tsx","./src/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/index.tsx","./src/theme/ApiExplorer/Authorization/auth-types.ts","./src/theme/ApiExplorer/Authorization/index.tsx","./src/theme/ApiExplorer/Authorization/slice.ts","./src/theme/ApiExplorer/Body/index.tsx","./src/theme/ApiExplorer/Body/json2xml.d.ts","./src/theme/ApiExplorer/Body/resolveSchemaWithSelections.ts","./src/theme/ApiExplorer/Body/slice.ts","./src/theme/ApiExplorer/Body/FileArrayFormBodyItem/index.tsx","./src/theme/ApiExplorer/Body/FormBodyItem/index.tsx","./src/theme/ApiExplorer/CodeSnippets/code-snippets-types.ts","./src/theme/ApiExplorer/CodeSnippets/index.tsx","./src/theme/ApiExplorer/CodeSnippets/languages.test.ts","./src/theme/ApiExplorer/CodeSnippets/languages.ts","./src/theme/ApiExplorer/CodeTabs/index.tsx","./src/theme/ApiExplorer/ContentType/index.tsx","./src/theme/ApiExplorer/ContentType/slice.ts","./src/theme/ApiExplorer/EncodingSelection/slice.ts","./src/theme/ApiExplorer/EncodingSelection/useResolvedEncoding.ts","./src/theme/ApiExplorer/Export/index.tsx","./src/theme/ApiExplorer/FloatingButton/index.tsx","./src/theme/ApiExplorer/FormFileUpload/index.tsx","./src/theme/ApiExplorer/FormItem/index.tsx","./src/theme/ApiExplorer/FormLabel/index.tsx","./src/theme/ApiExplorer/FormMultiSelect/index.tsx","./src/theme/ApiExplorer/FormSelect/index.tsx","./src/theme/ApiExplorer/FormTextInput/index.tsx","./src/theme/ApiExplorer/LiveEditor/index.tsx","./src/theme/ApiExplorer/MethodEndpoint/index.tsx","./src/theme/ApiExplorer/ParamOptions/index.tsx","./src/theme/ApiExplorer/ParamOptions/slice.ts","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.tsx","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.tsx","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.tsx","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.tsx","./src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamTextFormItem.tsx","./src/theme/ApiExplorer/Request/index.tsx","./src/theme/ApiExplorer/Request/makeRequest.ts","./src/theme/ApiExplorer/Response/index.tsx","./src/theme/ApiExplorer/Response/slice.ts","./src/theme/ApiExplorer/SchemaSelection/index.ts","./src/theme/ApiExplorer/SchemaSelection/slice.ts","./src/theme/ApiExplorer/SecuritySchemes/index.tsx","./src/theme/ApiExplorer/Server/index.tsx","./src/theme/ApiExplorer/Server/slice.ts","./src/theme/ApiItem/hooks.ts","./src/theme/ApiItem/index.tsx","./src/theme/ApiItem/store.ts","./src/theme/ApiItem/Layout/index.tsx","./src/theme/ApiLogo/index.tsx","./src/theme/ApiTabs/index.tsx","./src/theme/ArrayBrackets/index.tsx","./src/theme/CodeSamples/index.tsx","./src/theme/DiscriminatorTabs/index.tsx","./src/theme/Example/index.tsx","./src/theme/Markdown/index.d.ts","./src/theme/MimeTabs/index.tsx","./src/theme/OperationTabs/index.tsx","./src/theme/ParamsDetails/index.tsx","./src/theme/ParamsItem/index.tsx","./src/theme/RequestSchema/index.tsx","./src/theme/ResponseExamples/index.tsx","./src/theme/ResponseHeaders/index.tsx","./src/theme/ResponseSchema/index.tsx","./src/theme/Schema/index.tsx","./src/theme/SchemaExpansion/context.tsx","./src/theme/SchemaExpansion/index.tsx","./src/theme/SchemaItem/index.tsx","./src/theme/SchemaTabs/index.tsx","./src/theme/SkeletonLoader/index.tsx","./src/theme/StatusCodes/index.tsx","./src/theme/TabItem/index.tsx","./src/theme/Tabs/index.tsx","./src/theme/utils/codeBlockUtils.ts","./src/theme/utils/reactUtils.ts","./src/theme/utils/scrollUtils.tsx","./src/theme/utils/tabsUtils.tsx","./src/theme/utils/useCodeWordWrap.ts","./src/theme/utils/useMutationObserver.ts"],"version":"5.9.3"}
|