docusaurus-theme-openapi-docs 0.0.0-beta.646 → 0.0.0-beta.647

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.
@@ -12,11 +12,39 @@
12
12
 
13
13
  .openapi-tabs__code-container {
14
14
  margin-bottom: 1rem;
15
+
16
+ .openapi-tabs__code-item {
17
+ display: flex;
18
+ flex-direction: column-reverse;
19
+ flex: 0 0 80px;
20
+ align-items: center;
21
+ padding: 0.5rem 0 !important;
22
+ margin-top: 0 !important;
23
+ margin-right: 0.5rem;
24
+ border: 1px solid transparent;
25
+ transition: 300ms;
26
+
27
+ &:not(.active):hover {
28
+ border: 1px solid var(--openapi-code-tab-border-color);
29
+ }
30
+
31
+ &:hover {
32
+ background-color: transparent;
33
+ }
34
+
35
+ span {
36
+ padding-top: 0.5rem;
37
+ color: var(--ifm-font-color-secondary);
38
+ font-size: 10px;
39
+ text-transform: uppercase;
40
+ }
41
+ }
15
42
  }
16
43
 
17
44
  .openapi-tabs__code-list-container {
18
45
  display: flex;
19
46
  justify-content: flex-start;
47
+ padding: 0.25rem;
20
48
  padding-bottom: 0.6rem;
21
49
  }
22
50
 
@@ -34,20 +62,20 @@ body[class="ReactModal__Body--open"] {
34
62
  }
35
63
  }
36
64
 
37
- .openapi-tabs__code-item {
38
- margin-top: 0 !important;
39
- margin-right: 0.5rem;
40
- padding-left: 1.5rem;
41
- padding-right: 1.5rem;
42
- padding-top: 1rem !important;
43
- padding-bottom: 1rem !important;
65
+ .openapi-tabs__code-item--variant {
66
+ color: var(--ifm-color-secondary);
44
67
 
45
68
  &.active {
46
- border-bottom-left-radius: 0;
47
- border-bottom-right-radius: 0;
69
+ border-color: var(--ifm-toc-border-color);
48
70
  }
49
71
  }
50
72
 
73
+ .openapi-tabs__code-item--variant > span {
74
+ padding-top: unset !important;
75
+ padding-left: 0.5rem !important;
76
+ padding-right: 0.5rem !important;
77
+ }
78
+
51
79
  .openapi-tabs__code-item--python {
52
80
  color: var(--ifm-color-success);
53
81
 
@@ -55,13 +83,14 @@ body[class="ReactModal__Body--open"] {
55
83
  content: "";
56
84
  width: var(--code-tab-logo-width);
57
85
  height: var(--code-tab-logo-height);
58
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg");
86
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg")
87
+ no-repeat;
59
88
  margin-block: auto;
60
89
  }
61
90
 
62
91
  &.active {
63
- border-bottom-color: var(--ifm-color-success);
64
- background-color: var(--ifm-color-emphasis-100);
92
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-python);
93
+ border-color: var(--openapi-code-tab-border-color-python);
65
94
  }
66
95
  }
67
96
 
@@ -72,13 +101,14 @@ body[class="ReactModal__Body--open"] {
72
101
  content: "";
73
102
  width: var(--code-tab-logo-width);
74
103
  height: var(--code-tab-logo-height);
75
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/go/go-original-wordmark.svg");
104
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/go/go-original-wordmark.svg")
105
+ no-repeat;
76
106
  margin-block: auto;
77
107
  }
78
108
 
79
109
  &.active {
80
- border-bottom-color: var(--ifm-color-info);
81
- background-color: var(--ifm-color-emphasis-100);
110
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-go);
111
+ border-color: var(--openapi-code-tab-border-color-go);
82
112
  }
83
113
  }
84
114
 
@@ -89,13 +119,14 @@ body[class="ReactModal__Body--open"] {
89
119
  content: "";
90
120
  width: var(--code-tab-logo-width);
91
121
  height: var(--code-tab-logo-height);
92
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/javascript/javascript-original.svg");
122
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/javascript/javascript-original.svg")
123
+ no-repeat;
93
124
  margin-block: auto;
94
125
  }
95
126
 
96
127
  &.active {
97
- border-bottom-color: var(--ifm-color-warning);
98
- background-color: var(--ifm-color-emphasis-100);
128
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-js);
129
+ border-color: var(--openapi-code-tab-border-color-js);
99
130
  }
100
131
  }
101
132
 
@@ -106,15 +137,16 @@ body[class="ReactModal__Body--open"] {
106
137
  content: "";
107
138
  width: var(--code-tab-logo-width);
108
139
  height: var(--code-tab-logo-height);
109
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/bash/bash-plain.svg");
140
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/bash/bash-plain.svg")
141
+ no-repeat;
110
142
  margin-block: auto;
111
143
  background-color: var(--bash-background-color);
112
144
  border-radius: var(--bash-border-radius);
113
145
  }
114
146
 
115
147
  &.active {
116
- border-bottom-color: var(--ifm-color-danger);
117
- background-color: var(--ifm-color-emphasis-100);
148
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-bash);
149
+ border-color: var(--ifm-color-danger);
118
150
  }
119
151
  }
120
152
 
