docusaurus-theme-openapi-docs 3.0.0-beta.4 → 3.0.0-beta.6

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 (48) hide show
  1. package/lib/markdown/utils.js +4 -4
  2. package/lib/markdown/utils.test.d.ts +1 -0
  3. package/lib/markdown/utils.test.js +43 -0
  4. package/lib/theme/ApiExplorer/Body/index.js +8 -1
  5. package/lib/theme/ApiExplorer/CodeSnippets/code-snippets-types.d.ts +21 -0
  6. package/lib/theme/ApiExplorer/CodeSnippets/code-snippets-types.js +8 -0
  7. package/lib/theme/ApiExplorer/CodeSnippets/index.d.ts +2 -12
  8. package/lib/theme/ApiExplorer/CodeSnippets/index.js +86 -8
  9. package/lib/theme/ApiExplorer/CodeSnippets/languages.d.ts +3 -0
  10. package/lib/theme/ApiExplorer/CodeSnippets/languages.js +48 -0
  11. package/lib/theme/ApiExplorer/CodeSnippets/languages.json +0 -96
  12. package/lib/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +14 -0
  13. package/lib/theme/ApiExplorer/CodeTabs/index.d.ts +5 -1
  14. package/lib/theme/ApiExplorer/CodeTabs/index.js +11 -3
  15. package/lib/theme/ApiExplorer/index.js +1 -1
  16. package/lib/theme/ApiItem/index.d.ts +2 -2
  17. package/lib/theme/ApiItem/index.js +24 -0
  18. package/lib/theme/ApiTabs/_ApiTabs.scss +3 -1
  19. package/lib/theme/ApiTabs/index.d.ts +5 -1
  20. package/lib/theme/ApiTabs/index.js +15 -3
  21. package/lib/theme/Markdown/index.js +37 -0
  22. package/lib/theme/OperationTabs/_OperationTabs.scss +71 -0
  23. package/lib/theme/OperationTabs/index.d.ts +3 -0
  24. package/lib/theme/OperationTabs/index.js +232 -0
  25. package/lib/theme/SchemaItem/index.js +8 -10
  26. package/lib/theme/SchemaTabs/_SchemaTabs.scss +0 -4
  27. package/lib/theme/styles.scss +5 -0
  28. package/package.json +3 -3
  29. package/src/markdown/utils.test.ts +48 -0
  30. package/src/markdown/utils.ts +4 -4
  31. package/src/theme/ApiExplorer/Body/index.tsx +3 -1
  32. package/src/theme/ApiExplorer/CodeSnippets/code-snippets-types.ts +55 -0
  33. package/src/theme/ApiExplorer/CodeSnippets/index.tsx +94 -21
  34. package/src/theme/ApiExplorer/CodeSnippets/languages.json +0 -96
  35. package/src/theme/ApiExplorer/CodeSnippets/languages.ts +53 -0
  36. package/src/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +14 -0
  37. package/src/theme/ApiExplorer/CodeTabs/index.tsx +21 -5
  38. package/src/theme/ApiExplorer/index.tsx +1 -1
  39. package/src/theme/ApiItem/index.tsx +21 -1
  40. package/src/theme/ApiTabs/_ApiTabs.scss +3 -1
  41. package/src/theme/ApiTabs/index.tsx +16 -5
  42. package/src/theme/Markdown/index.js +37 -0
  43. package/src/theme/OperationTabs/_OperationTabs.scss +71 -0
  44. package/src/theme/OperationTabs/index.tsx +216 -0
  45. package/src/theme/SchemaItem/index.tsx +5 -8
  46. package/src/theme/SchemaTabs/_SchemaTabs.scss +0 -4
  47. package/src/theme/styles.scss +5 -0
  48. package/src/theme-openapi.d.ts +4 -0
@@ -17,11 +17,11 @@ function create(tag, props) {
17
17
  }
18
18
  exports.create = create;
