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

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.
Files changed (79) hide show
  1. package/lib/theme/ApiDemoPanel/ApiCodeBlock/Content/_Content.scss +1 -0
  2. package/lib/theme/ApiDemoPanel/Body/index.d.ts +3 -1
  3. package/lib/theme/ApiDemoPanel/Body/index.js +30 -32
  4. package/lib/theme/ApiDemoPanel/CodeTabs/_CodeTabs.scss +95 -39
  5. package/lib/theme/ApiDemoPanel/CodeTabs/index.js +24 -6
  6. package/lib/theme/ApiDemoPanel/Curl/index.d.ts +5 -4
  7. package/lib/theme/ApiDemoPanel/Curl/index.js +79 -11
  8. package/lib/theme/ApiDemoPanel/FormItem/_FormItem.scss +11 -2
  9. package/lib/theme/ApiDemoPanel/FormItem/index.d.ts +2 -1
  10. package/lib/theme/ApiDemoPanel/FormItem/index.js +9 -3
  11. package/lib/theme/ApiDemoPanel/FormMultiSelect/_FormMultiSelect.scss +8 -4
  12. package/lib/theme/ApiDemoPanel/FormMultiSelect/index.d.ts +2 -1
  13. package/lib/theme/ApiDemoPanel/FormMultiSelect/index.js +5 -2
  14. package/lib/theme/ApiDemoPanel/FormSelect/_FormSelect.scss +3 -3
  15. package/lib/theme/ApiDemoPanel/FormTextInput/_FormTextInput.scss +24 -5
  16. package/lib/theme/ApiDemoPanel/FormTextInput/index.d.ts +1 -1
  17. package/lib/theme/ApiDemoPanel/FormTextInput/index.js +56 -10
  18. package/lib/theme/ApiDemoPanel/LiveEditor/index.d.ts +5 -2
  19. package/lib/theme/ApiDemoPanel/LiveEditor/index.js +59 -14
  20. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamArrayFormItem.d.ts +6 -0
  21. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamArrayFormItem.js +194 -0
  22. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamBooleanFormItem.d.ts +6 -0
  23. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamBooleanFormItem.js +63 -0
  24. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.d.ts +6 -0
  25. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.js +89 -0
  26. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamSelectFormItem.d.ts +6 -0
  27. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamSelectFormItem.js +63 -0
  28. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamTextFormItem.d.ts +6 -0
  29. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamTextFormItem.js +38 -0
  30. package/lib/theme/ApiDemoPanel/ParamOptions/_ParamOptions.scss +9 -28
  31. package/lib/theme/ApiDemoPanel/ParamOptions/index.js +24 -176
  32. package/lib/theme/ApiDemoPanel/Request/_Request.scss +93 -20
  33. package/lib/theme/ApiDemoPanel/Request/index.d.ts +1 -1
  34. package/lib/theme/ApiDemoPanel/Request/index.js +316 -37
  35. package/lib/theme/ApiDemoPanel/Response/_Response.scss +54 -0
  36. package/lib/theme/ApiDemoPanel/Response/index.d.ts +4 -1
  37. package/lib/theme/ApiDemoPanel/Response/index.js +56 -31
  38. package/lib/theme/ApiDemoPanel/Server/_Server.scss +10 -0
  39. package/lib/theme/ApiDemoPanel/Server/index.js +10 -11
  40. package/lib/theme/ApiDemoPanel/index.js +1 -1
  41. package/lib/theme/SchemaTabs/_SchemaTabs.scss +0 -1
  42. package/lib/theme/styles.scss +27 -0
  43. package/package.json +7 -4
  44. package/src/theme/ApiDemoPanel/ApiCodeBlock/Content/_Content.scss +1 -0
  45. package/src/theme/ApiDemoPanel/Body/index.tsx +38 -29
  46. package/src/theme/ApiDemoPanel/CodeTabs/_CodeTabs.scss +95 -39
  47. package/src/theme/ApiDemoPanel/CodeTabs/index.js +24 -6
  48. package/src/theme/ApiDemoPanel/Curl/index.tsx +85 -22
  49. package/src/theme/ApiDemoPanel/FormItem/_FormItem.scss +11 -2
  50. package/src/theme/ApiDemoPanel/FormItem/index.tsx +8 -3
  51. package/src/theme/ApiDemoPanel/FormMultiSelect/_FormMultiSelect.scss +8 -4
  52. package/src/theme/ApiDemoPanel/FormMultiSelect/index.tsx +7 -2
  53. package/src/theme/ApiDemoPanel/FormSelect/_FormSelect.scss +3 -3
  54. package/src/theme/ApiDemoPanel/FormTextInput/_FormTextInput.scss +24 -5
  55. package/src/theme/ApiDemoPanel/FormTextInput/index.tsx +58 -10
  56. package/src/theme/ApiDemoPanel/LiveEditor/index.tsx +53 -14
  57. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamArrayFormItem.tsx +153 -0
  58. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamBooleanFormItem.tsx +64 -0
  59. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.tsx +86 -0
  60. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamSelectFormItem.tsx +65 -0
  61. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamTextFormItem.tsx +38 -0
  62. package/src/theme/ApiDemoPanel/ParamOptions/_ParamOptions.scss +9 -28
  63. package/src/theme/ApiDemoPanel/ParamOptions/index.tsx +8 -196
  64. package/src/theme/ApiDemoPanel/Request/_Request.scss +93 -20
  65. package/src/theme/ApiDemoPanel/Request/index.tsx +250 -28
  66. package/src/theme/ApiDemoPanel/Response/_Response.scss +54 -0
  67. package/src/theme/ApiDemoPanel/Response/index.tsx +44 -26
  68. package/src/theme/ApiDemoPanel/Server/_Server.scss +10 -0
  69. package/src/theme/ApiDemoPanel/Server/index.tsx +8 -11
  70. package/src/theme/ApiDemoPanel/index.tsx +1 -1
  71. package/src/theme/SchemaTabs/_SchemaTabs.scss +0 -1
  72. package/src/theme/styles.scss +27 -0
  73. package/src/theme-openapi.d.ts +40 -1
  74. package/lib/theme/ApiDemoPanel/Execute/index.d.ts +0 -8
  75. package/lib/theme/ApiDemoPanel/Execute/index.js +0 -213
  76. package/src/theme/ApiDemoPanel/Execute/index.tsx +0 -200
  77. /package/lib/theme/ApiDemoPanel/{Execute → Request}/makeRequest.d.ts +0 -0
  78. /package/lib/theme/ApiDemoPanel/{Execute → Request}/makeRequest.js +0 -0
  79. /package/src/theme/ApiDemoPanel/{Execute → Request}/makeRequest.ts +0 -0