@@ -125,13 +157,14 @@ body[class="ReactModal__Body--open"] {
125
157
  content: "";
126
158
  width: var(--code-tab-logo-width);
127
159
  height: var(--code-tab-logo-height);
128
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ruby/ruby-plain.svg");
160
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ruby/ruby-plain.svg")
161
+ no-repeat;
129
162
  margin-block: auto;
130
163
  }
131
164
 
132
165
  &.active {
133
- border-bottom-color: var(--ifm-color-danger);
134
- background-color: var(--ifm-color-emphasis-100);
166
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-ruby);
167
+ border-color: var(--openapi-code-tab-border-color-ruby);
135
168
  }
136
169
  }
137
170
 
@@ -142,13 +175,14 @@ body[class="ReactModal__Body--open"] {
142
175
  content: "";
143
176
  width: var(--code-tab-logo-width);
144
177
  height: var(--code-tab-logo-height);
145
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/csharp/csharp-original.svg");
178
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/csharp/csharp-original.svg")
179
+ no-repeat;
146
180
  margin-block: auto;
147
181
  }
148
182
 
149
183
  &.active {
150
- border-bottom-color: var(--ifm-color-gray-500);
151
- background-color: var(--ifm-color-emphasis-100);
184
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-csharp);
185
+ border-color: var(--openapi-code-tab-border-color-csharp);
152
186
  }
153
187
  }
154
188
 
@@ -159,13 +193,14 @@ body[class="ReactModal__Body--open"] {
159
193
  content: "";
160
194
  width: var(--code-tab-logo-width);
161
195
  height: var(--code-tab-logo-height);
162
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/nodejs/nodejs-original.svg");
196
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/nodejs/nodejs-original.svg")
197
+ no-repeat;
163
198
  margin-block: auto;
164
199
  }
165
200
 
166
201
  &.active {
167
- border-bottom-color: var(--ifm-color-success);
168
- background-color: var(--ifm-color-emphasis-100);
202
+ box-shadow: 0 0 0 3px var(--opeanpi-code-tab-shadow-color-nodejs);
203
+ border-color: var(--openapi-code-tab-border-color-nodejs);
169
204
  }
170
205
  }
171
206
 
@@ -176,13 +211,14 @@ body[class="ReactModal__Body--open"] {
176
211
  content: "";
177
212
  width: var(--code-tab-logo-width);
178
213
  height: var(--code-tab-logo-height);
179
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/php/php-original.svg");
214
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/php/php-original.svg")
215
+ no-repeat;
180
216
  margin-block: auto;
181
217
  }
182
218
 
183
219
  &.active {
184
- border-bottom-color: var(--ifm-color-gray-500);
185
- background-color: var(--ifm-color-emphasis-100);
220
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-php);
221
+ border-color: var(--openapi-code-tab-border-color-php);
186
222
  }
187
223
  }
188
224
 
@@ -193,13 +229,14 @@ body[class="ReactModal__Body--open"] {
193
229
  content: "";
194
230
  width: var(--code-tab-logo-width);
195
231
  height: var(--code-tab-logo-height);
196
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/java/java-original.svg");
232
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/java/java-original.svg")
233
+ no-repeat;
197
234
  margin-block: auto;
198
235
  }
199
236
 
200
237
  &.active {
201
- border-bottom-color: var(--ifm-color-warning);
202
- background-color: var(--ifm-color-emphasis-100);
238
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-java);
239
+ border-color: var(--openapi-code-tab-border-color-java);
203
240
  }
204
241
  }
205
242
 
@@ -210,13 +247,14 @@ body[class="ReactModal__Body--open"] {
210
247
  content: "";
211
248
  width: var(--code-tab-logo-width);
212
249
  height: var(--code-tab-logo-height);
213
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/windows8/windows8-original.svg");
250
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/windows8/windows8-original.svg")
251
+ no-repeat;
214
252
  margin-block: auto;
215
253
  }
216
254
 
217
255
  &.active {
218
- border-bottom-color: var(--ifm-color-success);
219
- background-color: var(--ifm-color-emphasis-100);
256
+ box-shadow: 0 0 0 3px var(--opeanpi-code-tab-shadow-color-powershell);
257
+ border-color: var(--openapi-code-tab-border-color-powershell);
220
258
  }
221
259
  }
222
260
 
@@ -17,6 +17,8 @@ import clsx from "clsx";
17
17
 
18
18
  function TabList({
19
19
  action,
20
+ currentLanguage,
21
+ includeVariant,
20
22
  className,
21
23
  block,
22
24
  selectedValue,
@@ -38,10 +40,20 @@ function TabList({
38
40
  }
39
41
 
40
42
  if (action) {
41
- const newLanguage = languageSet.filter(
42
- (lang) => lang.language === newTabValue
43
- );
44
- action(newLanguage[0]);
43
+ let newLanguage;
44
+ if (currentLanguage && includeVariant) {
45
+ newLanguage = languageSet.filter(
46
+ (lang) => lang.language === currentLanguage
47
+ )[0];
48
+ newLanguage.variant = newTabValue;
49
+ action.setSelectedVariant(newTabValue.toLowerCase());
50
+ } else {
51
+ newLanguage = languageSet.filter(
52
+ (lang) => lang.language === newTabValue
53
+ )[0];
54
+ action.setSelectedVariant(newLanguage.variant.toLowerCase());
55
+ }
56
+ action.setLanguage(newLanguage);
45
57
  }
46
58
  };
47
59
 
@@ -101,7 +113,7 @@ function TabList({
101
113
  }
102
114
  )}
103
115
  >
104
- {label ?? value}
116
+ <span>{label ?? value}</span>
105
117
  </li>
106
118
  ))}