19
19
  function guard(value, cb) {
20
- if (!!value) {
21
- const children = cb(value);
22
- return render(children);
20
+ if (value === undefined || value === "") {
21
+ return "";
23
22
  }
24
- return "";
23
+ const children = cb(value);
24
+ return render(children);
25
25
  }
26
26
  exports.guard = guard;
27
27
  function render(children) {
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /* ============================================================================
3
+ * Copyright (c) Palo Alto Networks
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ * ========================================================================== */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const utils_1 = require("./utils");
10
+ describe("guard", () => {
11
+ it("should guard empty strings", () => {
12
+ const actual = (0, utils_1.guard)("", (_) => {
13
+ throw new Error("Should not be called");
14
+ });
15
+ expect(actual).toBe("");
16
+ });
17
+ it("should guard undefined", () => {
18
+ const actual = (0, utils_1.guard)(undefined, (value) => {
19
+ throw new Error("Should not be called");
20
+ });
21
+ expect(actual).toBe("");
22
+ });
23
+ it("should not guard strings", () => {
24
+ const actual = (0, utils_1.guard)("hello", (value) => value);
25
+ expect(actual).toBe("hello");
26
+ });
27
+ it("should not guard numbers", () => {
28
+ const actual = (0, utils_1.guard)(1, (value) => `${value}`);
29
+ expect(actual).toBe("1");
30
+ });
31
+ it("should not guard numbers equals to 0", () => {
32
+ const actual = (0, utils_1.guard)(0, (value) => `${value}`);
33
+ expect(actual).toBe("0");
34
+ });
35
+ it("should not guard false booleans", () => {
36
+ const actual = (0, utils_1.guard)(false, (value) => `${value}`);
37
+ expect(actual).toBe("false");
38
+ });
39
+ it("should not guard true booleans", () => {
40
+ const actual = (0, utils_1.guard)(true, (value) => `${value}`);
41
+ expect(actual).toBe("true");
42
+ });
43
+ });
@@ -23,6 +23,7 @@ const FormTextInput_1 = __importDefault(
23
23
  );
24
24
  const LiveEditor_1 = __importDefault(require("@theme/ApiExplorer/LiveEditor"));
25
25
  const hooks_1 = require("@theme/ApiItem/hooks");
26
+ const Markdown_1 = __importDefault(require("@theme/Markdown"));
26
27
  const SchemaTabs_1 = __importDefault(require("@theme/SchemaTabs"));
27
28
  const TabItem_1 = __importDefault(require("@theme/TabItem"));
28
29
  const xml_formatter_1 = __importDefault(require("xml-formatter"));
@@ -296,6 +297,10 @@ function Body({
296
297
  react_1.default.createElement(
297
298
  TabItem_1.default,
298
299
  { label: "Example", value: "example" },
300
+ example.summary &&
301
+ react_1.default.createElement(Markdown_1.default, {
302
+ children: example.summary,
303
+ }),
299
304
  exampleBody &&
300
305
  react_1.default.createElement(
301
306
  LiveEditor_1.default,
@@ -337,7 +342,9 @@ function Body({
337
342
  key: example.label,
338
343
  },
339
344
  example.summary &&
340
- react_1.default.createElement("p", null, example.summary),
345
+ react_1.default.createElement(Markdown_1.default, {
346
+ children: example.summary,
347
+ }),
341
348
  example.body &&
342
349
  react_1.default.createElement(
343
350
  LiveEditor_1.default,
@@ -0,0 +1,21 @@
1
+ export type CodeSampleLanguage = "C" | "C#" | "C++" | "CoffeeScript" | "CSS" | "Dart" | "DM" | "Elixir" | "Go" | "Groovy" | "HTML" | "Java" | "JavaScript" | "Kotlin" | "Objective-C" | "Perl" | "PHP" | "PowerShell" | "Python" | "Ruby" | "Rust" | "Scala" | "Shell" | "Swift" | "TypeScript";
2
+ export interface Language {
3
+ highlight: string;
4
+ language: string;
5
+ codeSampleLanguage: CodeSampleLanguage;
6
+ logoClass: string;
7
+ variant: string;
8
+ variants: string[];
9
+ options?: {
10
+ [key: string]: boolean;
11
+ };
12
+ sample?: string;
13
+ samples?: string[];
14
+ samplesSources?: string[];
15
+ samplesLabels?: string[];
16
+ }
17
+ export interface CodeSample {
18
+ source: string;
19
+ lang: CodeSampleLanguage;
20
+ label?: string;
21
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /* ============================================================================
3
+ * Copyright (c) Palo Alto Networks
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ * ========================================================================== */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,20 +1,10 @@
1
1
  import React from "react";
2
2
  import sdk from "@paloaltonetworks/postman-collection";
3
- export interface Language {
4
- highlight: string;
5
- language: string;
6
- logoClass: string;
7
- variant: string;
8
- variants: string[];
9
- options: {
10
- [key: string]: boolean;
11
- };
12
- source?: string;
13
- }
3
+ import { CodeSample, Language } from "./code-snippets-types";
14
4
  export declare const languageSet: Language[];
15
5
  export interface Props {
16
6
  postman: sdk.Request;
17
- codeSamples: any;
7
+ codeSamples: CodeSample[];
18
8
  }
19
9
  declare function CodeSnippets({ postman, codeSamples }: Props): React.JSX.Element | null;
20
10
  export default CodeSnippets;
@@ -72,10 +72,12 @@ const buildPostmanRequest_1 = __importDefault(
72
72
  const CodeTabs_1 = __importDefault(require("@theme/ApiExplorer/CodeTabs"));
73
73
  const hooks_1 = require("@theme/ApiItem/hooks");
74
74
  const merge_1 = __importDefault(require("lodash/merge"));
75
+ const languages_1 = require("./languages");
75
76
  exports.languageSet = [
76
77
  {
77
78
  highlight: "bash",
78
79
  language: "curl",
80
+ codeSampleLanguage: "Shell",
79
81
  logoClass: "bash",
80
82
  options: {
81
83
  longFormat: false,
@@ -88,6 +90,7 @@ exports.languageSet = [
88
90
  {
89
91
  highlight: "python",
90
92
  language: "python",
93
+ codeSampleLanguage: "Python",
91
94
  logoClass: "python",
92
95
  options: {
93
96
  followRedirect: true,
@@ -99,6 +102,7 @@ exports.languageSet = [
99
102
  {
100
103
  highlight: "go",
101
104
  language: "go",
105
+ codeSampleLanguage: "Go",
102
106
  logoClass: "go",
103
107
  options: {
104
108
  followRedirect: true,
@@ -110,6 +114,7 @@ exports.languageSet = [
110
114
  {
111
115
  highlight: "javascript",
112
116
  language: "nodejs",
117
+ codeSampleLanguage: "JavaScript",
113
118
  logoClass: "nodejs",
114
119
  options: {
115
120
  ES6_enabled: true,
@@ -117,11 +122,12 @@ exports.languageSet = [
117
122
  trimRequestBody: true,
118
123
  },
119
124
  variant: "axios",
120
- variants: ["axios", "native", "request", "unirest"],
125
+ variants: ["axios", "native"],
121
126
  },
122
127
  {
123
128
  highlight: "ruby",
124
129
  language: "ruby",
130
+ codeSampleLanguage: "Ruby",
125
131
  logoClass: "ruby",
126
132
  options: {
127
133
  followRedirect: true,
@@ -133,6 +139,7 @@ exports.languageSet = [
133
139
  {
134
140
  highlight: "csharp",
135
141
  language: "csharp",
142
+ codeSampleLanguage: "C#",
136
143
  logoClass: "csharp",
137
144
  options: {
138
145
  followRedirect: true,
@@ -144,6 +151,7 @@ exports.languageSet = [
144
151
  {
145
152
  highlight: "php",
146
153
  language: "php",
154
+ codeSampleLanguage: "PHP",
147
155
  logoClass: "php",
148
156
  options: {
149
157
  followRedirect: true,
@@ -155,6 +163,7 @@ exports.languageSet = [
155
163
  {
156
164
  highlight: "java",
157
165
  language: "java",
166
+ codeSampleLanguage: "Java",
158
167
  logoClass: "java",
159
168
  options: {
160
169
  followRedirect: true,
@@ -166,6 +175,7 @@ exports.languageSet = [
166
175
  {
167
176
  highlight: "powershell",
168
177
  language: "powershell",
178
+ codeSampleLanguage: "PowerShell",
169
179
  logoClass: "powershell",
170
180
  options: {
171
181
  followRedirect: true,
@@ -175,7 +185,7 @@ exports.languageSet = [
175
185
  variants: ["restmethod"],
176
186
  },
177
187
  ];
178
- function CodeTab({ children, hidden, className, onClick }) {
188
+ function CodeTab({ children, hidden, className }) {
179
189
  return react_1.default.createElement(
180
190
  "div",
181
191
  { role: "tabpanel", className: className, ...{ hidden } },
@@ -208,7 +218,6 @@ function CodeSnippets({ postman, codeSamples }) {
208
218
  // Can override languageSet, change order of langs, override options and variants
209
219
  const langs = [
210
220
  ...(siteConfig?.themeConfig?.languageTabs ?? exports.languageSet),
211
- ...codeSamples,
212
221
  ];
213
222
  // Filter languageSet by user-defined langs
214
223
  const filteredLanguageSet = exports.languageSet.filter((ls) => {
@@ -217,13 +226,17 @@ function CodeSnippets({ postman, codeSamples }) {
217
226
  });
218
227
  });
219
228
  // Merge user-defined langs into languageSet
220
- const mergedLangs = (0, merge_1.default)(filteredLanguageSet, langs);
229
+ const mergedLangs = (0, languages_1.mergeCodeSampleLanguage)(
230
+ (0, merge_1.default)(filteredLanguageSet, langs),
231
+ codeSamples
232
+ );
221
233
  // Read defaultLang from localStorage
222
234
  const defaultLang = mergedLangs.filter(
223
235
  (lang) =>
224
236
  lang.language === localStorage.getItem("docusaurus.tab.code-samples")
225
237
  );
226
238
  const [selectedVariant, setSelectedVariant] = (0, react_1.useState)();
239
+ const [selectedSample, setSelectedSample] = (0, react_1.useState)();
227
240
  const [language, setLanguage] = (0, react_1.useState)(() => {
228
241
  // Return first index if only 1 user-defined language exists
229
242
  if (mergedLangs.length === 1) {
@@ -233,7 +246,15 @@ function CodeSnippets({ postman, codeSamples }) {
233
246
  return defaultLang[0] ?? mergedLangs[0];
234
247
  });
235
248
  const [codeText, setCodeText] = (0, react_1.useState)("");
249
+ const [codeSampleCodeText, setCodeSampleCodeText] = (0, react_1.useState)(
250
+ () => (0, languages_1.getCodeSampleSourceFromLanguage)(language)
251
+ );
236
252
  (0, react_1.useEffect)(() => {
253
+ if (language && !!language.sample) {
254
+ setCodeSampleCodeText(
255
+ (0, languages_1.getCodeSampleSourceFromLanguage)(language)
256
+ );
257
+ }
237
258
  if (language && !!language.options) {
238
259
  const postmanRequest = (0, buildPostmanRequest_1.default)(postman, {
239
260
  queryParams,
@@ -258,8 +279,6 @@ function CodeSnippets({ postman, codeSamples }) {
258
279
  setCodeText(snippet);
259
280
  }
260
281
  );
261
- } else if (language && !!language.source) {
262
- setCodeText(language.source);
263
282
  } else if (language && !language.options) {
264
283
  const langSource = mergedLangs.filter(
265
284
  (lang) => lang.language === language.language
@@ -308,7 +327,8 @@ function CodeSnippets({ postman, codeSamples }) {
308
327
  auth,
309
328
  mergedLangs,
310
329
  ]);
311
- (0, react_1.useEffect)(() => {
330
+ // no dependencies was intentionlly set for this particular hook. it's safe as long as if conditions are set
331
+ (0, react_1.useEffect)(function onSelectedVariantUpdate() {
312
332
  if (selectedVariant && selectedVariant !== language.variant) {
313
333
  const postmanRequest = (0, buildPostmanRequest_1.default)(postman, {
314
334
  queryParams,
@@ -335,6 +355,21 @@ function CodeSnippets({ postman, codeSamples }) {
335
355
  );
336
356
  }
337
357
  });
358
+ // no dependencies was intentionlly set for this particular hook. it's safe as long as if conditions are set
359
+ // eslint-disable-next-line react-hooks/exhaustive-deps
360
+ (0, react_1.useEffect)(function onSelectedSampleUpdate() {
361
+ if (
362
+ language.samples &&
363
+ language.samplesSources &&
364
+ selectedSample &&
365
+ selectedSample !== language.sample
366
+ ) {
367
+ const sampleIndex = language.samples.findIndex(
368
+ (smp) => smp === selectedSample
369
+ );
370
+ setCodeSampleCodeText(language.samplesSources[sampleIndex]);
371
+ }
372
+ });
338
373
  if (language === undefined) {
339
374
  return null;
340
375
  }
@@ -348,7 +383,9 @@ function CodeSnippets({ postman, codeSamples }) {
348
383
  action: {
349
384
  setLanguage: setLanguage,
350
385
  setSelectedVariant: setSelectedVariant,
386
+ setSelectedSample: setSelectedSample,
351
387
  },
388
+ languageSet: mergedLangs,
352
389
  lazy: true,
353
390
  },
354
391
  mergedLangs.map((lang) => {
@@ -362,6 +399,46 @@ function CodeSnippets({ postman, codeSamples }) {
362
399
  className: `openapi-tabs__code-item--${lang.logoClass}`,
363
400
  },
364
401
  },
402
+ lang.samples &&
403
+ react_1.default.createElement(
404
+ CodeTabs_1.default,
405
+ {
406
+ className: "openapi-tabs__code-container-inner",
407
+ action: {
408
+ setLanguage: setLanguage,
409
+ setSelectedSample: setSelectedSample,
410
+ },
411
+ includeSample: true,
412
+ currentLanguage: lang.language,
413
+ defaultValue: selectedSample,
414
+ languageSet: mergedLangs,
415
+ lazy: true,
416
+ },
417
+ lang.samples.map((sample, index) => {
418
+ return react_1.default.createElement(
419
+ CodeTab,
420
+ {
421
+ value: sample,
422
+ label: lang.samplesLabels
423
+ ? lang.samplesLabels[index]
424
+ : sample,
425
+ key: `${lang.language}-${lang.sample}`,
426
+ attributes: {
427
+ className: `openapi-tabs__code-item--sample`,
428
+ },
429
+ },
430
+ react_1.default.createElement(
431
+ ApiCodeBlock_1.default,
432
+ {
433
+ language: lang.highlight,
434
+ className: "openapi-explorer__code-block",
435
+ showLineNumbers: true,
436
+ },
437
+ codeSampleCodeText
438
+ )
439
+ );
440
+ })
441
+ ),
365
442
  react_1.default.createElement(
366
443
  CodeTabs_1.default,
367
444
  {
@@ -373,9 +450,10 @@ function CodeSnippets({ postman, codeSamples }) {
373
450
  includeVariant: true,
374
451
  currentLanguage: lang.language,
375
452
  defaultValue: selectedVariant,
453
+ languageSet: mergedLangs,
376
454
  lazy: true,
377
455
  },
378
- lang.variants.map((variant) => {
456
+ lang.variants.map((variant, index) => {
379
457
  return react_1.default.createElement(
380
458
  CodeTab,
381
459
  {
@@ -0,0 +1,3 @@
1
+ import { CodeSample, Language } from "./code-snippets-types";
2
+ export declare function mergeCodeSampleLanguage(languages: Language[], codeSamples: CodeSample[]): Language[];
3
+ export declare function getCodeSampleSourceFromLanguage(language: Language): string;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /* ============================================================================
3
+ * Copyright (c) Palo Alto Networks
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ * ========================================================================== */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getCodeSampleSourceFromLanguage = exports.mergeCodeSampleLanguage =
10
+ void 0;
11
+ function mergeCodeSampleLanguage(languages, codeSamples) {
12
+ return languages.map((language) => {
13
+ const languageCodeSamples = codeSamples.filter(
14
+ ({ lang }) => lang === language.codeSampleLanguage
15
+ );
16
+ if (languageCodeSamples.length) {
17
+ const samples = languageCodeSamples.map(({ lang }) => lang);
18
+ const samplesLabels = languageCodeSamples.map(
19
+ ({ label, lang }) => label || lang
20
+ );
21
+ const samplesSources = languageCodeSamples.map(({ source }) => source);
22
+ return {
23
+ ...language,
24
+ sample: samples[0],
25
+ samples,
26
+ samplesSources,
27
+ samplesLabels,
28
+ };
29
+ }
30
+ return language;
31
+ });
32
+ }
33
+ exports.mergeCodeSampleLanguage = mergeCodeSampleLanguage;
34
+ function getCodeSampleSourceFromLanguage(language) {
35
+ if (
36
+ language &&
37
+ language.sample &&
38
+ language.samples &&
39
+ language.samplesSources
40
+ ) {
41
+ const sampleIndex = language.samples.findIndex(
42
+ (smp) => smp === language.sample
43
+ );
44
+ return language.samplesSources[sampleIndex];
45
+ }
46
+ return "";
47
+ }
48
+ exports.getCodeSampleSourceFromLanguage = getCodeSampleSourceFromLanguage;
@@ -635,102 +635,6 @@
635
635
  "description": "Modifies code snippet to incorporate ES6 (EcmaScript) features"
636
636
  }
637
637
  ]
638
- },
639
- {
640
- "key": "Request",
641
- "options": [
642
- {
643
- "name": "Set indentation count",
644
- "id": "indentCount",
645
- "type": "positiveInteger",
646
- "default": 2,
647
- "description": "Set the number of indentation characters to add per code level"
648
- },
649
- {
650
- "name": "Set indentation type",
651
- "id": "indentType",
652
- "type": "enum",
653
- "availableOptions": ["Tab", "Space"],
654
- "default": "Space",
655
- "description": "Select the character used to indent lines of code"
656
- },
657
- {
658
- "name": "Set request timeout",
659
- "id": "requestTimeout",
660
- "type": "positiveInteger",
661
- "default": 0,
662
- "description": "Set number of milliseconds the request should wait for a response before timing out (use 0 for infinity)"
663
- },
664
- {
665
- "name": "Follow redirects",
666
- "id": "followRedirect",
667
- "type": "boolean",
668
- "default": true,
669
- "description": "Automatically follow HTTP redirects"
670
- },
671
- {
672
- "name": "Trim request body fields",
673
- "id": "trimRequestBody",
674
- "type": "boolean",
675
- "default": false,
676
- "description": "Remove white space and additional lines that may affect the server's response"
677
- },
678
- {
679
- "name": "Enable ES6 features",
680
- "id": "ES6_enabled",
681
- "type": "boolean",
682
- "default": false,
683
- "description": "Modifies code snippet to incorporate ES6 (EcmaScript) features"
684
- }
685
- ]
686
- },
687
- {
688
- "key": "Unirest",
689
- "options": [
690
- {
691
- "name": "Set indentation count",
692
- "id": "indentCount",
693
- "type": "positiveInteger",
694
- "default": 2,
695
- "description": "Set the number of indentation characters to add per code level"
696
- },
697
- {
698
- "name": "Set indentation type",
699
- "id": "indentType",
700
- "type": "enum",
701
- "availableOptions": ["Tab", "Space"],
702
- "default": "Space",
703
- "description": "Select the character used to indent lines of code"
704
- },
705
- {
706
- "name": "Set request timeout",
707
- "id": "requestTimeout",
708
- "type": "positiveInteger",
709
- "default": 0,
710
- "description": "Set number of milliseconds the request should wait for a response before timing out (use 0 for infinity)"
711
- },
712
- {
713
- "name": "Follow redirects",
714
- "id": "followRedirect",
715
- "type": "boolean",
716
- "default": true,
717
- "description": "Automatically follow HTTP redirects"
718
- },
719
- {
720
- "name": "Trim request body fields",
721
- "id": "trimRequestBody",
722
- "type": "boolean",
723
- "default": false,
724
- "description": "Remove white space and additional lines that may affect the server's response"
725
- },
726
- {
727
- "name": "Enable ES6 features",
728
- "id": "ES6_enabled",
729
- "type": "boolean",
730
- "default": false,
731
- "description": "Modifies code snippet to incorporate ES6 (EcmaScript) features"
732
- }
733
- ]
734
638
  }
735
639
  ]
736
640
  },
@@ -96,6 +96,20 @@ body[class="ReactModal__Body--open"] {
96
96
  padding-right: 0.5rem !important;
97
97
  }
98
98
 
99
+ .openapi-tabs__code-item--sample {
100
+ color: var(--ifm-color-secondary);
101
+
102
+ &.active {
103
+ border-color: var(--ifm-toc-border-color);
104
+ }
105
+ }
106
+
107
+ .openapi-tabs__code-item--sample > span {
108
+ padding-top: unset !important;
109
+ padding-left: 0.5rem !important;
110
+ padding-right: 0.5rem !important;
111
+ }
112
+
99
113
  .openapi-tabs__code-item--python {
100
114
  color: var(--ifm-color-success);
101
115
 
@@ -6,6 +6,10 @@ export interface Props {
6
6
  [key: string]: React.Dispatch<any>;
7
7
  };
8
8
  currentLanguage: Language;
9
+ languageSet: Language[];
9
10
  includeVariant: boolean;
10
11
  }
11
- export default function CodeTabs(props: TabProps & Props): React.JSX.Element;
12
+ export interface CodeTabsProps extends Props, TabProps {
13
+ includeSample?: boolean;
14
+ }
15
+ export default function CodeTabs(props: CodeTabsProps & Props): React.JSX.Element;
@@ -58,12 +58,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
58
58
  const react_1 = __importStar(require("react"));
59
59
  const internal_1 = require("@docusaurus/theme-common/internal");
60
60
  const useIsBrowser_1 = __importDefault(require("@docusaurus/useIsBrowser"));
61
- const CodeSnippets_1 = require("@theme/ApiExplorer/CodeSnippets");
62
61
  const clsx_1 = __importDefault(require("clsx"));
63
62
  function TabList({
64
63
  action,
65
64
  currentLanguage,
65
+ languageSet,
66
66
  includeVariant,
67
+ includeSample,
67
68
  className,
68
69
  block,
69
70
  selectedValue,
@@ -84,16 +85,23 @@ function TabList({
84
85
  if (action) {
85
86
  let newLanguage;
86
87
  if (currentLanguage && includeVariant) {
87
- newLanguage = CodeSnippets_1.languageSet.filter(
88
+ newLanguage = languageSet.filter(
88
89
  (lang) => lang.language === currentLanguage
89
90
  )[0];
90
91
  newLanguage.variant = newTabValue;
91
92
  action.setSelectedVariant(newTabValue.toLowerCase());
93
+ } else if (currentLanguage && includeSample) {
94
+ newLanguage = languageSet.filter(
95
+ (lang) => lang.language === currentLanguage
96
+ )[0];
97
+ newLanguage.sample = newTabValue;
98
+ action.setSelectedSample(newTabValue);
92
99
  } else {
93
- newLanguage = CodeSnippets_1.languageSet.filter(
100
+ newLanguage = languageSet.filter(
94
101
  (lang) => lang.language === newTabValue
95
102
  )[0];
96
103
  action.setSelectedVariant(newLanguage.variant.toLowerCase());
104
+ action.setSelectedSample(newLanguage.sample);
97
105
  }
98
106
  action.setLanguage(newLanguage);
99
107
  }
@@ -28,7 +28,7 @@ function ApiExplorer({ item, infoPath }) {
28
28
  item.method !== "event" &&
29
29
  react_1.default.createElement(CodeSnippets_1.default, {
30
30
  postman: postman,
31
- codeSamples: item["x-code-samples"] ?? [],
31
+ codeSamples: item["x-codeSamples"] ?? [],
32
32
  }),
33
33
  react_1.default.createElement(Request_1.default, { item: item }),
34
34
  react_1.default.createElement(Response_1.default, { item: item })
@@ -1,4 +1,4 @@
1
1
  /// <reference types="@docusaurus/plugin-content-docs" />
2
- import React from "react";
2
+ /// <reference types="react" />
3
3
  import type { Props } from "@theme/DocItem";
4
- export default function ApiItem(props: Props): React.JSX.Element;
4
+ export default function ApiItem(props: Props): JSX.Element;
@@ -41,6 +41,7 @@ function ApiItem(props) {
41
41
  const { frontMatter } = MDXComponent;
42
42
  const { info_path: infoPath } = frontMatter;
43
43
  let { api } = frontMatter;
44
+ const { schema } = frontMatter;
44
45
  // decompress and parse
45
46
  if (api) {
46
47
  api = JSON.parse(
@@ -164,6 +165,29 @@ function ApiItem(props) {
164
165
  )
165
166
  )
166
167
  );
168
+ } else if (schema) {
169
+ return react_1.default.createElement(
170
+ internal_1.DocProvider,
171
+ { content: props.content },
172
+ react_1.default.createElement(
173
+ theme_common_1.HtmlClassNameProvider,
174
+ { className: docHtmlClassName },
175
+ react_1.default.createElement(Metadata_1.default, null),
176
+ react_1.default.createElement(
177
+ Layout_1.default,
178
+ null,
179
+ react_1.default.createElement(
180
+ "div",
181
+ { className: (0, clsx_1.default)("row", "theme-api-markdown") },
182
+ react_1.default.createElement(
183
+ "div",
184
+ { className: "col col--12" },
185
+ react_1.default.createElement(MDXComponent, null)
186
+ )
187
+ )
188
+ )
189
+ )
190
+ );
167
191
  }
168
192
  // Non-API docs
169
193
  return react_1.default.createElement(