fumadocs-openapi 10.3.14 → 10.3.15

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 (214) hide show
  1. package/css/generated/shared.css +3 -4
  2. package/dist/_openapi/types.d.ts +2 -1
  3. package/dist/_openapi/types.d.ts.map +1 -0
  4. package/dist/generate-file.d.ts +2 -1
  5. package/dist/generate-file.d.ts.map +1 -0
  6. package/dist/generate-file.js +2 -1
  7. package/dist/generate-file.js.map +1 -0
  8. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/dereference.js +2 -1
  9. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/dereference.js.map +1 -0
  10. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/index.js +2 -1
  11. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/index.js.map +1 -0
  12. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/klona.js +2 -1
  13. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/klona.js.map +1 -0
  14. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/resolveRef.js +2 -1
  15. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/resolveRef.js.map +1 -0
  16. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/types.js +2 -1
  17. package/dist/node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/types.js.map +1 -0
  18. package/dist/playground/client.d.ts +2 -1
  19. package/dist/playground/client.d.ts.map +1 -0
  20. package/dist/playground/client.js +4 -3
  21. package/dist/playground/client.js.map +1 -0
  22. package/dist/playground/components/inputs.js +25 -27
  23. package/dist/playground/components/inputs.js.map +1 -0
  24. package/dist/playground/components/oauth-dialog.js +2 -1
  25. package/dist/playground/components/oauth-dialog.js.map +1 -0
  26. package/dist/playground/components/server-select.js +2 -1
  27. package/dist/playground/components/server-select.js.map +1 -0
  28. package/dist/playground/fetcher.d.ts +2 -1
  29. package/dist/playground/fetcher.d.ts.map +1 -0
  30. package/dist/playground/fetcher.js +2 -1
  31. package/dist/playground/fetcher.js.map +1 -0
  32. package/dist/playground/index.d.ts +2 -1
  33. package/dist/playground/index.d.ts.map +1 -0
  34. package/dist/playground/index.js +2 -1
  35. package/dist/playground/index.js.map +1 -0
  36. package/dist/playground/lazy.js +2 -1
  37. package/dist/playground/lazy.js.map +1 -0
  38. package/dist/playground/schema.d.ts +2 -1
  39. package/dist/playground/schema.d.ts.map +1 -0
  40. package/dist/playground/schema.js +18 -11
  41. package/dist/playground/schema.js.map +1 -0
  42. package/dist/playground/status-info.js +2 -1
  43. package/dist/playground/status-info.js.map +1 -0
  44. package/dist/requests/generators/all.d.ts +2 -1
  45. package/dist/requests/generators/all.d.ts.map +1 -0
  46. package/dist/requests/generators/all.js +2 -1
  47. package/dist/requests/generators/all.js.map +1 -0
  48. package/dist/requests/generators/csharp.d.ts +2 -1
  49. package/dist/requests/generators/csharp.d.ts.map +1 -0
  50. package/dist/requests/generators/csharp.js +2 -1
  51. package/dist/requests/generators/csharp.js.map +1 -0
  52. package/dist/requests/generators/curl.d.ts +2 -1
  53. package/dist/requests/generators/curl.d.ts.map +1 -0
  54. package/dist/requests/generators/curl.js +2 -1
  55. package/dist/requests/generators/curl.js.map +1 -0
  56. package/dist/requests/generators/go.d.ts +2 -1
  57. package/dist/requests/generators/go.d.ts.map +1 -0
  58. package/dist/requests/generators/go.js +2 -1
  59. package/dist/requests/generators/go.js.map +1 -0
  60. package/dist/requests/generators/index.d.ts +2 -1
  61. package/dist/requests/generators/index.d.ts.map +1 -0
  62. package/dist/requests/generators/index.js +2 -1
  63. package/dist/requests/generators/index.js.map +1 -0
  64. package/dist/requests/generators/java.d.ts +2 -1
  65. package/dist/requests/generators/java.d.ts.map +1 -0
  66. package/dist/requests/generators/java.js +2 -1
  67. package/dist/requests/generators/java.js.map +1 -0
  68. package/dist/requests/generators/javascript.d.ts +2 -1
  69. package/dist/requests/generators/javascript.d.ts.map +1 -0
  70. package/dist/requests/generators/javascript.js +2 -1
  71. package/dist/requests/generators/javascript.js.map +1 -0
  72. package/dist/requests/generators/python.d.ts +2 -1
  73. package/dist/requests/generators/python.d.ts.map +1 -0
  74. package/dist/requests/generators/python.js +2 -1
  75. package/dist/requests/generators/python.js.map +1 -0
  76. package/dist/requests/media/adapter.d.ts +2 -1
  77. package/dist/requests/media/adapter.d.ts.map +1 -0
  78. package/dist/requests/media/adapter.js +2 -1
  79. package/dist/requests/media/adapter.js.map +1 -0
  80. package/dist/requests/media/encode.d.ts +2 -1
  81. package/dist/requests/media/encode.d.ts.map +1 -0
  82. package/dist/requests/media/encode.js +4 -2
  83. package/dist/requests/media/encode.js.map +1 -0
  84. package/dist/requests/media/resolve-adapter.js +2 -1
  85. package/dist/requests/media/resolve-adapter.js.map +1 -0
  86. package/dist/requests/string-utils.js +2 -1
  87. package/dist/requests/string-utils.js.map +1 -0
  88. package/dist/requests/to-python-object.js +2 -1
  89. package/dist/requests/to-python-object.js.map +1 -0
  90. package/dist/requests/types.d.ts +2 -1
  91. package/dist/requests/types.d.ts.map +1 -0
  92. package/dist/scalar/client.js +2 -1
  93. package/dist/scalar/client.js.map +1 -0
  94. package/dist/scalar/index.d.ts +2 -1
  95. package/dist/scalar/index.d.ts.map +1 -0
  96. package/dist/scalar/index.js +2 -1
  97. package/dist/scalar/index.js.map +1 -0
  98. package/dist/server/create.d.ts +2 -1
  99. package/dist/server/create.d.ts.map +1 -0
  100. package/dist/server/create.js +2 -1
  101. package/dist/server/create.js.map +1 -0
  102. package/dist/server/proxy.d.ts +2 -1
  103. package/dist/server/proxy.d.ts.map +1 -0
  104. package/dist/server/proxy.js +2 -1
  105. package/dist/server/proxy.js.map +1 -0
  106. package/dist/server/source-api.d.ts +2 -1
  107. package/dist/server/source-api.d.ts.map +1 -0
  108. package/dist/server/source-api.js +2 -1
  109. package/dist/server/source-api.js.map +1 -0
  110. package/dist/types.d.ts +2 -1
  111. package/dist/types.d.ts.map +1 -0
  112. package/dist/ui/api-page.d.ts +2 -1
  113. package/dist/ui/api-page.d.ts.map +1 -0
  114. package/dist/ui/api-page.js +2 -1
  115. package/dist/ui/api-page.js.map +1 -0
  116. package/dist/ui/base.d.ts +2 -1
  117. package/dist/ui/base.d.ts.map +1 -0
  118. package/dist/ui/base.js +2 -1
  119. package/dist/ui/base.js.map +1 -0
  120. package/dist/ui/client/index.d.ts +2 -1
  121. package/dist/ui/client/index.d.ts.map +1 -0
  122. package/dist/ui/client/index.js +2 -1
  123. package/dist/ui/client/index.js.map +1 -0
  124. package/dist/ui/client/storage-key.js +2 -1
  125. package/dist/ui/client/storage-key.js.map +1 -0
  126. package/dist/ui/components/accordion.js +2 -1
  127. package/dist/ui/components/accordion.js.map +1 -0
  128. package/dist/ui/components/dialog.js +2 -1
  129. package/dist/ui/components/dialog.js.map +1 -0
  130. package/dist/ui/components/input.js +2 -1
  131. package/dist/ui/components/input.js.map +1 -0
  132. package/dist/ui/components/method-label.js +2 -1
  133. package/dist/ui/components/method-label.js.map +1 -0
  134. package/dist/ui/components/select.js +2 -1
  135. package/dist/ui/components/select.js.map +1 -0
  136. package/dist/ui/contexts/api.js +2 -1
  137. package/dist/ui/contexts/api.js.map +1 -0
  138. package/dist/ui/contexts/api.lazy.js +2 -1
  139. package/dist/ui/contexts/api.lazy.js.map +1 -0
  140. package/dist/ui/full.client.js +2 -1
  141. package/dist/ui/full.client.js.map +1 -0
  142. package/dist/ui/full.d.ts +2 -1
  143. package/dist/ui/full.d.ts.map +1 -0
  144. package/dist/ui/full.js +2 -1
  145. package/dist/ui/full.js.map +1 -0
  146. package/dist/ui/operation/client.js +2 -1
  147. package/dist/ui/operation/client.js.map +1 -0
  148. package/dist/ui/operation/index.js +2 -1
  149. package/dist/ui/operation/index.js.map +1 -0
  150. package/dist/ui/operation/request-tabs.d.ts +2 -1
  151. package/dist/ui/operation/request-tabs.d.ts.map +1 -0
  152. package/dist/ui/operation/request-tabs.js +2 -1
  153. package/dist/ui/operation/request-tabs.js.map +1 -0
  154. package/dist/ui/operation/response-tabs.d.ts +2 -1
  155. package/dist/ui/operation/response-tabs.d.ts.map +1 -0
  156. package/dist/ui/operation/response-tabs.js +2 -1
  157. package/dist/ui/operation/response-tabs.js.map +1 -0
  158. package/dist/ui/operation/usage-tabs/client.js +2 -1
  159. package/dist/ui/operation/usage-tabs/client.js.map +1 -0
  160. package/dist/ui/operation/usage-tabs/index.js +2 -1
  161. package/dist/ui/operation/usage-tabs/index.js.map +1 -0
  162. package/dist/ui/operation/usage-tabs/lazy.js +2 -1
  163. package/dist/ui/operation/usage-tabs/lazy.js.map +1 -0
  164. package/dist/ui/schema/client.d.ts +2 -1
  165. package/dist/ui/schema/client.d.ts.map +1 -0
  166. package/dist/ui/schema/client.js +2 -1
  167. package/dist/ui/schema/client.js.map +1 -0
  168. package/dist/ui/schema/index.d.ts +2 -1
  169. package/dist/ui/schema/index.d.ts.map +1 -0
  170. package/dist/ui/schema/index.js +2 -1
  171. package/dist/ui/schema/index.js.map +1 -0
  172. package/dist/ui/schema/lazy.js +2 -1
  173. package/dist/ui/schema/lazy.js.map +1 -0
  174. package/dist/utils/deep-equal.js +2 -1
  175. package/dist/utils/deep-equal.js.map +1 -0
  176. package/dist/utils/id-to-title.js +2 -1
  177. package/dist/utils/id-to-title.js.map +1 -0
  178. package/dist/utils/lazy.js +2 -1
  179. package/dist/utils/lazy.js.map +1 -0
  180. package/dist/utils/merge-schema.js +20 -5
  181. package/dist/utils/merge-schema.js.map +1 -0
  182. package/dist/utils/pages/builder.d.ts +2 -1
  183. package/dist/utils/pages/builder.d.ts.map +1 -0
  184. package/dist/utils/pages/builder.js +2 -1
  185. package/dist/utils/pages/builder.js.map +1 -0
  186. package/dist/utils/pages/preset-auto.d.ts +2 -1
  187. package/dist/utils/pages/preset-auto.d.ts.map +1 -0
  188. package/dist/utils/pages/preset-auto.js +2 -1
  189. package/dist/utils/pages/preset-auto.js.map +1 -0
  190. package/dist/utils/pages/to-body.js +2 -1
  191. package/dist/utils/pages/to-body.js.map +1 -0
  192. package/dist/utils/pages/to-static-data.js +2 -1
  193. package/dist/utils/pages/to-static-data.js.map +1 -0
  194. package/dist/utils/pages/to-text.d.ts +2 -1
  195. package/dist/utils/pages/to-text.d.ts.map +1 -0
  196. package/dist/utils/pages/to-text.js +2 -1
  197. package/dist/utils/pages/to-text.js.map +1 -0
  198. package/dist/utils/process-document.d.ts +2 -1
  199. package/dist/utils/process-document.d.ts.map +1 -0
  200. package/dist/utils/process-document.js +2 -1
  201. package/dist/utils/process-document.js.map +1 -0
  202. package/dist/utils/remove-undefined.js +2 -1
  203. package/dist/utils/remove-undefined.js.map +1 -0
  204. package/dist/utils/schema-to-string.js +2 -1
  205. package/dist/utils/schema-to-string.js.map +1 -0
  206. package/dist/utils/schema.d.ts +2 -1
  207. package/dist/utils/schema.d.ts.map +1 -0
  208. package/dist/utils/schema.js +2 -1
  209. package/dist/utils/schema.js.map +1 -0
  210. package/dist/utils/url.js +3 -2
  211. package/dist/utils/url.js.map +1 -0
  212. package/dist/utils/use-query.js +2 -1
  213. package/dist/utils/use-query.js.map +1 -0
  214. package/package.json +5 -5
