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
@@ -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,60 @@ 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
+ className: "openapi-tabs__code-container-inner",
369
+ action: {
370
+ setLanguage: setLanguage,
371
+ setSelectedVariant: setSelectedVariant,
372
+ },
373
+ includeVariant: true,
374
+ currentLanguage: lang.language,
375
+ defaultValue: selectedVariant,
376
+ lazy: true,
330
377
  },
331
- codeText
378
+ lang.variants.map((variant) => {
379
+ return react_1.default.createElement(
380
+ CodeTab,
381
+ {
382
+ value: variant.toLowerCase(),
383
+ label: variant.toUpperCase(),
384
+ key: `${lang.language}-${lang.variant}`,
385
+ attributes: {
386
+ className: `openapi-tabs__code-item--variant`,
387
+ },
388
+ },
389
+ react_1.default.createElement(
390
+ ApiCodeBlock_1.default,
391
+ {
392
+ language: lang.highlight,
393
+ className: "openapi-demo__code-block",
394
+ showLineNumbers: true,
395
+ },
396
+ codeText
397
+ )
398
+ );
399
+ })
332
400
  )
333
401
  );
334
402
  })
@@ -1,12 +1,21 @@
1
1
  .openapi-demo__form-item {
2
- margin-top: var(--ifm-pre-padding);
2
+ padding: var(--openapi-demo-padding-input);
3
+ font-size: var(--openapi-demo-font-size-input);
3
4
 
4
5
  &:first-child {
5
6
  margin-top: 0;
6
7
  }
7
8
 
8
9
  .required {
9
- font-size: var(--ifm-code-font-size);
10
10
  color: var(--openapi-required);
11
11
  }
12
12
  }
13
+
14
+ .openapi-demo__form-item-body-container {
15
+ padding: 0;
16
+ }
17
+
18
+ .openapi-demo__form-item-label {
19
+ font-family: var(--ifm-font-family-monospace);
20
+ font-weight: bold;
21
+ }
@@ -4,6 +4,7 @@ export interface Props {
4
4
  type?: string;
5
5
  required?: boolean | undefined;
6
6
  children?: React.ReactNode;
7
+ className?: string;
7
8
  }
8
- declare function FormItem({ label, type, required, children }: Props): JSX.Element;
9
+ declare function FormItem({ label, type, required, children, className }: Props): JSX.Element;
9
10
  export default FormItem;