@@ -54,10 +54,37 @@
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);
78
+ --openapi-demo-font-size-input: 12px;
79
+ --openapi-demo-font-size-code: 12px;
80
+ --openapi-demo-padding-input: 0.5rem;
81
+ --openapi-demo-border-color: var(--ifm-toc-border-color);
82
+ --openapi-demo-caret-bg: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 24 24"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path></svg>');
57
83
  }
58
84
 
59
85
  [data-theme="dark"] {
60
86
  --openapi-card-background-color: var(--ifm-color-gray-900) !important;
87
+ --openapi-demo-caret-bg: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 24 24" fill="white"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path></svg>') !important;
61
88
  }
62
89
 
63
90
  .docs-wrapper {
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.651",
5
5
  "license": "MIT",
6
6
  "keywords": [
7
7
  "openapi",
@@ -41,7 +41,9 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@docusaurus/theme-common": "^2.3.0",
44
+ "@hookform/error-message": "^2.0.1",
44
45
  "@mdx-js/react": "^1.6.21",
46
+ "@nextui-org/react": "^1.0.0-beta.12",
45
47
  "@paloaltonetworks/postman-code-generators": "1.1.15-patch.2",
46
48
  "@paloaltonetworks/postman-collection": "^4.1.0",
47
49
  "@reduxjs/toolkit": "^1.7.1",
@@ -49,7 +51,7 @@
49
51
  "clsx": "^1.1.1",
50
52
  "copy-text-to-clipboard": "^3.1.0",
51
53
  "crypto-js": "^4.1.1",
52
- "docusaurus-plugin-openapi-docs": "0.0.0-beta.646",
54
+ "docusaurus-plugin-openapi-docs": "0.0.0-beta.651",
53
55
  "docusaurus-plugin-sass": "^0.2.3",
54
56
  "file-saver": "^2.0.5",
55
57
  "immer": "^9.0.7",
@@ -57,7 +59,8 @@
57
59
  "node-polyfill-webpack-plugin": "^2.0.1",
58
60
  "prism-react-renderer": "^1.3.5",
59
61
  "process": "^0.11.10",
60
- "react-live": "^3.1.1",
62
+ "react-hook-form": "^7.43.8",
63
+ "react-live": "^4.0.0",
61
64
  "react-magic-dropzone": "^1.0.1",
62
65
  "react-markdown": "^8.0.1",
63
66
  "react-modal": "^3.15.1",
@@ -75,5 +78,5 @@
75
78
  "engines": {
76
79
  "node": ">=14"
77
80
  },
78
- "gitHead": "15ab01afc0523c9407b75c66b33e2df018af0f6d"
81
+ "gitHead": "481c6eff7a5fff6fba2ef52e877ebb27a875259e"
79
82
  }
@@ -15,6 +15,7 @@
15
15
  }