107
119
  </ul>
@@ -1,11 +1,12 @@
1
1
  /// <reference types="react" />
2
2
  import sdk from "@paloaltonetworks/postman-collection";
3
3
  export interface Language {
4
- highlight?: string;
4
+ highlight: string;
5
5
  language: string;
6
- logoClass?: string;
7
- variant?: string;
8
- options?: {
6
+ logoClass: string;
7
+ variant: string;
8
+ variants: string[];
9
+ options: {
9
10
  [key: string]: boolean;
10
11
  };
11
12
  source?: string;
@@ -83,6 +83,7 @@ exports.languageSet = [
83
83
  trimRequestBody: true,
84
84
  },
85
85
  variant: "cURL",
86
+ variants: ["curl"],
86
87
  },
87
88
  {
88
89
  highlight: "python",
@@ -93,6 +94,7 @@ exports.languageSet = [
93
94
  trimRequestBody: true,
94
95
  },
95
96
  variant: "requests",
97
+ variants: ["requests", "http.client"],
96
98
  },
97
99
  {
98
100
  highlight: "go",
@@ -103,6 +105,7 @@ exports.languageSet = [
103
105
  trimRequestBody: true,
104
106
  },
105
107
  variant: "native",
108
+ variants: ["native"],
106
109
  },
107
110
  {
108
111
  highlight: "javascript",
@@ -114,6 +117,7 @@ exports.languageSet = [
114
117
  trimRequestBody: true,
115
118
  },
116
119
  variant: "axios",
120
+ variants: ["axios", "native", "request", "unirest"],
117
121
  },
118
122
  {
119
123
  highlight: "ruby",
@@ -124,6 +128,7 @@ exports.languageSet = [
124
128
  trimRequestBody: true,
125
129
  },
126
130
  variant: "Net::HTTP",
131
+ variants: ["net::http"],
127
132
  },
128
133
  {
129
134
  highlight: "csharp",
@@ -134,6 +139,7 @@ exports.languageSet = [
134
139
  trimRequestBody: true,
135
140
  },
136
141
  variant: "RestSharp",
142
+ variants: ["restsharp", "httpclient"],
137
143
  },
138
144
  {
139
145
  highlight: "php",
@@ -144,6 +150,7 @@ exports.languageSet = [
144
150
  trimRequestBody: true,
145
151
  },
146
152
  variant: "cURL",
153
+ variants: ["curl", "guzzle", "pecl_http", "http_request2"],
147
154
  },
148
155
  {
149
156
  highlight: "java",
@@ -154,6 +161,7 @@ exports.languageSet = [
154
161
  trimRequestBody: true,
155
162
  },
156
163
  variant: "OkHttp",
164
+ variants: ["okhttp", "unirest"],
157
165
  },
158
166
  {
159
167
  highlight: "powershell",
@@ -164,6 +172,7 @@ exports.languageSet = [
164
172
  trimRequestBody: true,
165
173
  },
166
174
  variant: "RestMethod",
175
+ variants: ["restmethod"],
167
176
  },
168
177
  ];
