fumadocs-openapi 10.0.10 → 10.1.0

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 (91) hide show
  1. package/dist/generate-file.d.ts +6 -5
  2. package/dist/generate-file.d.ts.map +1 -1
  3. package/dist/generate-file.js +44 -37
  4. package/dist/playground/client.d.ts +9 -7
  5. package/dist/playground/client.d.ts.map +1 -1
  6. package/dist/playground/client.js +7 -7
  7. package/dist/playground/components/inputs.d.ts +6 -6
  8. package/dist/playground/components/inputs.d.ts.map +1 -1
  9. package/dist/playground/components/inputs.js +13 -12
  10. package/dist/playground/get-default-values.d.ts +2 -2
  11. package/dist/playground/get-default-values.d.ts.map +1 -1
  12. package/dist/playground/index.d.ts +1 -2
  13. package/dist/playground/index.d.ts.map +1 -1
  14. package/dist/playground/index.js +2 -0
  15. package/dist/playground/schema.d.ts +22 -8
  16. package/dist/playground/schema.d.ts.map +1 -1
  17. package/dist/playground/schema.js +29 -34
  18. package/dist/requests/generators/index.d.ts +1 -1
  19. package/dist/requests/generators/index.d.ts.map +1 -1
  20. package/dist/server/create.d.ts +1 -1
  21. package/dist/server/create.d.ts.map +1 -1
  22. package/dist/server/source-api.d.ts +5 -3
  23. package/dist/server/source-api.d.ts.map +1 -1
  24. package/dist/server/source-api.js +13 -7
  25. package/dist/types.d.ts +3 -3
  26. package/dist/types.d.ts.map +1 -1
  27. package/dist/ui/api-page.d.ts +16 -8
  28. package/dist/ui/api-page.d.ts.map +1 -1
  29. package/dist/ui/api-page.js +7 -7
  30. package/dist/ui/client/index.d.ts +2 -2
  31. package/dist/ui/client/index.d.ts.map +1 -1
  32. package/dist/ui/operation/index.d.ts +4 -3
  33. package/dist/ui/operation/index.d.ts.map +1 -1
  34. package/dist/ui/operation/index.js +45 -24
  35. package/dist/ui/operation/request-tabs.d.ts +18 -0
  36. package/dist/ui/operation/request-tabs.d.ts.map +1 -0
  37. package/dist/ui/operation/request-tabs.js +143 -0
  38. package/dist/ui/operation/response-tabs.d.ts +32 -0
  39. package/dist/ui/operation/response-tabs.d.ts.map +1 -0
  40. package/dist/ui/operation/response-tabs.js +59 -0
  41. package/dist/ui/operation/usage-tabs/client.d.ts +23 -0
  42. package/dist/ui/operation/usage-tabs/client.d.ts.map +1 -0
  43. package/dist/ui/operation/{example-panel → usage-tabs}/client.js +50 -6
  44. package/dist/ui/operation/usage-tabs/index.d.ts +26 -0
  45. package/dist/ui/operation/usage-tabs/index.d.ts.map +1 -0
  46. package/dist/ui/operation/usage-tabs/index.js +52 -0
  47. package/dist/ui/operation/usage-tabs/lazy.d.ts +4 -0
  48. package/dist/ui/operation/usage-tabs/lazy.d.ts.map +1 -0
  49. package/dist/ui/operation/usage-tabs/lazy.js +5 -0
  50. package/dist/ui/schema/client.d.ts +1 -3
  51. package/dist/ui/schema/client.d.ts.map +1 -1
  52. package/dist/ui/schema/client.js +13 -17
  53. package/dist/ui/schema/index.d.ts +19 -5
  54. package/dist/ui/schema/index.d.ts.map +1 -1
  55. package/dist/ui/schema/index.js +69 -29
  56. package/dist/utils/deep-equal.d.ts +2 -0
  57. package/dist/utils/deep-equal.d.ts.map +1 -0
  58. package/dist/utils/deep-equal.js +27 -0
  59. package/dist/utils/merge-schema.d.ts +7 -0
  60. package/dist/utils/merge-schema.d.ts.map +1 -0
  61. package/dist/utils/merge-schema.js +179 -0
  62. package/dist/utils/pages/to-body.d.ts.map +1 -1
  63. package/dist/utils/pages/to-body.js +2 -3
  64. package/dist/utils/pages/to-text.d.ts.map +1 -1
  65. package/dist/utils/pages/to-text.js +31 -16
  66. package/dist/utils/schema-to-string.d.ts.map +1 -1
  67. package/dist/utils/schema-to-string.js +8 -5
  68. package/dist/utils/use-query.d.ts +1 -0
  69. package/dist/utils/use-query.d.ts.map +1 -1
  70. package/dist/utils/use-query.js +5 -0
  71. package/package.json +6 -6
  72. package/dist/ui/contexts/operation.d.ts +0 -20
  73. package/dist/ui/contexts/operation.d.ts.map +0 -1
  74. package/dist/ui/contexts/operation.js +0 -48
  75. package/dist/ui/contexts/operation.lazy.d.ts +0 -2
  76. package/dist/ui/contexts/operation.lazy.d.ts.map +0 -1
  77. package/dist/ui/contexts/operation.lazy.js +0 -3
  78. package/dist/ui/operation/example-panel/client.d.ts +0 -4
  79. package/dist/ui/operation/example-panel/client.d.ts.map +0 -1
  80. package/dist/ui/operation/example-panel/index.d.ts +0 -58
  81. package/dist/ui/operation/example-panel/index.d.ts.map +0 -1
  82. package/dist/ui/operation/example-panel/index.js +0 -140
  83. package/dist/ui/operation/example-panel/lazy.d.ts +0 -3
  84. package/dist/ui/operation/example-panel/lazy.d.ts.map +0 -1
  85. package/dist/ui/operation/example-panel/lazy.js +0 -4
  86. package/dist/ui/operation/get-request-data.d.ts +0 -4
  87. package/dist/ui/operation/get-request-data.d.ts.map +0 -1
  88. package/dist/ui/operation/get-request-data.js +0 -70
  89. package/dist/utils/combine-schema.d.ts +0 -6
  90. package/dist/utils/combine-schema.d.ts.map +0 -1
  91. package/dist/utils/combine-schema.js +0 -51