@@ -398,7 +398,6 @@
398
398
  @source inline("integer");
399
399
  @source inline("interface");
400
400
  @source inline("internal_legacy");
401
- @source inline("intersection");
402
401
  @source inline("invalid");
403
402
  @source inline("is");
404
403
  @source inline("isDefined");
@@ -464,8 +463,8 @@
464
463
  @source inline("media");
465
464
  @source inline("mediaAdapters");
466
465
  @source inline("mediaType");
466
+ @source inline("merge");
467
467
  @source inline("mergeAllOf");
468
- @source inline("merged");
469
468
  @source inline("message");
470
469
  @source inline("metaData");
471
470
  @source inline("method");
@@ -696,6 +695,7 @@
696
695
  @source inline("reset");
697
696
  @source inline("resize-none");
698
697
  @source inline("resolution");
698
+ @source inline("resolve");
699
699
  @source inline("resolveMediaAdapter");
700
700
  @source inline("resolveRequestData");
701
701
  @source inline("resolvedTheme");
@@ -935,8 +935,7 @@
935
935
  @source inline("useObject");
936
936
  @source inline("useQuery");
937
937
  @source inline("useRef");
938
- @source inline("useSchemaScope");
939
- @source inline("useSchemaUtils");
938
+ @source inline("useResolvedSchema");
940
939
  @source inline("useServerContext");
941
940
  @source inline("useServerSelectContext");
942
941
  @source inline("useState");
@@ -877,4 +877,5 @@ type IJsonSchema = {
877
877
  $ref?: string;
878
878
  };
879
879
  //#endregion