169
178
  function CodeTab({ children, hidden, className, onClick }) {
@@ -214,6 +223,7 @@ function Curl({ postman, codeSamples }) {
214
223
  (lang) =>
215
224
  lang.language === localStorage.getItem("docusaurus.tab.code-samples")
216
225
  );
226
+ const [selectedVariant, setSelectedVariant] = (0, react_1.useState)();
217
227
  const [language, setLanguage] = (0, react_1.useState)(() => {
218
228
  // Return first index if only 1 user-defined language exists
219
229
  if (mergedLangs.length === 1) {
@@ -298,6 +308,33 @@ function Curl({ postman, codeSamples }) {
298
308
  auth,
299
309
  mergedLangs,
300
310
  ]);
311
+ (0, react_1.useEffect)(() => {
312
+ if (selectedVariant && selectedVariant !== language.variant) {
313
+ const postmanRequest = (0, buildPostmanRequest_1.default)(postman, {
314
+ queryParams,
315
+ pathParams,
316
+ cookieParams,
317
+ contentType,
318
+ accept,
319
+ headerParams,
320
+ body,
321
+ server,
322
+ auth,
323
+ });
324
+ postman_code_generators_1.default.convert(
325
+ language.language,
326
+ selectedVariant,
327
+ postmanRequest,
328
+ language.options,
329
+ (error, snippet) => {
330
+ if (error) {
331
+ return;
332
+ }
333
+ setCodeText(snippet);
334
+ }
335
+ );
336
+ }
337
+ });
301
338
  if (language === undefined) {
302
339
  return null;
303
340
  }
@@ -306,29 +343,59 @@ function Curl({ postman, codeSamples }) {
306
343
  null,
307
344
  react_1.default.createElement(
308
345
  CodeTabs_1.default,
309
- { groupId: "code-samples", action: setLanguage },
346
+ {
347
+ groupId: "code-samples",
348
+ action: {
349
+ setLanguage: setLanguage,
350
+ setSelectedVariant: setSelectedVariant,
351
+ },
352
+ lazy: true,
353
+ },
310
354
  mergedLangs.map((lang) => {
311
355
  return react_1.default.createElement(
312
356
  CodeTab,
313
357
  {
314
358
  value: lang.language,
315
- label: "",
316
- key: lang.variant
317
- ? `${lang.language}-${lang.variant}`
318
- : lang.language,
359
+ label: lang.language,
360
+ key: lang.language,
319
361
  attributes: {
320
362
  className: `openapi-tabs__code-item--${lang.logoClass}`,
321
363
  },
322
364
  },
323
365
  react_1.default.createElement(
324
- ApiCodeBlock_1.default,
366
+ CodeTabs_1.default,
325
367
  {
326
- language: lang.highlight,
327
- className: "openapi-demo__code-block",
328
- title: `${lang.language} / ${lang.variant}`,
329
- showLineNumbers: true,
368
+ action: {
369
+ setLanguage: setLanguage,
370
+ setSelectedVariant: setSelectedVariant,
371
+ },
372
+ includeVariant: true,
373
+ currentLanguage: lang.language,
374
+ defaultValue: selectedVariant,
375
+ lazy: true,
330
376
  },
331
- codeText
377
+ lang.variants.map((variant) => {
378
+ return react_1.default.createElement(
379
+ CodeTab,
380
+ {
381
+ value: variant.toLowerCase(),
382
+ label: variant.toUpperCase(),
383
+ key: `${lang.language}-${lang.variant}`,
384
+ attributes: {
385
+ className: `openapi-tabs__code-item--variant`,
386
+ },
387
+ },
388
+ react_1.default.createElement(
389
+ ApiCodeBlock_1.default,
390
+ {
391
+ language: lang.highlight,
392
+ className: "openapi-demo__code-block",
393
+ showLineNumbers: true,
394
+ },
395
+ codeText
396
+ )
397
+ );
398
+ })
332
399
  )
333
400
  );
334
401
  })
@@ -54,6 +54,27 @@
54
54
  --openapi-input-border: var(--ifm-color-primary);
55
55
  --openapi-input-background: var(--openapi-card-background-color);
56
56
  --openapi-tree-line-color: var(--ifm-toc-border-color);
57
+ --openapi-code-tab-border-color: var(--ifm-toc-border-color);
58
+ --openapi-code-tab-border-color-python: #ffdb50;
59
+ --openapi-code-tab-border-color-bash: var(--ifm-color-danger);
60
+ --openapi-code-tab-border-color-go: var(--ifm-color-info);
61
+ --openapi-code-tab-border-color-js: var(--ifm-color-warning);
62
+ --openapi-code-tab-border-color-ruby: var(--ifm-color-danger);
63
+ --openapi-code-tab-border-color-csharp: #9b4f96;
64
+ --openapi-code-tab-border-color-nodejs: var(--ifm-color-success);
65
+ --openapi-code-tab-border-color-php: #6181b6;
66
+ --openapi-code-tab-border-color-java: #0374bd;
67
+ --openapi-code-tab-border-color-powershell: #00adef;
68
+ --openapi-code-tab-shadow-color-python: rgba(255, 219, 80, 0.25);
69
+ --openapi-code-tab-shadow-color-bash: rgba(250, 56, 62, 0.25);
70
+ --openapi-code-tab-shadow-color-go: rgba(84, 199, 236, 0.25);
71
+ --openapi-code-tab-shadow-color-js: rgba(255, 186, 0, 0.25);
72
+ --openapi-code-tab-shadow-color-ruby: rgba(250, 56, 62, 0.25);
73
+ --openapi-code-tab-shadow-color-csharp: rgba(155, 79, 150, 0.25);
74
+ --opeanpi-code-tab-shadow-color-nodejs: rgba(0, 164, 0, 0.25);
75
+ --openapi-code-tab-shadow-color-php: rgba(97, 129, 182, 0.25);
76
+ --openapi-code-tab-shadow-color-java: rgba(3, 116, 189, 0.25);
77
+ --opeanpi-code-tab-shadow-color-powershell: rgba(3, 116, 189, 0.25);
57
78
  }
58
79
 
59
80
  [data-theme="dark"] {
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-beta.646",
4
+ "version": "0.0.0-beta.647",
5
5
  "license": "MIT",
6
6
  "keywords": [
7
7
  "openapi",
@@ -49,7 +49,7 @@
49
49
  "clsx": "^1.1.1",
50
50
  "copy-text-to-clipboard": "^3.1.0",
51
51
  "crypto-js": "^4.1.1",
52
- "docusaurus-plugin-openapi-docs": "0.0.0-beta.646",
52
+ "docusaurus-plugin-openapi-docs": "0.0.0-beta.647",
53
53
  "docusaurus-plugin-sass": "^0.2.3",
54
54
  "file-saver": "^2.0.5",
55
55
  "immer": "^9.0.7",
@@ -75,5 +75,5 @@
75
75
  "engines": {
76
76
  "node": ">=14"
77
77
  },
78
- "gitHead": "15ab01afc0523c9407b75c66b33e2df018af0f6d"
78
+ "gitHead": "358ce5cd595fdd63d86b95dbc0f58569d9a15eaf"
79
79
  }
@@ -12,11 +12,39 @@
12
12
 
13
13
  .openapi-tabs__code-container {
14
14
  margin-bottom: 1rem;
15
+
16
+ .openapi-tabs__code-item {
17
+ display: flex;
18
+ flex-direction: column-reverse;
19
+ flex: 0 0 80px;
20
+ align-items: center;
21
+ padding: 0.5rem 0 !important;
22
+ margin-top: 0 !important;
23
+ margin-right: 0.5rem;
24
+ border: 1px solid transparent;
25
+ transition: 300ms;
26
+
27
+ &:not(.active):hover {
28
+ border: 1px solid var(--openapi-code-tab-border-color);
29
+ }
30
+
31
+ &:hover {
32
+ background-color: transparent;
33
+ }
34
+
35
+ span {
36
+ padding-top: 0.5rem;
37
+ color: var(--ifm-font-color-secondary);
38
+ font-size: 10px;
39
+ text-transform: uppercase;
40
+ }
41
+ }
15
42
  }
16
43
 
17
44
  .openapi-tabs__code-list-container {
18
45
  display: flex;
19
46
  justify-content: flex-start;
47
+ padding: 0.25rem;
20
48
  padding-bottom: 0.6rem;
21
49
  }
22
50
 
@@ -34,20 +62,20 @@ body[class="ReactModal__Body--open"] {
34
62
  }
35
63
  }
36
64
 
37
- .openapi-tabs__code-item {
38
- margin-top: 0 !important;
39
- margin-right: 0.5rem;
40
- padding-left: 1.5rem;
41
- padding-right: 1.5rem;
42
- padding-top: 1rem !important;
43
- padding-bottom: 1rem !important;
65
+ .openapi-tabs__code-item--variant {
66
+ color: var(--ifm-color-secondary);
44
67
 
45
68
  &.active {
46
- border-bottom-left-radius: 0;
47
- border-bottom-right-radius: 0;
69
+ border-color: var(--ifm-toc-border-color);
48
70
  }
49
71
  }
50
72
 
73
+ .openapi-tabs__code-item--variant > span {
74
+ padding-top: unset !important;
75
+ padding-left: 0.5rem !important;
76
+ padding-right: 0.5rem !important;
77
+ }
78
+
51
79
  .openapi-tabs__code-item--python {
52
80
  color: var(--ifm-color-success);
53
81
 
@@ -55,13 +83,14 @@ body[class="ReactModal__Body--open"] {
55
83
  content: "";
56
84
  width: var(--code-tab-logo-width);
57
85
  height: var(--code-tab-logo-height);
58
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg");
86
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg")
87
+ no-repeat;
59
88
  margin-block: auto;
60
89
  }
61
90
 
62
91
  &.active {
63
- border-bottom-color: var(--ifm-color-success);
64
- background-color: var(--ifm-color-emphasis-100);
92
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-python);
93
+ border-color: var(--openapi-code-tab-border-color-python);
65
94
  }
66
95
  }
67
96
 
@@ -72,13 +101,14 @@ body[class="ReactModal__Body--open"] {
72
101
  content: "";
73
102
  width: var(--code-tab-logo-width);
74
103
  height: var(--code-tab-logo-height);
75
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/go/go-original-wordmark.svg");
104
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/go/go-original-wordmark.svg")
105
+ no-repeat;
76
106
  margin-block: auto;
77
107
  }
78
108
 
79
109
  &.active {
80
- border-bottom-color: var(--ifm-color-info);
81
- background-color: var(--ifm-color-emphasis-100);
110
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-go);
111
+ border-color: var(--openapi-code-tab-border-color-go);
82
112
  }
83
113
  }
84
114
 
@@ -89,13 +119,14 @@ body[class="ReactModal__Body--open"] {
89
119
  content: "";
90
120
  width: var(--code-tab-logo-width);
91
121
  height: var(--code-tab-logo-height);
92
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/javascript/javascript-original.svg");
122
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/javascript/javascript-original.svg")
123
+ no-repeat;
93
124
  margin-block: auto;
94
125
  }
95
126
 
96
127
  &.active {
97
- border-bottom-color: var(--ifm-color-warning);
98
- background-color: var(--ifm-color-emphasis-100);
128
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-js);
129
+ border-color: var(--openapi-code-tab-border-color-js);
99
130
  }
100
131
  }
