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

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 (78) 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 +18 -0
  5. package/lib/theme/ApiDemoPanel/CodeTabs/index.js +7 -1
  6. package/lib/theme/ApiDemoPanel/Curl/index.js +1 -0
  7. package/lib/theme/ApiDemoPanel/FormItem/_FormItem.scss +11 -2
  8. package/lib/theme/ApiDemoPanel/FormItem/index.d.ts +2 -1
  9. package/lib/theme/ApiDemoPanel/FormItem/index.js +9 -3
  10. package/lib/theme/ApiDemoPanel/FormMultiSelect/_FormMultiSelect.scss +8 -4
  11. package/lib/theme/ApiDemoPanel/FormMultiSelect/index.d.ts +2 -1
  12. package/lib/theme/ApiDemoPanel/FormMultiSelect/index.js +5 -2
  13. package/lib/theme/ApiDemoPanel/FormSelect/_FormSelect.scss +3 -3
  14. package/lib/theme/ApiDemoPanel/FormTextInput/_FormTextInput.scss +24 -5
  15. package/lib/theme/ApiDemoPanel/FormTextInput/index.d.ts +1 -1
  16. package/lib/theme/ApiDemoPanel/FormTextInput/index.js +56 -10
  17. package/lib/theme/ApiDemoPanel/LiveEditor/index.d.ts +5 -2
  18. package/lib/theme/ApiDemoPanel/LiveEditor/index.js +59 -14
  19. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamArrayFormItem.d.ts +6 -0
  20. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamArrayFormItem.js +194 -0
  21. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamBooleanFormItem.d.ts +6 -0
  22. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamBooleanFormItem.js +63 -0
  23. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.d.ts +6 -0
  24. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.js +89 -0
  25. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamSelectFormItem.d.ts +6 -0
  26. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamSelectFormItem.js +63 -0
  27. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamTextFormItem.d.ts +6 -0
  28. package/lib/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamTextFormItem.js +38 -0
  29. package/lib/theme/ApiDemoPanel/ParamOptions/_ParamOptions.scss +9 -28
  30. package/lib/theme/ApiDemoPanel/ParamOptions/index.js +24 -176
  31. package/lib/theme/ApiDemoPanel/Request/_Request.scss +93 -20
  32. package/lib/theme/ApiDemoPanel/Request/index.d.ts +1 -1
  33. package/lib/theme/ApiDemoPanel/Request/index.js +316 -37
  34. package/lib/theme/ApiDemoPanel/Response/_Response.scss +54 -0
  35. package/lib/theme/ApiDemoPanel/Response/index.d.ts +4 -1
  36. package/lib/theme/ApiDemoPanel/Response/index.js +61 -34
  37. package/lib/theme/ApiDemoPanel/Server/_Server.scss +10 -0
  38. package/lib/theme/ApiDemoPanel/Server/index.js +10 -11
  39. package/lib/theme/ApiDemoPanel/index.js +1 -1
  40. package/lib/theme/SchemaTabs/_SchemaTabs.scss +0 -1
  41. package/lib/theme/styles.scss +6 -0
  42. package/package.json +7 -4
  43. package/src/theme/ApiDemoPanel/ApiCodeBlock/Content/_Content.scss +1 -0
  44. package/src/theme/ApiDemoPanel/Body/index.tsx +38 -29
  45. package/src/theme/ApiDemoPanel/CodeTabs/_CodeTabs.scss +18 -0
  46. package/src/theme/ApiDemoPanel/CodeTabs/index.js +7 -1
  47. package/src/theme/ApiDemoPanel/Curl/index.tsx +1 -0
  48. package/src/theme/ApiDemoPanel/FormItem/_FormItem.scss +11 -2
  49. package/src/theme/ApiDemoPanel/FormItem/index.tsx +8 -3
  50. package/src/theme/ApiDemoPanel/FormMultiSelect/_FormMultiSelect.scss +8 -4
  51. package/src/theme/ApiDemoPanel/FormMultiSelect/index.tsx +7 -2
  52. package/src/theme/ApiDemoPanel/FormSelect/_FormSelect.scss +3 -3
  53. package/src/theme/ApiDemoPanel/FormTextInput/_FormTextInput.scss +24 -5
  54. package/src/theme/ApiDemoPanel/FormTextInput/index.tsx +58 -10
  55. package/src/theme/ApiDemoPanel/LiveEditor/index.tsx +53 -14
  56. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamArrayFormItem.tsx +153 -0
  57. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamBooleanFormItem.tsx +64 -0
  58. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.tsx +86 -0
  59. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamSelectFormItem.tsx +65 -0
  60. package/src/theme/ApiDemoPanel/ParamOptions/ParamFormItems/ParamTextFormItem.tsx +38 -0
  61. package/src/theme/ApiDemoPanel/ParamOptions/_ParamOptions.scss +9 -28
  62. package/src/theme/ApiDemoPanel/ParamOptions/index.tsx +8 -196
  63. package/src/theme/ApiDemoPanel/Request/_Request.scss +93 -20
  64. package/src/theme/ApiDemoPanel/Request/index.tsx +250 -28
  65. package/src/theme/ApiDemoPanel/Response/_Response.scss +54 -0
  66. package/src/theme/ApiDemoPanel/Response/index.tsx +51 -31
  67. package/src/theme/ApiDemoPanel/Server/_Server.scss +10 -0
  68. package/src/theme/ApiDemoPanel/Server/index.tsx +8 -11
  69. package/src/theme/ApiDemoPanel/index.tsx +1 -1
  70. package/src/theme/SchemaTabs/_SchemaTabs.scss +0 -1
  71. package/src/theme/styles.scss +6 -0
  72. package/src/theme-openapi.d.ts +40 -1
  73. package/lib/theme/ApiDemoPanel/Execute/index.d.ts +0 -8
  74. package/lib/theme/ApiDemoPanel/Execute/index.js +0 -213
  75. package/src/theme/ApiDemoPanel/Execute/index.tsx +0 -200
  76. /package/lib/theme/ApiDemoPanel/{Execute → Request}/makeRequest.d.ts +0 -0
  77. /package/lib/theme/ApiDemoPanel/{Execute → Request}/makeRequest.js +0 -0
  78. /package/src/theme/ApiDemoPanel/{Execute → Request}/makeRequest.ts +0 -0
