docusaurus-theme-openapi-docs 0.0.0-783 → 0.0.0-797
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/theme/ApiExplorer/CodeSnippets/code-snippets-types.d.ts +1 -1
- package/lib/theme/ApiExplorer/CodeSnippets/index.js +2 -112
- package/lib/theme/ApiExplorer/CodeSnippets/languages.d.ts +1 -0
- package/lib/theme/ApiExplorer/CodeSnippets/languages.js +29 -1
- package/lib/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +146 -2
- package/lib/theme/ApiExplorer/CodeTabs/index.js +22 -8
- package/package.json +3 -3
- package/src/theme/ApiExplorer/CodeSnippets/code-snippets-types.ts +2 -0
- package/src/theme/ApiExplorer/CodeSnippets/index.tsx +6 -112
- package/src/theme/ApiExplorer/CodeSnippets/languages.ts +25 -0
- package/src/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +146 -2
- package/src/theme/ApiExplorer/CodeTabs/index.tsx +24 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type CodeSampleLanguage = "C" | "C#" | "C++" | "CoffeeScript" | "CSS" | "Dart" | "DM" | "Elixir" | "Go" | "Groovy" | "HTML" | "Java" | "JavaScript" | "Kotlin" | "Objective-C" | "Perl" | "PHP" | "PowerShell" | "Python" | "Ruby" | "Rust" | "Scala" | "Shell" | "Swift" | "TypeScript";
|
|
1
|
+
export type CodeSampleLanguage = "C" | "C#" | "C++" | "CoffeeScript" | "CSS" | "Dart" | "DM" | "Elixir" | "Go" | "Groovy" | "HTML" | "Java" | "JavaScript" | "Kotlin" | "Objective-C" | "OCaml" | "Perl" | "PHP" | "PowerShell" | "Python" | "R" | "Ruby" | "Rust" | "Scala" | "Shell" | "Swift" | "TypeScript";
|
|
2
2
|
export interface Language {
|
|
3
3
|
highlight: string;
|
|
4
4
|
language: string;
|
|
@@ -78,118 +78,7 @@ const postman_code_generators_1 = __importDefault(
|
|
|
78
78
|
require("postman-code-generators")
|
|
79
79
|
);
|
|
80
80
|
const languages_1 = require("./languages");
|
|
81
|
-
exports.languageSet =
|
|
82
|
-
{
|
|
83
|
-
highlight: "bash",
|
|
84
|
-
language: "curl",
|
|
85
|
-
codeSampleLanguage: "Shell",
|
|
86
|
-
logoClass: "bash",
|
|
87
|
-
options: {
|
|
88
|
-
longFormat: false,
|
|
89
|
-
followRedirect: true,
|
|
90
|
-
trimRequestBody: true,
|
|
91
|
-
},
|
|
92
|
-
variant: "cURL",
|
|
93
|
-
variants: ["curl"],
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
highlight: "python",
|
|
97
|
-
language: "python",
|
|
98
|
-
codeSampleLanguage: "Python",
|
|
99
|
-
logoClass: "python",
|
|
100
|
-
options: {
|
|
101
|
-
followRedirect: true,
|
|
102
|
-
trimRequestBody: true,
|
|
103
|
-
},
|
|
104
|
-
variant: "requests",
|
|
105
|
-
variants: ["requests", "http.client"],
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
highlight: "go",
|
|
109
|
-
language: "go",
|
|
110
|
-
codeSampleLanguage: "Go",
|
|
111
|
-
logoClass: "go",
|
|
112
|
-
options: {
|
|
113
|
-
followRedirect: true,
|
|
114
|
-
trimRequestBody: true,
|
|
115
|
-
},
|
|
116
|
-
variant: "native",
|
|
117
|
-
variants: ["native"],
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
highlight: "javascript",
|
|
121
|
-
language: "nodejs",
|
|
122
|
-
codeSampleLanguage: "JavaScript",
|
|
123
|
-
logoClass: "nodejs",
|
|
124
|
-
options: {
|
|
125
|
-
ES6_enabled: true,
|
|
126
|
-
followRedirect: true,
|
|
127
|
-
trimRequestBody: true,
|
|
128
|
-
},
|
|
129
|
-
variant: "axios",
|
|
130
|
-
variants: ["axios", "native"],
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
highlight: "ruby",
|
|
134
|
-
language: "ruby",
|
|
135
|
-
codeSampleLanguage: "Ruby",
|
|
136
|
-
logoClass: "ruby",
|
|
137
|
-
options: {
|
|
138
|
-
followRedirect: true,
|
|
139
|
-
trimRequestBody: true,
|
|
140
|
-
},
|
|
141
|
-
variant: "Net::HTTP",
|
|
142
|
-
variants: ["net::http"],
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
highlight: "csharp",
|
|
146
|
-
language: "csharp",
|
|
147
|
-
codeSampleLanguage: "C#",
|
|
148
|
-
logoClass: "csharp",
|
|
149
|
-
options: {
|
|
150
|
-
followRedirect: true,
|
|
151
|
-
trimRequestBody: true,
|
|
152
|
-
},
|
|
153
|
-
variant: "RestSharp",
|
|
154
|
-
variants: ["restsharp", "httpclient"],
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
highlight: "php",
|
|
158
|
-
language: "php",
|
|
159
|
-
codeSampleLanguage: "PHP",
|
|
160
|
-
logoClass: "php",
|
|
161
|
-
options: {
|
|
162
|
-
followRedirect: true,
|
|
163
|
-
trimRequestBody: true,
|
|
164
|
-
},
|
|
165
|
-
variant: "cURL",
|
|
166
|
-
variants: ["curl", "guzzle", "pecl_http", "http_request2"],
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
highlight: "java",
|
|
170
|
-
language: "java",
|
|
171
|
-
codeSampleLanguage: "Java",
|
|
172
|
-
logoClass: "java",
|
|
173
|
-
options: {
|
|
174
|
-
followRedirect: true,
|
|
175
|
-
trimRequestBody: true,
|
|
176
|
-
},
|
|
177
|
-
variant: "OkHttp",
|
|
178
|
-
variants: ["okhttp", "unirest"],
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
highlight: "powershell",
|
|
182
|
-
language: "powershell",
|
|
183
|
-
codeSampleLanguage: "PowerShell",
|
|
184
|
-
logoClass: "powershell",
|
|
185
|
-
options: {
|
|
186
|
-
followRedirect: true,
|
|
187
|
-
trimRequestBody: true,
|
|
188
|
-
},
|
|
189
|
-
variant: "RestMethod",
|
|
190
|
-
variants: ["restmethod"],
|
|
191
|
-
},
|
|
192
|
-
];
|
|
81
|
+
exports.languageSet = (0, languages_1.generateLanguageSet)();
|
|
193
82
|
function CodeTab({ children, hidden, className }) {
|
|
194
83
|
return react_1.default.createElement(
|
|
195
84
|
"div",
|
|
@@ -392,6 +281,7 @@ function CodeSnippets({ postman, codeSamples }) {
|
|
|
392
281
|
setSelectedSample: setSelectedSample,
|
|
393
282
|
},
|
|
394
283
|
languageSet: mergedLangs,
|
|
284
|
+
defaultValue: defaultLang[0]?.language ?? mergedLangs[0].language,
|
|
395
285
|
lazy: true,
|
|
396
286
|
},
|
|
397
287
|
mergedLangs.map((lang) => {
|
|
@@ -2,3 +2,4 @@ import { CodeSample, Language } from "./code-snippets-types";
|
|
|
2
2
|
export declare function mergeCodeSampleLanguage(languages: Language[], codeSamples: CodeSample[]): Language[];
|
|
3
3
|
export declare const mergeArraysbyLanguage: (arr1: any, arr2: any) => any[];
|
|
4
4
|
export declare function getCodeSampleSourceFromLanguage(language: Language): string;
|
|
5
|
+
export declare function generateLanguageSet(): Language[];
|
|
@@ -11,7 +11,8 @@ var __importDefault =
|
|
|
11
11
|
return mod && mod.__esModule ? mod : { default: mod };
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.
|
|
14
|
+
exports.generateLanguageSet =
|
|
15
|
+
exports.getCodeSampleSourceFromLanguage =
|
|
15
16
|
exports.mergeArraysbyLanguage =
|
|
16
17
|
exports.mergeCodeSampleLanguage =
|
|
17
18
|
void 0;
|
|
@@ -19,6 +20,9 @@ const find_1 = __importDefault(require("lodash/find"));
|
|
|
19
20
|
const isArray_1 = __importDefault(require("lodash/isArray"));
|
|
20
21
|
const mergeWith_1 = __importDefault(require("lodash/mergeWith"));
|
|
21
22
|
const unionBy_1 = __importDefault(require("lodash/unionBy"));
|
|
23
|
+
const postman_code_generators_1 = __importDefault(
|
|
24
|
+
require("postman-code-generators")
|
|
25
|
+
);
|
|
22
26
|
function mergeCodeSampleLanguage(languages, codeSamples) {
|
|
23
27
|
return languages.map((language) => {
|
|
24
28
|
const languageCodeSamples = codeSamples.filter(
|
|
@@ -73,3 +77,27 @@ function getCodeSampleSourceFromLanguage(language) {
|
|
|
73
77
|
return "";
|
|
74
78
|
}
|
|
75
79
|
exports.getCodeSampleSourceFromLanguage = getCodeSampleSourceFromLanguage;
|
|
80
|
+
function generateLanguageSet() {
|
|
81
|
+
const languageSet = [];
|
|
82
|
+
postman_code_generators_1.default.getLanguageList().forEach((language) => {
|
|
83
|
+
const variants = [];
|
|
84
|
+
language.variants.forEach((variant) => {
|
|
85
|
+
variants.push(variant.key);
|
|
86
|
+
});
|
|
87
|
+
languageSet.push({
|
|
88
|
+
highlight: language.syntax_mode,
|
|
89
|
+
language: language.key,
|
|
90
|
+
codeSampleLanguage: language.label,
|
|
91
|
+
logoClass: language.key,
|
|
92
|
+
options: {
|
|
93
|
+
longFormat: false,
|
|
94
|
+
followRedirect: true,
|
|
95
|
+
trimRequestBody: true,
|
|
96
|
+
},
|
|
97
|
+
variant: variants[0],
|
|
98
|
+
variants: variants,
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
return languageSet;
|
|
102
|
+
}
|
|
103
|
+
exports.generateLanguageSet = generateLanguageSet;
|
|
@@ -146,6 +146,24 @@ body[class="ReactModal__Body--open"] {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
.openapi-tabs__code-item--dart {
|
|
150
|
+
color: var(--ifm-color-info);
|
|
151
|
+
|
|
152
|
+
&::after {
|
|
153
|
+
content: "";
|
|
154
|
+
width: var(--code-tab-logo-width);
|
|
155
|
+
height: var(--code-tab-logo-height);
|
|
156
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/dart/dart-original.svg")
|
|
157
|
+
no-repeat;
|
|
158
|
+
margin-block: auto;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
&.active {
|
|
162
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-dart);
|
|
163
|
+
border-color: var(--openapi-code-tab-border-color-dart);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
149
167
|
.openapi-tabs__code-item--javascript {
|
|
150
168
|
color: var(--ifm-color-warning);
|
|
151
169
|
|
|
@@ -164,7 +182,7 @@ body[class="ReactModal__Body--open"] {
|
|
|
164
182
|
}
|
|
165
183
|
}
|
|
166
184
|
|
|
167
|
-
.openapi-tabs__code-item--
|
|
185
|
+
.openapi-tabs__code-item--curl {
|
|
168
186
|
color: var(--ifm-color-danger);
|
|
169
187
|
|
|
170
188
|
&::after {
|
|
@@ -179,7 +197,7 @@ body[class="ReactModal__Body--open"] {
|
|
|
179
197
|
}
|
|
180
198
|
|
|
181
199
|
&.active {
|
|
182
|
-
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-
|
|
200
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-curl);
|
|
183
201
|
border-color: var(--ifm-color-danger);
|
|
184
202
|
}
|
|
185
203
|
}
|
|
@@ -220,6 +238,96 @@ body[class="ReactModal__Body--open"] {
|
|
|
220
238
|
}
|
|
221
239
|
}
|
|
222
240
|
|
|
241
|
+
.openapi-tabs__code-item--r {
|
|
242
|
+
color: var(--ifm-color-gray-500);
|
|
243
|
+
|
|
244
|
+
&::after {
|
|
245
|
+
content: "";
|
|
246
|
+
width: var(--code-tab-logo-width);
|
|
247
|
+
height: var(--code-tab-logo-height);
|
|
248
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/r/r-original.svg")
|
|
249
|
+
no-repeat;
|
|
250
|
+
margin-block: auto;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
&.active {
|
|
254
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-r);
|
|
255
|
+
border-color: var(--openapi-code-tab-border-color-r);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.openapi-tabs__code-item--swift {
|
|
260
|
+
color: var(--ifm-color-danger);
|
|
261
|
+
|
|
262
|
+
&::after {
|
|
263
|
+
content: "";
|
|
264
|
+
width: var(--code-tab-logo-width);
|
|
265
|
+
height: var(--code-tab-logo-height);
|
|
266
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/swift/swift-original.svg")
|
|
267
|
+
no-repeat;
|
|
268
|
+
margin-block: auto;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
&.active {
|
|
272
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-swift);
|
|
273
|
+
border-color: var(--openapi-code-tab-border-color-swift);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.openapi-tabs__code-item--c {
|
|
278
|
+
color: var(--ifm-color-info);
|
|
279
|
+
|
|
280
|
+
&::after {
|
|
281
|
+
content: "";
|
|
282
|
+
width: var(--code-tab-logo-width);
|
|
283
|
+
height: var(--code-tab-logo-height);
|
|
284
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/c/c-original.svg")
|
|
285
|
+
no-repeat;
|
|
286
|
+
margin-block: auto;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
&.active {
|
|
290
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-c);
|
|
291
|
+
border-color: var(--openapi-code-tab-border-color-c);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.openapi-tabs__code-item--objective-c {
|
|
296
|
+
color: var(--ifm-color-info);
|
|
297
|
+
|
|
298
|
+
&::after {
|
|
299
|
+
content: "";
|
|
300
|
+
width: var(--code-tab-logo-width);
|
|
301
|
+
height: var(--code-tab-logo-height);
|
|
302
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/objectivec/objectivec-plain.svg")
|
|
303
|
+
no-repeat;
|
|
304
|
+
margin-block: auto;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
&.active {
|
|
308
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-objective-c);
|
|
309
|
+
border-color: var(--openapi-code-tab-border-color-objective-c);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.openapi-tabs__code-item--ocaml {
|
|
314
|
+
color: var(--ifm-color-warning);
|
|
315
|
+
|
|
316
|
+
&::after {
|
|
317
|
+
content: "";
|
|
318
|
+
width: var(--code-tab-logo-width);
|
|
319
|
+
height: var(--code-tab-logo-height);
|
|
320
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ocaml/ocaml-original.svg")
|
|
321
|
+
no-repeat;
|
|
322
|
+
margin-block: auto;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
&.active {
|
|
326
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-objective-ocaml);
|
|
327
|
+
border-color: var(--openapi-code-tab-border-color-objective-ocaml);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
223
331
|
.openapi-tabs__code-item--nodejs {
|
|
224
332
|
color: var(--ifm-color-success);
|
|
225
333
|
|
|
@@ -256,6 +364,42 @@ body[class="ReactModal__Body--open"] {
|
|
|
256
364
|
}
|
|
257
365
|
}
|
|
258
366
|
|
|
367
|
+
.openapi-tabs__code-item--kotlin {
|
|
368
|
+
color: var(--ifm-color-gray-500);
|
|
369
|
+
|
|
370
|
+
&::after {
|
|
371
|
+
content: "";
|
|
372
|
+
width: var(--code-tab-logo-width);
|
|
373
|
+
height: var(--code-tab-logo-height);
|
|
374
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/kotlin/kotlin-original.svg")
|
|
375
|
+
no-repeat;
|
|
376
|
+
margin-block: auto;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
&.active {
|
|
380
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-kotlin);
|
|
381
|
+
border-color: var(--openapi-code-tab-border-color-kotlin);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.openapi-tabs__code-item--rust {
|
|
386
|
+
color: var(--ifm-color-gray-500);
|
|
387
|
+
|
|
388
|
+
&::after {
|
|
389
|
+
content: "";
|
|
390
|
+
width: var(--code-tab-logo-width);
|
|
391
|
+
height: var(--code-tab-logo-height);
|
|
392
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/rust/rust-original.svg")
|
|
393
|
+
no-repeat;
|
|
394
|
+
margin-block: auto;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
&.active {
|
|
398
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-rust);
|
|
399
|
+
border-color: var(--openapi-code-tab-border-color-rust);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
259
403
|
.openapi-tabs__code-item--java {
|
|
260
404
|
color: var(--ifm-color-warning);
|
|
261
405
|
|
|
@@ -71,12 +71,24 @@ function TabList({
|
|
|
71
71
|
selectValue,
|
|
72
72
|
tabValues,
|
|
73
73
|
}) {
|
|
74
|
-
const tabRefs = [];
|
|
74
|
+
const tabRefs = (0, react_1.useRef)([]);
|
|
75
75
|
const { blockElementScrollPositionUntilNextRender } = (0,
|
|
76
76
|
internal_1.useScrollPositionBlocker)();
|
|
77
|
+
(0, react_1.useEffect)(() => {
|
|
78
|
+
const activeTab = tabRefs.current.find(
|
|
79
|
+
(tab) => tab?.getAttribute("aria-selected") === "true"
|
|
80
|
+
);
|
|
81
|
+
if (activeTab) {
|
|
82
|
+
activeTab.scrollIntoView({
|
|
83
|
+
behavior: "auto",
|
|
84
|
+
block: "center",
|
|
85
|
+
inline: "start",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}, []);
|
|
77
89
|
const handleTabChange = (event) => {
|
|
78
90
|
const newTab = event.currentTarget;
|
|
79
|
-
const newTabIndex = tabRefs.indexOf(newTab);
|
|
91
|
+
const newTabIndex = tabRefs.current.indexOf(newTab);
|
|
80
92
|
const newTabValue = tabValues[newTabIndex].value;
|
|
81
93
|
if (newTabValue !== selectedValue) {
|
|
82
94
|
blockElementScrollPositionUntilNextRender(newTab);
|
|
@@ -100,7 +112,7 @@ function TabList({
|
|
|
100
112
|
newLanguage = languageSet.filter(
|
|
101
113
|
(lang) => lang.language === newTabValue
|
|
102
114
|
)[0];
|
|
103
|
-
action.setSelectedVariant(newLanguage.
|
|
115
|
+
action.setSelectedVariant(newLanguage.variants[0].toLowerCase());
|
|
104
116
|
action.setSelectedSample(newLanguage.sample);
|
|
105
117
|
}
|
|
106
118
|
action.setLanguage(newLanguage);
|
|
@@ -114,13 +126,15 @@ function TabList({
|
|
|
114
126
|
break;
|
|
115
127
|
}
|
|
116
128
|
case "ArrowRight": {
|
|
117
|
-
const nextTab = tabRefs.indexOf(event.currentTarget) + 1;
|
|
118
|
-
focusElement = tabRefs[nextTab] ?? tabRefs[0];
|
|
129
|
+
const nextTab = tabRefs.current.indexOf(event.currentTarget) + 1;
|
|
130
|
+
focusElement = tabRefs.current[nextTab] ?? tabRefs.current[0];
|
|
119
131
|
break;
|
|
120
132
|
}
|
|
121
133
|
case "ArrowLeft": {
|
|
122
|
-
const prevTab = tabRefs.indexOf(event.currentTarget) - 1;
|
|
123
|
-
focusElement =
|
|
134
|
+
const prevTab = tabRefs.current.indexOf(event.currentTarget) - 1;
|
|
135
|
+
focusElement =
|
|
136
|
+
tabRefs.current[prevTab] ??
|
|
137
|
+
tabRefs.current[tabRefs.current.length - 1];
|
|
124
138
|
break;
|
|
125
139
|
}
|
|
126
140
|
default:
|
|
@@ -151,7 +165,7 @@ function TabList({
|
|
|
151
165
|
tabIndex: selectedValue === value ? 0 : -1,
|
|
152
166
|
"aria-selected": selectedValue === value,
|
|
153
167
|
key: value,
|
|
154
|
-
ref: (tabControl) => tabRefs.push(tabControl),
|
|
168
|
+
ref: (tabControl) => tabRefs.current.push(tabControl),
|
|
155
169
|
onKeyDown: handleKeydown,
|
|
156
170
|
onClick: handleTabChange,
|
|
157
171
|
...attributes,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "docusaurus-theme-openapi-docs",
|
|
3
3
|
"description": "OpenAPI theme for Docusaurus.",
|
|
4
|
-
"version": "0.0.0-
|
|
4
|
+
"version": "0.0.0-797",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"openapi",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"clsx": "^1.1.1",
|
|
43
43
|
"copy-text-to-clipboard": "^3.1.0",
|
|
44
44
|
"crypto-js": "^4.1.1",
|
|
45
|
-
"docusaurus-plugin-openapi-docs": "0.0.0-
|
|
45
|
+
"docusaurus-plugin-openapi-docs": "0.0.0-797",
|
|
46
46
|
"docusaurus-plugin-sass": "^0.2.3",
|
|
47
47
|
"file-saver": "^2.0.5",
|
|
48
48
|
"lodash": "^4.17.20",
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"engines": {
|
|
70
70
|
"node": ">=14"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "0ad6968bd07b838eab231eb7ef399d1dc5c6ac8d"
|
|
73
73
|
}
|
|
@@ -27,120 +27,10 @@ import {
|
|
|
27
27
|
getCodeSampleSourceFromLanguage,
|
|
28
28
|
mergeArraysbyLanguage,
|
|
29
29
|
mergeCodeSampleLanguage,
|
|
30
|
+
generateLanguageSet,
|
|
30
31
|
} from "./languages";
|
|
31
32
|
|
|
32
|
-
export const languageSet: Language[] =
|
|
33
|
-
{
|
|
34
|
-
highlight: "bash",
|
|
35
|
-
language: "curl",
|
|
36
|
-
codeSampleLanguage: "Shell",
|
|
37
|
-
logoClass: "bash",
|
|
38
|
-
options: {
|
|
39
|
-
longFormat: false,
|
|
40
|
-
followRedirect: true,
|
|
41
|
-
trimRequestBody: true,
|
|
42
|
-
},
|
|
43
|
-
variant: "cURL",
|
|
44
|
-
variants: ["curl"],
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
highlight: "python",
|
|
48
|
-
language: "python",
|
|
49
|
-
codeSampleLanguage: "Python",
|
|
50
|
-
logoClass: "python",
|
|
51
|
-
options: {
|
|
52
|
-
followRedirect: true,
|
|
53
|
-
trimRequestBody: true,
|
|
54
|
-
},
|
|
55
|
-
variant: "requests",
|
|
56
|
-
variants: ["requests", "http.client"],
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
highlight: "go",
|
|
60
|
-
language: "go",
|
|
61
|
-
codeSampleLanguage: "Go",
|
|
62
|
-
logoClass: "go",
|
|
63
|
-
options: {
|
|
64
|
-
followRedirect: true,
|
|
65
|
-
trimRequestBody: true,
|
|
66
|
-
},
|
|
67
|
-
variant: "native",
|
|
68
|
-
variants: ["native"],
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
highlight: "javascript",
|
|
72
|
-
language: "nodejs",
|
|
73
|
-
codeSampleLanguage: "JavaScript",
|
|
74
|
-
logoClass: "nodejs",
|
|
75
|
-
options: {
|
|
76
|
-
ES6_enabled: true,
|
|
77
|
-
followRedirect: true,
|
|
78
|
-
trimRequestBody: true,
|
|
79
|
-
},
|
|
80
|
-
variant: "axios",
|
|
81
|
-
variants: ["axios", "native"],
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
highlight: "ruby",
|
|
85
|
-
language: "ruby",
|
|
86
|
-
codeSampleLanguage: "Ruby",
|
|
87
|
-
logoClass: "ruby",
|
|
88
|
-
options: {
|
|
89
|
-
followRedirect: true,
|
|
90
|
-
trimRequestBody: true,
|
|
91
|
-
},
|
|
92
|
-
variant: "Net::HTTP",
|
|
93
|
-
variants: ["net::http"],
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
highlight: "csharp",
|
|
97
|
-
language: "csharp",
|
|
98
|
-
codeSampleLanguage: "C#",
|
|
99
|
-
logoClass: "csharp",
|
|
100
|
-
options: {
|
|
101
|
-
followRedirect: true,
|
|
102
|
-
trimRequestBody: true,
|
|
103
|
-
},
|
|
104
|
-
variant: "RestSharp",
|
|
105
|
-
variants: ["restsharp", "httpclient"],
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
highlight: "php",
|
|
109
|
-
language: "php",
|
|
110
|
-
codeSampleLanguage: "PHP",
|
|
111
|
-
logoClass: "php",
|
|
112
|
-
options: {
|
|
113
|
-
followRedirect: true,
|
|
114
|
-
trimRequestBody: true,
|
|
115
|
-
},
|
|
116
|
-
variant: "cURL",
|
|
117
|
-
variants: ["curl", "guzzle", "pecl_http", "http_request2"],
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
highlight: "java",
|
|
121
|
-
language: "java",
|
|
122
|
-
codeSampleLanguage: "Java",
|
|
123
|
-
logoClass: "java",
|
|
124
|
-
options: {
|
|
125
|
-
followRedirect: true,
|
|
126
|
-
trimRequestBody: true,
|
|
127
|
-
},
|
|
128
|
-
variant: "OkHttp",
|
|
129
|
-
variants: ["okhttp", "unirest"],
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
highlight: "powershell",
|
|
133
|
-
language: "powershell",
|
|
134
|
-
codeSampleLanguage: "PowerShell",
|
|
135
|
-
logoClass: "powershell",
|
|
136
|
-
options: {
|
|
137
|
-
followRedirect: true,
|
|
138
|
-
trimRequestBody: true,
|
|
139
|
-
},
|
|
140
|
-
variant: "RestMethod",
|
|
141
|
-
variants: ["restmethod"],
|
|
142
|
-
},
|
|
143
|
-
];
|
|
33
|
+
export const languageSet: Language[] = generateLanguageSet();
|
|
144
34
|
|
|
145
35
|
export interface Props {
|
|
146
36
|
postman: sdk.Request;
|
|
@@ -339,6 +229,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
|
|
|
339
229
|
|
|
340
230
|
return (
|
|
341
231
|
<>
|
|
232
|
+
{/* Outer language tabs */}
|
|
342
233
|
<CodeTabs
|
|
343
234
|
groupId="code-samples"
|
|
344
235
|
action={{
|
|
@@ -347,6 +238,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
|
|
|
347
238
|
setSelectedSample: setSelectedSample,
|
|
348
239
|
}}
|
|
349
240
|
languageSet={mergedLangs}
|
|
241
|
+
defaultValue={defaultLang[0]?.language ?? mergedLangs[0].language}
|
|
350
242
|
lazy
|
|
351
243
|
>
|
|
352
244
|
{mergedLangs.map((lang) => {
|
|
@@ -359,6 +251,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
|
|
|
359
251
|
className: `openapi-tabs__code-item--${lang.logoClass}`,
|
|
360
252
|
}}
|
|
361
253
|
>
|
|
254
|
+
{/* Inner x-codeSamples tabs */}
|
|
362
255
|
{lang.samples && (
|
|
363
256
|
<CodeTabs
|
|
364
257
|
className="openapi-tabs__code-container-inner"
|
|
@@ -400,6 +293,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
|
|
|
400
293
|
</CodeTabs>
|
|
401
294
|
)}
|
|
402
295
|
|
|
296
|
+
{/* Inner generated code snippets */}
|
|
403
297
|
<CodeTabs
|
|
404
298
|
className="openapi-tabs__code-container-inner"
|
|
405
299
|
action={{
|
|
@@ -9,6 +9,7 @@ import find from "lodash/find";
|
|
|
9
9
|
import isArray from "lodash/isArray";
|
|
10
10
|
import mergeWith from "lodash/mergeWith";
|
|
11
11
|
import unionBy from "lodash/unionBy";
|
|
12
|
+
import codegen from "postman-code-generators";
|
|
12
13
|
|
|
13
14
|
import { CodeSample, Language } from "./code-snippets-types";
|
|
14
15
|
|
|
@@ -73,3 +74,27 @@ export function getCodeSampleSourceFromLanguage(language: Language) {
|
|
|
73
74
|
|
|
74
75
|
return "";
|
|
75
76
|
}
|
|
77
|
+
|
|
78
|
+
export function generateLanguageSet() {
|
|
79
|
+
const languageSet: Language[] = [];
|
|
80
|
+
codegen.getLanguageList().forEach((language: any) => {
|
|
81
|
+
const variants: any = [];
|
|
82
|
+
language.variants.forEach((variant: any) => {
|
|
83
|
+
variants.push(variant.key);
|
|
84
|
+
});
|
|
85
|
+
languageSet.push({
|
|
86
|
+
highlight: language.syntax_mode,
|
|
87
|
+
language: language.key,
|
|
88
|
+
codeSampleLanguage: language.label,
|
|
89
|
+
logoClass: language.key,
|
|
90
|
+
options: {
|
|
91
|
+
longFormat: false,
|
|
92
|
+
followRedirect: true,
|
|
93
|
+
trimRequestBody: true,
|
|
94
|
+
},
|
|
95
|
+
variant: variants[0],
|
|
96
|
+
variants: variants,
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
return languageSet;
|
|
100
|
+
}
|
|
@@ -146,6 +146,24 @@ body[class="ReactModal__Body--open"] {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
.openapi-tabs__code-item--dart {
|
|
150
|
+
color: var(--ifm-color-info);
|
|
151
|
+
|
|
152
|
+
&::after {
|
|
153
|
+
content: "";
|
|
154
|
+
width: var(--code-tab-logo-width);
|
|
155
|
+
height: var(--code-tab-logo-height);
|
|
156
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/dart/dart-original.svg")
|
|
157
|
+
no-repeat;
|
|
158
|
+
margin-block: auto;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
&.active {
|
|
162
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-dart);
|
|
163
|
+
border-color: var(--openapi-code-tab-border-color-dart);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
149
167
|
.openapi-tabs__code-item--javascript {
|
|
150
168
|
color: var(--ifm-color-warning);
|
|
151
169
|
|
|
@@ -164,7 +182,7 @@ body[class="ReactModal__Body--open"] {
|
|
|
164
182
|
}
|
|
165
183
|
}
|
|
166
184
|
|
|
167
|
-
.openapi-tabs__code-item--
|
|
185
|
+
.openapi-tabs__code-item--curl {
|
|
168
186
|
color: var(--ifm-color-danger);
|
|
169
187
|
|
|
170
188
|
&::after {
|
|
@@ -179,7 +197,7 @@ body[class="ReactModal__Body--open"] {
|
|
|
179
197
|
}
|
|
180
198
|
|
|
181
199
|
&.active {
|
|
182
|
-
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-
|
|
200
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-curl);
|
|
183
201
|
border-color: var(--ifm-color-danger);
|
|
184
202
|
}
|
|
185
203
|
}
|
|
@@ -220,6 +238,96 @@ body[class="ReactModal__Body--open"] {
|
|
|
220
238
|
}
|
|
221
239
|
}
|
|
222
240
|
|
|
241
|
+
.openapi-tabs__code-item--r {
|
|
242
|
+
color: var(--ifm-color-gray-500);
|
|
243
|
+
|
|
244
|
+
&::after {
|
|
245
|
+
content: "";
|
|
246
|
+
width: var(--code-tab-logo-width);
|
|
247
|
+
height: var(--code-tab-logo-height);
|
|
248
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/r/r-original.svg")
|
|
249
|
+
no-repeat;
|
|
250
|
+
margin-block: auto;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
&.active {
|
|
254
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-r);
|
|
255
|
+
border-color: var(--openapi-code-tab-border-color-r);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.openapi-tabs__code-item--swift {
|
|
260
|
+
color: var(--ifm-color-danger);
|
|
261
|
+
|
|
262
|
+
&::after {
|
|
263
|
+
content: "";
|
|
264
|
+
width: var(--code-tab-logo-width);
|
|
265
|
+
height: var(--code-tab-logo-height);
|
|
266
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/swift/swift-original.svg")
|
|
267
|
+
no-repeat;
|
|
268
|
+
margin-block: auto;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
&.active {
|
|
272
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-swift);
|
|
273
|
+
border-color: var(--openapi-code-tab-border-color-swift);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.openapi-tabs__code-item--c {
|
|
278
|
+
color: var(--ifm-color-info);
|
|
279
|
+
|
|
280
|
+
&::after {
|
|
281
|
+
content: "";
|
|
282
|
+
width: var(--code-tab-logo-width);
|
|
283
|
+
height: var(--code-tab-logo-height);
|
|
284
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/c/c-original.svg")
|
|
285
|
+
no-repeat;
|
|
286
|
+
margin-block: auto;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
&.active {
|
|
290
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-c);
|
|
291
|
+
border-color: var(--openapi-code-tab-border-color-c);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.openapi-tabs__code-item--objective-c {
|
|
296
|
+
color: var(--ifm-color-info);
|
|
297
|
+
|
|
298
|
+
&::after {
|
|
299
|
+
content: "";
|
|
300
|
+
width: var(--code-tab-logo-width);
|
|
301
|
+
height: var(--code-tab-logo-height);
|
|
302
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/objectivec/objectivec-plain.svg")
|
|
303
|
+
no-repeat;
|
|
304
|
+
margin-block: auto;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
&.active {
|
|
308
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-objective-c);
|
|
309
|
+
border-color: var(--openapi-code-tab-border-color-objective-c);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.openapi-tabs__code-item--ocaml {
|
|
314
|
+
color: var(--ifm-color-warning);
|
|
315
|
+
|
|
316
|
+
&::after {
|
|
317
|
+
content: "";
|
|
318
|
+
width: var(--code-tab-logo-width);
|
|
319
|
+
height: var(--code-tab-logo-height);
|
|
320
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ocaml/ocaml-original.svg")
|
|
321
|
+
no-repeat;
|
|
322
|
+
margin-block: auto;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
&.active {
|
|
326
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-objective-ocaml);
|
|
327
|
+
border-color: var(--openapi-code-tab-border-color-objective-ocaml);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
223
331
|
.openapi-tabs__code-item--nodejs {
|
|
224
332
|
color: var(--ifm-color-success);
|
|
225
333
|
|
|
@@ -256,6 +364,42 @@ body[class="ReactModal__Body--open"] {
|
|
|
256
364
|
}
|
|
257
365
|
}
|
|
258
366
|
|
|
367
|
+
.openapi-tabs__code-item--kotlin {
|
|
368
|
+
color: var(--ifm-color-gray-500);
|
|
369
|
+
|
|
370
|
+
&::after {
|
|
371
|
+
content: "";
|
|
372
|
+
width: var(--code-tab-logo-width);
|
|
373
|
+
height: var(--code-tab-logo-height);
|
|
374
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/kotlin/kotlin-original.svg")
|
|
375
|
+
no-repeat;
|
|
376
|
+
margin-block: auto;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
&.active {
|
|
380
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-kotlin);
|
|
381
|
+
border-color: var(--openapi-code-tab-border-color-kotlin);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.openapi-tabs__code-item--rust {
|
|
386
|
+
color: var(--ifm-color-gray-500);
|
|
387
|
+
|
|
388
|
+
&::after {
|
|
389
|
+
content: "";
|
|
390
|
+
width: var(--code-tab-logo-width);
|
|
391
|
+
height: var(--code-tab-logo-height);
|
|
392
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/rust/rust-original.svg")
|
|
393
|
+
no-repeat;
|
|
394
|
+
margin-block: auto;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
&.active {
|
|
398
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-rust);
|
|
399
|
+
border-color: var(--openapi-code-tab-border-color-rust);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
259
403
|
.openapi-tabs__code-item--java {
|
|
260
404
|
color: var(--ifm-color-warning);
|
|
261
405
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
* ========================================================================== */
|
|
7
7
|
|
|
8
|
-
import React, { cloneElement, ReactElement } from "react";
|
|
8
|
+
import React, { cloneElement, ReactElement, useEffect, useRef } from "react";
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
11
|
sanitizeTabsChildren,
|
|
@@ -43,10 +43,23 @@ function TabList({
|
|
|
43
43
|
selectValue,
|
|
44
44
|
tabValues,
|
|
45
45
|
}: CodeTabsProps & ReturnType<typeof useTabs>) {
|
|
46
|
-
const tabRefs
|
|
46
|
+
const tabRefs = useRef<(HTMLLIElement | null)[]>([]);
|
|
47
47
|
const { blockElementScrollPositionUntilNextRender } =
|
|
48
48
|
useScrollPositionBlocker();
|
|
49
49
|
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const activeTab = tabRefs.current.find(
|
|
52
|
+
(tab) => tab?.getAttribute("aria-selected") === "true"
|
|
53
|
+
);
|
|
54
|
+
if (activeTab) {
|
|
55
|
+
activeTab.scrollIntoView({
|
|
56
|
+
behavior: "auto",
|
|
57
|
+
block: "center",
|
|
58
|
+
inline: "start",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}, []);
|
|
62
|
+
|
|
50
63
|
const handleTabChange = (
|
|
51
64
|
event:
|
|
52
65
|
| React.FocusEvent<HTMLLIElement>
|
|
@@ -54,7 +67,7 @@ function TabList({
|
|
|
54
67
|
| React.KeyboardEvent<HTMLLIElement>
|
|
55
68
|
) => {
|
|
56
69
|
const newTab = event.currentTarget;
|
|
57
|
-
const newTabIndex = tabRefs.indexOf(newTab);
|
|
70
|
+
const newTabIndex = tabRefs.current.indexOf(newTab);
|
|
58
71
|
const newTabValue = tabValues[newTabIndex]!.value;
|
|
59
72
|
|
|
60
73
|
if (newTabValue !== selectedValue) {
|
|
@@ -80,7 +93,7 @@ function TabList({
|
|
|
80
93
|
newLanguage = languageSet.filter(
|
|
81
94
|
(lang: Language) => lang.language === newTabValue
|
|
82
95
|
)[0];
|
|
83
|
-
action.setSelectedVariant(newLanguage.
|
|
96
|
+
action.setSelectedVariant(newLanguage.variants[0].toLowerCase());
|
|
84
97
|
action.setSelectedSample(newLanguage.sample);
|
|
85
98
|
}
|
|
86
99
|
action.setLanguage(newLanguage);
|
|
@@ -96,13 +109,15 @@ function TabList({
|
|
|
96
109
|
break;
|
|
97
110
|
}
|
|
98
111
|
case "ArrowRight": {
|
|
99
|
-
const nextTab = tabRefs.indexOf(event.currentTarget) + 1;
|
|
100
|
-
focusElement = tabRefs[nextTab] ?? tabRefs[0]!;
|
|
112
|
+
const nextTab = tabRefs.current.indexOf(event.currentTarget) + 1;
|
|
113
|
+
focusElement = tabRefs.current[nextTab] ?? tabRefs.current[0]!;
|
|
101
114
|
break;
|
|
102
115
|
}
|
|
103
116
|
case "ArrowLeft": {
|
|
104
|
-
const prevTab = tabRefs.indexOf(event.currentTarget) - 1;
|
|
105
|
-
focusElement =
|
|
117
|
+
const prevTab = tabRefs.current.indexOf(event.currentTarget) - 1;
|
|
118
|
+
focusElement =
|
|
119
|
+
tabRefs.current[prevTab] ??
|
|
120
|
+
tabRefs.current[tabRefs.current.length - 1]!;
|
|
106
121
|
break;
|
|
107
122
|
}
|
|
108
123
|
default:
|
|
@@ -132,7 +147,7 @@ function TabList({
|
|
|
132
147
|
tabIndex={selectedValue === value ? 0 : -1}
|
|
133
148
|
aria-selected={selectedValue === value}
|
|
134
149
|
key={value}
|
|
135
|
-
ref={(tabControl) => tabRefs.push(tabControl)}
|
|
150
|
+
ref={(tabControl) => tabRefs.current.push(tabControl)}
|
|
136
151
|
onKeyDown={handleKeydown}
|
|
137
152
|
onClick={handleTabChange}
|
|
138
153
|
{...attributes}
|