101
132
 
@@ -106,15 +137,16 @@ body[class="ReactModal__Body--open"] {
106
137
  content: "";
107
138
  width: var(--code-tab-logo-width);
108
139
  height: var(--code-tab-logo-height);
109
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/bash/bash-plain.svg");
140
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/bash/bash-plain.svg")
141
+ no-repeat;
110
142
  margin-block: auto;
111
143
  background-color: var(--bash-background-color);
112
144
  border-radius: var(--bash-border-radius);
113
145
  }
114
146
 
115
147
  &.active {
116
- border-bottom-color: var(--ifm-color-danger);
117
- background-color: var(--ifm-color-emphasis-100);
148
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-bash);
149
+ border-color: var(--ifm-color-danger);
118
150
  }
119
151
  }
120
152
 
@@ -125,13 +157,14 @@ body[class="ReactModal__Body--open"] {
125
157
  content: "";
126
158
  width: var(--code-tab-logo-width);
127
159
  height: var(--code-tab-logo-height);
128
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ruby/ruby-plain.svg");
160
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ruby/ruby-plain.svg")
161
+ no-repeat;
129
162
  margin-block: auto;
130
163
  }
131
164
 
132
165
  &.active {
133
- border-bottom-color: var(--ifm-color-danger);
134
- background-color: var(--ifm-color-emphasis-100);
166
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-ruby);
167
+ border-color: var(--openapi-code-tab-border-color-ruby);
135
168
  }