16
16
 
17
17
  .openapi-demo__code-block {
18
+ border-radius: var(--ifm-global-radius);
18
19
  --ifm-pre-background: var(--prism-background-color);
19
20
  margin: 0;
20
21
  padding: 0;
@@ -8,7 +8,6 @@
8
8
  import React from "react";
9
9
 
10
10
  import json2xml from "@theme/ApiDemoPanel/Body/json2xml";
11
- import ContentType from "@theme/ApiDemoPanel/ContentType";
12
11
  import FormFileUpload from "@theme/ApiDemoPanel/FormFileUpload";
13
12
  import FormItem from "@theme/ApiDemoPanel/FormItem";
14
13
  import FormSelect from "@theme/ApiDemoPanel/FormSelect";
@@ -31,9 +30,16 @@ import {
31
30
  export interface Props {
32
31
  jsonRequestBodyExample: string;
33
32
  requestBodyMetadata?: RequestBodyObject;
33
+ methods?: any;
34
+ required?: boolean;
34
35
  }
35
36
 
36
- function BodyWrap({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
37
+ function BodyWrap({
38
+ requestBodyMetadata,
39
+ jsonRequestBodyExample,
40
+ methods,
41
+ required,
42
+ }: Props) {
37
43
  const contentType = useTypedSelector((state: any) => state.contentType.value);
38
44
 
39
45
  // NOTE: We used to check if body was required, but opted to always show the request body
@@ -45,20 +51,21 @@ function BodyWrap({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
45
51
  }
46
52
 
47
53
  return (
48
- <>
49
- <ContentType />
50
- <Body
51
- requestBodyMetadata={requestBodyMetadata}
52
- jsonRequestBodyExample={jsonRequestBodyExample}
53
- />
54
- </>
54
+ <Body
55
+ requestBodyMetadata={requestBodyMetadata}
56
+ jsonRequestBodyExample={jsonRequestBodyExample}
57
+ required={required}
58
+ />
55
59
  );
56
60
  }
57
61
 
58
- function Body({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
62
+ function Body({
63
+ requestBodyMetadata,
64
+ jsonRequestBodyExample,
65
+ methods,
66
+ required,
67
+ }: Props) {
59
68
  const contentType = useTypedSelector((state: any) => state.contentType.value);
60
- const required = requestBodyMetadata?.required;
61
-
62
69
  const dispatch = useTypedDispatch();
63
70
 
64
71
  // Lot's of possible content-types:
@@ -88,7 +95,7 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
88
95
 
89
96
  if (schema?.format === "binary") {
90
97
  return (
91
- <FormItem label="Body" required={required}>
98
+ <FormItem>
92
99
  <FormFileUpload
93
100
  placeholder={schema.description || "Body"}
94
101
  onChange={(file: any) => {
@@ -114,15 +121,8 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
114
121
  schema?.type === "object"
115
122
  ) {
116
123
  return (
117
- <FormItem label="Body" required={required}>
118
- <div
119
- style={{
120
- marginTop: "calc(var(--ifm-pre-padding) / 2)",
121
- borderRadius: "4px",
122
- padding: "var(--ifm-pre-padding)",
123
- border: "1px solid var(--openapi-monaco-border-color)",
124
- }}
125
- >
124
+ <FormItem className="openapi-demo__form-item-body-container">
125
+ <div>
126
126
  {Object.entries(schema.properties ?? {}).map(([key, val]: any) => {
127
127
  if (val.format === "binary") {
128
128
  return (
@@ -196,6 +196,11 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
196
196
  }
197
197
  >
198
198
  <FormTextInput
199
+ paramName={key}
200
+ isRequired={
201
+ Array.isArray(schema.required) &&
202
+ schema.required.includes(key)
203
+ }
199
204
  placeholder={val.description || key}
200
205
  onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
201
206
  dispatch(
@@ -282,18 +287,22 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
282
287
 
283
288
  if (exampleBody) {
284
289
  return (
285
- <FormItem label="Body" required={required}>
290
+ <FormItem>
286
291
  <SchemaTabs className="openapi-tabs__schema" lazy>
287
292
  {/* @ts-ignore */}
288
293
  <TabItem label="Default" value="default" default>
289
- <LiveApp action={dispatch} language={language}>
294
+ <LiveApp action={dispatch} language={language} required={required}>
290
295
  {defaultBody}
291
296
  </LiveApp>
292
297
  </TabItem>
293
298
  {/* @ts-ignore */}
294
299
  <TabItem label="Example" value="example">
295
300
  {exampleBody && (
296
- <LiveApp action={dispatch} language={language}>
301
+ <LiveApp
302
+ action={dispatch}
303
+ language={language}
304
+ required={required}
305
+ >
297
306
  {exampleBody}
298
307
  </LiveApp>
299
308
  )}
@@ -305,11 +314,11 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
305
314
 
306
315
  if (examplesBodies && examplesBodies.length > 0) {
307
316
  return (
308
- <FormItem label="Body" required={required}>
317
+ <FormItem className="openapi-demo__form-item-body-container">
309
318
  <SchemaTabs className="openapi-tabs__schema" lazy>
310
319
  {/* @ts-ignore */}
311
320
  <TabItem label="Default" value="default" default>
312
- <LiveApp action={dispatch} language={language}>
321
+ <LiveApp action={dispatch} language={language} required={required}>
313
322
  {defaultBody}
314
323
  </LiveApp>
315
324
  </TabItem>
@@ -336,8 +345,8 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }: Props) {
336
345
  }
337
346
 
338
347
  return (
339
- <FormItem label="Body" required={required}>
340
- <LiveApp action={dispatch} language={language}>
348
+ <FormItem>
349
+ <LiveApp action={dispatch} language={language} required={required}>
341
350
  {defaultBody}
342
351
  </LiveApp>
343
352
  </FormItem>
@@ -12,11 +12,55 @@
12
12
 
13
13
  .openapi-tabs__code-container {
14
14
  margin-bottom: 1rem;
15
+
16
+ &:not(.openapi-tabs__code-container-inner) {
17
+ padding: 1rem;
18
+ background-color: var(--ifm-pre-background);
19
+ border-radius: var(--ifm-global-radius);
20
+ border: 1px solid var(--openapi-demo-border-color);
21
+ box-shadow: 0 2px 3px hsla(222, 8%, 43%, 0.1),
22
+ 0 8px 16px -10px hsla(222, 8%, 43%, 0.2);
23
+ transition: 300ms;
24
+
25
+ &:hover {
26
+ box-shadow: 0 0 0 2px rgba(38, 53, 61, 0.15),
27
+ 0 2px 3px hsla(222, 8%, 43%, 0.15),
28
+ 0 16px 16px -10px hsla(222, 8%, 43%, 0.2);
29
+ }
30
+ }
31
+
32
+ .openapi-tabs__code-item {
33
+ display: flex;
34
+ flex-direction: column-reverse;
35
+ flex: 0 0 80px;
36
+ align-items: center;
37
+ padding: 0.5rem 0 !important;
38
+ margin-top: 0 !important;
39
+ margin-right: 0.5rem;
40
+ border: 1px solid transparent;
41
+ transition: 300ms;
42
+
43
+ &:not(.active):hover {
44
+ border: 1px solid var(--openapi-code-tab-border-color);
45
+ }
46
+
47
+ &:hover {
48
+ background-color: transparent;
49
+ }
50
+
51
+ span {
52
+ padding-top: 0.5rem;
53
+ color: var(--ifm-font-color-secondary);
54
+ font-size: 10px;
55
+ text-transform: uppercase;
56
+ }
57
+ }
15
58
  }
16
59
 
17
60
  .openapi-tabs__code-list-container {
18
61
  display: flex;
19
62
  justify-content: flex-start;
63
+ padding: 0.25rem;
20
64
  padding-bottom: 0.6rem;
21
65
  }
22
66
 
@@ -26,6 +70,8 @@
26
70
 
27
71
  .openapi-demo__code-block code {
28
72
  max-height: 200px;
73
+ font-size: var(--openapi-demo-font-size-code);
74
+ padding-top: var(--ifm-pre-padding);
29
75
  }
30
76
 
31
77
  body[class="ReactModal__Body--open"] {
@@ -34,20 +80,20 @@ body[class="ReactModal__Body--open"] {
34
80
  }
35
81
  }
36
82
 
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;
83
+ .openapi-tabs__code-item--variant {
84
+ color: var(--ifm-color-secondary);
44
85
 
45
86
  &.active {
46
- border-bottom-left-radius: 0;
47
- border-bottom-right-radius: 0;
87
+ border-color: var(--ifm-toc-border-color);
48
88
  }
49
89
  }
50
90
 
91
+ .openapi-tabs__code-item--variant > span {
92
+ padding-top: unset !important;
93
+ padding-left: 0.5rem !important;
94
+ padding-right: 0.5rem !important;
95
+ }
96
+
51
97
  .openapi-tabs__code-item--python {
52
98
  color: var(--ifm-color-success);
53
99
 
@@ -55,13 +101,14 @@ body[class="ReactModal__Body--open"] {
55
101
  content: "";
56
102
  width: var(--code-tab-logo-width);
57
103
  height: var(--code-tab-logo-height);
58
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg");
104
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg")
105
+ no-repeat;
59
106
  margin-block: auto;
60
107
  }
61
108
 
62
109
  &.active {
63
- border-bottom-color: var(--ifm-color-success);
64
- background-color: var(--ifm-color-emphasis-100);
110
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-python);
111
+ border-color: var(--openapi-code-tab-border-color-python);
65
112
  }
66
113
  }
67
114
 
@@ -72,13 +119,14 @@ body[class="ReactModal__Body--open"] {
72
119
  content: "";
73
120
  width: var(--code-tab-logo-width);
74
121
  height: var(--code-tab-logo-height);
75
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/go/go-original-wordmark.svg");
122
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/go/go-original-wordmark.svg")
123
+ no-repeat;
76
124
  margin-block: auto;
77
125
  }
78
126
 
79
127
  &.active {
80
- border-bottom-color: var(--ifm-color-info);
81
- background-color: var(--ifm-color-emphasis-100);
128
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-go);
129
+ border-color: var(--openapi-code-tab-border-color-go);
82
130
  }
83
131
  }
84
132
 
@@ -89,13 +137,14 @@ body[class="ReactModal__Body--open"] {
89
137
  content: "";
90
138
  width: var(--code-tab-logo-width);
91
139
  height: var(--code-tab-logo-height);
92
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/javascript/javascript-original.svg");
140
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/javascript/javascript-original.svg")
141
+ no-repeat;
93
142
  margin-block: auto;
94
143
  }
95
144
 
96
145
  &.active {
97
- border-bottom-color: var(--ifm-color-warning);
98
- background-color: var(--ifm-color-emphasis-100);
146
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-js);
147
+ border-color: var(--openapi-code-tab-border-color-js);
99
148
  }
100
149
  }
101
150
 
@@ -106,15 +155,16 @@ body[class="ReactModal__Body--open"] {
106
155
  content: "";
107
156
  width: var(--code-tab-logo-width);
108
157
  height: var(--code-tab-logo-height);
109
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/bash/bash-plain.svg");
158
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/bash/bash-plain.svg")
159
+ no-repeat;
110
160
  margin-block: auto;
111
161
  background-color: var(--bash-background-color);
112
162
  border-radius: var(--bash-border-radius);
113
163
  }
114
164
 
115
165
  &.active {
116
- border-bottom-color: var(--ifm-color-danger);
117
- background-color: var(--ifm-color-emphasis-100);
166
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-bash);
167
+ border-color: var(--ifm-color-danger);
118
168
  }
119
169
  }
120
170
 
@@ -125,13 +175,14 @@ body[class="ReactModal__Body--open"] {
125
175
  content: "";
126
176
  width: var(--code-tab-logo-width);
127
177
  height: var(--code-tab-logo-height);
128
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ruby/ruby-plain.svg");
178
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ruby/ruby-plain.svg")
179
+ no-repeat;
129
180
  margin-block: auto;
130
181
  }
131
182
 
132
183
  &.active {
133
- border-bottom-color: var(--ifm-color-danger);
134
- background-color: var(--ifm-color-emphasis-100);
184
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-ruby);
185
+ border-color: var(--openapi-code-tab-border-color-ruby);
135
186
  }
136
187
  }
137
188
 
@@ -142,13 +193,14 @@ body[class="ReactModal__Body--open"] {
142
193
  content: "";
143
194
  width: var(--code-tab-logo-width);
144
195
  height: var(--code-tab-logo-height);
145
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/csharp/csharp-original.svg");
196
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/csharp/csharp-original.svg")
197
+ no-repeat;
146
198
  margin-block: auto;
147
199
  }
148
200
 
149
201
  &.active {
150
- border-bottom-color: var(--ifm-color-gray-500);
151
- background-color: var(--ifm-color-emphasis-100);
202
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-csharp);
203
+ border-color: var(--openapi-code-tab-border-color-csharp);
152
204
  }
153
205
  }
154
206
 
@@ -159,13 +211,14 @@ body[class="ReactModal__Body--open"] {
159
211
  content: "";
160
212
  width: var(--code-tab-logo-width);
161
213
  height: var(--code-tab-logo-height);
162
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/nodejs/nodejs-original.svg");
214
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/nodejs/nodejs-original.svg")
215
+ no-repeat;
163
216
  margin-block: auto;
164
217
  }
165
218
 
166
219
  &.active {
167
- border-bottom-color: var(--ifm-color-success);
168
- background-color: var(--ifm-color-emphasis-100);
220
+ box-shadow: 0 0 0 3px var(--opeanpi-code-tab-shadow-color-nodejs);
221
+ border-color: var(--openapi-code-tab-border-color-nodejs);
169
222
  }
170
223
  }
171
224
 
@@ -176,13 +229,14 @@ body[class="ReactModal__Body--open"] {
176
229
  content: "";
177
230
  width: var(--code-tab-logo-width);
178
231
  height: var(--code-tab-logo-height);
179
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/php/php-original.svg");
232
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/php/php-original.svg")
233
+ no-repeat;
180
234
  margin-block: auto;
181
235
  }
182
236
 
183
237
  &.active {
184
- border-bottom-color: var(--ifm-color-gray-500);
185
- background-color: var(--ifm-color-emphasis-100);
238
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-php);
239
+ border-color: var(--openapi-code-tab-border-color-php);
186
240
  }
187
241
  }
188
242
 
@@ -193,13 +247,14 @@ body[class="ReactModal__Body--open"] {
193
247
  content: "";
194
248
  width: var(--code-tab-logo-width);
195
249
  height: var(--code-tab-logo-height);
196
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/java/java-original.svg");
250
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/java/java-original.svg")
251
+ no-repeat;
197
252
  margin-block: auto;
198
253
  }
199
254
 
200
255
  &.active {
201
- border-bottom-color: var(--ifm-color-warning);
202
- background-color: var(--ifm-color-emphasis-100);
256
+ box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-java);
257
+ border-color: var(--openapi-code-tab-border-color-java);
203
258
  }
204
259
  }
205
260
 
@@ -210,13 +265,14 @@ body[class="ReactModal__Body--open"] {
210
265
  content: "";
211
266
  width: var(--code-tab-logo-width);
212
267
  height: var(--code-tab-logo-height);
213
- background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/windows8/windows8-original.svg");
268
+ background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/windows8/windows8-original.svg")
269
+ no-repeat;
214
270
  margin-block: auto;
215
271
  }
216
272
 
217
273
  &.active {
218
- border-bottom-color: var(--ifm-color-success);
219
- background-color: var(--ifm-color-emphasis-100);
274
+ box-shadow: 0 0 0 3px var(--opeanpi-code-tab-shadow-color-powershell);
275
+ border-color: var(--openapi-code-tab-border-color-powershell);
220
276
  }
221
277
  }
222
278
 
@@ -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>
@@ -135,8 +147,14 @@ function TabContent({ lazy, children, selectedValue }) {
135
147
 
136
148
  function TabsComponent(props) {
137
149
  const tabs = useTabs(props);
150
+ const { className } = props;
151
+
138
152
  return (
139
- <div className="tabs-container openapi-tabs__code-container">
153
+ <div
154
+ className={clsx("tabs-container openapi-tabs__code-container", {
155
+ [className]: className,
156
+ })}
157
+ >
140
158
  <TabList {...props} {...tabs} />
141
159
  <TabContent {...props} {...tabs} />
142
160
  </div>