@@ -1,22 +1,26 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Ajv2020 } from 'ajv/dist/2020';
3
- import { createContext, useContext, useMemo, useState } from 'react';
3
+ import { createContext, use, useMemo, useState } from 'react';
4
4
  import { useFormContext } from 'react-hook-form';
5
5
  import { getDefaultValue } from '../playground/get-default-values.js';
6
+ import { mergeAllOf } from '../utils/merge-schema.js';
6
7
  const SchemaContext = createContext(undefined);
7
8
  export const anyFields = {
8
9
  type: ['string', 'number', 'boolean', 'array', 'object'],
9
10
  items: true,
10
11
  additionalProperties: true,
11
12
  };
12
- export function SchemaProvider({ references, fieldInfoMap, children, }) {
13
+ export function SchemaProvider({ references, fieldInfoMap, readOnly, writeOnly, children, }) {
13
14
  const ajv = useMemo(() => new Ajv2020({
14
15
  strict: false,
15
16
  validateSchema: false,
16
17
  validateFormats: false,
17
18
  schemas: references,
18
19
  }), [references]);
19
- return (_jsx(SchemaContext.Provider, { value: useMemo(() => ({ references, fieldInfoMap, ajv }), [fieldInfoMap, references, ajv]), children: children }));
20
+ return (_jsx(SchemaContext.Provider, { value: useMemo(() => ({ references, fieldInfoMap, ajv, readOnly, writeOnly }), [references, fieldInfoMap, ajv, readOnly, writeOnly]), children: children }));
21
+ }
22
+ export function useSchemaScope() {
23
+ return use(SchemaContext);
20
24
  }
21
25
  /**
22
26
  * A hook to store dynamic info of a field, such as selected schema of `oneOf`.
@@ -26,38 +30,43 @@ export function SchemaProvider({ references, fieldInfoMap, children, }) {
26
30
  * @param depth - The depth to avoid duplicated field name with same schema (e.g. nested `oneOf`).
27
31
  */
28
32
  export function useFieldInfo(fieldName, schema, depth) {
29
- const { fieldInfoMap, ajv } = useContext(SchemaContext);
33
+ const { fieldInfoMap, ajv } = use(SchemaContext);
30
34
  const form = useFormContext();
31
35
  const keyName = `${fieldName}:${depth}`;
32
- const value = form.getValues(fieldName);
33
36
  const [info, setInfo] = useState(() => {
37
+ const value = form.getValues(fieldName);
34
38
  const initialInfo = fieldInfoMap.get(keyName);
35
39
  if (initialInfo)
36
40
  return initialInfo;
41
+ const out = {
42
+ oneOf: -1,
43
+ };
37
44
  const union = getUnion(schema);
38
45
  if (union) {
39
46
  const [members, field] = union;
40
- let oneOf = members.findIndex((item) => ajv.validate(item, value));
41
- if (oneOf === -1)
42
- oneOf = 0;
43
- return {
44
- oneOf,
45
- unionField: field,
46
- };
47
+ out.oneOf = members.findIndex((item) => ajv.validate(item, value));
48
+ if (out.oneOf === -1)
49
+ out.oneOf = 0;
50
+ out.unionField = field;
47
51
  }
48
52
  if (Array.isArray(schema.type)) {
49
53
  const types = schema.type;
50
- return {
51
- selectedType: types.find((type) => {
54
+ out.selectedType =
55
+ types.find((type) => {
52
56
  schema.type = type;
53
57
  const match = ajv.validate(schema, value);
54
58
  schema.type = types;
55
59
  return match;
56
- }) ?? types.at(0),
57
- oneOf: -1,
58
- };
60
+ }) ?? types.at(0);
59
61
  }
60
- return { oneOf: -1 };
62
+ if (schema.allOf) {
63
+ const merged = mergeAllOf(schema);
64
+ if (typeof merged !== 'boolean')
65
+ out.intersection = {
66
+ merged,
67
+ };
68
+ }
69
+ return out;
61
70
  });
62
71
  fieldInfoMap.set(keyName, info);
63
72
  return {
@@ -86,7 +95,7 @@ export function useFieldInfo(fieldName, schema, depth) {
86
95
  * Resolve `$ref` in the schema, **not recursive**.
87
96
  */
88
97
  export function useResolvedSchema(schema) {
89
- const { references } = useContext(SchemaContext);
98
+ const { references } = use(SchemaContext);
90
99
  return useMemo(() => {
91
100
  if (typeof schema === 'boolean')
92
101
  return anyFields;
@@ -98,24 +107,10 @@ export function useResolvedSchema(schema) {
98
107
  export function fallbackAny(schema) {
99
108
  return typeof schema === 'boolean' ? anyFields : schema;
100
109
  }
101
- /**
102
- * We automatically merge `allOf` | `anyOf` if all members are objects, but it's also possible for them to behave same as a union (`oneOf`).
103
- */
104
- function isUnion(anyOrAllOf) {
105
- return anyOrAllOf.every((item) => {
106
- if (typeof item === 'boolean')
107
- return true;
108
- const u = item.anyOf || item.allOf;
109
- return item.type !== 'object' && (!u || isUnion(u));
110
- });
111
- }
112
110
  function getUnion(schema) {
113
- if (schema.anyOf && isUnion(schema.anyOf)) {
111
+ if (schema.anyOf) {
114
112
  return [schema.anyOf, 'anyOf'];
115
113
  }
116
- if (schema.allOf && isUnion(schema.allOf)) {
117
- return [schema.allOf, 'allOf'];
118
- }
119
114
  if (schema.oneOf)
120
115
  return [schema.oneOf, 'oneOf'];
121
116
  }
@@ -1,3 +1,3 @@
1
- import type { CodeUsageGenerator } from '../../ui/operation/example-panel/index.js';
1
+ import type { CodeUsageGenerator } from '../../ui/operation/usage-tabs/index.js';
2
2
  export declare const defaultSamples: CodeUsageGenerator[];
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,eAAO,MAAM,cAAc,EAAE,kBAAkB,EAqC9C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,eAAO,MAAM,cAAc,EAAE,kBAAkB,EAqC9C,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { createProxy } from '../server/proxy.js';
2
2
  import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
3
3
  import { type ProcessedDocument } from '../utils/process-document.js';
4
- import type { CodeUsageGenerator } from '../ui/operation/example-panel/index.js';
4
+ import type { CodeUsageGenerator } from '../ui/operation/usage-tabs/index.js';
5
5
  /**
6
6
  * schema id -> file path, URL, or downloaded schema object
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/server/create.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE;;GAEG;AACH,KAAK,SAAS,GAAG,MAAM,CACrB,MAAM,EACN,MAAM,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CACnD,CAAC;AACF,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1D,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,UAAU,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAiCzE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GACtC,kBAAkB,CAQpB"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/server/create.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;GAEG;AACH,KAAK,SAAS,GAAG,MAAM,CACrB,MAAM,EACN,MAAM,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CACnD,CAAC;AACF,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1D,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,UAAU,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAiCzE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GACtC,kBAAkB,CAQpB"}
@@ -7,11 +7,13 @@ declare module 'fumadocs-core/source' {
7
7
  /**
8
8
  * Added by Fumadocs OpenAPI
9
9
  */
10
- _openapi?: {
11
- method?: string;
12
- };
10
+ _openapi?: InternalOpenAPIMeta;
13
11
  }
14
12
  }
13
+ export interface InternalOpenAPIMeta {
14
+ method?: string;
15
+ webhook?: boolean;
16
+ }
15
17
  /**
16
18
  * Fumadocs Source API integration, pass this to `plugins` array in `loader()`.
17
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"source-api.d.ts","sourceRoot":"","sources":["../../src/server/source-api.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,MAAM,EAEP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAiB,QAAQ;QACvB;;WAEG;QACH,QAAQ,CAAC,EAAE;YACT,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;KACH;CACF;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAgC5C;AAED,UAAU,eAAgB,SAAQ,QAAQ;IACxC,eAAe,EAAE,MAAM,YAAY,CAAC;CACrC;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,oBAAoB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,OAAO,CACR,MAAM,CAAC;IACL,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC,CACH,CA+BA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAExD"}
1
+ {"version":3,"file":"source-api.d.ts","sourceRoot":"","sources":["../../src/server/source-api.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,MAAM,EAEP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAiB,QAAQ;QACvB;;WAEG;QACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;KAChC;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAqC5C;AAED,UAAU,eAAgB,SAAQ,QAAQ;IACxC,eAAe,EAAE,MAAM,YAAY,CAAC;CACrC;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,oBAAoB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,OAAO,CACR,MAAM,CAAC;IACL,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC,CACH,CAoCA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAExD"}
@@ -14,13 +14,14 @@ export function openapiPlugin() {
14
14
  const file = this.storage.read(filePath);
15
15
  if (!file || file.format !== 'page')
16
16
  return node;
17
- const data = file.data;
18
- let method;
19
- if ('_openapi' in data && typeof data._openapi === 'object') {
20
- method = data._openapi.method;
17
+ const openApiData = file.data._openapi;
18
+ if (!openApiData || typeof openApiData !== 'object')
19
+ return node;
20
+ if (openApiData.webhook) {
21
+ node.name = (_jsxs(_Fragment, { children: [node.name, ' ', _jsx("span", { className: "ms-auto border border-current px-1 rounded-lg text-xs text-nowrap font-mono", children: "Webhook" })] }));
21
22
  }
22
- if (method) {
23
- node.name = (_jsxs(_Fragment, { children: [node.name, ' ', _jsx(MethodLabel, { className: "ms-auto text-xs text-nowrap", children: method })] }));
23
+ else if (openApiData.method) {
24
+ node.name = (_jsxs(_Fragment, { children: [node.name, ' ', _jsx(MethodLabel, { className: "ms-auto text-xs text-nowrap", children: openApiData.method })] }));
24
25
  }
25
26
  return node;
26
27
  },
@@ -43,11 +44,16 @@ export async function openapiSource(from, options = {}) {
43
44
  path: `${baseDir}/${entry.path}`,
44
45
  data: {
45
46
  ...entry.info,
46
- getAPIPageProps: () => toBody(entry),
47
+ getAPIPageProps() {
48
+ const props = toBody(entry);
49
+ props.showDescription ?? (props.showDescription = true);
50
+ return props;
51
+ },
47
52
  _openapi: {
48
53
  method: entry.type === 'operation' || entry.type === 'webhook'
49
54
  ? entry.item.method
50
55
  : undefined,
56
+ webhook: entry.type === 'webhook',
51
57
  },
52
58
  },
53
59
  });
package/dist/types.d.ts CHANGED
@@ -5,8 +5,8 @@ import type { ProcessedDocument } from './utils/process-document.js';
5
5
  import type { MediaAdapter } from './requests/media/adapter.js';
6
6
  import type { OpenAPIOptions } from './server/index.js';
7
7
  import type { CreateAPIPageOptions } from './ui/api-page.js';
8
- import type { CodeUsageGenerator } from './ui/operation/example-panel/index.js';
9
- import type { ReactNode } from 'react';
8
+ import type { CodeUsageGenerator } from './ui/operation/usage-tabs/index.js';
9
+ import type { HTMLAttributes, ReactNode } from 'react';
10
10
  export type Document = V3_1.Document;
11
11
  export type OperationObject = V3_1.OperationObject;
12
12
  export type ParameterObject = V3_1.ParameterObject;
@@ -32,7 +32,7 @@ export interface RenderContext extends Pick<OpenAPIOptions, 'proxyUrl'>, CreateA
32
32
  */
33
33
  schema: ProcessedDocument;
34
34
  mediaAdapters: Record<string, MediaAdapter>;
35
- renderHeading: (depth: number, text: string) => ReactNode;
35
+ renderHeading: (depth: number, text: string, props?: HTMLAttributes<HTMLHeadingElement>) => ReactNode;
36
36
  renderMarkdown: (text: string) => ReactNode;
37
37
  renderCodeBlock: (lang: string, code: string) => ReactNode;
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACrC,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACjD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC7D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC;IACnD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EACtC,oBAAoB;IACtB,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAE1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE5C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IAC1D,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IAC5C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;CAC5D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACrC,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACjD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC7D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC;IACnD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EACtC,oBAAoB;IACtB,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAE1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE5C,aAAa,EAAE,CACb,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,cAAc,CAAC,kBAAkB,CAAC,KACvC,SAAS,CAAC;IACf,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IAC5C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;CAC5D"}
@@ -1,5 +1,5 @@
1
1
  import type { MethodInformation, RenderContext } from '../types.js';
2
- import { type NoReference, type ResolvedSchema } from '../utils/schema.js';
2
+ import { type NoReference } from '../utils/schema.js';
3
3
  import type { OpenAPIV3_1 } from 'openapi-types';
4
4
  import type { ProcessedDocument } from '../utils/process-document.js';
5
5
  import { MediaAdapter } from '../requests/media/adapter.js';
@@ -7,8 +7,10 @@ import type { FC, ReactNode } from 'react';
7
7
  import { type HighlightOptionsCommon, type HighlightOptionsThemes } from 'fumadocs-core/highlight';
8
8
  import type { OpenAPIServer } from '../server/index.js';
9
9
  import type { APIPageClientOptions } from './client/index.js';
10
- import type { CodeUsageGenerator, ResponseTab } from './operation/example-panel/index.js';
11
- import type { SchemaUIProps } from './schema/client.js';
10
+ import type { CodeUsageGenerator } from './operation/usage-tabs/index.js';
11
+ import type { SchemaUIOptions } from './schema/index.js';
12
+ import type { ResponseTab } from './operation/response-tabs.js';
13
+ import type { ExampleRequestItem } from './operation/request-tabs.js';
12
14
  type Awaitable<T> = T | Promise<T>;
13
15
  export interface CreateAPIPageOptions {
14
16
  /**
@@ -40,6 +42,10 @@ export interface CreateAPIPageOptions {
40
42
  */
41
43
  content?: {
42
44
  renderResponseTabs?: (tabs: ResponseTab[], ctx: RenderContext) => Awaitable<ReactNode>;
45
+ renderRequestTabs: (items: ExampleRequestItem[], ctx: RenderContext & {
46
+ route: string;
47
+ operation: NoReference<MethodInformation>;
48
+ }) => Awaitable<ReactNode>;
43
49
  renderAPIExampleLayout?: (slots: {
44
50
  selector: ReactNode;
45
51
  usageTabs: ReactNode;
@@ -64,6 +70,7 @@ export interface CreateAPIPageOptions {
64
70
  }, ctx: RenderContext) => Awaitable<ReactNode>;
65
71
  renderOperationLayout?: (slots: {
66
72
  header: ReactNode;
73
+ description: ReactNode;
67
74
  apiExample: ReactNode;
68
75
  apiPlayground: ReactNode;
69
76
  authSchemes: ReactNode;
@@ -71,12 +78,14 @@ export interface CreateAPIPageOptions {
71
78
  body: ReactNode;
72
79
  responses: ReactNode;
73
80
  callbacks: ReactNode;
74
- }, ctx: RenderContext, method: MethodInformation) => Awaitable<ReactNode>;
81
+ }, ctx: RenderContext, method: NoReference<MethodInformation>) => Awaitable<ReactNode>;
75
82
  renderWebhookLayout?: (slots: {
76
83
  header: ReactNode;
84
+ description: ReactNode;
77
85
  authSchemes: ReactNode;
78
86
  paremeters: ReactNode;
79
87
  body: ReactNode;
88
+ requests: ReactNode;
80
89
  responses: ReactNode;
81
90
  callbacks: ReactNode;
82
91
  }) => Awaitable<ReactNode>;
@@ -85,9 +94,7 @@ export interface CreateAPIPageOptions {
85
94
  * Info UI for JSON schemas
86
95
  */
87
96
  schemaUI?: {
88
- render?: (options: Omit<SchemaUIProps, 'generated'> & {
89
- root: ResolvedSchema;
90
- }, ctx: RenderContext) => Awaitable<ReactNode>;
97
+ render?: (options: SchemaUIOptions, ctx: RenderContext) => Awaitable<ReactNode>;
91
98
  /**
92
99
  * Show examples under the generated content of JSON schemas.
93
100
  *
@@ -116,7 +123,8 @@ export interface CreateAPIPageOptions {
116
123
  }
117
124
  export interface ApiPageProps {
118
125
  document: Promise<ProcessedDocument> | string | ProcessedDocument;
119
- hasHead?: boolean;
126
+ showTitle?: boolean;
127
+ showDescription?: boolean;
120
128
  /**
121
129
  * An array of operations
122
130
  */
@@ -1 +1 @@
1
- {"version":3,"file":"api-page.d.ts","sourceRoot":"","sources":["../../src/ui/api-page.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-page.d.ts","sourceRoot":"","sources":["../../src/ui/api-page.tsx"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any -- rehype-react without types */
3
3
  import Slugger from 'github-slugger';
4
4
  import { Operation } from '../ui/operation/index.js';
5
- import { createMethod, } from '../utils/schema.js';
5
+ import { createMethod } from '../utils/schema.js';
6
6
  import { defaultAdapters } from '../requests/media/adapter.js';
7
7
  import { highlight, } from 'fumadocs-core/highlight';
8
8
  import { ApiProviderLazy } from './contexts/api.lazy.js';
@@ -60,9 +60,9 @@ export function createAPIPage(server, options = {}) {
60
60
  ...options.mediaAdapters,
61
61
  },
62
62
  slugger,
63
- renderHeading(depth, text) {
63
+ renderHeading(depth, text, props) {
64
64
  const id = slugger.slug(text);
65
- return (_jsx(Heading, { id: id, as: `h${depth}`, children: text }, id));
65
+ return (_jsx(Heading, { id: id, as: `h${depth}`, ...props, children: text }, id));
66
66
  },
67
67
  async renderMarkdown(text) {
68
68
  processor ?? (processor = createMarkdownProcessor());
@@ -85,10 +85,10 @@ export function createAPIPage(server, options = {}) {
85
85
  return _jsx(APIPage, { ...props, ctx: ctx });
86
86
  };
87
87
  }
88
- async function APIPage({ hasHead = false, operations, webhooks, ctx, }) {
88
+ async function APIPage({ showTitle: hasHead = false, showDescription, operations, webhooks, ctx, }) {
89
89
  const { dereferenced } = ctx.schema;
90
90
  let { renderPageLayout } = ctx.content ?? {};
91
- renderPageLayout ?? (renderPageLayout = (slots) => (_jsxs("div", { className: "flex flex-col gap-24 text-sm", children: [slots.operations?.map((op) => op.children), slots.webhooks?.map((op) => op.children)] })));
91
+ renderPageLayout ?? (renderPageLayout = (slots) => (_jsxs("div", { className: "flex flex-col gap-24 text-sm @container", children: [slots.operations?.map((op) => op.children), slots.webhooks?.map((op) => op.children)] })));
92
92
  const content = await renderPageLayout({
93
93
  operations: operations?.map((item) => {
94
94
  const pathItem = dereferenced.paths?.[item.path];
@@ -100,7 +100,7 @@ async function APIPage({ hasHead = false, operations, webhooks, ctx, }) {
100
100
  const method = createMethod(item.method, pathItem, operation);
101
101
  return {
102
102
  item,
103
- children: (_jsx(Operation, { method: method, path: item.path, ctx: ctx, hasHead: hasHead }, `${item.path}:${item.method}`)),
103
+ children: (_jsx(Operation, { method: method, path: item.path, ctx: ctx, showTitle: hasHead, showDescription: showDescription }, `${item.path}:${item.method}`)),
104
104
  };
105
105
  }),
106
106
  webhooks: webhooks?.map((item) => {
@@ -112,7 +112,7 @@ async function APIPage({ hasHead = false, operations, webhooks, ctx, }) {
112
112
  throw new Error(`[Fumadocs OpenAPI] Method ${item.method} not found in webhook: ${item.name}`);
113
113
  return {
114
114
  item,
115
- children: (_jsx(Operation, { type: "webhook", method: createMethod(item.method, webhook, hook), ctx: ctx, path: `/${item.name}`, hasHead: hasHead }, `${item.name}:${item.method}`)),
115
+ children: (_jsx(Operation, { type: "webhook", method: createMethod(item.method, webhook, hook), ctx: ctx, path: `/${item.name}`, showTitle: hasHead, showDescription: showDescription }, `${item.name}:${item.method}`)),
116
116
  };
117
117
  }),
118
118
  }, ctx);
@@ -1,7 +1,7 @@
1
1
  import type { PlaygroundClientOptions } from '../../playground/client.js';
2
2
  import type { MediaAdapter } from '../../requests/media/adapter.js';
3
- import type { APIExampleItem } from '../operation/example-panel/index.js';
4
3
  import type { FC } from 'react';
4
+ import type { ExampleRequestItem } from '../operation/request-tabs.js';
5
5
  export interface APIPageClientOptions {
6
6
  playground?: PlaygroundClientOptions;
7
7
  operation?: OperationClientOptions;
@@ -20,7 +20,7 @@ export interface APIPageClientOptions {
20
20
  }
21
21
  export interface OperationClientOptions {
22
22
  APIExampleSelector?: FC<{
23
- items: APIExampleItem[];
23
+ items: ExampleRequestItem[];
24
24
  value: string | undefined;
25
25
  onValueChange: (id: string) => void;
26
26
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/client/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,SAAS,CAAC,EAAE,sBAAsB,CAAC;IAEnC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,CAAC,EAAE,EAAE,CAAC;QACtB,KAAK,EAAE,cAAc,EAAE,CAAC;QAExB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;KACrC,CAAC,CAAC;CACJ;AAED,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,oBAAyB,GACjC,oBAAoB,CAEtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/client/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,SAAS,CAAC,EAAE,sBAAsB,CAAC;IAEnC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,CAAC,EAAE,EAAE,CAAC;QACtB,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAE5B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;KACrC,CAAC,CAAC;CACJ;AAED,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,oBAAyB,GACjC,oBAAoB,CAEtB"}
@@ -1,11 +1,12 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import type { MethodInformation, RenderContext } from '../../types.js';
3
- export declare function Operation({ type, path, method, ctx, hasHead, headingLevel, }: {
3
+ export declare function Operation({ type, path, method, ctx, showTitle, showDescription, headingLevel, }: {
4
4
  type?: 'webhook' | 'operation';
5
5
  path: string;
6
6
  method: MethodInformation;
7
7
  ctx: RenderContext;
8
- hasHead?: boolean;
8
+ showTitle?: boolean;
9
+ showDescription?: boolean;
9
10
  headingLevel?: number;
10
- }): Promise<string | number | bigint | boolean | Iterable<ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined>;
11
+ }): Promise<string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<ReactNode> | null | undefined>;
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/operation/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAEV,iBAAiB,EACjB,aAAa,EAEd,MAAM,SAAS,CAAC;AAqCjB,wBAAsB,SAAS,CAAC,EAC9B,IAAkB,EAClB,IAAI,EACJ,MAAM,EACN,GAAG,EACH,OAAO,EACP,YAAgB,GACjB,EAAE;IACD,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,GAAG,EAAE,aAAa,CAAC;IAEnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,kIAmQA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/operation/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAEV,iBAAiB,EACjB,aAAa,EAEd,MAAM,SAAS,CAAC;AAsCjB,wBAAsB,SAAS,CAAC,EAC9B,IAAkB,EAClB,IAAI,EACJ,MAAM,EACN,GAAG,EACH,SAAS,EACT,eAAe,EACf,YAAgB,GACjB,EAAE;IACD,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,GAAG,EAAE,aAAa,CAAC;IAEnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,kIA8RA"}