zudoku 0.28.0 → 0.28.1

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 (75) hide show
  1. package/dist/app/main.js +1 -2
  2. package/dist/app/main.js.map +1 -1
  3. package/dist/config/validators/InputSidebarSchema.d.ts +2 -2
  4. package/dist/lib/components/PathRenderer.d.ts +11 -0
  5. package/dist/lib/components/PathRenderer.js +25 -0
  6. package/dist/lib/components/PathRenderer.js.map +1 -0
  7. package/dist/lib/components/ThemeSwitch.js +4 -4
  8. package/dist/lib/components/ThemeSwitch.js.map +1 -1
  9. package/dist/lib/components/index.d.ts +1 -0
  10. package/dist/lib/components/index.js +4 -2
  11. package/dist/lib/components/index.js.map +1 -1
  12. package/dist/lib/components/navigation/SidebarCategory.js +16 -14
  13. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  14. package/dist/lib/oas/graphql/circular.js +17 -6
  15. package/dist/lib/oas/graphql/circular.js.map +1 -1
  16. package/dist/lib/plugins/openapi/ColorizedParam.js +3 -1
  17. package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
  18. package/dist/lib/plugins/openapi/OperationListItem.js +1 -1
  19. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  20. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  21. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  22. package/dist/lib/plugins/openapi/Sidecar.js +5 -10
  23. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  24. package/dist/lib/plugins/openapi/playground/PathParams.js +1 -1
  25. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  26. package/dist/lib/plugins/openapi/playground/Playground.js +7 -15
  27. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  28. package/dist/lib/plugins/openapi/schema/{SchemaComponents.js → SchemaPropertyItem.js} +10 -8
  29. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -0
  30. package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
  31. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  32. package/dist/lib/plugins/openapi/schema/utils.d.ts +1 -0
  33. package/dist/lib/plugins/openapi/schema/utils.js +2 -0
  34. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  35. package/dist/vite/plugin-api.js +4 -2
  36. package/dist/vite/plugin-api.js.map +1 -1
  37. package/dist/vite/prerender.js +0 -1
  38. package/dist/vite/prerender.js.map +1 -1
  39. package/lib/{MdxPage-DewragjB.js → MdxPage-BuG8Tuwc.js} +2 -2
  40. package/lib/{MdxPage-DewragjB.js.map → MdxPage-BuG8Tuwc.js.map} +1 -1
  41. package/lib/{OperationList-D_ejrepA.js → OperationList-CDt1xdc4.js} +978 -970
  42. package/lib/OperationList-CDt1xdc4.js.map +1 -0
  43. package/lib/{circular-Dgpd6AN-.js → circular-DxaIIlWD.js} +251 -239
  44. package/lib/{circular-Dgpd6AN-.js.map → circular-DxaIIlWD.js.map} +1 -1
  45. package/lib/{createServer-BydbkTsd.js → createServer-CjNktZzL.js} +2 -2
  46. package/lib/{createServer-BydbkTsd.js.map → createServer-CjNktZzL.js.map} +1 -1
  47. package/lib/{index-DGugJOLc.js → index-Eb1oiHbM.js} +583 -560
  48. package/lib/index-Eb1oiHbM.js.map +1 -0
  49. package/lib/{useScrollToAnchor-eRM9tVvD.js → useScrollToAnchor-BZsGmBng.js} +84 -89
  50. package/lib/useScrollToAnchor-BZsGmBng.js.map +1 -0
  51. package/lib/zudoku.components.js +334 -317
  52. package/lib/zudoku.components.js.map +1 -1
  53. package/lib/zudoku.plugin-markdown.js +1 -1
  54. package/lib/zudoku.plugin-openapi.js +1 -1
  55. package/package.json +1 -1
  56. package/src/app/main.tsx +1 -2
  57. package/src/lib/components/PathRenderer.tsx +59 -0
  58. package/src/lib/components/ThemeSwitch.tsx +15 -14
  59. package/src/lib/components/index.ts +7 -5
  60. package/src/lib/components/navigation/SidebarCategory.tsx +43 -41
  61. package/src/lib/oas/graphql/circular.ts +27 -6
  62. package/src/lib/plugins/openapi/ColorizedParam.tsx +3 -3
  63. package/src/lib/plugins/openapi/OperationListItem.tsx +6 -1
  64. package/src/lib/plugins/openapi/ParameterListItem.tsx +1 -1
  65. package/src/lib/plugins/openapi/Sidecar.tsx +17 -26
  66. package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -1
  67. package/src/lib/plugins/openapi/playground/Playground.tsx +23 -33
  68. package/src/lib/plugins/openapi/schema/{SchemaComponents.tsx → SchemaPropertyItem.tsx} +10 -6
  69. package/src/lib/plugins/openapi/schema/SchemaView.tsx +4 -1
  70. package/src/lib/plugins/openapi/schema/utils.ts +4 -0
  71. package/dist/lib/plugins/openapi/schema/SchemaComponents.js.map +0 -1
  72. package/lib/OperationList-D_ejrepA.js.map +0 -1
  73. package/lib/index-DGugJOLc.js.map +0 -1
  74. package/lib/useScrollToAnchor-eRM9tVvD.js.map +0 -1
  75. /package/dist/lib/plugins/openapi/schema/{SchemaComponents.d.ts → SchemaPropertyItem.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DGugJOLc.js","sources":["../src/lib/plugins/openapi/client/GraphQLClient.tsx","../src/lib/plugins/openapi/graphql/graphql.ts","../src/lib/plugins/openapi/graphql/gql.ts","../src/lib/ui/Alert.tsx","../src/lib/ui/Label.tsx","../src/lib/ui/RadioGroup.tsx","../src/lib/ui/Textarea.tsx","../src/lib/util/pastellize.ts","../src/lib/plugins/openapi/ColorizedParam.tsx","../src/lib/plugins/openapi/playground/createUrl.ts","../src/lib/ui/DropdownMenu.tsx","../src/lib/plugins/openapi/playground/ExamplesDropdown.tsx","../src/lib/ui/Card.tsx","../src/lib/ui/Checkbox.tsx","../src/lib/ui/Command.tsx","../src/lib/ui/Popover.tsx","../src/lib/components/Autocomplete.tsx","../src/lib/util/createVariantComponent.tsx","../src/lib/plugins/openapi/playground/ParamsGrid.tsx","../src/lib/plugins/openapi/playground/Headers.tsx","../src/lib/plugins/openapi/playground/PathParams.tsx","../src/lib/plugins/openapi/playground/InlineInput.tsx","../src/lib/plugins/openapi/playground/QueryParams.tsx","../src/lib/plugins/openapi/util/methodToColor.ts","../src/lib/plugins/openapi/playground/result-panel/RequestTab.tsx","../src/lib/ui/Collapsible.tsx","../src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts","../src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx","../src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx","../src/lib/plugins/openapi/playground/SubmitButton.tsx","../src/lib/plugins/openapi/playground/Playground.tsx","../src/lib/plugins/openapi/playground/PlaygroundDialog.tsx","../src/lib/plugins/openapi/index.tsx"],"sourcesContent":["import type { GraphQLError } from \"graphql/error/index.js\";\nimport { ZudokuError } from \"../../../util/invariant.js\";\nimport type { TypedDocumentString } from \"../graphql/graphql.js\";\nimport type { OpenApiPluginOptions } from \"../index.js\";\nimport type { LocalServer } from \"./createServer.js\";\n\nlet localServerPromise: Promise<LocalServer> | undefined;\n\ntype GraphQLResponse<TResult> = {\n errors?: GraphQLError[];\n data: TResult;\n};\n\nconst throwIfError = (response: GraphQLResponse<unknown>) => {\n if (!response.errors?.[0]) return;\n\n throw new ZudokuError(response.errors[0].message, {\n developerHint:\n \"Check your configuration value `apis.type` and `apis.input` in the Zudoku config.\",\n });\n};\n\nexport class GraphQLClient {\n constructor(private readonly config: OpenApiPluginOptions) {}\n\n #getLocalServer = async () => {\n if (!localServerPromise) {\n localServerPromise = import(\"./createServer.js\").then((m) =>\n m.createServer(this.config),\n );\n }\n return localServerPromise;\n };\n\n #executeFetch = async (init: RequestInit): Promise<Response> => {\n if (this.config.server) {\n return fetch(this.config.server, init);\n }\n\n const localServer = await this.#getLocalServer();\n return localServer.fetch(\"http://localhost/graphql\", init);\n };\n\n fetch = async <TResult, TVariables>(\n query: TypedDocumentString<TResult, TVariables>,\n ...[variables]: TVariables extends Record<string, never> ? [] : [TVariables]\n ): Promise<TResult> => {\n const operationName = query.match(/query (\\w+)/)?.[1];\n\n const response = await this.#executeFetch({\n method: \"POST\",\n body: JSON.stringify({ query, variables, operationName }),\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n\n const result = (await response.json()) as GraphQLResponse<TResult>;\n throwIfError(result);\n\n return result.data;\n };\n}\n","/* eslint-disable */\nimport type { DocumentTypeDecoration } from \"@graphql-typed-document-node/core\";\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = {\n [K in keyof T]: T[K];\n};\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]?: Maybe<T[SubKey]>;\n};\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]: Maybe<T[SubKey]>;\n};\nexport type MakeEmpty<\n T extends { [key: string]: unknown },\n K extends keyof T,\n> = { [_ in K]?: never };\nexport type Incremental<T> =\n | T\n | {\n [P in keyof T]?: P extends \" $fragmentName\" | \"__typename\" ? T[P] : never;\n };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string };\n String: { input: string; output: string };\n Boolean: { input: boolean; output: boolean };\n Int: { input: number; output: number };\n Float: { input: number; output: number };\n /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSON: { input: any; output: any };\n /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSONObject: { input: any; output: any };\n /** OpenAPI schema scalar type that handles circular references */\n JSONSchema: { input: any; output: any };\n};\n\nexport type EncodingItem = {\n __typename?: \"EncodingItem\";\n allowReserved?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n contentType?: Maybe<Scalars[\"String\"][\"output\"]>;\n explode?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n headers?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n style?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type ExampleItem = {\n __typename?: \"ExampleItem\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n externalValue?: Maybe<Scalars[\"String\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n value?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n};\n\nexport type MediaTypeObject = {\n __typename?: \"MediaTypeObject\";\n encoding?: Maybe<Array<EncodingItem>>;\n examples?: Maybe<Array<ExampleItem>>;\n mediaType: Scalars[\"String\"][\"output\"];\n schema?: Maybe<Scalars[\"JSONSchema\"][\"output\"]>;\n};\n\nexport type OperationItem = {\n __typename?: \"OperationItem\";\n contentTypes: Array<Scalars[\"String\"][\"output\"]>;\n deprecated?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n method: Scalars[\"String\"][\"output\"];\n operationId?: Maybe<Scalars[\"String\"][\"output\"]>;\n parameters?: Maybe<Array<ParameterItem>>;\n path: Scalars[\"String\"][\"output\"];\n requestBody?: Maybe<RequestBodyObject>;\n responses: Array<ResponseItem>;\n slug: Scalars[\"String\"][\"output\"];\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n tags?: Maybe<Array<TagItem>>;\n};\n\nexport type ParameterIn = \"cookie\" | \"header\" | \"path\" | \"query\";\n\nexport type ParameterItem = {\n __typename?: \"ParameterItem\";\n allowEmptyValue?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n allowReserved?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n deprecated?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n examples?: Maybe<Array<ExampleItem>>;\n explode?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n in: ParameterIn;\n name: Scalars[\"String\"][\"output\"];\n required?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n schema?: Maybe<Scalars[\"JSONSchema\"][\"output\"]>;\n style?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type PathItem = {\n __typename?: \"PathItem\";\n methods: Array<Scalars[\"String\"][\"output\"]>;\n path: Scalars[\"String\"][\"output\"];\n};\n\nexport type Query = {\n __typename?: \"Query\";\n schema: Schema;\n};\n\nexport type QuerySchemaArgs = {\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n};\n\nexport type RequestBodyObject = {\n __typename?: \"RequestBodyObject\";\n content?: Maybe<Array<MediaTypeObject>>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n required?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n};\n\nexport type ResponseItem = {\n __typename?: \"ResponseItem\";\n content?: Maybe<Array<MediaTypeObject>>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n headers?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n links?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n statusCode: Scalars[\"String\"][\"output\"];\n};\n\nexport type Schema = {\n __typename?: \"Schema\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n openapi: Scalars[\"String\"][\"output\"];\n operations: Array<OperationItem>;\n paths: Array<PathItem>;\n servers: Array<Server>;\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n tags: Array<SchemaTag>;\n title: Scalars[\"String\"][\"output\"];\n url?: Maybe<Scalars[\"String\"][\"output\"]>;\n version: Scalars[\"String\"][\"output\"];\n};\n\nexport type SchemaOperationsArgs = {\n method?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n operationId?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n path?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n tag?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n untagged?: InputMaybe<Scalars[\"Boolean\"][\"input\"]>;\n};\n\nexport type SchemaTagsArgs = {\n name?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type SchemaTag = {\n __typename?: \"SchemaTag\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n name?: Maybe<Scalars[\"String\"][\"output\"]>;\n operations: Array<OperationItem>;\n};\n\nexport type SchemaType = \"file\" | \"raw\" | \"url\";\n\nexport type Server = {\n __typename?: \"Server\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n url: Scalars[\"String\"][\"output\"];\n};\n\nexport type TagItem = {\n __typename?: \"TagItem\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n};\n\nexport type ServersQueryQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type ServersQueryQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n url?: string | null;\n servers: Array<{ __typename?: \"Server\"; url: string }>;\n };\n};\n\nexport type OperationsFragmentFragment = {\n __typename?: \"OperationItem\";\n slug: string;\n summary?: string | null;\n method: string;\n description?: string | null;\n operationId?: string | null;\n contentTypes: Array<string>;\n path: string;\n parameters?: Array<{\n __typename?: \"ParameterItem\";\n name: string;\n in: ParameterIn;\n description?: string | null;\n required?: boolean | null;\n schema?: any | null;\n style?: string | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n }> | null;\n requestBody?: {\n __typename?: \"RequestBodyObject\";\n description?: string | null;\n required?: boolean | null;\n content?: Array<{\n __typename?: \"MediaTypeObject\";\n mediaType: string;\n schema?: any | null;\n encoding?: Array<{ __typename?: \"EncodingItem\"; name: string }> | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n }> | null;\n } | null;\n responses: Array<{\n __typename?: \"ResponseItem\";\n statusCode: string;\n links?: any | null;\n description?: string | null;\n content?: Array<{\n __typename?: \"MediaTypeObject\";\n mediaType: string;\n schema?: any | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n encoding?: Array<{ __typename?: \"EncodingItem\"; name: string }> | null;\n }> | null;\n }>;\n} & { \" $fragmentName\"?: \"OperationsFragmentFragment\" };\n\nexport type AllOperationsQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n tag?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n untagged?: InputMaybe<Scalars[\"Boolean\"][\"input\"]>;\n}>;\n\nexport type AllOperationsQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n description?: string | null;\n summary?: string | null;\n title: string;\n url?: string | null;\n version: string;\n tags: Array<{\n __typename?: \"SchemaTag\";\n name?: string | null;\n description?: string | null;\n }>;\n operations: Array<\n { __typename?: \"OperationItem\"; slug: string } & {\n \" $fragmentRefs\"?: {\n OperationsFragmentFragment: OperationsFragmentFragment;\n };\n }\n >;\n };\n};\n\nexport type GetServerQueryQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetServerQueryQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n url?: string | null;\n servers: Array<{ __typename?: \"Server\"; url: string }>;\n };\n};\n\nexport type GetCategoriesQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetCategoriesQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n url?: string | null;\n tags: Array<{ __typename?: \"SchemaTag\"; name?: string | null }>;\n };\n};\n\nexport type GetOperationsQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n tag?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n untagged?: InputMaybe<Scalars[\"Boolean\"][\"input\"]>;\n}>;\n\nexport type GetOperationsQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n operations: Array<{\n __typename?: \"OperationItem\";\n slug: string;\n deprecated?: boolean | null;\n method: string;\n summary?: string | null;\n operationId?: string | null;\n path: string;\n }>;\n };\n};\n\nexport class TypedDocumentString<TResult, TVariables>\n extends String\n implements DocumentTypeDecoration<TResult, TVariables>\n{\n __apiType?: DocumentTypeDecoration<TResult, TVariables>[\"__apiType\"];\n\n constructor(\n private value: string,\n public __meta__?: Record<string, any> | undefined,\n ) {\n super(value);\n }\n\n toString(): string & DocumentTypeDecoration<TResult, TVariables> {\n return this.value;\n }\n}\nexport const OperationsFragmentFragmentDoc = new TypedDocumentString(\n `\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n parameters {\n name\n in\n description\n required\n schema\n style\n examples {\n name\n description\n externalValue\n value\n summary\n }\n }\n requestBody {\n content {\n mediaType\n encoding {\n name\n }\n examples {\n name\n description\n externalValue\n value\n summary\n }\n schema\n }\n description\n required\n }\n responses {\n statusCode\n links\n description\n content {\n examples {\n name\n description\n externalValue\n value\n summary\n }\n mediaType\n encoding {\n name\n }\n schema\n }\n }\n}\n `,\n { fragmentName: \"OperationsFragment\" },\n) as unknown as TypedDocumentString<OperationsFragmentFragment, unknown>;\nexport const ServersQueryDocument = new TypedDocumentString(`\n query ServersQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n}\n `) as unknown as TypedDocumentString<\n ServersQueryQuery,\n ServersQueryQueryVariables\n>;\nexport const AllOperationsDocument = new TypedDocumentString(`\n query AllOperations($input: JSON!, $type: SchemaType!, $tag: String, $untagged: Boolean) {\n schema(input: $input, type: $type) {\n description\n summary\n title\n url\n version\n tags(name: $tag) {\n name\n description\n }\n operations(tag: $tag, untagged: $untagged) {\n slug\n ...OperationsFragment\n }\n }\n}\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n parameters {\n name\n in\n description\n required\n schema\n style\n examples {\n name\n description\n externalValue\n value\n summary\n }\n }\n requestBody {\n content {\n mediaType\n encoding {\n name\n }\n examples {\n name\n description\n externalValue\n value\n summary\n }\n schema\n }\n description\n required\n }\n responses {\n statusCode\n links\n description\n content {\n examples {\n name\n description\n externalValue\n value\n summary\n }\n mediaType\n encoding {\n name\n }\n schema\n }\n }\n}`) as unknown as TypedDocumentString<\n AllOperationsQuery,\n AllOperationsQueryVariables\n>;\nexport const GetServerQueryDocument = new TypedDocumentString(`\n query getServerQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetServerQueryQuery,\n GetServerQueryQueryVariables\n>;\nexport const GetCategoriesDocument = new TypedDocumentString(`\n query GetCategories($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n tags {\n name\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetCategoriesQuery,\n GetCategoriesQueryVariables\n>;\nexport const GetOperationsDocument = new TypedDocumentString(`\n query GetOperations($input: JSON!, $type: SchemaType!, $tag: String, $untagged: Boolean) {\n schema(input: $input, type: $type) {\n operations(tag: $tag, untagged: $untagged) {\n slug\n deprecated\n method\n summary\n operationId\n path\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetOperationsQuery,\n GetOperationsQueryVariables\n>;\n","/* eslint-disable */\nimport * as types from \"./graphql.js\";\n\n/**\n * Map of all GraphQL operations in the project.\n *\n * This map has several performance disadvantages:\n * 1. It is not tree-shakeable, so it will include all operations in the project.\n * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle.\n * 3. It does not support dead code elimination, so it will add unused operations.\n *\n * Therefore it is highly recommended to use the babel or swc plugin for production.\n * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size\n */\nconst documents = {\n \"\\n query ServersQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\":\n types.ServersQueryDocument,\n \"\\n fragment OperationsFragment on OperationItem {\\n slug\\n summary\\n method\\n description\\n operationId\\n contentTypes\\n path\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n }\\n requestBody {\\n content {\\n mediaType\\n encoding {\\n name\\n }\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n schema\\n }\\n description\\n required\\n }\\n responses {\\n statusCode\\n links\\n description\\n content {\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n mediaType\\n encoding {\\n name\\n }\\n schema\\n }\\n }\\n }\\n\":\n types.OperationsFragmentFragmentDoc,\n \"\\n query AllOperations(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n description\\n summary\\n title\\n url\\n version\\n tags(name: $tag) {\\n name\\n description\\n }\\n operations(tag: $tag, untagged: $untagged) {\\n slug\\n ...OperationsFragment\\n }\\n }\\n }\\n\":\n types.AllOperationsDocument,\n \"\\n query getServerQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\":\n types.GetServerQueryDocument,\n \"\\n query GetCategories($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n tags {\\n name\\n }\\n }\\n }\\n\":\n types.GetCategoriesDocument,\n \"\\n query GetOperations(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n operations(tag: $tag, untagged: $untagged) {\\n slug\\n deprecated\\n method\\n summary\\n operationId\\n path\\n }\\n }\\n }\\n\":\n types.GetOperationsDocument,\n};\n\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query ServersQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").ServersQueryDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n fragment OperationsFragment on OperationItem {\\n slug\\n summary\\n method\\n description\\n operationId\\n contentTypes\\n path\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n }\\n requestBody {\\n content {\\n mediaType\\n encoding {\\n name\\n }\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n schema\\n }\\n description\\n required\\n }\\n responses {\\n statusCode\\n links\\n description\\n content {\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n mediaType\\n encoding {\\n name\\n }\\n schema\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").OperationsFragmentFragmentDoc;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query AllOperations(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n description\\n summary\\n title\\n url\\n version\\n tags(name: $tag) {\\n name\\n description\\n }\\n operations(tag: $tag, untagged: $untagged) {\\n slug\\n ...OperationsFragment\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").AllOperationsDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query getServerQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetServerQueryDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query GetCategories($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n tags {\\n name\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetCategoriesDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query GetOperations(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n operations(tag: $tag, untagged: $untagged) {\\n slug\\n deprecated\\n method\\n summary\\n operationId\\n path\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetOperationsDocument;\n\nexport function graphql(source: string) {\n return (documents as any)[source] ?? {};\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n));\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertDescription, AlertTitle };\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","import * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","const c2n = (c: string) =>\n Math.abs(\n isNaN(parseInt(c))\n ? c.toLowerCase().charCodeAt(0) - 96\n : isNaN(parseInt(c))\n ? 0\n : parseInt(c),\n );\nconst s2n = (s: string) =>\n s.length > 1\n ? parseInt(s.split(\"\").reduce((a, c) => `${c2n(a) + c2n(c)}`))\n : c2n(s);\n\nexport const pastellize = (\n s: string,\n options: {\n saturation?: number;\n lightness?: number;\n } = {},\n) => {\n const hue = (3 * s2n(s) + 2 * s2n(s) + s2n(s)) % 360;\n const { saturation = 75, lightness = 60 } = options;\n\n return `${hue}deg ${saturation}% ${lightness}%`;\n};\n","import { useTheme } from \"next-themes\";\nimport { useEffect, useRef, type CSSProperties, type ReactNode } from \"react\";\nimport { cn } from \"../../util/cn.js\";\nimport { pastellize } from \"../../util/pastellize.js\";\n\nexport const DATA_ATTR = \"data-linked-param\";\n\nexport const usePastellizedColor = (name: string) => {\n const { resolvedTheme } = useTheme();\n\n return {\n text: pastellize(\n name,\n resolvedTheme === \"light\" ? { saturation: 95, lightness: 38 } : {},\n ),\n background: pastellize(\n name,\n resolvedTheme === \"light\" ? { saturation: 85, lightness: 40 } : {},\n ),\n };\n};\n\nexport const useParamColor = (name: string) => {\n const normalized = name.replace(/[{}]/g, \"\");\n return usePastellizedColor(normalized);\n};\n\nexport const ColorizedParam = ({\n name,\n className,\n slug,\n title,\n children,\n onClick,\n}: {\n name: string;\n className?: string;\n backgroundOpacity?: string;\n borderOpacity?: string;\n slug?: string;\n children?: ReactNode;\n title?: string;\n onClick?: () => void;\n}) => {\n const ref = useRef<HTMLSpanElement>(null);\n const normalizedSlug = slug?.replace(/[{}]/g, \"\");\n const normalized = name.replace(/[{}]/g, \"\");\n const { text, background } = usePastellizedColor(normalized);\n\n const textColor = `hsl(${text} / 100%)`;\n const backgroundColor = `hsl(${background} / 10%)`;\n const borderColor = `hsl(${background} / 50%)`;\n\n useEffect(() => {\n if (!normalizedSlug) return;\n if (!ref.current) return;\n\n const onMouseEnter = () => {\n document\n .querySelectorAll(`[${DATA_ATTR}=\"${normalizedSlug}\"]`)\n .forEach((el) => {\n if (el instanceof HTMLElement) {\n el.dataset.active = \"true\";\n }\n });\n };\n const onMouseLeave = () => {\n document\n .querySelectorAll(`[${DATA_ATTR}=\"${normalizedSlug}\"]`)\n .forEach((el) => {\n if (el instanceof HTMLElement) {\n el.dataset.active = \"false\";\n }\n });\n };\n\n const el = ref.current;\n\n el.addEventListener(\"mouseenter\", onMouseEnter);\n el.addEventListener(\"mouseleave\", onMouseLeave);\n\n return () => {\n el.removeEventListener(\"mouseenter\", onMouseEnter);\n el.removeEventListener(\"mouseleave\", onMouseLeave);\n };\n }, [normalizedSlug]);\n\n return (\n <span\n {...{ [DATA_ATTR]: normalizedSlug }}\n className={cn(\n \"relative inline-block rounded transition-all duration-100\",\n \"rounded-lg\",\n \"border border-[--border-color] p-0.5 text-[--param-color] bg-[--background-color]\",\n \"data-[active=true]:border-[--param-color] data-[active=true]:shadow data-[active=true]:-translate-y-px\",\n className,\n )}\n title={title}\n suppressHydrationWarning\n ref={ref}\n onClick={onClick}\n style={\n {\n \"--param-color\": textColor,\n \"--border-color\": borderColor,\n \"--background-color\": backgroundColor,\n } as CSSProperties\n }\n >\n {children ?? name}\n </span>\n );\n};\n","import type { PlaygroundForm } from \"./Playground.js\";\n\nexport const createUrl = (host: string, path: string, data: PlaygroundForm) => {\n const filledPath = path.replace(/(:\\w+|\\{\\w+})/g, (match) => {\n const key = match.replace(/[:{}]/g, \"\");\n const value = data.pathParams.find((part) => part.name === key)?.value;\n\n return value ?? match;\n });\n\n // Ensure host ends with a slash and path doesn't start with one,\n // so they form a correct URL, without overriding the host's path.\n const url = new URL(\n filledPath.replace(/^\\//, \"\"),\n host.endsWith(\"/\") ? host : `${host}/`,\n );\n\n data.queryParams\n .filter((param) => param.active)\n .forEach((param) => {\n url.searchParams.set(param.name, param.value);\n });\n\n return url;\n};\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\n\nimport { CheckIcon, ChevronRightIcon, DotIcon } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <DotIcon className=\"h-4 w-4 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import { Button } from \"zudoku/ui/Button.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"zudoku/ui/DropdownMenu.js\";\nimport { Content, Example } from \"../SidecarExamples.js\";\n\nconst ExamplesDropdown = ({\n examples,\n onSelect,\n}: {\n examples: Content;\n onSelect: (example: Example) => void;\n}) => {\n return (\n <div className=\"flex flex-col gap-2 mt-2 items-end\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\">Use Example</Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-56\">\n {examples.map((example) => {\n return (\n <div key={example.mediaType}>\n <DropdownMenuLabel>{example.mediaType}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n {example.examples?.map((example) => {\n return (\n <DropdownMenuItem\n key={example.name}\n onSelect={() => onSelect(example)}\n className=\"line-clamp-1\"\n >\n {example.summary ?? example.name}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuGroup>\n </div>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};\n\nexport default ExamplesDropdown;\n","import * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow-sm\",\n className,\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n};\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Check } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst checkboxVariants = cva(\n \"peer h-4 w-4 shrink-0 rounded-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:text-primary\",\n {\n variants: {\n variant: {\n default: \"border border-primary data-[state=checked]:bg-primary\",\n outline: \"border border-input data-[state=checked]:bg-accent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\ninterface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n VariantProps<typeof checkboxVariants> {}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, variant, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(checkboxVariants({ variant, className }))}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox, type CheckboxProps };\n","import { type DialogProps } from \"@radix-ui/react-dialog\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { Search } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Dialog, DialogContent } from \"zudoku/ui/Dialog.js\";\nimport { cn } from \"../util/cn.js\";\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className,\n )}\n {...props}\n />\n));\nCommand.displayName = CommandPrimitive.displayName;\n\nconst CommandDialog = ({ children, ...props }: DialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0 shadow-lg\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n // eslint-disable-next-line react/no-unknown-property\n <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n </div>\n));\n\nCommandInput.displayName = CommandPrimitive.Input.displayName;\n\nconst CommandInlineInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n // eslint-disable-next-line react/no-unknown-property\n <div className=\"flex items-center\" cmdk-input-wrapper=\"\">\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n className,\n )}\n {...props}\n />\n </div>\n));\n\nCommandInlineInput.displayName = CommandPrimitive.Input.displayName;\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n));\n\nCommandList.displayName = CommandPrimitive.List.displayName;\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n));\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n />\n));\n\nCommandItem.displayName = CommandPrimitive.Item.displayName;\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className,\n )}\n {...props}\n />\n );\n};\nCommandShortcut.displayName = \"CommandShortcut\";\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInlineInput,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n};\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverContent, PopoverTrigger };\n","import { PopoverAnchor } from \"@radix-ui/react-popover\";\nimport { useCommandState } from \"cmdk\";\nimport { useRef, useState, type Ref } from \"react\";\nimport {\n Command,\n CommandInlineInput,\n CommandItem,\n CommandList,\n} from \"zudoku/ui/Command.js\";\nimport { Popover, PopoverContent } from \"zudoku/ui/Popover.js\";\nimport { cn } from \"../util/cn.js\";\n\ntype AutocompleteProps = {\n value: string;\n options: readonly string[];\n onChange: (e: string) => void;\n className?: string;\n placeholder?: string;\n onEnterPress?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n ref?: Ref<HTMLInputElement>;\n};\n\nconst AutocompletePopover = ({\n value,\n options,\n onChange,\n className,\n placeholder = \"Enter value\",\n onEnterPress,\n ref,\n}: AutocompleteProps) => {\n const [open, setOpen] = useState(false);\n const [dontClose, setDontClose] = useState(false);\n const count = useCommandState((state) => state.filtered.count);\n const inputRef = useRef<HTMLInputElement>(null);\n return (\n <Popover open={open}>\n <PopoverAnchor>\n <CommandInlineInput\n ref={(el) => {\n inputRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n value={value}\n placeholder={placeholder}\n className={cn(\"h-9 bg-transparent\", className)}\n onFocus={() => setOpen(true)}\n onBlur={() => {\n if (dontClose) {\n return;\n }\n setOpen(false);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n setOpen(false);\n inputRef.current?.blur();\n onEnterPress?.(e);\n }\n }}\n onValueChange={(e) => onChange(e)}\n />\n </PopoverAnchor>\n <PopoverContent\n onMouseEnter={() => setDontClose(true)}\n onMouseLeave={() => setDontClose(false)}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={cn(\"p-0 w-[--radix-popover-trigger-width]\", {\n \"border-0\": count === 0,\n })}\n align=\"start\"\n side=\"bottom\"\n onWheel={(e) => {\n // See: https://github.com/radix-ui/primitives/issues/1159\n e.stopPropagation();\n }}\n onTouchMove={(e) => {\n e.stopPropagation();\n }}\n >\n <CommandList className=\"max-h-[140px]\">\n {options.map((enumValue) => (\n <CommandItem\n key={enumValue}\n value={enumValue}\n onSelect={(selected) => {\n onChange(selected);\n setOpen(false);\n }}\n className=\"cursor-pointer\"\n >\n {enumValue}\n </CommandItem>\n ))}\n </CommandList>\n </PopoverContent>\n </Popover>\n );\n};\n\nexport const Autocomplete = (props: AutocompleteProps) => {\n return (\n <Command className=\"bg-transparent\">\n <AutocompletePopover {...props} />\n </Command>\n );\n};\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport type { ClassValue } from \"clsx\";\nimport * as React from \"react\";\nimport { type HTMLElementType, type JSX } from \"react\";\nimport { cn } from \"./cn.js\";\n\nconst createVariantComponent = <\n E extends HTMLElementType,\n C extends ReturnType<typeof cva>,\n>(\n tag: E,\n cvx: ClassValue | C,\n // variantProps: Array<keyof VariantProps<C>> = [],\n) => {\n const MyVariant = React.forwardRef<\n HTMLElement,\n JSX.IntrinsicElements[E] & { className?: ClassValue; asChild?: boolean }\n >(({ className, asChild, ...props }, ref) => {\n const Comp = asChild ? Slot : tag;\n\n return React.createElement(Comp, {\n ...props,\n ref,\n className:\n typeof cvx === \"function\" ? cvx({ className }) : cn(cvx, className),\n });\n });\n\n MyVariant.displayName = `VariantComponent(${tag})`;\n\n return MyVariant;\n};\n\nexport default createVariantComponent;\n","import createVariantComponent from \"../../../util/createVariantComponent.js\";\n\nconst ParamsGrid = createVariantComponent(\n \"div\",\n \"hover:bg-accent/40 grid grid-cols-[2fr_3fr] gap-2 items-center px-3\",\n);\n\nexport default ParamsGrid;\n","import { XIcon } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport {\n Control,\n Controller,\n useFieldArray,\n useFormContext,\n UseFormRegister,\n} from \"react-hook-form\";\nimport { Card } from \"zudoku/ui/Card.js\";\nimport { Checkbox } from \"zudoku/ui/Checkbox.js\";\nimport { Autocomplete } from \"../../../components/Autocomplete.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport ParamsGrid from \"./ParamsGrid.js\";\nimport { type PlaygroundForm } from \"./Playground.js\";\n\nconst headerOptions = Object.freeze([\n \"Accept\",\n \"Accept-Encoding\",\n \"Accept-Language\",\n \"Authorization\",\n \"Cache-Control\",\n \"Connection\",\n \"Content-Disposition\",\n \"Content-Encoding\",\n \"Content-Language\",\n \"Content-Length\",\n \"Content-Range\",\n \"Content-Security-Policy\",\n \"Content-Type\",\n \"Cookie\",\n \"Date\",\n \"ETag\",\n \"Expires\",\n \"Host\",\n \"If-Modified-Since\",\n \"Location\",\n \"Origin\",\n \"Pragma\",\n \"Referer\",\n \"Set-Cookie\",\n \"User-Agent\",\n \"X-Requested-With\",\n]);\n\nexport const Headers = ({\n control,\n register,\n}: {\n register: UseFormRegister<PlaygroundForm>;\n control: Control<PlaygroundForm>;\n}) => {\n const { fields, append, remove } = useFieldArray<PlaygroundForm>({\n control,\n name: \"headers\",\n });\n const { setValue } = useFormContext<PlaygroundForm>();\n const valueRefs = useRef<Array<HTMLInputElement | null>>([]);\n const nameRefs = useRef<Array<HTMLInputElement | null>>([]);\n\n const addNewHeader = () => {\n append({\n name: \"\",\n value: \"\",\n active: false,\n } as PlaygroundForm[\"headers\"][number]);\n };\n\n const handleHeaderEnter = (index: number) => {\n valueRefs.current[index]?.focus();\n };\n\n const handleValueEnter = (index: number) => {\n addNewHeader();\n requestAnimationFrame(() => nameRefs.current[index + 1]?.focus());\n };\n\n return (\n <div className=\"flex flex-col gap-2\">\n <Card className=\"overflow-hidden\">\n <ParamsGrid>\n {fields.map((header, i) => (\n <div key={i} className=\"group grid col-span-full grid-cols-subgrid\">\n <div className=\"flex items-center gap-2 \">\n <Controller\n control={control}\n name={`headers.${i}.active`}\n render={({ field }) => (\n <Checkbox\n variant=\"outline\"\n id={`headers.${i}.active`}\n checked={field.value}\n onCheckedChange={(checked) => {\n field.onChange(checked);\n }}\n />\n )}\n />\n <Controller\n control={control}\n name={`headers.${i}.name`}\n render={({ field }) => (\n <Autocomplete\n {...field}\n placeholder=\"Name\"\n className=\"border-0 shadow-none bg-transparent text-xs font-mono\"\n options={headerOptions}\n onEnterPress={() => handleHeaderEnter(i)}\n onChange={(e) => {\n field.onChange(e);\n setValue(`headers.${i}.active`, true);\n }}\n ref={(el) => {\n nameRefs.current[i] = el;\n }}\n />\n )}\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Controller\n control={control}\n name={`headers.${i}.value`}\n render={({ field }) => (\n <Input\n placeholder=\"Value\"\n className=\"w-full border-0 shadow-none text-xs font-mono focus-visible:ring-0\"\n {...field}\n ref={(el) => {\n valueRefs.current[i] = el;\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && e.currentTarget.value.trim()) {\n handleValueEnter(i);\n }\n }}\n autoComplete=\"off\"\n />\n )}\n />\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-muted-foreground opacity-0 group-hover:opacity-100 rounded-full w-8 h-7\"\n onClick={() => {\n remove(i);\n }}\n type=\"button\"\n >\n <XIcon size={16} />\n </Button>\n </div>\n </div>\n ))}\n </ParamsGrid>\n </Card>\n <div className=\"text-end\">\n <Button\n className=\"\"\n onClick={addNewHeader}\n type=\"button\"\n variant=\"secondary\"\n >\n Add header\n </Button>\n </div>\n </div>\n );\n};\n","import { Control, Controller, useFieldArray } from \"react-hook-form\";\nimport { Card } from \"zudoku/ui/Card.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { ColorizedParam } from \"../ColorizedParam.js\";\nimport ParamsGrid from \"./ParamsGrid.js\";\nimport type { PlaygroundForm } from \"./Playground.js\";\n\nexport const PathParams = ({\n control,\n}: {\n control: Control<PlaygroundForm>;\n}) => {\n const { fields } = useFieldArray<PlaygroundForm>({\n control,\n name: \"pathParams\",\n });\n\n return (\n <Card className=\"rounded-lg\">\n <ParamsGrid>\n {fields.map((part, i) => (\n <>\n <Controller\n control={control}\n name={`pathParams.${i}.value`}\n render={() => (\n <div>\n <ColorizedParam\n slug={part.name}\n name={part.name}\n className=\"font-mono text-xs px-2\"\n />\n </div>\n )}\n />\n\n <div className=\"flex justify-between items-center\">\n <Controller\n control={control}\n name={`pathParams.${i}.value`}\n render={({ field }) => (\n <Input\n {...field}\n required\n placeholder=\"Enter value\"\n className=\"w-full border-0 shadow-none text-xs font-mono hover:bg-accent\"\n />\n )}\n />\n </div>\n </>\n ))}\n </ParamsGrid>\n </Card>\n );\n};\n","import createVariantComponent from \"../../../util/createVariantComponent.js\";\n\nexport const InlineInput = createVariantComponent(\n \"input\",\n \"px-2 bg-transparent h-6 font-mono text-xs m-2\",\n);\n","import {\n Control,\n Controller,\n useFieldArray,\n useFormContext,\n} from \"react-hook-form\";\nimport { Card } from \"zudoku/ui/Card.js\";\nimport { Checkbox } from \"zudoku/ui/Checkbox.js\";\nimport { Autocomplete } from \"../../../components/Autocomplete.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { InlineInput } from \"./InlineInput.js\";\nimport ParamsGrid from \"./ParamsGrid.js\";\nimport { type PlaygroundForm, type QueryParam } from \"./Playground.js\";\n\nexport const QueryParams = ({\n control,\n queryParams,\n}: {\n control: Control<PlaygroundForm>;\n queryParams: QueryParam[];\n}) => {\n const { fields } = useFieldArray<PlaygroundForm>({\n control,\n name: \"queryParams\",\n });\n const form = useFormContext<PlaygroundForm>();\n\n const requiredFields = queryParams.map((param) => Boolean(param.isRequired));\n\n return (\n <Card className=\"rounded-lg\">\n <div className=\"w-full \">\n {fields.map((field, i) => {\n const currentParam = queryParams.find(\n (param) => param.name === field.name,\n );\n return (\n <ParamsGrid key={field.id}>\n <div className=\"flex items-center\">\n <Controller\n control={control}\n name={`queryParams.${i}.active`}\n render={({ field }) => (\n <Checkbox\n variant=\"outline\"\n id={`queryParams.${i}.active`}\n className=\"mr-2\"\n checked={field.value}\n onCheckedChange={field.onChange}\n />\n )}\n />\n <Controller\n control={control}\n render={({ field }) =>\n !requiredFields[i] ? (\n <Autocomplete\n value={field.value}\n options={queryParams.map((param) => param.name)}\n onChange={(e) => {\n field.onChange(e);\n }}\n className=\"border-0 font-mono text-xs bg-transparent hover:bg-transparent\"\n />\n ) : (\n <InlineInput asChild>\n <label\n className=\"flex items-center cursor-pointer gap-1\"\n htmlFor={`queryParams.${i}.active`}\n title={\n requiredFields[i] ? \"Required field\" : undefined\n }\n >\n {field.value}\n {requiredFields[i] && <sup>&nbsp;*</sup>}\n </label>\n </InlineInput>\n )\n }\n name={`queryParams.${i}.name`}\n />\n </div>\n <div className=\"flex justify-between items-center\">\n <Controller\n control={control}\n render={({ field }) => {\n const hasEnum =\n currentParam?.enum && currentParam.enum.length > 0;\n\n if (!hasEnum) {\n return (\n <Input\n {...field}\n onChange={(e) => {\n field.onChange(e.target.value);\n if (e.target.value.length > 0) {\n form.setValue(`queryParams.${i}.active`, true);\n }\n }}\n placeholder=\"Enter value\"\n className=\"w-full border-0 shadow-none text-xs font-mono\"\n />\n );\n }\n\n return (\n <Autocomplete\n value={field.value}\n options={currentParam.enum ?? []}\n onChange={(e) => {\n field.onChange(e);\n form.setValue(`queryParams.${i}.active`, true);\n }}\n className=\"font-mono text-xs border-0 ring-1 ring-ring\"\n />\n );\n }}\n name={`queryParams.${i}.value`}\n />\n </div>\n </ParamsGrid>\n );\n })}\n </div>\n </Card>\n );\n};\n","export const TextColorMap = {\n green: \"text-green-600\",\n blue: \"text-sky-600\",\n yellow: \"text-yellow-600\",\n red: \"text-red-600\",\n purple: \"text-purple-600\",\n indigo: \"text-indigo-600\",\n gray: \"text-gray-600\",\n};\n\nexport const methodToColor = {\n get: TextColorMap.green,\n post: TextColorMap.blue,\n put: TextColorMap.yellow,\n delete: TextColorMap.red,\n patch: TextColorMap.purple,\n options: TextColorMap.indigo,\n head: TextColorMap.gray,\n trace: TextColorMap.gray,\n};\n\nexport const methodForColor = (method: string) => {\n return (\n methodToColor[method.toLocaleLowerCase() as keyof typeof methodToColor] ??\n TextColorMap.gray\n );\n};\n","import { ChevronRightIcon } from \"lucide-react\";\nimport { Fragment } from \"react\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../../../../ui/Collapsible.js\";\nimport { cn } from \"../../../../util/cn.js\";\nimport { methodForColor } from \"../../util/methodToColor.js\";\n\nexport const RequestTab = ({\n method,\n url,\n headers,\n body,\n}: {\n method: string;\n url: string;\n headers: Array<[string, string]>;\n body?: string;\n}) => {\n return (\n <div className=\"flex flex-col gap-2 font-mono text-xs\">\n <div className=\"gap-2 p-2 bg-muted rounded-md\">\n <span className={cn(methodForColor(method), \"font-semibold\")}>\n {method}\n </span>\n &nbsp;\n <span className=\"break-all\">{url}</span>&nbsp;\n <span className=\"text-muted-foreground\">HTTP/1.1</span>\n </div>\n <div className=\"mx-1.5 flex flex-col gap-3\">\n <Collapsible defaultOpen>\n <CollapsibleTrigger className=\"flex items-center gap-2 hover:text-primary group\">\n <ChevronRightIcon className=\"h-4 w-4 transition-transform duration-200 group-data-[state=open]:rotate-[90deg]\" />\n <span className=\"font-semibold\">Headers</span>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"grid grid-cols-[auto,1fr] gap-x-8 gap-y-1 pl-1.5 pt-2\">\n {headers.map(([key, value]) => (\n <Fragment key={key}>\n <div className=\"text-primary\">{key}</div>\n <div className=\"break-words\">{value}</div>\n </Fragment>\n ))}\n </div>\n </CollapsibleContent>\n </Collapsible>\n\n <Collapsible defaultOpen>\n <CollapsibleTrigger className=\"flex items-center gap-2 hover:text-primary group\">\n <ChevronRightIcon className=\"h-4 w-4 transition-transform duration-200 group-data-[state=open]:rotate-[90deg]\" />\n <span className=\"font-semibold\">Body</span>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"pl-0 pt-2\">\n <div\n className={cn(\n \"whitespace-pre-wrap break-all bg-muted p-2 rounded-md\",\n !body && \"text-muted-foreground\",\n )}\n >\n {body ?? \"Empty body\"}\n </div>\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n </div>\n );\n};\n\nexport default RequestTab;\n","import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nconst Collapsible = CollapsiblePrimitive.Root;\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\nexport { Collapsible, CollapsibleContent, CollapsibleTrigger };\n","type JsonValue = string | number | boolean | null | JsonObject | JsonArray;\ntype JsonObject = { [key: string]: JsonValue };\ntype JsonArray = JsonValue[];\n\nfunction inferType(value: JsonValue): string {\n if (value === null) return \"null\";\n if (Array.isArray(value)) {\n if (value.length === 0) return \"any[]\";\n const firstValue = value[0];\n if (firstValue === undefined) return \"any[]\";\n const elementType = inferType(firstValue);\n return `${elementType}[]`;\n }\n if (typeof value === \"object\") {\n return generateInterface(value);\n }\n return typeof value;\n}\n\nexport function generateInterface(obj: JsonObject, indentation = \"\"): string {\n const lines: string[] = [\"{\"];\n\n for (const [key, value] of Object.entries(obj)) {\n const propertyType = inferType(value);\n lines.push(` ${key}: ${propertyType};`);\n }\n\n lines.push(\"}\");\n return lines.join(\"\\n\");\n}\n\nexport function convertToTypes(json: JsonValue): { lines: string[] } {\n const typeDefinition = inferType(json);\n const lines = [`type GeneratedType = ${typeDefinition};`];\n return { lines };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport { Fragment, useState } from \"react\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"zudoku/ui/Collapsible.js\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"zudoku/ui/Select.js\";\nimport { SyntaxHighlight } from \"../../../../components/SyntaxHighlight.js\";\nimport { Card } from \"../../../../ui/Card.js\";\nimport { convertToTypes } from \"./convertToTypes.js\";\n\nconst statusCodeMap: Record<number, string> = {\n 200: \"OK\",\n 201: \"Created\",\n 202: \"Accepted\",\n 204: \"No Content\",\n 400: \"Bad Request\",\n 401: \"Unauthorized\",\n 403: \"Forbidden\",\n 404: \"Not Found\",\n 405: \"Method Not Allowed\",\n 500: \"Internal Server Error\",\n};\n\nconst mimeTypeToLanguage = (mimeType: string) => {\n const mimeTypeMapping = {\n \"application/json\": \"json\",\n \"text/json\": \"json\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/javascript\": \"javascript\",\n \"application/xml\": \"xml\",\n \"application/xhtml+xml\": \"xhtml\",\n };\n\n return Object.entries(mimeTypeMapping).find(([mime]) =>\n mimeType.includes(mime),\n )?.[1];\n};\n\nconst detectLanguage = (headers: Array<[string, string]>) => {\n const contentType =\n headers.find(([key, value]) => key === \"Content-Type\")?.[1] || \"\";\n return mimeTypeToLanguage(contentType);\n};\n\nconst tryParseJson = (body: string) => {\n try {\n return JSON.stringify(JSON.parse(body), null, 2);\n } catch {\n return null;\n }\n};\n\nconst sortHeadersByRelevance = (\n headers: Array<[string, string]>,\n): Array<[string, string]> => {\n const priorityOrder = [\n \"Content-Type\",\n \"Content-Length\",\n \"Authorization\",\n \"X-RateLimit-Remaining\",\n \"X-RateLimit-Limit\",\n \"Cache-Control\",\n \"ETag\",\n ].map((key) => key.toLowerCase());\n\n return [...headers].sort(([keyA], [keyB]) => {\n const indexA = priorityOrder.indexOf(keyA.toLowerCase());\n const indexB = priorityOrder.indexOf(keyB.toLowerCase());\n if (indexA === indexB) return 0;\n if (indexA === -1) return 1;\n if (indexB === -1) return -1;\n return indexA - indexB;\n });\n};\n\nexport const ResponseTab = ({\n body = \"\",\n headers,\n status,\n time,\n size,\n url,\n}: {\n body?: string;\n headers: Array<[string, string]>;\n status: number;\n time: number;\n size: number;\n url: string;\n}) => {\n const detectedLanguage = detectLanguage(headers);\n const jsonContent = tryParseJson(body);\n const beautifiedBody = jsonContent || body;\n const [view, setView] = useState<\"formatted\" | \"raw\" | \"types\">(\n jsonContent ? \"formatted\" : \"raw\",\n );\n\n const types = useQuery({\n queryKey: [\"types\", beautifiedBody],\n queryFn: async () => {\n return convertToTypes(JSON.parse(beautifiedBody));\n },\n enabled: view === \"types\",\n });\n\n const sortedHeaders = sortHeadersByRelevance([...headers]);\n\n return (\n <div className=\"flex flex-col gap-2 h-full overflow-y-scroll max-h-[calc(100vh-220px)] py-4\">\n <Collapsible defaultOpen>\n <CollapsibleTrigger className=\"flex items-center gap-2 hover:text-primary group\">\n <ChevronRightIcon className=\"h-4 w-4 transition-transform duration-200 group-data-[state=open]:rotate-[90deg]\" />\n <span className=\"font-semibold\">Headers</span>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"grid grid-cols-[auto,1fr] gap-x-8 gap-y-1 pl-1.5 pt-2 font-mono text-xs\">\n {sortedHeaders.slice(0, 5).map(([key, value]) => (\n <Fragment key={key}>\n <div className=\"text-primary whitespace-pre\">{key}</div>\n <div className=\"break-all\">{value}</div>\n </Fragment>\n ))}\n {sortedHeaders.length > 5 && (\n <Collapsible className=\"col-span-full grid-cols-subgrid grid\">\n <CollapsibleTrigger className=\"col-span-2 text-xs text-muted-foreground hover:text-primary flex items-center gap-1 py-1\">\n <ChevronRightIcon className=\"h-3 w-3 transition-transform duration-200 group-data-[state=open]:rotate-[90deg]\" />\n Show {sortedHeaders.length - 5} more headers\n </CollapsibleTrigger>\n <CollapsibleContent className=\"col-span-full grid grid-cols-subgrid gap-x-8 gap-y-1 \">\n {sortedHeaders.slice(5).map(([key, value]) => (\n <Fragment key={key}>\n <div className=\"text-primary whitespace-pre\">{key}</div>\n <div className=\"break-all\">{value}</div>\n </Fragment>\n ))}\n </CollapsibleContent>\n </Collapsible>\n )}\n </div>\n </CollapsibleContent>\n </Collapsible>\n\n <Card className=\"shadow-none\">\n <SyntaxHighlight\n language={\n view === \"types\"\n ? \"typescript\"\n : view === \"raw\"\n ? jsonContent\n ? \"plain\"\n : detectedLanguage\n : \"json\"\n }\n noBackground\n // playground dialog has h-5/6 ≈ 83.333vh\n className=\"overflow-x-auto p-4 text-xs max-h-[calc(83.333vh-180px)]\"\n code={\n (view === \"raw\"\n ? body\n : view === \"types\"\n ? types.data?.lines.join(\"\\n\")\n : beautifiedBody) ?? \"\"\n }\n />\n </Card>\n <div className=\"flex gap-2 justify-between\">\n <div className=\"flex text-xs gap-2 border bg-muted rounded-md p-2 items-center h-8 font-mono divide-x\">\n <div>\n <span className=\"text-muted-foreground\">Status</span> {status}{\" \"}\n {statusCodeMap[status] ?? \"\"}\n </div>\n <div>\n <span className=\"text-muted-foreground\">Time</span>{\" \"}\n {time.toFixed(0)}ms\n </div>\n <div>\n <span className=\"text-muted-foreground\">Size</span> {size}B\n </div>\n </div>\n {jsonContent && (\n <div>\n <Select\n value={view}\n onValueChange={(value) => setView(value as \"formatted\" | \"raw\")}\n >\n <SelectTrigger className=\"min-w-32\">\n <SelectValue placeholder=\"View\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"formatted\">Formatted</SelectItem>\n <SelectItem value=\"raw\">Raw</SelectItem>\n <SelectItem value=\"types\">Types</SelectItem>\n </SelectContent>\n </Select>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import { UseMutationResult } from \"@tanstack/react-query\";\nimport { Spinner } from \"../../../../components/Spinner.js\";\nimport { Callout } from \"../../../../ui/Callout.js\";\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from \"../../../../ui/Card.js\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../../../ui/Tabs.js\";\nimport { cn } from \"../../../../util/cn.js\";\nimport { PlaygroundResult } from \"../Playground.js\";\nimport { RequestTab } from \"./RequestTab.js\";\nimport { ResponseTab } from \"./ResponseTab.js\";\n\nexport const ResultPanel = ({\n queryMutation,\n showPathParamsWarning,\n}: {\n queryMutation: UseMutationResult<PlaygroundResult, Error, any, unknown>;\n showPathParamsWarning: boolean;\n}) => {\n const status = ((queryMutation.data?.status ?? 0) / 100).toFixed(0);\n return (\n <div className=\"min-w-0 p-8 bg-muted/70 overflow-y-auto\">\n {queryMutation.error ? (\n <div className=\"flex flex-col gap-2\">\n {showPathParamsWarning && (\n <Callout type=\"caution\">\n Some path parameters are missing values. Please fill them in to\n ensure the request is sent correctly.\n </Callout>\n )}\n <Card>\n <CardHeader>\n <CardTitle>Request failed</CardTitle>\n </CardHeader>\n <CardContent>\n Error:{\" \"}\n {queryMutation.error.message ||\n String(queryMutation.error) ||\n \"Unexpected error\"}\n </CardContent>\n </Card>\n </div>\n ) : queryMutation.data ? (\n <div className=\"flex flex-col gap-2\">\n <Tabs defaultValue=\"response\">\n <TabsList>\n <TabsTrigger value=\"request\">Request</TabsTrigger>\n <TabsTrigger value=\"response\">\n Response\n <span\n className={cn(\n \"text-xs font-mono ml-1\",\n status === \"2\" && \"text-green-500\",\n status === \"3\" && \"text-blue-500\",\n status === \"4\" && \"text-yellow-500\",\n status === \"5\" && \"text-red-500\",\n )}\n >\n ({queryMutation.data.status})\n </span>\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"request\">\n <RequestTab {...queryMutation.data.request} />\n </TabsContent>\n <TabsContent value=\"response\">\n <ResponseTab\n status={queryMutation.data.status}\n time={queryMutation.data.time}\n size={queryMutation.data.size}\n headers={queryMutation.data.headers}\n body={queryMutation.data.body}\n url={queryMutation.data.request.url}\n />\n </TabsContent>\n </Tabs>\n </div>\n ) : (\n <div className=\"grid place-items-center h-full\">\n <span className=\"text-[16px] font-semibold text-muted-foreground\">\n {queryMutation.isPending ? (\n <Spinner />\n ) : (\n \"Send a request first to see the response here\"\n )}\n </span>\n </div>\n )}\n </div>\n );\n};\n\nexport default ResultPanel;\n","import { ChevronDownIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"zudoku/ui/DropdownMenu.js\";\nimport { RadioGroup, RadioGroupItem } from \"zudoku/ui/RadioGroup.js\";\nimport { ApiIdentity } from \"../../../core/ZudokuContext.js\";\nimport { NO_IDENTITY } from \"./Playground.js\";\n\nconst SubmitButton = ({\n identities,\n formRef,\n disabled,\n}: {\n identities: ApiIdentity[];\n formRef?: React.RefObject<HTMLFormElement | null>;\n disabled?: boolean;\n}) => {\n const { setValue } = useFormContext();\n const [dropdownValue, setDropdownValue] = useState<string | undefined>();\n if (identities.length === 0) {\n return <Button disabled={disabled}>Send</Button>;\n }\n return (\n <div className=\"flex\">\n <Button\n className=\"rounded-r-none inset-shadow-sm\"\n disabled={disabled}\n onClick={() => formRef?.current?.requestSubmit()}\n >\n Send\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n disabled={disabled}\n className=\"rounded-l-none border-l border-border/40 inset-shadow-sm w-6\"\n size=\"icon\"\n >\n <ChevronDownIcon className=\"w-4 h-4\" />\n </Button>\n </DropdownMenuTrigger>\n <RadioGroup value={dropdownValue}>\n <DropdownMenuContent className=\"w-56\" align=\"end\" alignOffset={-150}>\n {[{ id: NO_IDENTITY, label: \"None\" }, ...identities].map(\n (identity) => (\n <DropdownMenuItem\n key={identity.id}\n onClick={() => {\n setDropdownValue(identity.id);\n setValue(\"identity\", identity.id);\n formRef?.current?.requestSubmit();\n }}\n onMouseEnter={() => setDropdownValue(identity.id)}\n onMouseLeave={() => setDropdownValue(undefined)}\n >\n <RadioGroupItem value={identity.id} className=\"mr-2\" />\n\n {identity.label}\n </DropdownMenuItem>\n ),\n )}\n </DropdownMenuContent>\n </RadioGroup>\n </DropdownMenu>\n </div>\n );\n};\n\nexport default SubmitButton;\n","import { useMutation } from \"@tanstack/react-query\";\nimport { InfoIcon } from \"lucide-react\";\nimport { Fragment, useEffect, useRef, useTransition } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { Alert, AlertDescription, AlertTitle } from \"zudoku/ui/Alert.js\";\n\nimport { Label } from \"zudoku/ui/Label.js\";\nimport { RadioGroup, RadioGroupItem } from \"zudoku/ui/RadioGroup.js\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"zudoku/ui/Select.js\";\nimport { Textarea } from \"zudoku/ui/Textarea.js\";\nimport { useSelectedServerStore } from \"../../../authentication/state.js\";\nimport { useApiIdentities } from \"../../../components/context/ZudokuContext.js\";\nimport { Card } from \"../../../ui/Card.js\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../../ui/Tabs.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { ColorizedParam } from \"../ColorizedParam.js\";\nimport { Content } from \"../SidecarExamples.js\";\nimport { createUrl } from \"./createUrl.js\";\nimport ExamplesDropdown from \"./ExamplesDropdown.js\";\nimport { Headers } from \"./Headers.js\";\nimport { PathParams } from \"./PathParams.js\";\nimport { QueryParams } from \"./QueryParams.js\";\nimport { ResultPanel } from \"./result-panel/ResultPanel.js\";\nimport SubmitButton from \"./SubmitButton.js\";\n\nexport const NO_IDENTITY = \"__none\";\n\nexport type Header = {\n name: string;\n defaultValue?: string;\n defaultActive?: boolean;\n};\n\nexport type QueryParam = {\n name: string;\n defaultValue?: string;\n defaultActive?: boolean;\n isRequired?: boolean;\n enum?: string[];\n type?: string;\n};\nexport type PathParam = {\n name: string;\n defaultValue?: string;\n isRequired?: boolean;\n};\n\nexport type PlaygroundForm = {\n body: string;\n queryParams: Array<{\n name: string;\n value: string;\n active: boolean;\n enum?: string[];\n }>;\n pathParams: Array<{ name: string; value: string }>;\n headers: Array<{\n name: string;\n value: string;\n active: boolean;\n }>;\n identity?: string;\n};\n\nexport type PlaygroundResult = {\n status: number;\n headers: Array<[string, string]>;\n size: number;\n body: string;\n time: number;\n request: {\n method: string;\n url: string;\n headers: Array<[string, string]>;\n body?: string;\n };\n};\n\nexport type PlaygroundContentProps = {\n server: string;\n servers?: string[];\n url: string;\n method: string;\n headers?: Header[];\n queryParams?: QueryParam[];\n pathParams?: PathParam[];\n defaultBody?: string;\n examples?: Content;\n};\n\nexport const Playground = ({\n server,\n servers,\n url,\n method,\n headers = [],\n queryParams = [],\n pathParams = [],\n defaultBody = \"\",\n examples,\n}: PlaygroundContentProps) => {\n const { selectedServer, setSelectedServer } = useSelectedServerStore();\n const [, startTransition] = useTransition();\n const { register, control, handleSubmit, watch, setValue, ...form } =\n useForm<PlaygroundForm>({\n defaultValues: {\n body: defaultBody,\n queryParams: queryParams\n .map((param) => ({\n name: param.name,\n value: param.defaultValue ?? \"\",\n active: param.defaultActive ?? false,\n enum: param.enum ?? [],\n }))\n .concat([\n {\n name: \"\",\n value: \"\",\n active: false,\n enum: [],\n },\n ]),\n pathParams: pathParams.map((param) => ({\n name: param.name,\n value: param.defaultValue ?? \"\",\n })),\n headers: headers\n .map((header) => ({\n name: header.name,\n value: header.defaultValue ?? \"\",\n active: header.defaultActive ?? false,\n }))\n .concat([\n {\n name: \"\",\n value: \"\",\n active: false,\n },\n ]),\n identity: NO_IDENTITY,\n },\n });\n const formState = watch();\n const identities = useApiIdentities();\n\n const setOnce = useRef(false);\n useEffect(() => {\n if (setOnce.current) return;\n const firstIdentity = identities.data?.at(0);\n if (firstIdentity) {\n setValue(\"identity\", firstIdentity.id);\n setOnce.current = true;\n }\n }, [setValue, identities.data]);\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const queryMutation = useMutation({\n mutationFn: async (data: PlaygroundForm) => {\n const start = performance.now();\n const request = new Request(\n createUrl(selectedServer ?? server, url, data),\n {\n method: method.toUpperCase(),\n headers: Object.fromEntries(\n data.headers\n .filter((h) => h.name && h.active)\n .map((header) => [header.name, header.value]),\n ),\n body: data.body ? data.body : undefined,\n },\n );\n\n if (data.identity !== NO_IDENTITY) {\n identities.data\n ?.find((i) => i.id === data.identity)\n ?.authorizeRequest(request);\n }\n try {\n const response = await fetch(request, {\n signal: AbortSignal.timeout(5000),\n });\n\n const time = performance.now() - start;\n\n const body = await response.text();\n\n const url = new URL(request.url);\n\n return {\n status: response.status,\n headers: Array.from(response.headers.entries()),\n size: body.length,\n body,\n time,\n request: {\n method: request.method.toUpperCase(),\n url: request.url,\n headers: [\n [\"Host\", url.host],\n [\"User-Agent\", \"Zudoku Playground\"],\n ...Array.from(request.headers.entries()),\n ],\n body: data.body ? data.body : undefined,\n },\n } satisfies PlaygroundResult;\n } catch (error) {\n if (error instanceof TypeError) {\n throw new Error(\n \"The request failed, possibly due to network issues or CORS policy.\",\n );\n } else {\n throw error;\n }\n }\n },\n });\n\n const path = url.split(\"/\").map((part, i, arr) => {\n const isPathParam =\n (part.startsWith(\"{\") && part.endsWith(\"}\")) || part.startsWith(\":\");\n const replaced = part.replace(/[:{}]/g, \"\");\n const value = formState.pathParams.find((p) => p.name === replaced)?.value;\n\n const pathParamValue = (\n <ColorizedParam\n backgroundOpacity=\"25%\"\n name={part}\n slug={part}\n title={\n !value\n ? `Missing value for path parameter \\`${replaced}\\``\n : undefined\n }\n >\n {value ? encodeURIComponent(value) : part}\n </ColorizedParam>\n );\n\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Fragment key={part + i}>\n {isPathParam ? pathParamValue : part}\n {i < arr.length - 1 && \"/\"}\n <wbr />\n </Fragment>\n );\n });\n\n const urlQueryParams = formState.queryParams\n .filter((p) => p.active)\n .map((p, i, arr) => (\n <Fragment key={p.name}>\n {p.name}={encodeURIComponent(p.value).replaceAll(\"%20\", \"+\")}\n {i < arr.length - 1 && \"&\"}\n <wbr />\n </Fragment>\n ));\n\n const serverSelect = (\n <div className=\"inline-block opacity-50 hover:opacity-100 transition\">\n {servers && servers.length > 1 ? (\n <Select\n onValueChange={(value) => {\n startTransition(() => {\n setSelectedServer(value);\n });\n }}\n value={selectedServer}\n defaultValue={selectedServer}\n >\n <SelectTrigger className=\"p-0 border-none flex-row-reverse bg-transparent text-xs gap-0.5 h-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {servers.map((s) => (\n <SelectItem key={s} value={s}>\n {s.replace(/^https?:\\/\\//, \"\")}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <span>{server.replace(/^https?:\\/\\//, \"\")}</span>\n )}\n </div>\n );\n\n return (\n <FormProvider\n {...{ register, control, handleSubmit, watch, setValue, ...form }}\n >\n <form\n onSubmit={handleSubmit((data) => queryMutation.mutateAsync(data))}\n ref={formRef}\n >\n <div className=\"grid grid-cols-2 text-sm h-full\">\n <div className=\"flex flex-col gap-4 p-4 after:bg-muted-foreground/20 relative after:absolute after:w-px after:inset-0 after:left-auto\">\n <div className=\"flex gap-2 items-stretch\">\n <div className=\"flex flex-1 items-center w-full border rounded-md\">\n <div className=\"border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono flex items-center\">\n {method.toUpperCase()}\n </div>\n <div className=\"flex items-center flex-wrap p-2 font-mono text-xs break-all\">\n {serverSelect}\n {path}\n {urlQueryParams.length > 0 ? \"?\" : \"\"}\n {urlQueryParams}\n </div>\n </div>\n\n <SubmitButton\n identities={identities.data ?? []}\n formRef={formRef}\n disabled={form.formState.isSubmitting}\n />\n </div>\n <Tabs defaultValue=\"parameters\">\n <div className=\"flex flex-wrap gap-1 justify-between\">\n <TabsList>\n <TabsTrigger value=\"parameters\">\n Parameters\n {(formState.pathParams.some((p) => p.value !== \"\") ||\n formState.queryParams.some((p) => p.active)) && (\n <div className=\"w-2 h-2 rounded-full bg-blue-400 ml-2\" />\n )}\n </TabsTrigger>\n <TabsTrigger value=\"headers\">\n Headers\n {formState.headers.filter((h) => h.active).length > 0 && (\n <div className=\"w-2 h-2 rounded-full bg-blue-400 ml-2\" />\n )}\n </TabsTrigger>\n <TabsTrigger value=\"auth\">\n Auth\n {formState.identity !== NO_IDENTITY && (\n <div className=\"w-2 h-2 rounded-full bg-blue-400 ml-2\" />\n )}\n </TabsTrigger>\n <TabsTrigger value=\"body\">Body</TabsTrigger>\n </TabsList>\n </div>\n <TabsContent value=\"headers\">\n <Headers control={control} register={register} />\n </TabsContent>\n <TabsContent value=\"parameters\">\n {pathParams.length > 0 && (\n <div className=\"flex flex-col gap-4 my-4\">\n <span className=\"font-semibold\">Path Parameters</span>\n <PathParams control={control} />\n </div>\n )}\n <div className=\"flex flex-col gap-4 my-4\">\n <span className=\"font-semibold\">Query Parameters</span>\n <QueryParams control={control} queryParams={queryParams} />\n </div>\n </TabsContent>\n <TabsContent value=\"body\">\n {![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(\n method.toUpperCase(),\n ) && (\n <Alert className=\"mb-2\">\n <InfoIcon className=\"w-4 h-4\" />\n <AlertTitle>Body</AlertTitle>\n <AlertDescription>\n Body is only supported for POST, PUT, PATCH, and DELETE\n requests\n </AlertDescription>\n </Alert>\n )}\n <Textarea\n {...register(\"body\")}\n className={cn(\n \"border w-full rounded-lg p-2 bg-muted h-40 font-mono\",\n ![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(\n method.toUpperCase(),\n ) && \"h-20\",\n )}\n placeholder={\n ![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(\n method.toUpperCase(),\n )\n ? \"This request does not support a body\"\n : undefined\n }\n disabled={\n ![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(\n method.toUpperCase(),\n )\n }\n />\n {examples && (\n <ExamplesDropdown\n examples={examples}\n onSelect={(example) =>\n setValue(\"body\", JSON.stringify(example.value, null, 2))\n }\n />\n )}\n </TabsContent>\n <TabsContent value=\"auth\">\n <div className=\"flex flex-col gap-4 my-4\">\n {identities.data?.length === 0 && (\n <Alert>\n <InfoIcon className=\"w-4 h-4\" />\n <AlertTitle>Authentication</AlertTitle>\n <AlertDescription>\n No identities found. Please create an identity first.\n </AlertDescription>\n </Alert>\n )}\n <div className=\"flex flex-col items-center gap-2\">\n <Card className=\"w-full overflow-hidden\">\n <RadioGroup\n onValueChange={(value) => setValue(\"identity\", value)}\n value={formState.identity}\n defaultValue={formState.identity}\n className=\"gap-0\"\n disabled={identities.data?.length === 0}\n >\n <Label\n className=\"h-12 border-b items-center flex p-4 cursor-pointer hover:bg-accent\"\n htmlFor=\"none\"\n >\n <RadioGroupItem value={NO_IDENTITY} id=\"none\">\n None\n </RadioGroupItem>\n <Label htmlFor=\"none\" className=\"ml-2\">\n None\n </Label>\n </Label>\n {identities.data?.map((identity) => (\n <Label\n key={identity.id}\n className=\"h-12 border-b items-center flex p-4 cursor-pointer hover:bg-accent\"\n >\n <RadioGroupItem\n value={identity.id}\n id={identity.id}\n >\n {identity.label}\n </RadioGroupItem>\n <Label htmlFor={identity.id} className=\"ml-2\">\n {identity.label}\n </Label>\n </Label>\n ))}\n </RadioGroup>\n </Card>\n </div>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n <ResultPanel\n queryMutation={queryMutation}\n showPathParamsWarning={formState.pathParams.some(\n (p) => p.value === \"\",\n )}\n />\n </div>\n </form>\n </FormProvider>\n );\n};\n\nexport default Playground;\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { type PropsWithChildren, useState } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogTitle,\n DialogTrigger,\n} from \"zudoku/ui/Dialog.js\";\nimport { Playground, type PlaygroundContentProps } from \"./Playground.js\";\n\nexport type PlaygroundDialogProps = PropsWithChildren<PlaygroundContentProps>;\n\nconst HeroPlayIcon = ({\n className,\n size = 16,\n}: {\n className?: string;\n size?: number;\n}) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n width={size}\n height={size}\n >\n <path\n fillRule=\"evenodd\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm14.024-.983a1.125 1.125 0 0 1 0 1.966l-5.603 3.113A1.125 1.125 0 0 1 9 15.113V8.887c0-.857.921-1.4 1.671-.983l5.603 3.113Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst PlaygroundDialog = (props: PlaygroundDialogProps) => {\n const [open, setOpen] = useState(false);\n return (\n <Dialog onOpenChange={(open) => setOpen(open)}>\n <DialogTrigger asChild>\n {props.children ?? (\n <button className=\"flex gap-1 items-center px-2 py-1 rounded-md transition text-xs bg-primary text-primary-foreground shadow-sm hover:bg-primary/80\">\n Test\n <HeroPlayIcon className=\"\" size={14} />\n </button>\n )}\n </DialogTrigger>\n\n <DialogContent\n className=\"max-w-screen-xl w-full h-5/6 overflow-hidden p-0\"\n aria-describedby={undefined}\n >\n <VisuallyHidden>\n <DialogTitle>Playground</DialogTitle>\n </VisuallyHidden>\n {open && <Playground {...props} />}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport { PlaygroundDialog };\n","import slugify from \"@sindresorhus/slugify\";\nimport { CirclePlayIcon, LogInIcon } from \"lucide-react\";\nimport { matchPath, redirect, RouteObject } from \"react-router\";\nimport type { SidebarItem } from \"../../../config/validators/SidebarSchema.js\";\nimport { useAuth } from \"../../authentication/hook.js\";\nimport { ColorMap } from \"../../components/navigation/SidebarBadge.js\";\nimport { type ZudokuPlugin } from \"../../core/plugins.js\";\nimport type { SchemaImports } from \"../../oas/graphql/index.js\";\nimport { Button } from \"../../ui/Button.js\";\nimport { joinUrl } from \"../../util/joinUrl.js\";\nimport { GraphQLClient } from \"./client/GraphQLClient.js\";\nimport { graphql } from \"./graphql/index.js\";\nimport { OasPluginConfig } from \"./interfaces.js\";\nimport type { PlaygroundContentProps } from \"./playground/Playground.js\";\nimport { PlaygroundDialog } from \"./playground/PlaygroundDialog.js\";\n\nconst GetCategoriesQuery = graphql(`\n query GetCategories($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n tags {\n name\n }\n }\n }\n`);\n\nconst GetOperationsQuery = graphql(`\n query GetOperations(\n $input: JSON!\n $type: SchemaType!\n $tag: String\n $untagged: Boolean\n ) {\n schema(input: $input, type: $type) {\n operations(tag: $tag, untagged: $untagged) {\n slug\n deprecated\n method\n summary\n operationId\n path\n }\n }\n }\n`);\n\ntype InternalOasPluginConfig = { schemaImports?: SchemaImports };\n\nconst MethodColorMap: Record<string, keyof typeof ColorMap> = {\n get: \"green\",\n post: \"blue\",\n put: \"yellow\",\n delete: \"red\",\n patch: \"purple\",\n options: \"gray\",\n head: \"gray\",\n};\n\nexport type OpenApiPluginOptions = OasPluginConfig & InternalOasPluginConfig;\n\nconst UNTAGGED_PATH = \"~endpoints\";\n\nexport const openApiPlugin = (config: OpenApiPluginOptions): ZudokuPlugin => {\n const basePath = joinUrl(config.navigationId ?? \"/reference\");\n const versions = config.type === \"file\" ? Object.keys(config.input) : [];\n\n const client = new GraphQLClient(config);\n\n return {\n getHead: () => {\n if (config.type === \"url\" && !config.skipPreload) {\n return (\n <link\n rel=\"preload\"\n href={config.input}\n as=\"fetch\"\n crossOrigin=\"anonymous\"\n />\n );\n }\n\n if (config.server) {\n return <link rel=\"preconnect\" href={config.server} />;\n }\n },\n getMdxComponents: () => ({\n OpenPlaygroundButton: ({\n requireAuth,\n server,\n method,\n url,\n ...props\n }: Partial<PlaygroundContentProps> &\n Pick<PlaygroundContentProps, \"server\"> & {\n requireAuth: boolean;\n }) => {\n const auth = useAuth();\n\n if (!server) {\n throw new Error(\"Server is required\");\n }\n\n if (requireAuth && !auth.isAuthenticated) {\n return (\n <Button\n className=\"gap-2 items-center\"\n variant=\"outline\"\n onClick={auth.login}\n >\n Login to open in Playground <LogInIcon size={16} />\n </Button>\n );\n }\n\n return (\n <PlaygroundDialog\n url={url ?? \"/\"}\n method={method ?? \"get\"}\n server={server}\n {...props}\n >\n <Button className=\"gap-2 items-center\" variant=\"outline\">\n Open in Playground <CirclePlayIcon size={16} />\n </Button>\n </PlaygroundDialog>\n );\n },\n }),\n getSidebar: async (path: string) => {\n if (!matchPath({ path: basePath, end: false }, path)) {\n return [];\n }\n\n try {\n const urlVersion = versions.find((v) =>\n path.startsWith(joinUrl(basePath, v)),\n );\n const version = urlVersion ?? Object.keys(config.input).at(0);\n\n const data = await client.fetch(GetCategoriesQuery, {\n type: config.type,\n input: config.type === \"file\" ? config.input[version!] : config.input,\n });\n\n const tag = config.tagPages?.find(\n (tag) => path.split(\"/\").at(-1) === slugify(tag),\n );\n\n const operationsData = await client.fetch(GetOperationsQuery, {\n type: config.type,\n input: config.type === \"file\" ? config.input[version!] : config.input,\n tag,\n untagged: tag === undefined,\n });\n\n const items = operationsData.schema.operations.map((operation) => ({\n type: \"link\" as const,\n label: operation.summary ?? operation.path,\n href: `#${operation.slug}`,\n badge: {\n label: operation.method,\n color: MethodColorMap[operation.method.toLowerCase()]!,\n invert: true,\n } as const,\n }));\n\n const categories = data.schema.tags\n // .filter((tag) => tag.operations.length > 0)\n .map<SidebarItem>((tag) => {\n const categoryLink = joinUrl(\n basePath,\n urlVersion,\n tag.name ? slugify(tag.name) : UNTAGGED_PATH,\n );\n return {\n type: \"category\",\n label: tag.name || \"Other endpoints\",\n link: {\n type: \"doc\" as const,\n id: categoryLink,\n label: tag.name!,\n },\n collapsible: false,\n collapsed: true,\n items: path === categoryLink ? items : [],\n };\n });\n\n return categories;\n } catch {\n return [];\n }\n },\n getRoutes: () => {\n const versionsInPath = [null, ...versions];\n\n const tagPages = (config.tagPages ?? []).map((tag) => ({\n tag,\n path: slugify(tag),\n }));\n\n return versionsInPath.map((version) => {\n const versionPath = joinUrl(basePath, version ? `/${version}` : \"\");\n\n return {\n path: versionPath,\n async lazy() {\n const { OpenApiRoute } = await import(\"./OpenApiRoute.js\");\n return {\n element: (\n <OpenApiRoute\n version={version ?? undefined}\n basePath={basePath}\n versions={versions}\n client={client}\n config={config}\n />\n ),\n };\n },\n children: [\n {\n index: true,\n loader: () =>\n redirect(\n joinUrl(versionPath, tagPages.at(0)?.path ?? UNTAGGED_PATH),\n ),\n },\n {\n path: joinUrl(versionPath, UNTAGGED_PATH),\n async lazy() {\n const { OperationList } = await import(\"./OperationList.js\");\n return { element: <OperationList untagged={true} /> };\n },\n },\n ...tagPages.map<RouteObject>((tag) => {\n return {\n path: joinUrl(versionPath, tag.path),\n async lazy() {\n const { OperationList } = await import(\"./OperationList.js\");\n return {\n element: <OperationList tag={tag.tag} />,\n };\n },\n };\n }),\n ],\n };\n });\n },\n };\n};\n"],"names":["localServerPromise","throwIfError","response","_a","ZudokuError","GraphQLClient","config","__privateAdd","_getLocalServer","m","_executeFetch","init","__privateGet","__publicField","query","variables","operationName","result","TypedDocumentString","value","__meta__","OperationsFragmentFragmentDoc","ServersQueryDocument","AllOperationsDocument","GetServerQueryDocument","GetCategoriesDocument","GetOperationsDocument","documents","types.ServersQueryDocument","types.OperationsFragmentFragmentDoc","types.AllOperationsDocument","types.GetServerQueryDocument","types.GetCategoriesDocument","types.GetOperationsDocument","graphql","source","alertVariants","cva","Alert","React","className","variant","props","ref","jsx","cn","AlertTitle","AlertDescription","labelVariants","Label","LabelPrimitive","RadioGroup","RadioGroupPrimitive","RadioGroupItem","Circle","Textarea","c2n","c","s2n","s","pastellize","options","hue","saturation","lightness","DATA_ATTR","usePastellizedColor","name","resolvedTheme","useTheme","ColorizedParam","slug","title","children","onClick","useRef","normalizedSlug","normalized","text","background","textColor","backgroundColor","borderColor","useEffect","onMouseEnter","el","onMouseLeave","createUrl","host","path","data","filledPath","match","key","part","url","param","DropdownMenu","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuSubTrigger","inset","jsxs","ChevronRightIcon","DropdownMenuSubContent","DropdownMenuContent","sideOffset","DropdownMenuItem","DropdownMenuCheckboxItem","checked","CheckIcon","DropdownMenuRadioItem","DotIcon","DropdownMenuLabel","DropdownMenuSeparator","ExamplesDropdown","examples","onSelect","Button","example","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","checkboxVariants","Checkbox","CheckboxPrimitive","Check","Command","CommandPrimitive","CommandInput","Search","CommandInlineInput","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","Popover","PopoverPrimitive","PopoverContent","align","AutocompletePopover","onChange","placeholder","onEnterPress","open","setOpen","useState","dontClose","setDontClose","count","useCommandState","state","inputRef","PopoverAnchor","e","enumValue","selected","Autocomplete","createVariantComponent","tag","cvx","MyVariant","asChild","Comp","Slot","ParamsGrid","headerOptions","Headers","control","register","fields","append","remove","useFieldArray","setValue","useFormContext","valueRefs","nameRefs","addNewHeader","handleHeaderEnter","index","handleValueEnter","header","i","Controller","field","Input","XIcon","PathParams","Fragment","InlineInput","QueryParams","queryParams","form","requiredFields","currentParam","TextColorMap","methodToColor","methodForColor","method","RequestTab","headers","body","Collapsible","CollapsibleTrigger","CollapsibleContent","CollapsiblePrimitive","inferType","firstValue","generateInterface","obj","indentation","lines","propertyType","convertToTypes","json","statusCodeMap","mimeTypeToLanguage","mimeType","mime","detectLanguage","contentType","tryParseJson","sortHeadersByRelevance","priorityOrder","keyA","keyB","indexA","indexB","ResponseTab","status","time","size","detectedLanguage","jsonContent","beautifiedBody","view","setView","types","useQuery","sortedHeaders","SyntaxHighlight","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ResultPanel","queryMutation","showPathParamsWarning","Callout","Tabs","TabsList","TabsTrigger","TabsContent","Spinner","SubmitButton","identities","formRef","disabled","dropdownValue","setDropdownValue","ChevronDownIcon","NO_IDENTITY","identity","Playground","server","servers","pathParams","defaultBody","selectedServer","setSelectedServer","useSelectedServerStore","startTransition","useTransition","handleSubmit","watch","useForm","formState","useApiIdentities","setOnce","firstIdentity","useMutation","start","request","h","_b","error","arr","isPathParam","replaced","p","pathParamValue","urlQueryParams","serverSelect","FormProvider","InfoIcon","_c","HeroPlayIcon","PlaygroundDialog","Dialog","DialogTrigger","DialogContent","VisuallyHidden","DialogTitle","GetCategoriesQuery","GetOperationsQuery","MethodColorMap","UNTAGGED_PATH","openApiPlugin","basePath","joinUrl","versions","client","requireAuth","auth","useAuth","LogInIcon","CirclePlayIcon","matchPath","urlVersion","v","version","slugify","items","operation","categoryLink","versionsInPath","tagPages","versionPath","OpenApiRoute","redirect","OperationList"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useScrollToAnchor-eRM9tVvD.js","sources":["../../../node_modules/.pnpm/@mdx-js+react@3.1.0_@types+react@19.0.7_react@19.0.0/node_modules/@mdx-js/react/lib/index.js","../src/lib/components/AnchorLink.tsx","../src/lib/components/navigation/SidebarBadge.tsx","../src/lib/components/navigation/SidebarCategory.tsx","../src/lib/components/navigation/SidebarItem.tsx","../src/lib/util/useScrollToAnchor.ts"],"sourcesContent":["/**\n * @import {MDXComponents} from 'mdx/types.js'\n * @import {Component, ReactElement, ReactNode} from 'react'\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {ReactElement}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","import React from \"react\";\nimport { Link, type LinkProps, useLocation } from \"react-router\";\nimport { useScrollToHash } from \"../util/useScrollToAnchor.js\";\n\n/**\n * Link that scrolls to anchor even if the hash is already set in the URL.\n */\nexport const AnchorLink = (props: LinkProps) => {\n const location = useLocation();\n const scrollToHash = useScrollToHash();\n const hash = typeof props.to === \"string\" ? props.to : props.to.hash;\n\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n props.onClick?.(event);\n if (!hash?.startsWith(\"#\") || hash !== location.hash) return;\n\n event.preventDefault();\n scrollToHash(hash);\n };\n\n return <Link {...props} onClick={handleClick} />;\n};\n","import { cn } from \"../../util/cn.js\";\n\nexport const ColorMap = {\n green: \"bg-green-400 dark:bg-green-800\",\n blue: \"bg-sky-400 dark:bg-sky-800\",\n yellow: \"bg-yellow-400 dark:bg-yellow-800\",\n red: \"bg-red-400 dark:bg-red-800\",\n purple: \"bg-purple-400 dark:bg-purple-600\",\n indigo: \"bg-indigo-400 dark:bg-indigo-600\",\n gray: \"bg-gray-400 dark:bg-gray-600\",\n};\n\nexport const ColorMapInvert = {\n green: \"text-green-500 dark:text-green-600\",\n blue: \"text-sky-400 dark:text-sky-600\",\n yellow: \"text-yellow-400 dark:text-yellow-600\",\n red: \"text-red-400 dark:text-red-600\",\n purple: \"text-purple-400 dark:text-purple-600\",\n indigo: \"text-indigo-400 dark:text-indigo-600\",\n gray: \"text-gray-400 dark:text-gray-600\",\n};\n\nexport const SidebarBadge = ({\n color,\n label,\n className,\n invert,\n}: {\n color: keyof typeof ColorMap;\n label: string;\n className?: string;\n invert?: boolean;\n}) => {\n return (\n <span\n className={cn(\n \"mt-0.5 flex items-center duration-200 transition-opacity text-center uppercase font-mono text-[0.65rem] font-bold rounded text-background dark:text-zinc-50 h-4 px-1\",\n invert ? ColorMapInvert[color] : ColorMap[color],\n className,\n )}\n >\n {label}\n </span>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { NavLink, useMatch } from \"react-router\";\nimport type { SidebarItemCategory } from \"../../../config/validators/SidebarSchema.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { navigationListItem, SidebarItem } from \"./SidebarItem.js\";\nimport { useIsCategoryOpen } from \"./utils.js\";\n\nexport const SidebarCategory = ({\n category,\n onRequestClose,\n}: {\n category: SidebarItemCategory;\n onRequestClose?: () => void;\n}) => {\n const isCategoryOpen = useIsCategoryOpen(category);\n const [hasInteracted, setHasInteracted] = useState(false);\n\n const isCollapsible = category.collapsible ?? true;\n const isCollapsed = category.collapsed ?? true;\n const isDefaultOpen = Boolean(\n !isCollapsible || !isCollapsed || isCategoryOpen,\n );\n const [open, setOpen] = useState(isDefaultOpen);\n const isActive = useMatch(category.link?.id ?? \"\");\n\n useEffect(() => {\n // this is triggered when an item from the sidebar is clicked\n // and the sidebar, enclosing this item, is not opened\n if (isCategoryOpen) {\n setOpen(true);\n }\n }, [isCategoryOpen]);\n\n const ToggleButton = isCollapsible && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n setOpen((prev) => !prev);\n setHasInteracted(true);\n }}\n >\n <ChevronRightIcon\n size={16}\n className={cn(\n hasInteracted && \"transition\",\n \"shrink-0 group-data-[state=open]:rotate-90\",\n )}\n />\n </button>\n );\n\n return (\n <Collapsible.Root\n className=\"flex flex-col\"\n defaultOpen={isDefaultOpen}\n open={open}\n onOpenChange={() => setOpen(true)}\n >\n <Collapsible.Trigger className=\"group\" asChild disabled={!isCollapsible}>\n <div\n onClick={() => setHasInteracted(true)}\n className={navigationListItem({\n isActive: false,\n className: [\n \"text-start font-medium\",\n isCollapsible || typeof category.link !== \"undefined\"\n ? \"cursor-pointer\"\n : \"cursor-default hover:bg-transparent\",\n ],\n })}\n >\n {category.icon && (\n <category.icon\n size={16}\n className={cn(\"align-[-0.125em] \", isActive && \"text-primary\")}\n />\n )}\n {category.link?.type === \"doc\" ? (\n <NavLink\n to={joinPath(category.link.id)}\n className=\"flex-1 truncate\"\n onClick={() => {\n // if it is the current path and closed then open it because there's no path change to trigger the open\n if (isActive && !open) {\n setOpen(true);\n }\n }}\n >\n <div\n className={cn(\n \"flex items-center gap-2 justify-between w-full\",\n isActive ? \"text-primary\" : \"text-foreground/80\",\n )}\n >\n <div className=\"truncate\">{category.label}</div>\n {ToggleButton}\n </div>\n </NavLink>\n ) : (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex gap-2 truncate w-full\">{category.label}</div>\n {ToggleButton}\n </div>\n )}\n </div>\n </Collapsible.Trigger>\n <Collapsible.Content\n className={cn(\n // CollapsibleContent class is used to animate and it should only be applied when the user has triggered the toggle\n hasInteracted && \"CollapsibleContent\",\n category.items.length === 0 && \"hidden\",\n \"ms-6 my-1\",\n )}\n >\n <ul className=\"relative after:absolute after:-left-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border\">\n {category.items.map((item) => (\n <SidebarItem\n key={\n (\"id\" in item ? item.id : \"\") +\n (\"href\" in item ? item.href : \"\") +\n item.label\n }\n onRequestClose={onRequestClose}\n item={item}\n />\n ))}\n </ul>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { cva } from \"class-variance-authority\";\nimport { ExternalLinkIcon } from \"lucide-react\";\nimport { NavLink, useSearchParams } from \"react-router\";\n\nimport type { SidebarItem as SidebarItemType } from \"../../../config/validators/SidebarSchema.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { AnchorLink } from \"../AnchorLink.js\";\nimport { useViewportAnchor } from \"../context/ViewportAnchorContext.js\";\nimport { SidebarBadge } from \"./SidebarBadge.js\";\nimport { SidebarCategory } from \"./SidebarCategory.js\";\n\nexport const navigationListItem = cva(\n \"flex items-center gap-2 px-[--padding-nav-item] py-1.5 rounded-lg hover:bg-accent\",\n {\n variants: {\n isActive: {\n true: \"text-primary font-medium\",\n false: \"text-foreground/80\",\n },\n isMuted: {\n true: \"text-foreground/30\",\n false: \"\",\n },\n },\n defaultVariants: {\n isActive: false,\n },\n },\n);\n\nexport const DATA_ANCHOR_ATTR = \"data-anchor\";\n\nexport const SidebarItem = ({\n item,\n onRequestClose,\n}: {\n item: SidebarItemType;\n onRequestClose?: () => void;\n}) => {\n const { activeAnchor } = useViewportAnchor();\n const [searchParams] = useSearchParams();\n\n switch (item.type) {\n case \"category\":\n return (\n <SidebarCategory category={item} onRequestClose={onRequestClose} />\n );\n case \"doc\":\n return (\n <NavLink\n className={({ isActive }) => navigationListItem({ isActive })}\n to={joinPath(item.id)}\n onClick={onRequestClose}\n >\n {item.icon && <item.icon size={16} className=\"align-[-0.125em]\" />}\n {item.badge ? (\n <>\n <span className=\"truncate flex-1\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n item.label\n )}\n </NavLink>\n );\n case \"link\":\n return item.href.startsWith(\"#\") ? (\n <AnchorLink\n to={{ hash: item.href, search: searchParams.toString() }}\n {...{ [DATA_ANCHOR_ATTR]: item.href.slice(1) }}\n className={navigationListItem({\n isActive: item.href.slice(1) === activeAnchor,\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n onClick={onRequestClose}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </AnchorLink>\n ) : !item.href.startsWith(\"http\") ? (\n <NavLink\n className={navigationListItem({\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n to={item.href}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </NavLink>\n ) : (\n <a\n className={navigationListItem()}\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onRequestClose}\n >\n <span className=\"whitespace-normal\">{item.label}</span>\n {/* This prevents that the icon would be positioned in its own line if the text fills a line entirely */}\n <span className=\"whitespace-nowrap\">\n <ExternalLinkIcon className=\"inline -translate-y-0.5\" size={12} />\n </span>\n </a>\n );\n }\n};\n","import { useCallback, useEffect } from \"react\";\nimport { useLocation } from \"react-router\";\nimport { useViewportAnchor } from \"../components/context/ViewportAnchorContext.js\";\nimport { DATA_ANCHOR_ATTR } from \"../components/navigation/SidebarItem.js\";\n\nconst scrollIntoViewIfNeeded = (\n element: Element | null,\n options: ScrollIntoViewOptions = { block: \"center\" },\n) => {\n if (!element) return;\n\n const rect = element.getBoundingClientRect();\n const isInView =\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n\n if (isInView) return;\n\n element.scrollIntoView(options);\n};\n\nexport const useScrollToHash = () => {\n const { setActiveAnchor } = useViewportAnchor();\n\n const scrollToHash = useCallback(\n (hash: string) => {\n const cleanHash = hash\n .replace(/^#/, \"\")\n // Operation list items might have subdivisions that the sidebar doesn't show.\n // The subdivisions are separated by a slash so we need to remove everything before the slash to get the sidebar correct item.\n .split(\"/\")\n .at(0)!;\n const element = document.getElementById(decodeURIComponent(cleanHash));\n const link = document.querySelector(\n `[${DATA_ANCHOR_ATTR}=\"${cleanHash}\"]`,\n );\n\n if (element) {\n element.scrollIntoView();\n scrollIntoViewIfNeeded(link);\n requestIdleCallback(() => setActiveAnchor(cleanHash));\n return true;\n }\n\n // Scroll didn't happen\n return false;\n },\n [setActiveAnchor],\n );\n\n return scrollToHash;\n};\n\nexport const useScrollToAnchor = () => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n const scrollToHash = useScrollToHash();\n\n useEffect(() => {\n if (!location.hash) return;\n\n if (!scrollToHash(location.hash)) {\n const observer = new MutationObserver((_, obs) => {\n if (!scrollToHash(location.hash)) return;\n obs.disconnect();\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => observer.disconnect();\n }\n }, [location.hash, setActiveAnchor]);\n};\n"],"names":["emptyComponents","MDXContext","React","useMDXComponents","components","contextComponents","MDXProvider","properties","allComponents","AnchorLink","props","location","useLocation","scrollToHash","useScrollToHash","hash","handleClick","event","_a","jsx","Link","ColorMap","ColorMapInvert","SidebarBadge","color","label","className","invert","cn","SidebarCategory","category","onRequestClose","isCategoryOpen","useIsCategoryOpen","hasInteracted","setHasInteracted","useState","isCollapsible","isCollapsed","isDefaultOpen","open","setOpen","isActive","useMatch","useEffect","ToggleButton","e","prev","ChevronRightIcon","jsxs","Collapsible","navigationListItem","_b","NavLink","joinPath","item","SidebarItem","cva","DATA_ANCHOR_ATTR","activeAnchor","useViewportAnchor","searchParams","useSearchParams","Fragment","ExternalLinkIcon","scrollIntoViewIfNeeded","element","options","rect","setActiveAnchor","useCallback","cleanHash","link","useScrollToAnchor","observer","_","obs"],"mappings":"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","x_google_ignoreList":[0]}