880
- export { OpenAPIV3, OpenAPIV3_2 };
880
+ export { OpenAPIV3, OpenAPIV3_2 };
881
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":["OpenAPI","T","OpenAPIV2","Document","OpenAPIV3","OpenAPIV3_1","OpenAPIV3_2","OperationObject","ResponseObject","HeaderObject","ReferenceObject","ParameterObject","Parameter","ExampleObject","SchemaObject","HttpMethods","Operation","Request","body","headers","params","query","Parameters","HttpMethod","R","P","Omit","PathsObject","PathItemObject","Record","ComponentsObject","ServerObject","TagObject","PathsWebhooksComponents","Pick","Partial","Modify","RequestBodyObject","ResponsesObject","CallbackObject","ParameterStyle","ParameterLocation","MediaTypeObject","NonArraySchemaObjectType","ArraySchemaObjectType","ArraySchemaObject","NonArraySchemaObject","MixedSchemaObject","BaseSchemaObject","DiscriminatorObject","XMLObject","XMLNodeType","EncodingObject","LinkObject","SecuritySchemeObject","HttpSecurityScheme","ApiKeySecurityScheme","OAuth2SecurityScheme","OpenIdSecurityScheme","OAuthFlows","OAuthFlowBase","OAuthFlowTokenUrlTrait","paths","webhooks","components","openapi","swagger","servers","$self","tags","name","method","additionalOperations","parameters","requestBody","responses","callbacks","style","in","schema","examples","media","content","type","items","discriminator","xml","defaultMapping","nodeType","dataValue","serializedValue","encoding","itemSchema","itemEncoding","prefixEncoding","header","links","link","summary","server","schemas","requestBodies","securitySchemes","pathItems","mediaTypes","deprecated","deviceAuthorization","deviceAuthorizationUrl","flows","parent","kind","InfoObject","LicenseObject","ContactObject","ServerVariableObject","ExternalDocumentationObject","ParameterBaseObject","SecurityRequirementObject","info","jsonSchemaDialect","license","identifier","url","description","variables","enum","exclusiveMinimum","exclusiveMaximum","contentMediaType","$schema","additionalProperties","properties","patternProperties","allOf","oneOf","anyOf","not","externalDocs","const","OAuthFlowAuthorizationUrlTrait","security","title","termsOfService","contact","version","email","variable","default","pattern","$ref","operationId","callback","required","allowEmptyValue","explode","allowReserved","example","format","multipleOf","maximum","minimum","maxLength","minLength","maxItems","minItems","uniqueItems","maxProperties","minProperties","nullable","readOnly","writeOnly","propertyName","mapping","value","namespace","prefix","attribute","wrapped","externalValue","contentType","code","operationRef","parameter","key","scheme","bearerFormat","scopes","scope","refreshUrl","authorizationUrl","tokenUrl","implicit","password","clientCredentials","authorizationCode","openIdConnectUrl","MimeTypes","DefinitionsObject","ParametersDefinitionsObject","ResponsesDefinitionsObject","SecurityDefinitionsObject","SecuritySchemeObjectBase","SecuritySchemeOauth2Implicit","SecuritySchemeOauth2AccessCode","SecuritySchemeOauth2Password","SecuritySchemeOauth2Application","ScopesObject","SecuritySchemeOauth2Base","SecuritySchemeBasic","SecuritySchemeApiKey","SecuritySchemeOauth2","Schema","HeadersObject","ItemsObject","Response","InBodyParameterObject","GeneralParameterObject","IJsonSchema","basePath","consumes","definitions","host","produces","schemes","securityDefinitions","index","flow","collectionFormat","id","additionalItems","dependencies"],"sources":["../../src/_openapi/types.d.ts"],"mappings":"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"}
@@ -61,4 +61,5 @@ interface BeforeWriteContext {
61
61
  declare function generateFiles(options: Config): Promise<void>;
62
62
  declare function generateFilesOnly(options: SchemaToPagesOptions & Omit<GenerateFilesConfig, 'output'>): Promise<OutputFile[]>;
63
63
  //#endregion
64
- export { Config, OutputFile, generateFiles, generateFilesOnly };
64
+ export { Config, OutputFile, generateFiles, generateFilesOnly };
65
+ //# sourceMappingURL=generate-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-file.d.ts","names":[],"sources":["../src/generate-file.ts"],"mappings":";;;;;;;;UASiB,UAAA;EACf,IAAA;EACA,OAAA;AAAA;AAAA,UAGQ,WAAA;EACR,KAAA,EAAO,SAAA,OAAgB,GAAA,EAAK,kBAAA,KAAuB,SAAA;EALnD;;AAED;EAQC,GAAA,IACM,QAAA;IAEA,OAAA;IARC;;;IAYD,UAAA;EAAA;AAAA;AAAA,UAIE,SAAA;EACR,IAAA;EACA,KAAA;EACA,WAAA;EAdA;;;;;EAqBA,IAAA;AAAA;AAAA,UAGQ,mBAAA,SAA4B,kBAAA;;;;EAIpC,KAAA,EAAO,aAAA;EAdP;;;EAmBA,MAAA;EATQ;;;EAcR,KAAA,GAAQ,WAAA;EAAA;;;EAKR,WAAA,IAAe,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,UAAA,cAAwB,OAAA;AAAA;AAAA,KAG9D,MAAA,GAAS,oBAAA,GAAuB,mBAAA;AAAA,UAElC,kBAAA;EAAA,SACC,SAAA,EAAW,MAAA,SAAe,UAAA;EAAA,SAC1B,gBAAA,EAAkB,MAAA,SAAe,WAAA;EAAA,SACjC,SAAA,EAAW,MAAA,SAAe,iBAAA;AAAA;AAAA,iBAGf,aAAA,CAAc,OAAA,EAAS,MAAA,GAAS,OAAA;AAAA,iBAehC,iBAAA,CACpB,OAAA,EAAS,oBAAA,GAAuB,IAAA,CAAK,mBAAA,cACpC,OAAA,CAAQ,UAAA"}
@@ -88,4 +88,5 @@ function writeIndexFiles(files, context, options) {
88
88
  }
89
89
 
90
90
  //#endregion
91
- export { generateFiles, generateFilesOnly };
91
+ export { generateFiles, generateFilesOnly };
92
+ //# sourceMappingURL=generate-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-file.js","names":[],"sources":["../src/generate-file.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { generateDocument, type PagesToTextOptions, toText } from './utils/pages/to-text';\nimport type { ProcessedDocument } from '@/utils/process-document';\nimport type { OpenAPIServer } from '@/server';\nimport { createGetUrl, getSlugs } from 'fumadocs-core/source';\nimport { createAutoPreset, type SchemaToPagesOptions } from '@/utils/pages/preset-auto';\nimport { fromSchema, type OutputEntry } from '@/utils/pages/builder';\n\nexport interface OutputFile {\n path: string;\n content: string;\n}\n\ninterface IndexConfig {\n items: IndexItem[] | ((ctx: BeforeWriteContext) => IndexItem[]);\n\n /**\n * Generate URLs for cards\n */\n url:\n | ((filePath: string) => string)\n | {\n baseUrl: string;\n /**\n * Base content directory\n */\n contentDir: string;\n };\n}\n\ninterface IndexItem {\n path: string;\n title?: string;\n description?: string;\n\n /**\n * Specify linked pages:\n * - items in `inputs` to include all generated pages of a specific schema.\n * - specific Markdown/MDX files.\n */\n only?: string[];\n}\n\ninterface GenerateFilesConfig extends PagesToTextOptions {\n /**\n * the OpenAPI server object\n */\n input: OpenAPIServer;\n\n /**\n * Output directory\n */\n output: string;\n\n /**\n * Generate index files with cards linking to generated pages.\n */\n index?: IndexConfig;\n\n /**\n * Can add/change/remove output files before writing to file system\n **/\n beforeWrite?: (this: BeforeWriteContext, files: OutputFile[]) => void | Promise<void>;\n}\n\nexport type Config = SchemaToPagesOptions & GenerateFilesConfig;\n\ninterface BeforeWriteContext {\n readonly generated: Record<string, OutputFile[]>;\n readonly generatedEntries: Record<string, OutputEntry[]>;\n readonly documents: Record<string, ProcessedDocument>;\n}\n\nexport async function generateFiles(options: Config): Promise<void> {\n const files = await generateFilesOnly(options);\n const { output } = options;\n\n await Promise.all(\n files.map(async (file) => {\n const filePath = path.join(output, file.path);\n\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, file.content);\n console.log(`Generated: ${filePath}`);\n }),\n );\n}\n\nexport async function generateFilesOnly(\n options: SchemaToPagesOptions & Omit<GenerateFilesConfig, 'output'>,\n): Promise<OutputFile[]> {\n const schemas = await options.input.getSchemas();\n\n const files: OutputFile[] = [];\n const generated: Record<string, OutputFile[]> = {};\n const generatedEntries: Record<string, OutputEntry[]> = {};\n\n const entries = Object.entries(schemas);\n if (entries.length === 0) {\n throw new Error('No input files found.');\n }\n const preset = createAutoPreset(options);\n for (const [id, schema] of entries) {\n const entries = fromSchema(id, schema, preset);\n const schemaFiles = (generated[id] ??= []);\n\n generatedEntries[id] = entries;\n for (const entry of entries) {\n const file: OutputFile = {\n path: entry.path,\n content: toText(entry, schema, options),\n };\n\n schemaFiles.push(file);\n files.push(file);\n }\n }\n\n const context: BeforeWriteContext = {\n generated,\n generatedEntries,\n documents: schemas,\n };\n\n if (options.index) {\n writeIndexFiles(files, context, options);\n }\n\n await options.beforeWrite?.call(context, files);\n return files;\n}\n\nfunction writeIndexFiles(\n files: OutputFile[],\n context: BeforeWriteContext,\n options: SchemaToPagesOptions & Omit<GenerateFilesConfig, 'output'>,\n) {\n const { generatedEntries } = context;\n const { items, url } = options.index!;\n\n let urlFn: (path: string) => string;\n if (typeof url === 'object') {\n const getUrl = createGetUrl(url.baseUrl);\n\n urlFn = (file) => getUrl(getSlugs(path.relative(url.contentDir, file)));\n } else {\n urlFn = url;\n }\n\n function findEntryByPath(path: string) {\n for (const entries of Object.values(generatedEntries)) {\n const match = entries.find((entry) => entry.path === path);\n\n if (match) return match;\n }\n }\n\n function fileContent(index: IndexItem): string {\n const content: string[] = [];\n content.push('<Cards>');\n const pathToEntry = new Map<string, OutputEntry>();\n const only = index.only ?? Object.keys(context.generated);\n\n for (const item of only) {\n if (generatedEntries[item]) {\n for (const entry of generatedEntries[item]) {\n pathToEntry.set(entry.path, entry);\n }\n } else {\n const match = findEntryByPath(item);\n if (!match) {\n throw new Error(\n `${item} does not exist on \"input\", available: ${Object.keys(generatedEntries).join(', ')}.`,\n );\n }\n\n pathToEntry.set(match.path, match);\n }\n }\n\n for (const file of pathToEntry.values()) {\n const descriptionAttr = file.info.description\n ? `description=${JSON.stringify(file.info.description)} `\n : '';\n content.push(\n `<Card href=\"${urlFn(file.path)}\" title=${JSON.stringify(file.info.title)} ${descriptionAttr}/>`,\n );\n }\n\n content.push('</Cards>');\n return generateDocument(\n {\n title: index.title ?? 'Overview',\n description: index.description,\n },\n content.join('\\n'),\n options,\n );\n }\n\n for (const item of typeof items === 'function' ? items(context) : items) {\n files.push({\n path: path.extname(item.path).length === 0 ? `${item.path}.mdx` : item.path,\n content: fileContent(item),\n });\n }\n}\n"],"mappings":"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"}
@@ -39,4 +39,5 @@ var require_dereference = /* @__PURE__ */ __commonJSMin(((exports) => {
39
39
  //#endregion
40
40
  export default require_dereference();
41
41
 
42
- export { require_dereference };
42
+ export { require_dereference };
43
+ //# sourceMappingURL=dereference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dereference.js","names":[],"sources":["../../../../../../../../node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/dereference.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"dereferenceSync\", {\n enumerable: true,\n get: function() {\n return dereferenceSync;\n }\n});\nvar _klona = require(\"./klona\");\nvar _resolveRef = require(\"./resolveRef\");\nvar cache = new Map();\nvar dereferenceSync = function(schema) {\n if (cache.has(schema)) {\n return cache.get(schema);\n }\n var visitedNodes = new Set();\n var cloned = (0, _klona.klona)(schema);\n var resolve = function(current, path) {\n if (typeof current === \"object\" && current !== null) {\n // make sure we don't visit the same node twice\n if (visitedNodes.has(current)) {\n return current;\n }\n visitedNodes.add(current);\n if (Array.isArray(current)) {\n // array\n for(var index = 0; index < current.length; index++){\n current[index] = resolve(current[index], \"\".concat(path, \"/\").concat(index));\n }\n } else {\n // object\n if (\"$ref\" in current && typeof current[\"$ref\"] === \"string\") {\n return (0, _resolveRef.resolveRefSync)(cloned, current[\"$ref\"]);\n }\n for(var key in current){\n current[key] = resolve(current[key], \"\".concat(path, \"/\").concat(key));\n }\n }\n }\n return current;\n };\n var result = resolve(cloned, \"#\");\n cache.set(schema, result);\n return result;\n};\n"],"x_google_ignoreList":[0],"mappings":";;;;;;AACA,QAAO,eAAe,SAAS,cAAc,EACzC,OAAO,MACV,CAAC;AACF,QAAO,eAAe,SAAS,mBAAmB;EAC9C,YAAY;EACZ,KAAK,WAAW;AACZ,UAAO;;EAEd,CAAC;CACF,IAAI;CACJ,IAAI;CACJ,IAAI,wBAAQ,IAAI,KAAK;CACrB,IAAI,kBAAkB,SAAS,QAAQ;AACnC,MAAI,MAAM,IAAI,OAAO,CACjB,QAAO,MAAM,IAAI,OAAO;EAE5B,IAAI,+BAAe,IAAI,KAAK;EAC5B,IAAI,UAAU,GAAG,OAAO,OAAO,OAAO;EACtC,IAAI,UAAU,SAAS,SAAS,MAAM;AAClC,OAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AAEjD,QAAI,aAAa,IAAI,QAAQ,CACzB,QAAO;AAEX,iBAAa,IAAI,QAAQ;AACzB,QAAI,MAAM,QAAQ,QAAQ,CAEtB,MAAI,IAAI,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,QACvC,SAAQ,SAAS,QAAQ,QAAQ,QAAQ,GAAG,OAAO,MAAM,IAAI,CAAC,OAAO,MAAM,CAAC;SAE7E;AAEH,SAAI,UAAU,WAAW,OAAO,QAAQ,YAAY,SAChD,SAAQ,GAAG,YAAY,gBAAgB,QAAQ,QAAQ,QAAQ;AAEnE,UAAI,IAAI,OAAO,QACX,SAAQ,OAAO,QAAQ,QAAQ,MAAM,GAAG,OAAO,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC;;;AAIlF,UAAO;;EAEX,IAAI,SAAS,QAAQ,QAAQ,IAAI;AACjC,QAAM,IAAI,QAAQ,OAAO;AACzB,SAAO"}
@@ -25,4 +25,5 @@ var require_dereference_json_schema = /* @__PURE__ */ __commonJSMin(((exports) =
25
25
  //#endregion
26
26
  export default require_dereference_json_schema();
27
27
 
28
- export { require_dereference_json_schema };
28
+ export { require_dereference_json_schema };
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../../../node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/index.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n_exportStar(require(\"./types\"), exports);\n_exportStar(require(\"./dereference\"), exports);\n_exportStar(require(\"./resolveRef\"), exports);\nfunction _exportStar(from, to) {\n Object.keys(from).forEach(function(k) {\n if (k !== \"default\" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {\n enumerable: true,\n get: function() {\n return from[k];\n }\n });\n });\n return from;\n}\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;AACA,QAAO,eAAe,SAAS,cAAc,EACzC,OAAO,MACV,CAAC;AACF,8BAAgC,QAAQ;AACxC,oCAAsC,QAAQ;AAC9C,mCAAqC,QAAQ;CAC7C,SAAS,YAAY,MAAM,IAAI;AAC3B,SAAO,KAAK,KAAK,CAAC,QAAQ,SAAS,GAAG;AAClC,OAAI,MAAM,aAAa,CAAC,OAAO,UAAU,eAAe,KAAK,IAAI,EAAE,CAAE,QAAO,eAAe,IAAI,GAAG;IAC9F,YAAY;IACZ,KAAK,WAAW;AACZ,YAAO,KAAK;;IAEnB,CAAC;IACJ;AACF,SAAO"}
@@ -38,4 +38,5 @@ import { __commonJSMin } from "../../../../../_virtual/_rolldown/runtime.js";
38
38
  //#endregion
39
39
  export default require_klona();
40
40
 
41
- export { require_klona };
41
+ export { require_klona };
42
+ //# sourceMappingURL=klona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"klona.js","names":[],"sources":["../../../../../../../../node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/klona.js"],"sourcesContent":["/**\n * klona/json - MIT License\n *\n * https://github.com/lukeed/klona/blob/master/license\n */ \"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"klona\", {\n enumerable: true,\n get: function() {\n return klona;\n }\n});\nfunction klona(val) {\n var index, out, tmp;\n if (Array.isArray(val)) {\n out = Array(index = val.length);\n while(index--)out[index] = (tmp = val[index]) && typeof tmp === \"object\" ? klona(tmp) : tmp;\n return out;\n }\n if (Object.prototype.toString.call(val) === \"[object Object]\") {\n out = {}; // null\n for(index in val){\n if (index === \"__proto__\") {\n Object.defineProperty(out, index, {\n value: klona(val[index]),\n configurable: true,\n enumerable: true,\n writable: true\n });\n } else {\n out[index] = (tmp = val[index]) && typeof tmp === \"object\" ? klona(tmp) : tmp;\n }\n }\n return out;\n }\n return val;\n}\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;AAKA,QAAO,eAAe,SAAS,cAAc,EACzC,OAAO,MACV,CAAC;AACF,QAAO,eAAe,SAAS,SAAS;EACpC,YAAY;EACZ,KAAK,WAAW;AACZ,UAAO;;EAEd,CAAC;CACF,SAAS,MAAM,KAAK;EAChB,IAAI,OAAO,KAAK;AAChB,MAAI,MAAM,QAAQ,IAAI,EAAE;AACpB,SAAM,MAAM,QAAQ,IAAI,OAAO;AAC/B,UAAM,QAAQ,KAAI,UAAU,MAAM,IAAI,WAAW,OAAO,QAAQ,WAAW,MAAM,IAAI,GAAG;AACxF,UAAO;;AAEX,MAAI,OAAO,UAAU,SAAS,KAAK,IAAI,KAAK,mBAAmB;AAC3D,SAAM,EAAE;AACR,QAAI,SAAS,IACT,KAAI,UAAU,YACV,QAAO,eAAe,KAAK,OAAO;IAC9B,OAAO,MAAM,IAAI,OAAO;IACxB,cAAc;IACd,YAAY;IACZ,UAAU;IACb,CAAC;OAEF,KAAI,UAAU,MAAM,IAAI,WAAW,OAAO,QAAQ,WAAW,MAAM,IAAI,GAAG;AAGlF,UAAO;;AAEX,SAAO"}
@@ -42,4 +42,5 @@ var require_resolveRef = /* @__PURE__ */ __commonJSMin(((exports) => {
42
42
  //#endregion
43
43
  export default require_resolveRef();
44
44
 
45
- export { require_resolveRef };
45
+ export { require_resolveRef };
46
+ //# sourceMappingURL=resolveRef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRef.js","names":[],"sources":["../../../../../../../../node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/resolveRef.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"resolveRefSync\", {\n enumerable: true,\n get: function() {\n return resolveRefSync;\n }\n});\nvar cache = new Map();\nvar resolveRefSync = function(schema, ref) {\n if (!cache.has(schema)) {\n cache.set(schema, new Map());\n }\n var schemaCache = cache.get(schema);\n if (schemaCache.has(ref)) {\n return schemaCache.get(ref);\n }\n var path = ref.split(\"/\").slice(1);\n var current = schema;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = path[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var segment = _step.value;\n if (!current || typeof current !== \"object\") {\n // we've reached a dead end\n current = null;\n }\n var _current_segment;\n current = (_current_segment = current[segment]) !== null && _current_segment !== void 0 ? _current_segment : null;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n schemaCache.set(ref, current);\n return current;\n};\n"],"x_google_ignoreList":[0],"mappings":";;;;AACA,QAAO,eAAe,SAAS,cAAc,EACzC,OAAO,MACV,CAAC;AACF,QAAO,eAAe,SAAS,kBAAkB;EAC7C,YAAY;EACZ,KAAK,WAAW;AACZ,UAAO;;EAEd,CAAC;CACF,IAAI,wBAAQ,IAAI,KAAK;CACrB,IAAI,iBAAiB,SAAS,QAAQ,KAAK;AACvC,MAAI,CAAC,MAAM,IAAI,OAAO,CAClB,OAAM,IAAI,wBAAQ,IAAI,KAAK,CAAC;EAEhC,IAAI,cAAc,MAAM,IAAI,OAAO;AACnC,MAAI,YAAY,IAAI,IAAI,CACpB,QAAO,YAAY,IAAI,IAAI;EAE/B,IAAI,OAAO,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE;EAClC,IAAI,UAAU;EACd,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB;AAClF,MAAI;AACA,QAAI,IAAI,YAAY,KAAK,OAAO,WAAW,EAAE,OAAO,EAAE,6BAA6B,QAAQ,UAAU,MAAM,EAAE,OAAO,4BAA4B,MAAK;IACjJ,IAAI,UAAU,MAAM;AACpB,QAAI,CAAC,WAAW,OAAO,YAAY,SAE/B,WAAU;IAEd,IAAI;AACJ,eAAW,mBAAmB,QAAQ,cAAc,QAAQ,qBAAqB,KAAK,IAAI,mBAAmB;;WAE5G,KAAK;AACV,uBAAoB;AACpB,oBAAiB;YACZ;AACL,OAAI;AACA,QAAI,CAAC,6BAA6B,UAAU,UAAU,KAClD,WAAU,QAAQ;aAEjB;AACL,QAAI,kBACA,OAAM;;;AAIlB,cAAY,IAAI,KAAK,QAAQ;AAC7B,SAAO"}
@@ -8,4 +8,5 @@ var require_types = /* @__PURE__ */ __commonJSMin(((exports) => {
8
8
  //#endregion
9
9
  export default require_types();
10
10
 
11
- export { require_types };
11
+ export { require_types };
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../../../../node_modules/.pnpm/dereference-json-schema@0.2.1/node_modules/dereference-json-schema/types.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n"],"x_google_ignoreList":[0],"mappings":";;;;AACA,QAAO,eAAe,SAAS,cAAc,EACzC,OAAO,MACV,CAAC"}
@@ -90,4 +90,5 @@ declare const Custom: {
90
90
  };
91
91
  };
92
92
  //#endregion
93
- export { AuthField, Custom, FormValues, PlaygroundClientOptions, PlaygroundClientProps, PlaygroundClient as default };
93
+ export { AuthField, Custom, FormValues, PlaygroundClientOptions, PlaygroundClientProps, PlaygroundClient as default };
94
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","names":[],"sources":["../../src/playground/client.tsx"],"mappings":";;;;;;;;;UAsDiB,UAAA,SAAmB,MAAA;EAClC,IAAA,EAAM,MAAA;EACN,KAAA,EAAO,MAAA;EACP,MAAA,EAAQ,MAAA;EACR,MAAA,EAAQ,MAAA;EACR,IAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,cAAA,UAAwB,WAAA;EACrE,KAAA;EACA,MAAA;EACA,UAAA,GAAa,cAAA;EACb,UAAA,EAAY,aAAA;EACZ,IAAA;IACE,MAAA,EAAQ,YAAA;IACR,SAAA;EAAA;EAbF;;;EAkBA,UAAA,EAAY,MAAA,SAAe,YAAA;EAC3B,QAAA;AAAA;AAAA,UAGe,uBAAA;EAnBX;;AAGN;EAoBE,mBAAA,IAAuB,MAAA,EAAQ,SAAA,OAAgB,SAAA;;;;EAK/C,cAAA;EAEA,UAAA,GAAa,OAAA;IACX,aAAA,EAAe,EAAA;MAAK,IAAA,EAAM,WAAA;IAAA;EAAA;EA5BoD;;;;;;;;EAuChF,oBAAA,IAAwB,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,cAAA,KAAmB,SAAA;EAlCvE;;;;;EAyCA,eAAA,IACE,SAAA,UACA,IAAA;IACE,MAAA,EAAQ,YAAA;IACR,SAAA;EAAA,MAEC,SAAA;AAAA;AAAA,iBAciB,gBAAA,CAAA;EACtB,KAAA;EACA,MAAA;EACA,UAAA;EACA,UAAA;EACA,IAAA;EACA,UAAA;EACA,QAAA;EACA,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,qBAAA,GAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,UAiVP,SAAA;EACf,SAAA,EAAW,QAAA;EACX,YAAA;EAEA,QAAA,GAAW,aAAA;EACX,QAAA,EAAU,SAAA;EAEV,SAAA,IAAa,MAAA;AAAA;AAAA,cAuQF,MAAA;2BAEE,QAAA,EAAQ,OAAA;IAEjB,YAAA;EAAA"}
@@ -8,7 +8,7 @@ import { cn } from "../utils/cn.js";
8
8
  import { MethodLabel } from "../ui/components/method-label.js";
9
9
  import { useQuery } from "../utils/use-query.js";
10
10
  import { encodeRequestData } from "../requests/media/encode.js";
11
- import { SchemaProvider, useSchemaUtils } from "./schema.js";
11
+ import { SchemaProvider, useResolvedSchema } from "./schema.js";
12
12
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/components/select.js";
13
13
  import { labelVariants } from "../ui/components/input.js";
14
14
  import ServerSelect from "./components/server-select.js";
@@ -218,7 +218,7 @@ function FormBody({ parameters = [], body }) {
218
218
  })] });
219
219
  }
220
220
  function BodyInput({ field: _field }) {
221
- const field = useSchemaUtils().resolve(_field);
221
+ const field = useResolvedSchema(_field);
222
222
  const [isJson, setIsJson] = useState(false);
223
223
  if (field.format === "binary") return /* @__PURE__ */ jsx(FieldSet, {
224
224
  field,
@@ -459,4 +459,5 @@ const Custom = { useController(fieldName, options) {
459
459
  } };
460
460
 
461
461
  //#endregion
462
- export { Custom, PlaygroundClient as default };
462
+ export { Custom, PlaygroundClient as default };
463
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","names":[],"sources":["../../src/playground/client.tsx"],"sourcesContent":["'use client';\nimport {\n type FC,\n Fragment,\n lazy,\n type ReactNode,\n useEffect,\n useMemo,\n useState,\n type ComponentProps,\n useRef,\n} from 'react';\nimport { useApiContext, useServerContext } from '@/ui/contexts/api';\nimport type { FetchResult } from '@/playground/fetcher';\nimport type { ParameterField, SecurityEntry } from '@/playground/index';\nimport { getStatusInfo } from './status-info';\nimport { joinURL, resolveRequestData, resolveServerUrl, withBase } from '@/utils/url';\nimport { DynamicCodeBlock } from 'fumadocs-ui/components/dynamic-codeblock.core';\nimport { MethodLabel } from '@/ui/components/method-label';\nimport { useQuery } from '@/utils/use-query';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from 'fumadocs-ui/components/ui/collapsible';\nimport { ChevronDown, LoaderCircle } from 'lucide-react';\nimport { encodeRequestData } from '@/requests/media/encode';\nimport { buttonVariants } from 'fumadocs-ui/components/ui/button';\nimport { cn } from '@/utils/cn';\nimport { SchemaProvider, SchemaScope, useResolvedSchema } from '@/playground/schema';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\nimport { labelVariants } from '@/ui/components/input';\nimport type { ParsedSchema } from '@/utils/schema';\nimport ServerSelect from './components/server-select';\nimport { useStorageKey } from '@/ui/client/storage-key';\nimport { useExampleRequests } from '@/ui/operation/usage-tabs/client';\nimport {\n FieldKey,\n Stf,\n StfProvider,\n useDataEngine,\n useFieldValue,\n useListener,\n useStf,\n} from '@fumari/stf';\nimport { objectGet, objectSet, stringifyFieldKey } from '@fumari/stf/lib/utils';\nimport { FieldInput, FieldSet, JsonInput, ObjectInput } from './components/inputs';\n\nexport interface FormValues extends Record<string, unknown> {\n path: Record<string, unknown>;\n query: Record<string, unknown>;\n header: Record<string, unknown>;\n cookie: Record<string, unknown>;\n body: unknown;\n}\n\nexport interface PlaygroundClientProps extends ComponentProps<'form'>, SchemaScope {\n route: string;\n method: string;\n parameters?: ParameterField[];\n securities: SecurityEntry[][];\n body?: {\n schema: ParsedSchema;\n mediaType: string;\n };\n /**\n * Resolver for $ref schemas you've passed\n */\n references: Record<string, ParsedSchema>;\n proxyUrl?: string;\n}\n\nexport interface PlaygroundClientOptions {\n /**\n * transform fields for auth-specific parameters (e.g. header)\n */\n transformAuthInputs?: (fields: AuthField[]) => AuthField[];\n\n /**\n * Request timeout in seconds (default: 10s)\n */\n requestTimeout?: number;\n\n components?: Partial<{\n ResultDisplay: FC<{ data: FetchResult }>;\n }>;\n\n /**\n * render the paremeter inputs of API endpoint.\n *\n * for updating values, use:\n * - the `Custom.useController()` from `fumadocs-openapi/playground/client`.\n *\n * Recommended types packages: `json-schema-typed`, `openapi-types`.\n */\n renderParameterField?: (fieldName: FieldKey, param: ParameterField) => ReactNode;\n\n /**\n * render the input for API endpoint body.\n *\n * @see renderParameterField for customisation tips\n */\n renderBodyField?: (\n fieldName: 'body',\n info: {\n schema: ParsedSchema;\n mediaType: string;\n },\n ) => ReactNode;\n}\n\nconst OauthDialog = lazy(() =>\n import('./components/oauth-dialog').then((mod) => ({\n default: mod.OauthDialog,\n })),\n);\nconst OauthDialogTrigger = lazy(() =>\n import('./components/oauth-dialog').then((mod) => ({\n default: mod.OauthDialogTrigger,\n })),\n);\n\nexport default function PlaygroundClient({\n route,\n method = 'GET',\n securities,\n parameters = [],\n body,\n references,\n proxyUrl,\n writeOnly,\n readOnly,\n ...rest\n}: PlaygroundClientProps) {\n const { example: exampleId, examples, setExampleData } = useExampleRequests();\n const storageKeys = useStorageKey();\n const {\n mediaAdapters,\n client: {\n playground: {\n components: { ResultDisplay = DefaultResultDisplay } = {},\n requestTimeout = 10,\n transformAuthInputs,\n } = {},\n },\n } = useApiContext();\n const { serverRef } = useServerContext();\n const [securityId, setSecurityId] = useState(() => {\n const idx = securities.findIndex((s) => s.every((entry) => !entry.deprecated));\n return idx === -1 ? 0 : idx;\n });\n const { inputs, mapInputs, initAuthValues } = useAuthInputs(\n securities[securityId],\n transformAuthInputs,\n );\n\n const defaultValues: FormValues = useMemo(() => {\n const requestData = examples.find((example) => example.id === exampleId)?.data;\n\n return {\n path: requestData?.path ?? {},\n query: requestData?.query ?? {},\n header: requestData?.header ?? {},\n body: requestData?.body ?? {},\n cookie: requestData?.cookie ?? {},\n };\n }, [examples, exampleId]);\n\n const stf = useStf({\n // it is fine to modify `defaultValues` in place\n // because we already try to persist the form values via `setExampleData`.\n defaultValues,\n });\n\n const testQuery = useQuery(async (input: FormValues) => {\n const targetServer = serverRef.current;\n const fetcher = await import('./fetcher').then((mod) =>\n mod.createBrowserFetcher(mediaAdapters, requestTimeout),\n );\n const encoded = encodeRequestData(\n { ...mapInputs(input), method, bodyMediaType: body?.mediaType },\n mediaAdapters,\n parameters,\n );\n return fetcher.fetch(\n joinURL(\n withBase(\n targetServer ? resolveServerUrl(targetServer.url, targetServer.variables) : '/',\n window.location.origin,\n ),\n resolveRequestData(route, encoded),\n ),\n {\n proxyUrl,\n ...encoded,\n },\n );\n });\n\n const timerRef = useRef<number | null>(null);\n useListener({\n stf,\n onUpdate() {\n if (timerRef.current) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(\n () => {\n const values = stf.dataEngine.getData() as FormValues;\n for (const item of inputs) {\n const value = stf.dataEngine.get(item.fieldName);\n\n if (value) {\n localStorage.setItem(storageKeys.AuthField(item), JSON.stringify(value));\n }\n }\n\n const data = {\n ...mapInputs(values),\n method,\n bodyMediaType: body?.mediaType,\n };\n setExampleData(data, encodeRequestData(data, mediaAdapters, parameters));\n },\n timerRef.current ? 400 : 0,\n );\n },\n });\n\n useEffect(() => {\n // same object reference = unchanged\n if (stf.dataEngine.getData() === defaultValues) return;\n\n stf.dataEngine.reset(defaultValues);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- ignore other parts\n }, [defaultValues]);\n\n useEffect(() => {\n return initAuthValues(stf);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- ignore other parts\n }, [defaultValues, inputs]);\n\n return (\n <StfProvider value={stf}>\n <SchemaProvider references={references} writeOnly={writeOnly} readOnly={readOnly}>\n <form\n {...rest}\n className={cn(\n 'not-prose flex flex-col rounded-xl border shadow-md overflow-hidden bg-fd-card text-fd-card-foreground',\n rest.className,\n )}\n onSubmit={(e) => {\n testQuery.start(mapInputs(stf.dataEngine.getData() as FormValues));\n e.preventDefault();\n }}\n >\n <ServerSelect className=\"border-b\" />\n <div className=\"flex flex-row items-center gap-2 text-sm p-3 not-last:pb-0\">\n <MethodLabel>{method}</MethodLabel>\n <Route route={route} className=\"flex-1\" />\n <button\n type=\"submit\"\n className={cn(buttonVariants({ color: 'primary', size: 'sm' }), 'w-14 py-1.5')}\n disabled={testQuery.isLoading}\n >\n {testQuery.isLoading ? <LoaderCircle className=\"size-4 animate-spin\" /> : 'Send'}\n </button>\n </div>\n {testQuery.data ? <ResultDisplay data={testQuery.data} reset={testQuery.reset} /> : null}\n\n {securities.length > 0 && (\n <SecurityTabs\n securities={securities}\n securityId={securityId}\n setSecurityId={setSecurityId}\n >\n {inputs.map((input) => (\n <Fragment key={stringifyFieldKey(input.fieldName)}>{input.children}</Fragment>\n ))}\n </SecurityTabs>\n )}\n <FormBody body={body} parameters={parameters} />\n </form>\n </SchemaProvider>\n </StfProvider>\n );\n}\n\nfunction SecurityTabs({\n securities,\n setSecurityId,\n securityId,\n children,\n}: {\n securities: SecurityEntry[][];\n securityId: number;\n setSecurityId: (value: number) => void;\n children: ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const engine = useDataEngine();\n\n const result = (\n <CollapsiblePanel title=\"Authorization\">\n <Select value={securityId.toString()} onValueChange={(v) => setSecurityId(Number(v))}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {securities.map((security, i) => (\n <SelectItem key={i} value={i.toString()}>\n {security.map((item) => (\n <div key={item.id} className=\"max-w-[600px]\">\n <p\n className={cn(\n 'font-mono font-medium',\n item.deprecated && 'text-fd-muted-foreground line-through',\n )}\n >\n {item.id}\n </p>\n <p className=\"text-fd-muted-foreground whitespace-pre-wrap\">{item.description}</p>\n </div>\n ))}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {children}\n </CollapsiblePanel>\n );\n\n for (let i = 0; i < securities.length; i++) {\n const security = securities[i];\n\n for (const item of security) {\n if (item.type === 'oauth2') {\n return (\n <OauthDialog\n scheme={item}\n scopes={item.scopes}\n open={open}\n setOpen={(v) => {\n setOpen(v);\n if (v) {\n setSecurityId(i);\n }\n }}\n setToken={(token) => engine.update(['header', 'Authorization'], token)}\n >\n {result}\n </OauthDialog>\n );\n }\n }\n }\n\n return result;\n}\n\nconst ParamTypes = ['path', 'header', 'cookie', 'query'] as const;\n\nfunction FormBody({ parameters = [], body }: Pick<PlaygroundClientProps, 'parameters' | 'body'>) {\n const { renderParameterField, renderBodyField } = useApiContext().client.playground ?? {};\n const panels = useMemo(() => {\n return ParamTypes.map((type) => {\n const items = parameters.filter((v) => v.in === type);\n if (items.length === 0) return;\n\n return (\n <CollapsiblePanel\n key={type}\n title={\n {\n header: 'Header',\n cookie: 'Cookies',\n query: 'Query',\n path: 'Path',\n }[type]\n }\n >\n {items.map((field) => {\n const fieldName: FieldKey = [type, field.name!];\n if (renderParameterField) {\n return renderParameterField(fieldName, field);\n }\n\n const contentTypes = field.content && Object.keys(field.content);\n const schema = (\n field.content && contentTypes && contentTypes.length > 0\n ? field.content[contentTypes[0]].schema\n : field.schema\n ) as ParsedSchema;\n\n return (\n <FieldSet\n key={stringifyFieldKey(fieldName)}\n name={field.name}\n fieldName={fieldName}\n field={schema}\n isRequired={field.required}\n />\n );\n })}\n </CollapsiblePanel>\n );\n });\n }, [parameters, renderParameterField]);\n\n return (\n <>\n {panels}\n {body && (\n <CollapsiblePanel title=\"Body\">\n {renderBodyField ? renderBodyField('body', body) : <BodyInput field={body.schema} />}\n </CollapsiblePanel>\n )}\n </>\n );\n}\n\nfunction BodyInput({ field: _field }: { field: ParsedSchema }) {\n const field = useResolvedSchema(_field);\n const [isJson, setIsJson] = useState(false);\n\n if (field.format === 'binary') return <FieldSet field={field} fieldName={['body']} isRequired />;\n\n if (isJson)\n return (\n <>\n <button\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'sm',\n className: 'w-fit font-mono p-2',\n }),\n )}\n onClick={() => setIsJson(false)}\n type=\"button\"\n >\n Close JSON Editor\n </button>\n <JsonInput fieldName={['body']} />\n </>\n );\n\n return (\n <FieldSet\n field={field}\n fieldName={['body']}\n collapsible={false}\n isRequired\n name={\n <button\n type=\"button\"\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'sm',\n className: 'p-2',\n }),\n )}\n onClick={() => setIsJson(true)}\n >\n Open JSON Editor\n </button>\n }\n />\n );\n}\n\nexport interface AuthField {\n fieldName: FieldKey;\n defaultValue: unknown;\n\n original?: SecurityEntry;\n children: ReactNode;\n\n mapOutput?: (values: unknown) => unknown;\n}\n\nfunction useAuthInputs(\n securities?: SecurityEntry[],\n transform?: (fields: AuthField[]) => AuthField[],\n) {\n const storageKeys = useStorageKey();\n const inputs = useMemo(() => {\n const result: AuthField[] = [];\n if (!securities) return result;\n\n for (const security of securities) {\n if (security.type === 'http' && security.scheme === 'basic') {\n const fieldName: FieldKey = ['header', 'Authorization'];\n\n result.push({\n fieldName,\n original: security,\n defaultValue: {\n username: '',\n password: '',\n },\n mapOutput(out) {\n if (out && typeof out === 'object') {\n return `Basic ${btoa(`${'username' in out ? out.username : ''}:${'password' in out ? out.password : ''}`)}`;\n }\n\n return out;\n },\n children: (\n <ObjectInput\n field={{\n type: 'object',\n properties: {\n username: {\n type: 'string',\n },\n password: {\n type: 'string',\n },\n },\n required: ['username', 'password'],\n }}\n fieldName={fieldName}\n />\n ),\n });\n } else if (security.type === 'oauth2') {\n const fieldName: FieldKey = ['header', 'Authorization'];\n\n result.push({\n fieldName,\n original: security,\n defaultValue: 'Bearer ',\n children: (\n <fieldset className=\"flex flex-col gap-2\">\n <label htmlFor={stringifyFieldKey(fieldName)} className={cn(labelVariants())}>\n Access Token\n </label>\n <div className=\"flex gap-2\">\n <FieldInput\n fieldName={fieldName}\n isRequired\n field={{\n type: 'string',\n }}\n className=\"flex-1\"\n />\n\n <OauthDialogTrigger\n type=\"button\"\n className={cn(\n buttonVariants({\n size: 'sm',\n color: 'secondary',\n }),\n )}\n >\n Authorize\n </OauthDialogTrigger>\n </div>\n </fieldset>\n ),\n });\n } else if (security.type === 'http') {\n const fieldName: FieldKey = ['header', 'Authorization'];\n\n result.push({\n fieldName,\n original: security,\n defaultValue: 'Bearer ',\n children: (\n <FieldSet\n name=\"Authorization (header)\"\n fieldName={fieldName}\n isRequired\n field={{\n type: 'string',\n }}\n />\n ),\n });\n } else if (security.type === 'apiKey') {\n const fieldName: FieldKey = [security.in!, security.name!];\n\n result.push({\n fieldName,\n defaultValue: '',\n original: security,\n children: (\n <FieldSet\n fieldName={fieldName}\n name={`${security.name} (${security.in})`}\n isRequired\n field={{\n type: 'string',\n }}\n />\n ),\n });\n } else {\n const fieldName: FieldKey = ['header', 'Authorization'];\n\n result.push({\n fieldName,\n defaultValue: '',\n original: security,\n children: (\n <>\n <FieldSet\n name=\"Authorization (header)\"\n isRequired\n fieldName={fieldName}\n field={{\n type: 'string',\n }}\n />\n <p className=\"text-fd-muted-foreground text-xs\">\n OpenID Connect is not supported at the moment, you can still set an access token\n here.\n </p>\n </>\n ),\n });\n }\n }\n\n return transform ? transform(result) : result;\n }, [securities, transform]);\n\n const mapInputs = (values: FormValues) => {\n const cloned = structuredClone(values);\n\n for (const item of inputs) {\n if (!item.mapOutput) continue;\n objectSet(cloned, item.fieldName, item.mapOutput(objectGet(cloned, item.fieldName)));\n }\n\n return cloned;\n };\n\n const initAuthValues = (stf: Stf) => {\n const { dataEngine } = stf;\n for (const item of inputs) {\n const stored = localStorage.getItem(storageKeys.AuthField(item));\n\n if (stored) {\n const parsed = JSON.parse(stored);\n if (typeof parsed === typeof item.defaultValue) {\n dataEngine.init(item.fieldName, parsed);\n continue;\n }\n }\n\n dataEngine.init(item.fieldName, item.defaultValue);\n }\n\n // reset\n return () => {\n for (const item of inputs) {\n stf.dataEngine.delete(item.fieldName);\n }\n };\n };\n\n return { inputs, mapInputs, initAuthValues };\n}\n\nfunction Route({ route, ...props }: ComponentProps<'div'> & { route: string }) {\n return (\n <div\n {...props}\n className={cn(\n 'flex flex-row items-center gap-0.5 overflow-auto text-nowrap',\n props.className,\n )}\n >\n {route.split('/').map((part, index) => (\n <Fragment key={index}>\n {index > 0 && <span className=\"text-fd-muted-foreground\">/</span>}\n {part.startsWith('{') && part.endsWith('}') ? (\n <code className=\"bg-fd-primary/10 text-fd-primary\">{part}</code>\n ) : (\n <code className=\"text-fd-foreground\">{part}</code>\n )}\n </Fragment>\n ))}\n </div>\n );\n}\n\nfunction DefaultResultDisplay({ data, reset }: { data: FetchResult; reset: () => void }) {\n const statusInfo = useMemo(() => getStatusInfo(data.status), [data.status]);\n const { shikiOptions } = useApiContext();\n\n return (\n <div className=\"flex flex-col gap-3 mt-2 px-3 py-2 border-y bg-fd-secondary text-fd-secondary-foreground\">\n <div className=\"flex justify-between items-center\">\n <div className=\"inline-flex items-center gap-1.5 text-sm font-medium\">\n <statusInfo.icon className={cn('size-4', statusInfo.color)} />\n {statusInfo.description}\n </div>\n <button\n type=\"button\"\n className={cn(buttonVariants({ size: 'sm', variant: 'outline' }))}\n onClick={() => reset()}\n >\n Close\n </button>\n </div>\n <p className=\"text-sm text-fd-muted-foreground\">{data.status}</p>\n {data.data !== undefined && (\n <DynamicCodeBlock\n lang={typeof data.data === 'string' && data.data.length > 50000 ? 'text' : data.type}\n code={typeof data.data === 'string' ? data.data : JSON.stringify(data.data, null, 2)}\n options={shikiOptions}\n />\n )}\n </div>\n );\n}\n\nfunction CollapsiblePanel({\n title,\n children,\n ...props\n}: Omit<ComponentProps<'div'>, 'title'> & {\n title: ReactNode;\n}) {\n return (\n <Collapsible {...props} className=\"border-b last:border-b-0\">\n <CollapsibleTrigger className=\"group w-full flex items-center gap-2 p-3 text-sm font-medium\">\n {title}\n <ChevronDown className=\"ms-auto size-3.5 text-fd-muted-foreground group-data-[state=open]:rotate-180\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"flex flex-col gap-3 p-3 pt-1\">{children}</div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\nexport const Custom = {\n useController(\n fieldName: FieldKey,\n options?: {\n defaultValue?: unknown;\n },\n ) {\n const [value, setValue] = useFieldValue(fieldName, options);\n return {\n value,\n setValue,\n };\n },\n};\n"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { cn } from "../../utils/cn.js";
4
4
  import { FormatFlags } from "../../utils/schema-to-string.js";
5
- import { anyFields, useFieldInfo, useSchemaScope, useSchemaUtils } from "../schema.js";
5
+ import { anyFields, useFieldInfo, useResolvedSchema, useSchemaScope, useSchemaUtils } from "../schema.js";
6
6
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../ui/components/select.js";
7
7
  import { Input, labelVariants } from "../../ui/components/input.js";
8
8
  import { useState } from "react";
@@ -23,8 +23,8 @@ function FieldLabelType(props) {
23
23
  });
24
24
  }
25
25
  function ObjectInput({ field: _field, fieldName, ...props }) {
26
- const { resolve, generateDefault } = useSchemaUtils();
27
- const field = resolve(_field);
26
+ const { generateDefault } = useSchemaUtils();
27
+ const field = useResolvedSchema(_field);
28
28
  const schemaPropKeys = field.properties ? Object.keys(field.properties) : [];
29
29
  const { patternProperties = {}, additionalProperties, "x-playground-lazy": isLazy = schemaPropKeys.length > 100 } = field;
30
30
  const isDynamic = Object.keys(patternProperties).length > 0 || additionalProperties;
@@ -212,8 +212,8 @@ function FieldInput({ field, fieldName, isRequired, ...props }) {
212
212
  }
213
213
  function FieldSet({ field: _field, fieldName, toolbar, name, isRequired, depth = 0, slotType, collapsible = true, ...props }) {
214
214
  const { readOnly, writeOnly } = useSchemaScope();
215
- const { resolve, generateDefault, schemaToString } = useSchemaUtils();
216
- const field = resolve(_field);
215
+ const { generateDefault, schemaToString } = useSchemaUtils();
216
+ const field = useResolvedSchema(_field);
217
217
  const [show, setShow] = useState(!collapsible);
218
218
  const { info, updateInfo } = useFieldInfo(fieldName, field, depth);
219
219
  const id = stringifyFieldKey(fieldName);
@@ -315,27 +315,24 @@ function FieldSet({ field: _field, fieldName, toolbar, name, isRequired, depth =
315
315
  }), toolbar] })
316
316
  });
317
317
  }
318
- if (field.type === "object" || info.intersection) {
319
- const schema = info.intersection?.merged ?? field;
320
- return /* @__PURE__ */ jsxs("fieldset", {
321
- ...props,
322
- "data-collapsible": collapsible,
323
- className: cn("flex flex-col gap-1.5 col-span-full @container", props.className),
324
- children: [/* @__PURE__ */ jsxs("div", {
325
- className: fieldLabelVariants(),
326
- children: [
327
- renderLabelTrigger(schema),
328
- slotType ?? /* @__PURE__ */ jsx(FieldLabelType, { children: schemaToString(field) }),
329
- toolbar,
330
- !isRequired && isDefined && renderUnsetButton()
331
- ]
332
- }), show && /* @__PURE__ */ jsx(ObjectInput, {
333
- field: schema,
334
- fieldName,
335
- className: "rounded-lg border border-fd-primary/20 bg-fd-background/50 p-2 shadow-sm"
336
- })]
337
- });
338
- }
318
+ if (field.type === "object") return /* @__PURE__ */ jsxs("fieldset", {
319
+ ...props,
320
+ "data-collapsible": collapsible,
321
+ className: cn("flex flex-col gap-1.5 col-span-full @container", props.className),
322
+ children: [/* @__PURE__ */ jsxs("div", {
323
+ className: fieldLabelVariants(),
324
+ children: [
325
+ renderLabelTrigger(field),
326
+ slotType ?? /* @__PURE__ */ jsx(FieldLabelType, { children: schemaToString(field) }),
327
+ toolbar,
328
+ !isRequired && isDefined && renderUnsetButton()
329
+ ]
330
+ }), show && /* @__PURE__ */ jsx(ObjectInput, {
331
+ field,
332
+ fieldName,
333
+ className: "rounded-lg border border-fd-primary/20 bg-fd-background/50 p-2 shadow-sm"
334
+ })]
335
+ });
339
336
  if (field.type === "array") return /* @__PURE__ */ jsxs("fieldset", {
340
337
  ...props,
341
338
  "data-collapsible": collapsible,
@@ -419,4 +416,5 @@ function ArrayInput({ fieldName, items: itemSchema, ...props }) {
419
416
  }
420
417
 
421
418
  //#endregion
422
- export { FieldInput, FieldSet, JsonInput, ObjectInput };
419
+ export { FieldInput, FieldSet, JsonInput, ObjectInput };
420
+ //# sourceMappingURL=inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.js","names":[],"sources":["../../../src/playground/components/inputs.tsx"],"sourcesContent":["'use client';\nimport { type ComponentProps, type HTMLAttributes, type ReactNode, useState } from 'react';\nimport { ChevronRight, Plus, Trash2, X } from 'lucide-react';\nimport { FieldKey, useArray, useDataEngine, useFieldValue, useObject } from '@fumari/stf';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\nimport { Input, labelVariants } from '@/ui/components/input';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from 'fumadocs-ui/components/ui/button';\nimport { FormatFlags } from '@/utils/schema-to-string';\nimport {\n anyFields,\n useFieldInfo,\n useSchemaUtils,\n useSchemaScope,\n useResolvedSchema,\n} from '@/playground/schema';\nimport type { ParsedSchema } from '@/utils/schema';\nimport { stringifyFieldKey } from '@fumari/stf/lib/utils';\nimport { cva } from 'class-variance-authority';\n\nconst fieldLabelVariants = cva('w-full inline-flex items-center gap-0.5');\n\nfunction FieldLabelType(props: ComponentProps<'code'>) {\n return (\n <code {...props} className={cn('text-xs text-fd-muted-foreground', props.className)}>\n {props.children}\n </code>\n );\n}\n\nexport function ObjectInput({\n field: _field,\n fieldName,\n ...props\n}: {\n field: Exclude<ParsedSchema, boolean>;\n fieldName: FieldKey;\n} & ComponentProps<'div'>) {\n const { generateDefault } = useSchemaUtils();\n const field = useResolvedSchema(_field);\n const schemaPropKeys = field.properties ? Object.keys(field.properties) : [];\n const {\n patternProperties = {},\n additionalProperties,\n 'x-playground-lazy': isLazy = schemaPropKeys.length > 100,\n } = field;\n const isDynamic = Object.keys(patternProperties).length > 0 || additionalProperties;\n\n const [nextName, setNextName] = useState('');\n const { properties, onAppend, onDelete, _objectKeys } = useObject(fieldName, {\n lazy: isLazy,\n defaultValue: () => generateDefault(field) as object,\n properties: field.properties ?? {},\n fallback: additionalProperties,\n patternProperties: patternProperties,\n });\n\n const hiddenProperties = isLazy ? schemaPropKeys.filter((key) => !_objectKeys.includes(key)) : [];\n\n return (\n <div\n {...props}\n className={cn(\n 'grid grid-cols-1 gap-4 @md:grid-cols-2 *:data-[collapsible=true]:order-last',\n props.className,\n )}\n >\n {isLazy && hiddenProperties.length > 0 && (\n <Select value=\"\" onValueChange={onAppend}>\n <SelectTrigger className=\"col-span-full\">\n <SelectValue placeholder=\"Show Property\" />\n </SelectTrigger>\n <SelectContent>\n {hiddenProperties.map((key) => (\n <SelectItem key={key} value={key}>\n {key}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n\n {properties.map((child) => {\n let toolbar: ReactNode = null;\n if (child.kind === 'pattern' || child.kind === 'fallback') {\n toolbar = (\n <button\n type=\"button\"\n aria-label=\"Remove Item\"\n className={cn(\n buttonVariants({\n color: 'outline',\n size: 'icon-xs',\n }),\n )}\n onClick={() => {\n onDelete(child.key);\n }}\n >\n <Trash2 />\n </button>\n );\n }\n\n return (\n <FieldSet\n key={child.key}\n name={child.key}\n field={child.info}\n fieldName={child.field}\n isRequired={field.required?.includes(child.key)}\n toolbar={toolbar}\n />\n );\n })}\n {isDynamic && (\n <div className=\"flex gap-2 order-last col-span-full\">\n <Input\n value={nextName}\n placeholder=\"Enter Property Name\"\n onChange={(e) => setNextName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n setNextName('');\n onAppend(nextName);\n e.preventDefault();\n }\n }}\n />\n <button\n type=\"button\"\n className={cn(buttonVariants({ color: 'secondary', size: 'sm' }), 'px-4')}\n onClick={() => {\n onAppend(nextName);\n setNextName('');\n }}\n >\n New\n </button>\n </div>\n )}\n </div>\n );\n}\n\nexport function JsonInput({ fieldName }: { fieldName: FieldKey }) {\n const engine = useDataEngine();\n const [error, setError] = useState<string | null>(null);\n const [value, setValue] = useState(() => JSON.stringify(engine.init(fieldName, {}), null, 2));\n\n return (\n <div className=\"flex flex-col bg-fd-secondary text-fd-secondary-foreground overflow-hidden border rounded-lg\">\n <textarea\n value={value}\n className=\"p-2 h-[240px] text-sm font-mono resize-none focus-visible:outline-none\"\n onChange={(v) => {\n setValue(v.target.value);\n try {\n engine.update(fieldName, JSON.parse(v.target.value));\n setError(null);\n } catch (e) {\n if (e instanceof Error) setError(e.message);\n }\n }}\n />\n <p className=\"p-2 text-xs font-mono border-t text-red-400 empty:hidden\">{error}</p>\n </div>\n );\n}\n\nexport function FieldInput({\n field,\n fieldName,\n isRequired,\n ...props\n}: HTMLAttributes<HTMLElement> & {\n field: Exclude<ParsedSchema, boolean>;\n isRequired?: boolean;\n fieldName: FieldKey;\n}) {\n const [value, setValue] = useFieldValue(fieldName);\n const id = stringifyFieldKey(fieldName);\n if (field.type === 'null') return;\n\n if (field.type === 'string' && field.format === 'binary') {\n return (\n <>\n <label\n htmlFor={id}\n className={cn(\n buttonVariants({\n color: 'secondary',\n className: 'w-full h-9 gap-2 truncate',\n }),\n )}\n >\n {value instanceof File ? (\n <>\n <span className=\"text-fd-muted-foreground text-xs\">Selected</span>\n <span className=\"truncate w-0 flex-1 text-end\">{value.name}</span>\n </>\n ) : (\n <span className=\"text-fd-muted-foreground\">Upload</span>\n )}\n </label>\n <input\n id={id}\n type=\"file\"\n multiple={false}\n onChange={(e) => {\n if (!e.target.files || e.target.files.length === 0) return;\n setValue(e.target.files.item(0));\n }}\n hidden\n />\n </>\n );\n }\n\n if (field.enum && field.enum.length > 0) {\n const idx = field.enum.indexOf(value);\n\n return (\n <Select\n value={idx === -1 && isRequired ? '' : String(idx)}\n onValueChange={(v) => setValue(field.enum![Number(v)])}\n >\n <SelectTrigger id={id} {...props}>\n <SelectValue placeholder=\"Select\" />\n </SelectTrigger>\n <SelectContent>\n {field.enum.map((item, i) => (\n <SelectItem key={i} value={String(i)}>\n {typeof item === 'string' ? item : JSON.stringify(item, null, 2)}\n </SelectItem>\n ))}\n {!isRequired && <SelectItem value=\"-1\">Unset</SelectItem>}\n </SelectContent>\n </Select>\n );\n }\n\n if (field.type === 'boolean') {\n return (\n <Select\n value={String(value)}\n onValueChange={(value) => setValue(value === 'undefined' ? undefined : value === 'true')}\n >\n <SelectTrigger id={id} {...props}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">True</SelectItem>\n <SelectItem value=\"false\">False</SelectItem>\n {!isRequired && <SelectItem value=\"undefined\">Unset</SelectItem>}\n </SelectContent>\n </Select>\n );\n }\n\n const isNumber = field.type === 'integer' || field.type === 'number';\n return (\n <Input\n id={id}\n placeholder=\"Enter value\"\n type={isNumber ? 'number' : 'text'}\n step={field.type === 'integer' ? 1 : undefined}\n value={String(value ?? '')}\n onChange={(e) => {\n if (isNumber) {\n setValue(Number.isNaN(e.target.valueAsNumber) ? undefined : e.target.valueAsNumber);\n } else if (!isNumber) {\n setValue(e.target.value);\n }\n }}\n />\n );\n}\n\nexport function FieldSet({\n field: _field,\n fieldName,\n toolbar,\n name,\n isRequired,\n depth = 0,\n slotType,\n collapsible = true,\n ...props\n}: HTMLAttributes<HTMLElement> & {\n isRequired?: boolean;\n name?: ReactNode;\n field: ParsedSchema;\n fieldName: FieldKey;\n depth?: number;\n\n slotType?: ReactNode;\n toolbar?: ReactNode;\n collapsible?: boolean;\n}) {\n const { readOnly, writeOnly } = useSchemaScope();\n const { generateDefault, schemaToString } = useSchemaUtils();\n const field = useResolvedSchema(_field);\n const [show, setShow] = useState(!collapsible);\n const { info, updateInfo } = useFieldInfo(fieldName, field, depth);\n const id = stringifyFieldKey(fieldName);\n const dataEngine = useDataEngine();\n const [isDefined] = useFieldValue(fieldName, {\n compute(currentValue) {\n return currentValue !== undefined;\n },\n });\n\n if (_field === false) return;\n if (field.readOnly && !readOnly) return;\n if (field.writeOnly && !writeOnly) return;\n\n if (collapsible && !isDefined && show) setShow(false);\n\n function renderLabelTrigger(schema = field) {\n if (!collapsible) return renderLabelName();\n\n return (\n <button\n type=\"button\"\n className={cn(labelVariants(), 'inline-flex items-center gap-1 font-mono me-auto')}\n onClick={() => {\n dataEngine.init(fieldName, generateDefault(schema));\n setShow((prev) => !prev);\n }}\n >\n <ChevronRight className={cn('size-3.5 text-fd-muted-foreground', show && 'rotate-90')} />\n {name}\n {isRequired && <span className=\"text-red-400/80\">*</span>}\n </button>\n );\n }\n\n function renderLabelName() {\n return (\n <span className={cn(labelVariants(), 'font-mono me-auto')}>\n {name}\n {isRequired && <span className=\"text-red-400/80 mx-1\">*</span>}\n </span>\n );\n }\n\n function renderUnsetButton() {\n return (\n <button\n type=\"button\"\n onClick={() => dataEngine.delete(fieldName)}\n className=\"text-fd-muted-foreground hover:text-fd-accent-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n );\n }\n\n if (info.unionField && field[info.unionField]) {\n const union = field[info.unionField]!;\n const showSelect = union.length > 1;\n\n return (\n <FieldSet\n {...props}\n name={name}\n fieldName={fieldName}\n isRequired={isRequired}\n field={union[info.oneOf]}\n depth={depth + 1}\n slotType={showSelect ? false : slotType}\n collapsible={collapsible}\n toolbar={\n <>\n {showSelect && (\n <select\n className=\"text-xs font-mono\"\n value={info.oneOf}\n onChange={(e) => {\n updateInfo({\n oneOf: Number(e.target.value),\n });\n }}\n >\n {union.map((item, i) => (\n <option key={i} value={i} className=\"bg-fd-popover text-fd-popover-foreground\">\n {schemaToString(item, FormatFlags.UseAlias)}\n </option>\n ))}\n </select>\n )}\n {toolbar}\n </>\n }\n />\n );\n }\n\n if (Array.isArray(field.type)) {\n const showSelect = field.type.length > 1;\n\n return (\n <FieldSet\n {...props}\n name={name}\n fieldName={fieldName}\n isRequired={isRequired}\n field={{\n ...field,\n type: info.selectedType,\n }}\n collapsible={collapsible}\n depth={depth + 1}\n slotType={showSelect ? false : slotType}\n toolbar={\n <>\n {showSelect && (\n <select\n className=\"text-xs font-mono\"\n value={info.selectedType}\n onChange={(e) => {\n updateInfo({\n selectedType: e.target.value,\n });\n }}\n >\n {field.type.map((item) => (\n <option\n key={item}\n value={item}\n className=\"bg-fd-popover text-fd-popover-foreground\"\n >\n {item}\n </option>\n ))}\n </select>\n )}\n {toolbar}\n </>\n }\n />\n );\n }\n\n if (field.type === 'object') {\n return (\n <fieldset\n {...props}\n data-collapsible={collapsible}\n className={cn('flex flex-col gap-1.5 col-span-full @container', props.className)}\n >\n <div className={fieldLabelVariants()}>\n {renderLabelTrigger(field)}\n {slotType ?? <FieldLabelType>{schemaToString(field)}</FieldLabelType>}\n {toolbar}\n {!isRequired && isDefined && renderUnsetButton()}\n </div>\n {show && (\n <ObjectInput\n field={field}\n fieldName={fieldName}\n className=\"rounded-lg border border-fd-primary/20 bg-fd-background/50 p-2 shadow-sm\"\n />\n )}\n </fieldset>\n );\n }\n\n if (field.type === 'array') {\n return (\n <fieldset\n {...props}\n data-collapsible={collapsible}\n className={cn('flex flex-col gap-1.5 col-span-full', props.className)}\n >\n <div className={fieldLabelVariants()}>\n {renderLabelTrigger()}\n {slotType ?? <FieldLabelType>{schemaToString(field)}</FieldLabelType>}\n {toolbar}\n {!isRequired && isDefined && renderUnsetButton()}\n </div>\n {show && (\n <ArrayInput\n fieldName={fieldName}\n items={field.items ?? anyFields}\n className=\"rounded-lg border border-fd-primary/20 bg-fd-background/50 p-2 shadow-sm\"\n />\n )}\n </fieldset>\n );\n }\n\n return (\n <fieldset {...props} className={cn('flex flex-col gap-1.5', props.className)}>\n <label className={fieldLabelVariants()} htmlFor={id}>\n {renderLabelName()}\n {slotType ?? <FieldLabelType>{schemaToString(field)}</FieldLabelType>}\n {toolbar}\n {!isRequired && isDefined && renderUnsetButton()}\n </label>\n <FieldInput field={field} fieldName={fieldName} isRequired={isRequired} />\n </fieldset>\n );\n}\n\nfunction ArrayInput({\n fieldName,\n items: itemSchema,\n ...props\n}: {\n fieldName: FieldKey;\n items: ParsedSchema;\n} & ComponentProps<'div'>) {\n const name = fieldName.at(-1) ?? '';\n const { generateDefault } = useSchemaUtils();\n const { items, insertItem, removeItem } = useArray(fieldName);\n\n return (\n <div {...props} className={cn('flex flex-col gap-2', props.className)}>\n {items.map((item) => (\n <FieldSet\n key={item.index}\n name={\n <span className=\"text-fd-muted-foreground\">\n {name}[{item.index}]\n </span>\n }\n field={itemSchema}\n isRequired\n fieldName={item.field}\n toolbar={\n <button\n type=\"button\"\n aria-label=\"Remove Item\"\n className={cn(\n buttonVariants({\n color: 'outline',\n size: 'icon-xs',\n }),\n )}\n onClick={() => removeItem(item.index)}\n >\n <Trash2 />\n </button>\n }\n />\n ))}\n <button\n type=\"button\"\n className={cn(\n buttonVariants({\n color: 'secondary',\n className: 'gap-1.5 py-2',\n size: 'sm',\n }),\n )}\n onClick={() => {\n insertItem(generateDefault(itemSchema));\n }}\n >\n <Plus className=\"size-4\" />\n New Item\n </button>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -281,4 +281,5 @@ function OauthDialog({ scheme, scopes, setToken, children, open, setOpen }) {
281
281
  const OauthDialogTrigger = DialogTrigger;
282
282
 
283
283
  //#endregion
284
- export { OauthDialog, OauthDialogTrigger };
284
+ export { OauthDialog, OauthDialogTrigger };
285
+ //# sourceMappingURL=oauth-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-dialog.js","names":[],"sources":["../../../src/playground/components/oauth-dialog.tsx"],"sourcesContent":["import {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@/ui/components/dialog';\nimport { useForm } from 'react-hook-form';\nimport { Input, labelVariants } from '@/ui/components/input';\nimport { useQuery } from '@/utils/use-query';\nimport { type ReactNode, useEffect, useState } from 'react';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from 'fumadocs-ui/components/ui/button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\nimport type { OAuth2SecurityScheme } from '@/types';\n\ntype FlowType = keyof NonNullable<OAuth2SecurityScheme['flows']>;\n\nexport interface AuthDialogProps {\n scheme: OAuth2SecurityScheme;\n scopes: string[];\n\n open: boolean;\n setOpen: (v: boolean) => void;\n setToken: (token: string) => void;\n children: ReactNode;\n}\n\ninterface FormValues {\n clientId: string;\n clientSecret: string;\n username: string;\n password: string;\n}\n\ninterface AuthCodeState {\n redirect_uri: string;\n client_id: string;\n client_secret: string;\n}\n\ninterface ImplicitState {\n redirect_uri: string;\n client_id: string;\n}\n\nconst FlowTypes = {\n password: {\n name: 'Resource Owner Password Flow',\n description: 'Authenticate using username and password.',\n supported: true,\n },\n clientCredentials: {\n name: 'Client Credentials',\n description: 'Intended for the server-to-server authentication.',\n supported: true,\n },\n authorizationCode: {\n name: 'Authorization code',\n description: 'Authenticate with 3rd party services',\n supported: true,\n },\n implicit: {\n name: 'Implicit',\n description: 'Retrieve the access token directly.',\n supported: true,\n },\n deviceAuthorization: {\n name: 'Device Authorization',\n description: 'Authenticate with device.',\n supported: false,\n },\n} as const;\n\nexport function OauthDialog({\n scheme,\n scopes,\n setToken,\n children,\n open,\n setOpen,\n}: AuthDialogProps) {\n const [type, setType] = useState(() => {\n return Object.keys(scheme.flows!)[0] as FlowType;\n });\n const { supported } = FlowTypes[type];\n const form = useForm<FormValues>({\n defaultValues: {\n clientId: '',\n clientSecret: '',\n username: '',\n password: '',\n },\n });\n\n const authCodeCallback = useQuery(async (code: string, state: AuthCodeState) => {\n const value = scheme.flows!.authorizationCode!;\n\n const res = await fetch(value.tokenUrl!, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'authorization_code',\n code,\n // note: `state` could be invalid, but server will check it\n redirect_uri: state.redirect_uri,\n client_id: state.client_id,\n client_secret: state.client_secret,\n }),\n });\n\n if (!res.ok) throw new Error(await res.text());\n const { access_token, token_type = 'Bearer' } = (await res.json()) as {\n access_token: string;\n token_type?: string;\n };\n\n setToken(`${token_type} ${access_token}`);\n setOpen(false);\n });\n\n useEffect(() => {\n if (scheme.flows!.authorizationCode) {\n const params = new URLSearchParams(window.location.search);\n const state = params.get('state');\n const code = params.get('code');\n\n if (state && code) {\n const parsedState = JSON.parse(state) as AuthCodeState;\n setOpen(true);\n\n form.setValue('clientId', parsedState.client_id);\n form.setValue('clientSecret', parsedState.client_secret);\n authCodeCallback.start(code, parsedState);\n window.history.replaceState(null, '', window.location.pathname);\n return;\n }\n }\n\n if (scheme.flows!.implicit && window.location.hash.length > 1) {\n const params = new URLSearchParams(window.location.hash.slice(1));\n const state = params.get('state');\n const token = params.get('access_token');\n const type = params.get('token_type') ?? 'Bearer';\n\n if (state && token) {\n const parsedState = JSON.parse(state) as ImplicitState;\n\n form.setValue('clientId', parsedState.client_id);\n setToken(`${type} ${token}`);\n window.history.replaceState(null, '', window.location.pathname);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- first page load only\n }, []);\n\n const authorize = useQuery(async (values: FormValues) => {\n if (type === 'implicit') {\n const value = scheme.flows![type]!;\n\n const params = new URLSearchParams();\n params.set('response_type', 'token');\n params.set('client_id', values.clientId);\n params.set('redirect_uri', window.location.href);\n params.set('scope', scopes.join('+'));\n params.set(\n 'state',\n JSON.stringify({\n client_id: values.clientId,\n redirect_uri: window.location.href,\n } satisfies ImplicitState),\n );\n\n window.location.replace(`${value.authorizationUrl}?${params.toString()}`);\n return;\n }\n if (type === 'authorizationCode') {\n const value = scheme.flows![type]!;\n\n const params = new URLSearchParams();\n params.set('response_type', 'code');\n params.set('client_id', values.clientId);\n params.set('redirect_uri', window.location.href);\n params.set('scope', scopes.join('+'));\n params.set(\n 'state',\n JSON.stringify({\n client_id: values.clientId,\n client_secret: values.clientSecret,\n redirect_uri: window.location.href,\n } satisfies AuthCodeState),\n );\n\n window.location.replace(`${value.authorizationUrl}?${params.toString()}`);\n return;\n }\n\n let res;\n if (type === 'password') {\n const value = scheme.flows![type]!;\n\n res = await fetch(value.tokenUrl!, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'password',\n username: values.username,\n password: values.password,\n scope: scopes.join('+'),\n }),\n });\n }\n\n if (type === 'clientCredentials') {\n const value = scheme.flows![type]!;\n\n res = await fetch(value.tokenUrl!, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n client_id: values.clientId,\n client_secret: values.clientSecret,\n scope: scopes.join('+'),\n }),\n });\n }\n\n if (res) {\n if (!res.ok) throw new Error(await res.text());\n\n const { access_token, token_type = 'Bearer' } = (await res.json()) as {\n access_token: string;\n token_type?: string;\n };\n\n setToken(`${token_type} ${access_token}`);\n setOpen(false);\n }\n });\n\n const onSubmit = form.handleSubmit((values) => {\n return authorize.start(values);\n });\n\n const isLoading = authorize.isLoading || authCodeCallback.isLoading;\n const error = authCodeCallback.error ?? authorize.error;\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n {children}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Authorization</DialogTitle>\n <DialogDescription>Obtain the access token for API.</DialogDescription>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-6\"\n onSubmit={(e) => {\n void onSubmit(e);\n e.stopPropagation();\n }}\n >\n <Select value={type} onValueChange={setType as (s: string) => void}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {Object.keys(scheme.flows!).map((key) => {\n const { name, description } = FlowTypes[key as FlowType];\n\n return (\n <SelectItem key={key} value={key}>\n <p className=\"font-medium\">{name}</p>\n <p className=\"text-fd-muted-foreground\">{description}</p>\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n\n {(type === 'authorizationCode' ||\n type === 'clientCredentials' ||\n type === 'implicit') && (\n <fieldset className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"client_id\" className={cn(labelVariants())}>\n Client ID\n </label>\n <p className=\"text-fd-muted-foreground text-sm\">\n The client ID of your OAuth application.\n </p>\n <Input\n id=\"client_id\"\n placeholder=\"Enter value\"\n type=\"text\"\n autoComplete=\"off\"\n disabled={isLoading}\n {...form.register('clientId', { required: true })}\n />\n </fieldset>\n )}\n {(type === 'authorizationCode' || type === 'clientCredentials') && (\n <fieldset className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"client_secret\" className={cn(labelVariants())}>\n Client Secret\n </label>\n <p className=\"text-fd-muted-foreground text-sm\">\n The client secret of your OAuth application.\n </p>\n <Input\n id=\"client_secret\"\n placeholder=\"Enter value\"\n type=\"password\"\n autoComplete=\"off\"\n disabled={isLoading}\n {...form.register('clientSecret', { required: true })}\n />\n </fieldset>\n )}\n {type === 'password' && (\n <>\n <fieldset className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"username\" className={cn(labelVariants())}>\n Username\n </label>\n <Input\n id=\"username\"\n placeholder=\"Enter value\"\n type=\"text\"\n disabled={isLoading}\n autoComplete=\"off\"\n {...form.register('username', { required: true })}\n />\n </fieldset>\n <fieldset className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"password\" className={cn(labelVariants())}>\n Client Secret\n </label>\n <Input\n id=\"password\"\n placeholder=\"Enter value\"\n type=\"password\"\n autoComplete=\"off\"\n disabled={isLoading}\n {...form.register('password', { required: true })}\n />\n </fieldset>\n </>\n )}\n {supported ? (\n <>\n {error ? <p className=\"text-red-400 font-medium text-sm\">{String(error)}</p> : null}\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(\n buttonVariants({\n color: 'primary',\n }),\n )}\n >\n {authCodeCallback.isLoading ? 'Fetching token...' : 'Submit'}\n </button>\n </>\n ) : (\n <p className=\"text-fd-muted-foreground bg-fd-muted p-2 rounded-lg border\">\n Unsupported\n </p>\n )}\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport const OauthDialogTrigger = DialogTrigger;\n"],"mappings":"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"}
@@ -124,4 +124,5 @@ function Field({ fieldName, variable }) {
124
124
  }
125
125
 
126
126
  //#endregion
127
- export { ServerSelect as default };
127
+ export { ServerSelect as default };
128
+ //# sourceMappingURL=server-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-select.js","names":[],"sources":["../../../src/playground/components/server-select.tsx"],"sourcesContent":["'use client';\nimport { useServerContext, useServerSelectContext } from '@/ui/contexts/api';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\nimport { Input, labelVariants } from '@/ui/components/input';\nimport { useEffect, useState, useRef, type ComponentProps } from 'react';\nimport { cn } from '@/utils/cn';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@/ui/components/dialog';\nimport { resolveServerUrl, withBase } from '@/utils/url';\nimport type { ServerVariableObject } from '@/types';\nimport type { NoReference } from '@/utils/schema';\nimport { StfProvider, useFieldValue, useListener, useStf } from '@fumari/stf';\nimport { EditIcon } from 'lucide-react';\n\nexport default function ServerSelect(props: ComponentProps<typeof DialogTrigger>) {\n const { servers } = useServerContext();\n const { server, setServer, setServerVariables } = useServerSelectContext();\n const [open, setOpen] = useState(false);\n const [isMounted, setIsMounted] = useState(false);\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n if (servers.length <= 0) return;\n const serverSchema = server ? servers.find((obj) => obj.url === server.url) : null;\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger\n {...props}\n className={cn(\n 'flex items-center gap-2 text-sm text-start px-3 py-2 bg-fd-muted text-fd-muted-foreground transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground',\n props.className,\n )}\n >\n <span className=\"px-2 py-0.5 -ms-2 font-medium rounded-lg border bg-fd-secondary text-fd-secondary-foreground shadow-sm\">\n {server?.name ?? 'Server URL'}\n </span>\n <code className=\"truncate min-w-0 flex-1\">\n {isMounted\n ? withBase(\n server ? resolveServerUrl(server.url, server.variables) : '/',\n window.location.origin,\n )\n : 'loading...'}\n </code>\n <EditIcon className=\"size-4\" />\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Server URL</DialogTitle>\n <DialogDescription>The base URL of your API endpoint.</DialogDescription>\n </DialogHeader>\n <Select value={server?.url} onValueChange={setServer}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {servers.map((item) => (\n <SelectItem key={item.url} value={item.url!}>\n <code className=\"text-[0.8125rem]\">{item.url}</code>\n <p className=\"text-fd-muted-foreground\">{item.description}</p>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {server?.variables && serverSchema?.variables && (\n <ServerSelectContent\n key={server.url}\n defaultValues={server.variables}\n schema={serverSchema.variables}\n onChange={setServerVariables}\n />\n )}\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction ServerSelectContent({\n defaultValues,\n onChange,\n schema,\n}: {\n defaultValues: Record<string, string>;\n onChange: (values: Record<string, string>) => void;\n schema: Record<string, NoReference<ServerVariableObject>>;\n}) {\n const stf = useStf({\n defaultValues: () => structuredClone(defaultValues),\n });\n const timerRef = useRef<number | null>(null);\n useListener({\n stf,\n onUpdate() {\n if (timerRef.current !== null) window.clearTimeout(timerRef.current);\n\n timerRef.current = window.setTimeout(\n () => onChange(stf.dataEngine.getData() as Record<string, string>),\n 500,\n );\n },\n });\n\n return (\n <StfProvider value={stf}>\n <div className=\"flex flex-col gap-4\">\n {Object.entries(schema).map(([key, variable]) => {\n return (\n <fieldset key={key} className=\"flex flex-col gap-1\">\n <label className={cn(labelVariants())} htmlFor={key}>\n {key}\n </label>\n <p className=\"text-xs text-fd-muted-foreground empty:hidden\">\n {variable.description}\n </p>\n <Field fieldName={key} variable={variable} />\n </fieldset>\n );\n })}\n </div>\n </StfProvider>\n );\n}\n\nfunction Field({\n fieldName,\n variable,\n}: {\n variable: NoReference<ServerVariableObject>;\n fieldName: string;\n}) {\n const [value, setValue] = useFieldValue([fieldName], {\n compute(currentValue) {\n return typeof currentValue === 'string' ? currentValue : undefined;\n },\n });\n\n if (variable.enum) {\n return (\n <Select value={value} onValueChange={setValue}>\n <SelectTrigger id={fieldName}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {variable.enum.map((value) => (\n <SelectItem key={value} value={String(value)}>\n {value}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n\n return (\n <Input\n id={fieldName}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Enter Value\"\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AA0BA,SAAwB,aAAa,OAA6C;CAChF,MAAM,EAAE,YAAY,kBAAkB;CACtC,MAAM,EAAE,QAAQ,WAAW,uBAAuB,wBAAwB;CAC1E,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;AAEjD,iBAAgB;AACd,eAAa,KAAK;IACjB,EAAE,CAAC;AAEN,KAAI,QAAQ,UAAU,EAAG;CACzB,MAAM,eAAe,SAAS,QAAQ,MAAM,QAAQ,IAAI,QAAQ,OAAO,IAAI,GAAG;AAE9E,QACE,qBAAC;EAAa;EAAM,cAAc;aAChC,qBAAC;GACC,GAAI;GACJ,WAAW,GACT,kKACA,MAAM,UACP;;IAED,oBAAC;KAAK,WAAU;eACb,QAAQ,QAAQ;MACZ;IACP,oBAAC;KAAK,WAAU;eACb,YACG,SACE,SAAS,iBAAiB,OAAO,KAAK,OAAO,UAAU,GAAG,KAC1D,OAAO,SAAS,OACjB,GACD;MACC;IACP,oBAAC,YAAS,WAAU,WAAW;;IACjB,EAChB,qBAAC;GACC,qBAAC,2BACC,oBAAC,yBAAY,eAAwB,EACrC,oBAAC,+BAAkB,uCAAsD,IAC5D;GACf,qBAAC;IAAO,OAAO,QAAQ;IAAK,eAAe;eACzC,oBAAC,2BACC,oBAAC,gBAAc,GACD,EAChB,oBAAC,2BACE,QAAQ,KAAK,SACZ,qBAAC;KAA0B,OAAO,KAAK;gBACrC,oBAAC;MAAK,WAAU;gBAAoB,KAAK;OAAW,EACpD,oBAAC;MAAE,WAAU;gBAA4B,KAAK;OAAgB;OAF/C,KAAK,IAGT,CACb,GACY;KACT;GACR,QAAQ,aAAa,cAAc,aAClC,oBAAC;IAEC,eAAe,OAAO;IACtB,QAAQ,aAAa;IACrB,UAAU;MAHL,OAAO,IAIZ;MAEU;GACT;;AAIb,SAAS,oBAAoB,EAC3B,eACA,UACA,UAKC;CACD,MAAM,MAAM,OAAO,EACjB,qBAAqB,gBAAgB,cAAc,EACpD,CAAC;CACF,MAAM,WAAW,OAAsB,KAAK;AAC5C,aAAY;EACV;EACA,WAAW;AACT,OAAI,SAAS,YAAY,KAAM,QAAO,aAAa,SAAS,QAAQ;AAEpE,YAAS,UAAU,OAAO,iBAClB,SAAS,IAAI,WAAW,SAAS,CAA2B,EAClE,IACD;;EAEJ,CAAC;AAEF,QACE,oBAAC;EAAY,OAAO;YAClB,oBAAC;GAAI,WAAU;aACZ,OAAO,QAAQ,OAAO,CAAC,KAAK,CAAC,KAAK,cAAc;AAC/C,WACE,qBAAC;KAAmB,WAAU;;MAC5B,oBAAC;OAAM,WAAW,GAAG,eAAe,CAAC;OAAE,SAAS;iBAC7C;QACK;MACR,oBAAC;OAAE,WAAU;iBACV,SAAS;QACR;MACJ,oBAAC;OAAM,WAAW;OAAe;QAAY;;OAPhC,IAQJ;KAEb;IACE;GACM;;AAIlB,SAAS,MAAM,EACb,WACA,YAIC;CACD,MAAM,CAAC,OAAO,YAAY,cAAc,CAAC,UAAU,EAAE,EACnD,QAAQ,cAAc;AACpB,SAAO,OAAO,iBAAiB,WAAW,eAAe;IAE5D,CAAC;AAEF,KAAI,SAAS,KACX,QACE,qBAAC;EAAc;EAAO,eAAe;aACnC,oBAAC;GAAc,IAAI;aACjB,oBAAC,gBAAc;IACD,EAChB,oBAAC,2BACE,SAAS,KAAK,KAAK,UAClB,oBAAC;GAAuB,OAAO,OAAO,MAAM;aACzC;KADc,MAEJ,CACb,GACY;GACT;AAIb,QACE,oBAAC;EACC,IAAI;EACG;EACP,WAAW,MAAM,SAAS,EAAE,OAAO,MAAM;EACzC,aAAY;GACZ"}
@@ -7,4 +7,5 @@ interface FetchResult {
7
7
  data: unknown;
8
8
  }
9
9
  //#endregion
10
- export { FetchResult };
10
+ export { FetchResult };
11
+ //# sourceMappingURL=fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher.d.ts","names":[],"sources":["../../src/playground/fetcher.ts"],"mappings":";;;UAQiB,WAAA;EACf,MAAA;EACA,IAAA;EACA,IAAA;AAAA"}
@@ -64,4 +64,5 @@ function createBrowserFetcher(adapters, requestTimeout) {
64
64
  }
65
65
 
66
66
  //#endregion
67
- export { createBrowserFetcher };
67
+ export { createBrowserFetcher };
68
+ //# sourceMappingURL=fetcher.js.map