@@ -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;
@@ -3,6 +3,8 @@ import { RequestBodyObject } from "docusaurus-plugin-openapi-docs/src/openapi/ty
3
3
  export interface Props {
4
4
  jsonRequestBodyExample: string;
5
5
  requestBodyMetadata?: RequestBodyObject;
6
+ methods?: any;
7
+ required?: boolean;
6
8
  }
7
- declare function BodyWrap({ requestBodyMetadata, jsonRequestBodyExample }: Props): JSX.Element | null;
9
+ declare function BodyWrap({ requestBodyMetadata, jsonRequestBodyExample, methods, required, }: Props): JSX.Element | null;
8
10
  export default BodyWrap;
@@ -15,9 +15,6 @@ const react_1 = __importDefault(require("react"));
15
15
  const json2xml_1 = __importDefault(
16
16
  require("@theme/ApiDemoPanel/Body/json2xml")
17
17
  );
18
- const ContentType_1 = __importDefault(
19
- require("@theme/ApiDemoPanel/ContentType")
20
- );
21
18
  const FormFileUpload_1 = __importDefault(
22
19
  require("@theme/ApiDemoPanel/FormFileUpload")
23
20
  );
@@ -32,7 +29,12 @@ const SchemaTabs_1 = __importDefault(require("@theme/SchemaTabs"));
32
29
  const TabItem_1 = __importDefault(require("@theme/TabItem"));
33
30
  const xml_formatter_1 = __importDefault(require("xml-formatter"));
34
31
  const slice_1 = require("./slice");