@@ -12,11 +12,17 @@ var __importDefault =
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  const react_1 = __importDefault(require("react"));
15
- function FormItem({ label, type, required, children }) {
15
+ const clsx_1 = __importDefault(require("clsx"));
16
+ function FormItem({ label, type, required, children, className }) {
16
17
  return react_1.default.createElement(
17
18
  "div",
18
- { className: "openapi-demo__form-item" },
19
- react_1.default.createElement("code", null, label),
19
+ { className: (0, clsx_1.default)("openapi-demo__form-item", className) },
20
+ label &&
21
+ react_1.default.createElement(
22
+ "label",
23
+ { className: "openapi-demo__form-item-label" },
24
+ label
25
+ ),
20
26
  type &&
21
27
  react_1.default.createElement(
22
28
  "span",
@@ -1,19 +1,23 @@
1
1
  .openapi-demo__multi-select-input {
2
2
  width: 100%;
3
3
  margin-top: calc(var(--ifm-pre-padding) / 2);
4
- padding: 12px var(--ifm-pre-padding);
4
+ padding: 1rem;
5
5
  border-radius: 4px;
6
- border: 2px solid transparent;
6
+ border: 1px solid transparent;
7
7
  background-color: var(--openapi-input-background);
8
8
  outline: none;
9
- font-size: var(--ifm-code-font-size);
9
+ font-size: var(--openapi-demo-font-size-input);
10
10
  color: var(--ifm-pre-color);
11
11
  -moz-appearance: none;
12
12
  -webkit-appearance: none;
13
13
  appearance: none;
14
14
 
15
15
  &:focus {
16
- border: 2px solid var(--openapi-input-border);
16
+ border: 1px solid var(--openapi-input-border);
17
+ }
18
+
19
+ &.error {
20
+ border: 1px solid var(--ifm-color-danger);
17
21
  }
18
22
 
19
23
  option {
@@ -3,6 +3,7 @@ export interface Props {
3
3
  value?: string;
4
4
  options: string[];
5
5
  onChange?: React.ChangeEventHandler<HTMLSelectElement>;
6
+ showErrors?: boolean;
6
7
  }
7
- declare function FormMultiSelect({ value, options, onChange }: Props): JSX.Element | null;
8
+ declare function FormMultiSelect({ value, options, onChange, showErrors }: Props): JSX.Element | null;
8
9
  export default FormMultiSelect;
@@ -12,7 +12,8 @@ var __importDefault =
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  const react_1 = __importDefault(require("react"));
15
- function FormMultiSelect({ value, options, onChange }) {
15
+ const clsx_1 = __importDefault(require("clsx"));
16
+ function FormMultiSelect({ value, options, onChange, showErrors }) {
16
17
  if (options.length === 0) {
17
18
  return null;
18
19
  }
@@ -30,7 +31,9 @@ function FormMultiSelect({ value, options, onChange }) {
30
31
  "select",
31
32
  {
32
33
  style: { height: height },
33
- className: "openapi-demo__multi-select-input",
34
+ className: (0, clsx_1.default)("openapi-demo__multi-select-input", {
35
+ error: showErrors,
36
+ }),
34
37
  value: value,
35
38
  onChange: onChange,
36
39
  size: Math.min(6, options.length + 1),
@@ -4,7 +4,6 @@ html[data-theme="dark"] .openapi-demo__select-input {
4
4
  border: none;
5
5
  outline: none;
6
6
  width: 100%;
7
- font-size: var(--ifm-code-font-size);
8
7
  color: var(--ifm-pre-color);
9
8
 
10
9
  border-radius: 4px;
@@ -21,12 +20,13 @@ html[data-theme="dark"] .openapi-demo__select-input {
21
20
  .openapi-demo__select-input {
22
21
  width: 100%;
23
22
  margin-top: calc(var(--ifm-pre-padding) / 2);
24
- padding: 12px 48px 12px var(--ifm-pre-padding);
23
+ padding: var(--openapi-demo-padding-input);
25
24
  border: none;
26
25
  outline: none;
27
26
  border-radius: 4px;
28
27
  background-color: var(--openapi-input-background);
29
- font-size: var(--ifm-code-font-size);
28
+ font-size: var(--openapi-demo-font-size-input);
29
+ font-family: var(--ifm-font-family-monospace);
30
30
  color: var(--ifm-pre-color);
31
31
  -moz-appearance: none;
32
32
  -webkit-appearance: none;
@@ -1,15 +1,34 @@
1
- .openapi-demo__input {
1
+ .openapi-demo__form-item-input {
2
2
  margin-top: calc(var(--ifm-pre-padding) / 2);
3
3
  background-color: var(--openapi-input-background);
4
- border: none;
4
+ border: 1px solid transparent;
5
5
  outline: none;
6
6
  width: 100%;
7
- font-size: var(--ifm-code-font-size);
8
7
  color: var(--ifm-pre-color);
9
- padding: 12px var(--ifm-pre-padding);
8
+ padding: var(--openapi-demo-padding-input);
10
9
  border-radius: 4px;
11
10
 
11
+ &:hover {
12
+ border: 1px solid var(--ifm-toc-border-color);
13
+ }
14
+
12
15
  &:focus {
13
- box-shadow: inset 0px 0px 0px 2px var(--openapi-input-border);
16
+ border: 1px solid var(--ifm-color-primary);
17
+ box-shadow: none;
18
+ }
19
+
20
+ &.error {
21
+ border: 1px solid var(--openapi-required);
22
+ }
23
+ }
24
+
25
+ .openapi-demo__input-error {
26
+ font-size: var(--openapi-demo-font-size-input);
27
+ color: var(--openapi-required);
28
+ padding-top: var(--openapi-demo-padding-input);
29
+
30
+ &::before {
31
+ display: inline;
32
+ content: "⚠ ";
14
33
  }
15
34
  }
@@ -5,5 +5,5 @@ export interface Props {
5
5
  password?: boolean;
6
6
  onChange?: React.ChangeEventHandler<HTMLInputElement>;
7
7
  }
8
- declare function FormTextInput({ value, placeholder, password, onChange }: Props): JSX.Element;
8
+ declare function FormTextInput({ isRequired, value, placeholder, password, onChange, paramName, }: Props): JSX.Element;
9
9
  export default FormTextInput;
@@ -11,17 +11,63 @@ var __importDefault =
11
11
  return mod && mod.__esModule ? mod : { default: mod };
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
+ // @ts-nocheck
14
15
  const react_1 = __importDefault(require("react"));
15
- function FormTextInput({ value, placeholder, password, onChange }) {
16
+ const error_message_1 = require("@hookform/error-message");
17
+ const clsx_1 = __importDefault(require("clsx"));
18
+ const react_hook_form_1 = require("react-hook-form");
19
+ function FormTextInput({
20
+ isRequired,
21
+ value,
22
+ placeholder,
23
+ password,
24
+ onChange,
25
+ paramName,
26
+ }) {
16
27
  placeholder = placeholder?.split("\n")[0];
17
- return react_1.default.createElement("input", {
18
- className: "openapi-demo__input",
19
- type: password ? "password" : "text",
20
- placeholder: placeholder,
21
- title: placeholder,
22
- value: value,
23
- onChange: onChange,
24
- autoComplete: "off",
25
- });
28
+ const {
29
+ register,
30
+ formState: { errors },
31
+ } = (0, react_hook_form_1.useFormContext)();
32
+ const showErrorMessage = errors?.[paramName]?.message;
33
+ return react_1.default.createElement(
34
+ react_1.default.Fragment,
35
+ null,
36
+ paramName
37
+ ? react_1.default.createElement("input", {
38
+ ...register(paramName, {
39
+ required: isRequired ? "This field is required" : false,
40
+ }),
41
+ className: (0, clsx_1.default)("openapi-demo__form-item-input", {
42
+ error: showErrorMessage,
43
+ }),
44
+ type: password ? "password" : "text",
45
+ placeholder: placeholder,
46
+ title: placeholder,
47
+ value: value,
48
+ onChange: onChange,
49
+ autoComplete: "off",
50
+ })
51
+ : react_1.default.createElement("input", {
52
+ className: "openapi-demo__form-item-input",
53
+ type: password ? "password" : "text",
54
+ placeholder: placeholder,
55
+ title: placeholder,
56
+ value: value,
57
+ onChange: onChange,
58
+ autoComplete: "off",
59
+ }),
60
+ showErrorMessage &&
61
+ react_1.default.createElement(error_message_1.ErrorMessage, {
62
+ errors: errors,
63
+ name: paramName,
64
+ render: ({ message }) =>
65
+ react_1.default.createElement(
66
+ "div",
67
+ { className: "openapi-demo__input-error" },
68
+ message
69
+ ),
70
+ })
71
+ );
26
72
  }
27
73
  exports.default = FormTextInput;
@@ -1,3 +1,6 @@
1
- import React from "react";
2
- declare const LiveApp: React.ComponentClass<any, any>;
1
+ /// <reference types="react" />
2
+ declare const LiveApp: {
3
+ (props: any): JSX.Element;
4
+ displayName: string;
5
+ };
3
6
  export default LiveApp;
@@ -58,40 +58,64 @@ Object.defineProperty(exports, "__esModule", { value: true });
58
58
  const react_1 = __importStar(require("react"));
59
59
  const theme_common_1 = require("@docusaurus/theme-common");
60
60
  const useIsBrowser_1 = __importDefault(require("@docusaurus/useIsBrowser"));
61
+ const error_message_1 = require("@hookform/error-message");
61
62
  const slice_1 = require("@theme/ApiDemoPanel/Body/slice");
63
+ const clsx_1 = __importDefault(require("clsx"));
64
+ const react_hook_form_1 = require("react-hook-form");
62
65
  const react_live_1 = require("react-live");
63
- function Live({ onEdit }) {
66
+ function Live({ onEdit, showErrors }) {
64
67
  const isBrowser = (0, useIsBrowser_1.default)();
65
68
  const [editorDisabled, setEditorDisabled] = (0, react_1.useState)(false);
66
- // TODO: Temporary solution for disabling tab key
67
- const handleKeydown = (event) => {
68
- if (event.key === "Tab") {
69
- event.preventDefault();
70
- setEditorDisabled(true);
71
- }
72
- };
73
69
  return react_1.default.createElement(
74
70
  "div",
75
- { onClick: () => setEditorDisabled(false) },
71
+ {
72
+ onClick: () => setEditorDisabled(false),
73
+ onBlur: () => setEditorDisabled(true),
74
+ },
76
75
  react_1.default.createElement(react_live_1.LiveEditor, {
77
76
  key: String(isBrowser),
78
- className: "openapi-demo__playground-editor",
77
+ className: (0, clsx_1.default)({
78
+ "openapi-demo__playground-editor": true,
79
+ "openapi-demo__form-item-input": showErrors,
80
+ error: showErrors,
81
+ }),
79
82
  onChange: onEdit,
80
83
  disabled: editorDisabled,
81
- onKeyDown: handleKeydown,
84
+ tabMode: "focus",
82
85
  })
83
86
  );
84
87
  }
85
88
  const LiveComponent = (0, react_live_1.withLive)(Live);
86
- function App({ children, transformCode, value, language, action, ...props }) {
89
+ function App({
90
+ children,
91
+ transformCode,
92
+ value,
93
+ language,
94
+ action,
95
+ required: isRequired,
96
+ ...props
97
+ }) {
87
98
  const prismTheme = (0, theme_common_1.usePrismTheme)();
88
99
  const [code, setCode] = react_1.default.useState(children);
89
100
  (0, react_1.useEffect)(() => {
90
101
  action((0, slice_1.setStringRawBody)(code));
91
102
  }, [action, code]);
103
+ const {
104
+ control,
105
+ formState: { errors },
106
+ } = (0, react_hook_form_1.useFormContext)();
107
+ const showErrorMessage = errors?.requestBody;
108
+ const handleChange = (snippet, onChange) => {
109
+ setCode(snippet);
110
+ onChange(snippet);
111
+ };
92
112
  return react_1.default.createElement(
93
113
  "div",
94
- { className: "openapi-demo__playground-container" },
114
+ {
115
+ className: (0, clsx_1.default)({
116
+ "openapi-demo__playground-container": true,
117
+ }),
118
+ },
95
119
  react_1.default.createElement(
96
120
  react_live_1.LiveProvider,
97
121
  {
@@ -101,7 +125,28 @@ function App({ children, transformCode, value, language, action, ...props }) {
101
125
  language: language,
102
126
  ...props,
103
127
  },
104
- react_1.default.createElement(LiveComponent, { onEdit: setCode })
128
+ react_1.default.createElement(react_hook_form_1.Controller, {
129
+ control: control,
130
+ rules: { required: isRequired ? "This field is required" : false },
131
+ name: "requestBody",
132
+ render: ({ field: { onChange, name } }) =>
133
+ react_1.default.createElement(LiveComponent, {
134
+ onEdit: (e) => handleChange(e, onChange),
135
+ name: name,
136
+ showErrors: showErrorMessage,
137
+ }),
138
+ }),
139
+ showErrorMessage &&
140
+ react_1.default.createElement(error_message_1.ErrorMessage, {
141
+ errors: errors,
142
+ name: "requestBody",
143
+ render: ({ message }) =>
144
+ react_1.default.createElement(
145
+ "div",
146
+ { className: "openapi-demo__input-error" },
147
+ message
148
+ ),
149
+ })
105
150
  )
106
151
  );
107
152
  }
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { Param } from "@theme/ApiDemoPanel/ParamOptions/slice";
3
+ export interface ParamProps {
4
+ param: Param;
5
+ }
6
+ export default function ParamArrayFormItem({ param }: ParamProps): JSX.Element;