136
169
  }
137
170
 
@@ -142,13 +175,14 @@ body[class="ReactModal__Body--open"] {
142
175
  content: "";
143
176
  width: var(--code-tab-logo-width);
144
177
  height: var(--code-tab-logo-height);
145
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/csharp/csharp-original.svg");
178
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/csharp/csharp-original.svg")
179
+ no-repeat;
146
180
  margin-block: auto;
147
181
  }
148
182
 
149
183
  &.active {
150
- border-bottom-color: var(--ifm-color-gray-500);
151
- background-color: var(--ifm-color-emphasis-100);
184
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-csharp);
185
+ border-color: var(--openapi-code-tab-border-color-csharp);
152
186
  }
153
187
  }
154
188
 
@@ -159,13 +193,14 @@ body[class="ReactModal__Body--open"] {
159
193
  content: "";
160
194
  width: var(--code-tab-logo-width);
161
195
  height: var(--code-tab-logo-height);
162
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/nodejs/nodejs-original.svg");
196
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/nodejs/nodejs-original.svg")
197
+ no-repeat;
163
198
  margin-block: auto;
164
199
  }
165
200
 
166
201
  &.active {
167
- border-bottom-color: var(--ifm-color-success);
168
- background-color: var(--ifm-color-emphasis-100);
202
+ box-shadow: 0 0 0 3px var(--opeanpi-code-tab-shadow-color-nodejs);
203
+ border-color: var(--openapi-code-tab-border-color-nodejs);
169
204
  }
170
205
  }
171
206
 
@@ -176,13 +211,14 @@ body[class="ReactModal__Body--open"] {
176
211
  content: "";
177
212
  width: var(--code-tab-logo-width);
178
213
  height: var(--code-tab-logo-height);
179
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/php/php-original.svg");
214
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/php/php-original.svg")
215
+ no-repeat;
180
216
  margin-block: auto;
181
217
  }
182
218
 
183
219
  &.active {
184
- border-bottom-color: var(--ifm-color-gray-500);
185
- background-color: var(--ifm-color-emphasis-100);
220
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-php);
221
+ border-color: var(--openapi-code-tab-border-color-php);
186
222
  }
187
223
  }
188
224
 
@@ -193,13 +229,14 @@ body[class="ReactModal__Body--open"] {
193
229
  content: "";
194
230
  width: var(--code-tab-logo-width);
195
231
  height: var(--code-tab-logo-height);
196
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/java/java-original.svg");
232
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/java/java-original.svg")
233
+ no-repeat;
197
234
  margin-block: auto;
198
235
  }
199
236
 
200
237
  &.active {
201
- border-bottom-color: var(--ifm-color-warning);
202
- background-color: var(--ifm-color-emphasis-100);
238
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-java);
239
+ border-color: var(--openapi-code-tab-border-color-java);
203
240
  }
204
241
  }
205
242
 
@@ -210,13 +247,14 @@ body[class="ReactModal__Body--open"] {
210
247
  content: "";
211
248
  width: var(--code-tab-logo-width);
212
249
  height: var(--code-tab-logo-height);
213
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/windows8/windows8-original.svg");
250
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/windows8/windows8-original.svg")
251
+ no-repeat;
214
252
  margin-block: auto;
215
253
  }
216
254
 
217
255
  &.active {
218
- border-bottom-color: var(--ifm-color-success);
219
- background-color: var(--ifm-color-emphasis-100);
256
+ box-shadow: 0 0 0 3px var(--opeanpi-code-tab-shadow-color-powershell);
257
+ border-color: var(--openapi-code-tab-border-color-powershell);
220
258
  }
221
259
  }
222
260
 
@@ -17,6 +17,8 @@ import clsx from "clsx";
17
17
 