35
- function BodyWrap({ requestBodyMetadata, jsonRequestBodyExample }) {
32
+ function BodyWrap({
33
+ requestBodyMetadata,
34
+ jsonRequestBodyExample,
35
+ methods,
36
+ required,
37
+ }) {
36
38
  const contentType = (0, hooks_1.useTypedSelector)(
37
39
  (state) => state.contentType.value
38
40
  );
@@ -42,21 +44,21 @@ function BodyWrap({ requestBodyMetadata, jsonRequestBodyExample }) {
42
44
  if (contentType === undefined) {
43
45
  return null;
44
46
  }
45
- return react_1.default.createElement(
46
- react_1.default.Fragment,
47
- null,
48
- react_1.default.createElement(ContentType_1.default, null),
49
- react_1.default.createElement(Body, {
50
- requestBodyMetadata: requestBodyMetadata,
51
- jsonRequestBodyExample: jsonRequestBodyExample,
52
- })
53
- );
47
+ return react_1.default.createElement(Body, {
48
+ requestBodyMetadata: requestBodyMetadata,
49
+ jsonRequestBodyExample: jsonRequestBodyExample,
50
+ required: required,
51
+ });
54
52
  }
55
- function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
53
+ function Body({
54
+ requestBodyMetadata,
55
+ jsonRequestBodyExample,
56
+ methods,
57
+ required,
58
+ }) {
56
59
  const contentType = (0, hooks_1.useTypedSelector)(
57
60
  (state) => state.contentType.value
58
61
  );
59
- const required = requestBodyMetadata?.required;
60
62
  const dispatch = (0, hooks_1.useTypedDispatch)();
61
63
  // Lot's of possible content-types:
62
64
  // - application/json
@@ -82,7 +84,7 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
82
84
  if (schema?.format === "binary") {
83
85
  return react_1.default.createElement(
84
86
  FormItem_1.default,
85
- { label: "Body", required: required },
87
+ null,
86
88
  react_1.default.createElement(FormFileUpload_1.default, {
87
89
  placeholder: schema.description || "Body",
88
90
  onChange: (file) => {
@@ -107,17 +109,10 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
107
109
  ) {
108
110
  return react_1.default.createElement(
109
111
  FormItem_1.default,
110
- { label: "Body", required: required },
112
+ { className: "openapi-demo__form-item-body-container" },
111
113
  react_1.default.createElement(
112
114
  "div",
113
- {
114
- style: {
115
- marginTop: "calc(var(--ifm-pre-padding) / 2)",
116
- borderRadius: "4px",
117
- padding: "var(--ifm-pre-padding)",
118
- border: "1px solid var(--openapi-monaco-border-color)",
119
- },
120
- },
115
+ null,
121
116
  Object.entries(schema.properties ?? {}).map(([key, val]) => {
122
117
  if (val.format === "binary") {
123
118
  return react_1.default.createElement(
@@ -187,6 +182,9 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
187
182
  Array.isArray(schema.required) && schema.required.includes(key),
188
183
  },
189
184
  react_1.default.createElement(FormTextInput_1.default, {
185
+ paramName: key,
186
+ isRequired:
187
+ Array.isArray(schema.required) && schema.required.includes(key),
190
188
  placeholder: val.description || key,
191
189
  onChange: (e) => {
192
190
  dispatch(
@@ -277,7 +275,7 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
277
275
  if (exampleBody) {
278
276
  return react_1.default.createElement(
279
277
  FormItem_1.default,
280
- { label: "Body", required: required },
278
+ null,
281
279
  react_1.default.createElement(
282
280
  SchemaTabs_1.default,
283
281
  { className: "openapi-tabs__schema", lazy: true },
@@ -286,7 +284,7 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
286
284
  { label: "Default", value: "default", default: true },
287
285
  react_1.default.createElement(
288
286
  LiveEditor_1.default,
289
- { action: dispatch, language: language },
287
+ { action: dispatch, language: language, required: required },
290
288
  defaultBody
291
289
  )
292
290
  ),
@@ -296,7 +294,7 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
296
294
  exampleBody &&
297
295
  react_1.default.createElement(
298
296
  LiveEditor_1.default,
299
- { action: dispatch, language: language },
297
+ { action: dispatch, language: language, required: required },
300
298
  exampleBody
301
299
  )
302
300
  )
@@ -306,7 +304,7 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
306
304
  if (examplesBodies && examplesBodies.length > 0) {
307
305
  return react_1.default.createElement(
308
306
  FormItem_1.default,
309
- { label: "Body", required: required },
307
+ { className: "openapi-demo__form-item-body-container" },
310
308
  react_1.default.createElement(
311
309
  SchemaTabs_1.default,
312
310
  { className: "openapi-tabs__schema", lazy: true },
@@ -315,7 +313,7 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
315
313
  { label: "Default", value: "default", default: true },
316
314
  react_1.default.createElement(
317
315
  LiveEditor_1.default,
318
- { action: dispatch, language: language },
316
+ { action: dispatch, language: language, required: required },
319
317
  defaultBody
320
318
  )
321
319
  ),
@@ -345,10 +343,10 @@ function Body({ requestBodyMetadata, jsonRequestBodyExample }) {
345
343
  }
346
344
  return react_1.default.createElement(
347
345
  FormItem_1.default,
348
- { label: "Body", required: required },
346
+ null,
349
347
  react_1.default.createElement(
350
348
  LiveEditor_1.default,
351
- { action: dispatch, language: language },
349
+ { action: dispatch, language: language, required: required },
352
350
  defaultBody
353
351
  )
354
352
  );
@@ -13,6 +13,22 @@
13
13
  .openapi-tabs__code-container {
14
14
  margin-bottom: 1rem;
15
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
+
16
32
  .openapi-tabs__code-item {
17
33
  display: flex;
18
34
  flex-direction: column-reverse;
@@ -54,6 +70,8 @@
54
70
 
55
71
  .openapi-demo__code-block code {
56
72
  max-height: 200px;
73
+ font-size: var(--openapi-demo-font-size-code);
74
+ padding-top: var(--ifm-pre-padding);
57
75
  }
58
76
 
59
77
  body[class="ReactModal__Body--open"] {
@@ -147,8 +147,14 @@ function TabContent({ lazy, children, selectedValue }) {
147
147
 
148
148
  function TabsComponent(props) {
149
149
  const tabs = useTabs(props);
150
+ const { className } = props;
151
+
150
152
  return (
151
- <div className="tabs-container openapi-tabs__code-container">
153
+ <div
154
+ className={clsx("tabs-container openapi-tabs__code-container", {
155
+ [className]: className,
156
+ })}
157
+ >
152
158
  <TabList {...props} {...tabs} />
153
159
  <TabContent {...props} {...tabs} />
154
160
  </div>
@@ -365,6 +365,7 @@ function Curl({ postman, codeSamples }) {
365
365
  react_1.default.createElement(
366
366
  CodeTabs_1.default,
367
367
  {
368
+ className: "openapi-tabs__code-container-inner",
368
369
  action: {
369
370
  setLanguage: setLanguage,
370
371
  setSelectedVariant: setSelectedVariant,
@@ -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;