18
18
  function TabList({
19
19
  action,
20
+ currentLanguage,
21
+ includeVariant,
20
22
  className,
21
23
  block,
22
24
  selectedValue,
@@ -38,10 +40,20 @@ function TabList({
38
40
  }
39
41
 
40
42
  if (action) {
41
- const newLanguage = languageSet.filter(
42
- (lang) => lang.language === newTabValue
43
- );
44
- action(newLanguage[0]);
43
+ let newLanguage;
44
+ if (currentLanguage && includeVariant) {
45
+ newLanguage = languageSet.filter(
46
+ (lang) => lang.language === currentLanguage
47
+ )[0];
48
+ newLanguage.variant = newTabValue;
49
+ action.setSelectedVariant(newTabValue.toLowerCase());
50
+ } else {
51
+ newLanguage = languageSet.filter(
52
+ (lang) => lang.language === newTabValue
53
+ )[0];
54
+ action.setSelectedVariant(newLanguage.variant.toLowerCase());
55
+ }
56
+ action.setLanguage(newLanguage);
45
57
  }
46
58
  };
47
59
 
@@ -101,7 +113,7 @@ function TabList({
101
113
  }
102
114
  )}
103
115
  >
104
- {label ?? value}
116
+ <span>{label ?? value}</span>
105
117
  </li>
106
118
  ))}
107
119
  </ul>
@@ -17,11 +17,12 @@ import { useTypedSelector } from "@theme/ApiItem/hooks";
17
17
  import merge from "lodash/merge";
18
18
 
19
19
  export interface Language {
20
- highlight?: string;
20
+ highlight: string;
21
21
  language: string;
22
- logoClass?: string;
23
- variant?: string;
24
- options?: { [key: string]: boolean };
22
+ logoClass: string;
23
+ variant: string;
24
+ variants: string[];
25
+ options: { [key: string]: boolean };
25
26
  source?: string;
26
27
  }
27
28
 
@@ -36,6 +37,7 @@ export const languageSet: Language[] = [
36
37
  trimRequestBody: true,
37
38
  },
38
39
  variant: "cURL",
40
+ variants: ["curl"],
39
41
  },
40
42
  {
41
43
  highlight: "python",
@@ -46,6 +48,7 @@ export const languageSet: Language[] = [
46
48
  trimRequestBody: true,
47
49
  },
48
50
  variant: "requests",
51
+ variants: ["requests", "http.client"],
49
52
  },
50
53
  {
51
54
  highlight: "go",
@@ -56,6 +59,7 @@ export const languageSet: Language[] = [
56
59
  trimRequestBody: true,
57
60
  },
58
61
  variant: "native",
62
+ variants: ["native"],
59
63
  },
60
64
  {
61
65
  highlight: "javascript",
@@ -67,6 +71,7 @@ export const languageSet: Language[] = [
67
71
  trimRequestBody: true,
68
72
  },
69
73
  variant: "axios",
74
+ variants: ["axios", "native", "request", "unirest"],
70
75
  },
71
76
  {
72
77
  highlight: "ruby",
@@ -77,6 +82,7 @@ export const languageSet: Language[] = [
77
82
  trimRequestBody: true,
78
83
  },
79
84
  variant: "Net::HTTP",
85
+ variants: ["net::http"],
80
86
  },
81
87
  {
82
88
  highlight: "csharp",
@@ -87,6 +93,7 @@ export const languageSet: Language[] = [
87
93
  trimRequestBody: true,
88
94
  },
89
95
  variant: "RestSharp",
96
+ variants: ["restsharp", "httpclient"],
90
97
  },
91
98
  {
92
99
  highlight: "php",
@@ -97,6 +104,7 @@ export const languageSet: Language[] = [
97
104
  trimRequestBody: true,
98
105
  },
99
106
  variant: "cURL",
107
+ variants: ["curl", "guzzle", "pecl_http", "http_request2"],
100
108
  },
101
109
  {
102
110
  highlight: "java",
@@ -107,6 +115,7 @@ export const languageSet: Language[] = [
107
115
  trimRequestBody: true,
108
116
  },
109
117
  variant: "OkHttp",
118
+ variants: ["okhttp", "unirest"],
110
119
  },
111
120
  {
112
121
  highlight: "powershell",
@@ -117,6 +126,7 @@ export const languageSet: Language[] = [
117
126
  trimRequestBody: true,
118
127
  },
119
128
  variant: "RestMethod",
129
+ variants: ["restmethod"],
120
130
  },
121
131
  ];
122
132
 
@@ -173,7 +183,7 @@ function Curl({ postman, codeSamples }: Props) {
173
183
  (lang) =>
174
184
  lang.language === localStorage.getItem("docusaurus.tab.code-samples")
175
185
  );
176
-
186
+ const [selectedVariant, setSelectedVariant] = useState();
177
187
  const [language, setLanguage] = useState(() => {
178
188
  // Return first index if only 1 user-defined language exists
179
189
  if (mergedLangs.length === 1) {
@@ -182,7 +192,6 @@ function Curl({ postman, codeSamples }: Props) {
182
192
  // Fall back to language in localStorage or first user-defined language
183
193
  return defaultLang[0] ?? mergedLangs[0];
184
194
  });
185
-
186
195
  const [codeText, setCodeText] = useState("");
187
196
 
188
197
  useEffect(() => {
@@ -198,7 +207,6 @@ function Curl({ postman, codeSamples }: Props) {
198
207
  server,
199
208
  auth,
200
209
  });
201
-
202
210
  codegen.convert(
203
211
  language.language,
204
212
  language.variant,
@@ -264,36 +272,90 @@ function Curl({ postman, codeSamples }: Props) {
264
272
  mergedLangs,
265
273
  ]);
266
274
 
275
+ useEffect(() => {
276
+ if (selectedVariant && selectedVariant !== language.variant) {
277
+ const postmanRequest = buildPostmanRequest(postman, {
278
+ queryParams,
279
+ pathParams,
280
+ cookieParams,
281
+ contentType,
282
+ accept,
283
+ headerParams,
284
+ body,
285
+ server,
286
+ auth,
287
+ });
288
+ codegen.convert(
289
+ language.language,
290
+ selectedVariant,
291
+ postmanRequest,
292
+ language.options,
293
+ (error: any, snippet: string) => {
294
+ if (error) {
295
+ return;
296
+ }
297
+ setCodeText(snippet);
298
+ }
299
+ );
300
+ }
301
+ });
302
+
267
303
  if (language === undefined) {
268
304
  return null;
269
305
  }
270
306
 
271
307
  return (
272
308
  <>
273
- <CodeTabs groupId="code-samples" action={setLanguage}>
309
+ <CodeTabs
310
+ groupId="code-samples"
311
+ action={{
312
+ setLanguage: setLanguage,
313
+ setSelectedVariant: setSelectedVariant,
314
+ }}
315
+ lazy
316
+ >
274
317
  {mergedLangs.map((lang) => {
275
318
  return (
276
319
  <CodeTab
277
320
  value={lang.language}
278
- label={""}
279
- key={
280
- lang.variant
281
- ? `${lang.language}-${lang.variant}`
282
- : lang.language
283
- }
321
+ label={lang.language}
322
+ key={lang.language}
284
323
  attributes={{
285
324
  className: `openapi-tabs__code-item--${lang.logoClass}`,
286
325
  }}
287
326
  >
288
- {/* @ts-ignore */}
289
- <ApiCodeBlock
290
- language={lang.highlight}
291
- className="openapi-demo__code-block"
292
- title={`${lang.language} / ${lang.variant}`}
293
- showLineNumbers={true}
327
+ <CodeTabs
328
+ action={{
329
+ setLanguage: setLanguage,
330
+ setSelectedVariant: setSelectedVariant,
331
+ }}
332
+ includeVariant={true}
333
+ currentLanguage={lang.language}
334
+ defaultValue={selectedVariant}
335
+ lazy
294
336
  >
295
- {codeText}
296
- </ApiCodeBlock>
337
+ {lang.variants.map((variant) => {
338
+ return (
339
+ <CodeTab
340
+ value={variant.toLowerCase()}
341
+ label={variant.toUpperCase()}
342
+ key={`${lang.language}-${lang.variant}`}
343
+ attributes={{
344
+ className: `openapi-tabs__code-item--variant`,
345
+ }}
346
+ >
347
+ {/* @ts-ignore */}
348
+ <ApiCodeBlock
349
+ language={lang.highlight}
350
+ className="openapi-demo__code-block"
351
+ showLineNumbers={true}
352
+ >
353
+ {codeText}
354
+ </ApiCodeBlock>
355
+ </CodeTab>
356
+ );
357
+ })}
358
+ </CodeTabs>
297
359
  </CodeTab>
298
360
  );
299
361
  })}
@@ -54,6 +54,27 @@
54
54
  --openapi-input-border: var(--ifm-color-primary);
55
55
  --openapi-input-background: var(--openapi-card-background-color);
56
56
  --openapi-tree-line-color: var(--ifm-toc-border-color);
57
+ --openapi-code-tab-border-color: var(--ifm-toc-border-color);
58
+ --openapi-code-tab-border-color-python: #ffdb50;
59
+ --openapi-code-tab-border-color-bash: var(--ifm-color-danger);
60
+ --openapi-code-tab-border-color-go: var(--ifm-color-info);
61
+ --openapi-code-tab-border-color-js: var(--ifm-color-warning);
62
+ --openapi-code-tab-border-color-ruby: var(--ifm-color-danger);
63
+ --openapi-code-tab-border-color-csharp: #9b4f96;
64
+ --openapi-code-tab-border-color-nodejs: var(--ifm-color-success);
65
+ --openapi-code-tab-border-color-php: #6181b6;
66
+ --openapi-code-tab-border-color-java: #0374bd;
67
+ --openapi-code-tab-border-color-powershell: #00adef;
68
+ --openapi-code-tab-shadow-color-python: rgba(255, 219, 80, 0.25);
69
+ --openapi-code-tab-shadow-color-bash: rgba(250, 56, 62, 0.25);
70
+ --openapi-code-tab-shadow-color-go: rgba(84, 199, 236, 0.25);
71
+ --openapi-code-tab-shadow-color-js: rgba(255, 186, 0, 0.25);
72
+ --openapi-code-tab-shadow-color-ruby: rgba(250, 56, 62, 0.25);
73
+ --openapi-code-tab-shadow-color-csharp: rgba(155, 79, 150, 0.25);
74
+ --opeanpi-code-tab-shadow-color-nodejs: rgba(0, 164, 0, 0.25);
75
+ --openapi-code-tab-shadow-color-php: rgba(97, 129, 182, 0.25);
76
+ --openapi-code-tab-shadow-color-java: rgba(3, 116, 189, 0.25);
77
+ --opeanpi-code-tab-shadow-color-powershell: rgba(3, 116, 189, 0.25);
57
78
  }
58
79
 
59
80
  [data-theme="dark"] {