zudoku 0.47.1 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/dist/app/ZuploBuildConfig.d.ts +11 -121
  2. package/dist/app/ZuploBuildConfig.js +8 -8
  3. package/dist/app/ZuploBuildConfig.js.map +1 -1
  4. package/dist/app/demo.js +4 -3
  5. package/dist/app/demo.js.map +1 -1
  6. package/dist/app/entry.client.d.ts +0 -2
  7. package/dist/app/entry.client.js +0 -2
  8. package/dist/app/entry.client.js.map +1 -1
  9. package/dist/app/entry.server.d.ts +0 -2
  10. package/dist/app/entry.server.js +0 -2
  11. package/dist/app/entry.server.js.map +1 -1
  12. package/dist/app/env.d.ts +7 -7
  13. package/dist/app/env.js +8 -0
  14. package/dist/app/env.js.map +1 -1
  15. package/dist/app/main.d.ts +1 -0
  16. package/dist/app/main.js +6 -5
  17. package/dist/app/main.js.map +1 -1
  18. package/dist/app/standalone.js +4 -3
  19. package/dist/app/standalone.js.map +1 -1
  20. package/dist/config/loader.js +1 -2
  21. package/dist/config/loader.js.map +1 -1
  22. package/dist/config/validators/BuildSchema.d.ts +20 -44
  23. package/dist/config/validators/BuildSchema.js +3 -14
  24. package/dist/config/validators/BuildSchema.js.map +1 -1
  25. package/dist/config/validators/InputNavigationSchema.d.ts +7217 -0
  26. package/dist/config/validators/InputNavigationSchema.js +74 -0
  27. package/dist/config/validators/InputNavigationSchema.js.map +1 -0
  28. package/dist/config/validators/InputNavigationSchema.test-d.d.ts +1 -0
  29. package/dist/config/validators/InputNavigationSchema.test-d.js +146 -0
  30. package/dist/config/validators/InputNavigationSchema.test-d.js.map +1 -0
  31. package/dist/config/validators/NavigationSchema.d.ts +44 -0
  32. package/dist/config/validators/NavigationSchema.js +95 -0
  33. package/dist/config/validators/NavigationSchema.js.map +1 -0
  34. package/dist/config/validators/icon-types.d.ts +2 -1
  35. package/dist/config/validators/icon-types.js +1775 -1
  36. package/dist/config/validators/icon-types.js.map +1 -1
  37. package/dist/config/validators/validate.d.ts +451 -5666
  38. package/dist/config/validators/validate.js +59 -66
  39. package/dist/config/validators/validate.js.map +1 -1
  40. package/dist/config/validators/validate.test.js +0 -2
  41. package/dist/config/validators/validate.test.js.map +1 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/lib/auth/issuer.js +1 -1
  45. package/dist/lib/auth/issuer.js.map +1 -1
  46. package/dist/lib/auth/issuer.test.js +1 -1
  47. package/dist/lib/auth/issuer.test.js.map +1 -1
  48. package/dist/lib/authentication/components/CallbackHandler.js +1 -1
  49. package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
  50. package/dist/lib/components/BuildCheck.js +1 -1
  51. package/dist/lib/components/BuildCheck.js.map +1 -1
  52. package/dist/lib/components/Framed.d.ts +7 -0
  53. package/dist/lib/components/Framed.js +26 -0
  54. package/dist/lib/components/Framed.js.map +1 -0
  55. package/dist/lib/components/Header.js +10 -9
  56. package/dist/lib/components/Header.js.map +1 -1
  57. package/dist/lib/components/Heading.d.ts +6 -2
  58. package/dist/lib/components/Heading.js +2 -2
  59. package/dist/lib/components/Heading.js.map +1 -1
  60. package/dist/lib/components/Main.js +4 -4
  61. package/dist/lib/components/Main.js.map +1 -1
  62. package/dist/lib/components/MobileTopNavigation.js +6 -5
  63. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  64. package/dist/lib/components/PageProgress.d.ts +1 -0
  65. package/dist/lib/components/PageProgress.js +20 -0
  66. package/dist/lib/components/PageProgress.js.map +1 -0
  67. package/dist/lib/components/TopNavigation.d.ts +2 -3
  68. package/dist/lib/components/TopNavigation.js +45 -44
  69. package/dist/lib/components/TopNavigation.js.map +1 -1
  70. package/dist/lib/components/context/ZudokuContext.d.ts +3 -7
  71. package/dist/lib/components/context/ZudokuContext.js +44 -26
  72. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  73. package/dist/lib/components/navigation/Navigation.d.ts +5 -0
  74. package/dist/lib/components/navigation/Navigation.js +12 -0
  75. package/dist/lib/components/navigation/Navigation.js.map +1 -0
  76. package/dist/lib/components/navigation/{SidebarBadge.d.ts → NavigationBadge.d.ts} +1 -1
  77. package/dist/lib/components/navigation/{SidebarBadge.js → NavigationBadge.js} +2 -2
  78. package/dist/lib/components/navigation/NavigationBadge.js.map +1 -0
  79. package/dist/lib/components/navigation/NavigationCategory.d.ts +5 -0
  80. package/dist/lib/components/navigation/{SidebarCategory.js → NavigationCategory.js} +14 -12
  81. package/dist/lib/components/navigation/NavigationCategory.js.map +1 -0
  82. package/dist/lib/components/navigation/NavigationItem.d.ts +6 -0
  83. package/dist/lib/components/navigation/NavigationItem.js +47 -0
  84. package/dist/lib/components/navigation/NavigationItem.js.map +1 -0
  85. package/dist/lib/components/navigation/{SidebarWrapper.d.ts → NavigationWrapper.d.ts} +1 -1
  86. package/dist/lib/components/navigation/{SidebarWrapper.js → NavigationWrapper.js} +3 -3
  87. package/dist/lib/components/navigation/NavigationWrapper.js.map +1 -0
  88. package/dist/lib/components/navigation/utils.d.ts +7 -9
  89. package/dist/lib/components/navigation/utils.js +17 -17
  90. package/dist/lib/components/navigation/utils.js.map +1 -1
  91. package/dist/lib/core/ZudokuContext.d.ts +6 -8
  92. package/dist/lib/core/ZudokuContext.js +5 -7
  93. package/dist/lib/core/ZudokuContext.js.map +1 -1
  94. package/dist/lib/core/plugins.d.ts +2 -2
  95. package/dist/lib/hooks/useEvent.test.js +5 -3
  96. package/dist/lib/hooks/useEvent.test.js.map +1 -1
  97. package/dist/lib/plugins/api-catalog/Catalog.d.ts +1 -1
  98. package/dist/lib/plugins/api-catalog/index.d.ts +6 -6
  99. package/dist/lib/plugins/api-catalog/index.js +10 -10
  100. package/dist/lib/plugins/api-catalog/index.js.map +1 -1
  101. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +6 -6
  102. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  103. package/dist/lib/plugins/custom-pages/index.d.ts +3 -2
  104. package/dist/lib/plugins/custom-pages/index.js +15 -8
  105. package/dist/lib/plugins/custom-pages/index.js.map +1 -1
  106. package/dist/lib/plugins/markdown/MdxPage.js +6 -3
  107. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  108. package/dist/lib/plugins/markdown/index.d.ts +2 -1
  109. package/dist/lib/plugins/markdown/index.js +9 -26
  110. package/dist/lib/plugins/markdown/index.js.map +1 -1
  111. package/dist/lib/plugins/openapi/OperationList.js +1 -1
  112. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  113. package/dist/lib/plugins/openapi/OperationListItem.js +1 -1
  114. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  115. package/dist/lib/plugins/openapi/SchemaList.js +1 -1
  116. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  117. package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
  118. package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
  119. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  120. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +3 -3
  121. package/dist/lib/plugins/openapi/graphql/graphql.js +2 -2
  122. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  123. package/dist/lib/plugins/openapi/index.d.ts +3 -3
  124. package/dist/lib/plugins/openapi/index.js +9 -9
  125. package/dist/lib/plugins/openapi/index.js.map +1 -1
  126. package/dist/lib/plugins/openapi/interfaces.d.ts +3 -3
  127. package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
  128. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  129. package/dist/lib/plugins/openapi/util/createNavigationCategory.d.ts +9 -0
  130. package/dist/lib/plugins/openapi/util/{createSidebarCategory.js → createNavigationCategory.js} +5 -4
  131. package/dist/lib/plugins/openapi/util/createNavigationCategory.js.map +1 -0
  132. package/dist/lib/plugins/openapi/util/getRoutes.js +2 -2
  133. package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
  134. package/dist/lib/plugins/openapi/util/methodColorMap.d.ts +1 -1
  135. package/dist/lib/ui/CodeBlock.js +1 -1
  136. package/dist/lib/ui/CodeBlock.js.map +1 -1
  137. package/dist/lib/util/MdxComponents.d.ts +6 -0
  138. package/dist/lib/util/MdxComponents.js +4 -2
  139. package/dist/lib/util/MdxComponents.js.map +1 -1
  140. package/dist/lib/util/useScrollToAnchor.js +3 -3
  141. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  142. package/dist/vite/api/SchemaManager.d.ts +4 -4
  143. package/dist/vite/api/SchemaManager.js +19 -19
  144. package/dist/vite/api/SchemaManager.js.map +1 -1
  145. package/dist/vite/api/SchemaManager.test.js +4 -4
  146. package/dist/vite/api/SchemaManager.test.js.map +1 -1
  147. package/dist/vite/config.js +1 -0
  148. package/dist/vite/config.js.map +1 -1
  149. package/dist/vite/css/plugin.js +11 -0
  150. package/dist/vite/css/plugin.js.map +1 -1
  151. package/dist/vite/plugin-api.js +8 -8
  152. package/dist/vite/plugin-api.js.map +1 -1
  153. package/dist/vite/plugin-config-reload.js +2 -0
  154. package/dist/vite/plugin-config-reload.js.map +1 -1
  155. package/dist/vite/plugin-custom-pages.js +2 -2
  156. package/dist/vite/plugin-custom-pages.js.map +1 -1
  157. package/dist/vite/plugin-docs.js +61 -59
  158. package/dist/vite/plugin-docs.js.map +1 -1
  159. package/dist/vite/plugin-mdx.js +4 -2
  160. package/dist/vite/plugin-mdx.js.map +1 -1
  161. package/dist/vite/{plugin-sidebar.d.ts → plugin-navigation.d.ts} +1 -1
  162. package/dist/vite/{plugin-sidebar.js → plugin-navigation.js} +20 -19
  163. package/dist/vite/plugin-navigation.js.map +1 -0
  164. package/dist/vite/plugin-theme.d.ts +8 -0
  165. package/dist/vite/plugin-theme.js +223 -0
  166. package/dist/vite/plugin-theme.js.map +1 -0
  167. package/dist/vite/plugin-theme.test.d.ts +1 -0
  168. package/dist/vite/plugin-theme.test.js +270 -0
  169. package/dist/vite/plugin-theme.test.js.map +1 -0
  170. package/dist/vite/plugin.js +4 -6
  171. package/dist/vite/plugin.js.map +1 -1
  172. package/dist/vite/shadcn-registry.d.ts +45 -0
  173. package/dist/vite/shadcn-registry.js +29 -0
  174. package/dist/vite/shadcn-registry.js.map +1 -0
  175. package/lib/Drawer-BzkOKwgC.js.map +1 -1
  176. package/lib/{Markdown-r4buN85T.js → Markdown-DCAIYXF5.js} +885 -840
  177. package/lib/Markdown-DCAIYXF5.js.map +1 -0
  178. package/lib/{MdxPage-DYKsTerz.js → MdxPage-Cf9YXWoC.js} +30 -30
  179. package/lib/MdxPage-Cf9YXWoC.js.map +1 -0
  180. package/lib/OasProvider-JMVTfG6_.js +35 -0
  181. package/lib/OasProvider-JMVTfG6_.js.map +1 -0
  182. package/lib/{OperationList-BCVHtZNK.js → OperationList-m4tFCI4S.js} +8 -8
  183. package/lib/{OperationList-BCVHtZNK.js.map → OperationList-m4tFCI4S.js.map} +1 -1
  184. package/lib/{RouteGuard-B7GVW4oL.js → RouteGuard-gV7nvzi7.js} +2 -2
  185. package/lib/{RouteGuard-B7GVW4oL.js.map → RouteGuard-gV7nvzi7.js.map} +1 -1
  186. package/lib/{SchemaList-1oJKvBxh.js → SchemaList-_wRy4aQ0.js} +20 -20
  187. package/lib/SchemaList-_wRy4aQ0.js.map +1 -0
  188. package/lib/{SchemaView-CTqaB-79.js → SchemaView-CRl_cQYH.js} +13 -13
  189. package/lib/{SchemaView-CTqaB-79.js.map → SchemaView-CRl_cQYH.js.map} +1 -1
  190. package/lib/{SignUp-CRIKdWt9.js → SignUp-B6w5AwHM.js} +2 -2
  191. package/lib/{SignUp-CRIKdWt9.js.map → SignUp-B6w5AwHM.js.map} +1 -1
  192. package/lib/{Slot-B5qSAnwR.js → Slot-BkYrj_uC.js} +4 -4
  193. package/lib/{Slot-B5qSAnwR.js.map → Slot-BkYrj_uC.js.map} +1 -1
  194. package/lib/{SyntaxHighlight-CqKHkyEy.js → SyntaxHighlight-CH9OUJre.js} +2 -2
  195. package/lib/{SyntaxHighlight-CqKHkyEy.js.map → SyntaxHighlight-CH9OUJre.js.map} +1 -1
  196. package/lib/{Toc-lxYQEOzX.js → Toc-DRxqEsFc.js} +2 -2
  197. package/lib/{Toc-lxYQEOzX.js.map → Toc-DRxqEsFc.js.map} +1 -1
  198. package/lib/{circular-ZGGPtwMq.js → circular-wJaV4vh_.js} +2 -2
  199. package/lib/{circular-ZGGPtwMq.js.map → circular-wJaV4vh_.js.map} +1 -1
  200. package/lib/clerk-yAKDC3Qz.js.map +1 -1
  201. package/lib/{createServer-DUBpXfvA.js → createServer-DN5AJLcN.js} +3 -3
  202. package/lib/{createServer-DUBpXfvA.js.map → createServer-DN5AJLcN.js.map} +1 -1
  203. package/lib/{errors-D27ZTQgx.js → errors-D_5vKvUq.js} +10 -10
  204. package/lib/{errors-D27ZTQgx.js.map → errors-D_5vKvUq.js.map} +1 -1
  205. package/lib/hook-CHXroBFt.js +1503 -0
  206. package/lib/hook-CHXroBFt.js.map +1 -0
  207. package/lib/index-CrcNWbel.js.map +1 -1
  208. package/lib/{index-Cucjfk3D.js → index-DJVaRmzI.js} +63 -62
  209. package/lib/index-DJVaRmzI.js.map +1 -0
  210. package/lib/index-QzXzw_ra.js.map +1 -1
  211. package/lib/{mutation-C1XCQTQL.js → mutation-BpcyTgWI.js} +2 -2
  212. package/lib/{mutation-C1XCQTQL.js.map → mutation-BpcyTgWI.js.map} +1 -1
  213. package/lib/ui/CodeBlock.js +7 -7
  214. package/lib/ui/CodeBlock.js.map +1 -1
  215. package/lib/ui/SyntaxHighlight.js +2 -2
  216. package/lib/{useMutation-BKvPttRn.js → useMutation-N4ockVKi.js} +3 -3
  217. package/lib/{useMutation-BKvPttRn.js.map → useMutation-N4ockVKi.js.map} +1 -1
  218. package/lib/zudoku.auth-auth0.js +1 -1
  219. package/lib/zudoku.auth-azureb2c.js +2 -2
  220. package/lib/zudoku.auth-clerk.js +2 -2
  221. package/lib/zudoku.auth-openid.js +2 -2
  222. package/lib/zudoku.components.js +2756 -3423
  223. package/lib/zudoku.components.js.map +1 -1
  224. package/lib/zudoku.hooks.js +2 -2
  225. package/lib/zudoku.plugin-api-catalog.js +44 -44
  226. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  227. package/lib/zudoku.plugin-api-keys.js +84 -73
  228. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  229. package/lib/zudoku.plugin-custom-pages.js +22 -16
  230. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  231. package/lib/zudoku.plugin-markdown.js +20 -69
  232. package/lib/zudoku.plugin-markdown.js.map +1 -1
  233. package/lib/zudoku.plugin-openapi.js +5 -5
  234. package/lib/zudoku.plugin-search-pagefind.js +2 -2
  235. package/lib/zudoku.plugins.js.map +1 -1
  236. package/package.json +16 -13
  237. package/src/app/ZuploBuildConfig.ts +8 -8
  238. package/src/app/defaultTheme.css +68 -49
  239. package/src/app/demo.tsx +4 -3
  240. package/src/app/entry.client.tsx +0 -2
  241. package/src/app/entry.server.tsx +0 -2
  242. package/src/app/env.ts +8 -0
  243. package/src/app/main.css +6 -52
  244. package/src/app/main.tsx +7 -5
  245. package/src/app/standalone.tsx +4 -3
  246. package/src/lib/auth/issuer.test.ts +1 -1
  247. package/src/lib/auth/issuer.ts +1 -1
  248. package/src/lib/authentication/components/CallbackHandler.tsx +1 -1
  249. package/src/lib/components/BuildCheck.tsx +1 -1
  250. package/src/lib/components/Framed.tsx +51 -0
  251. package/src/lib/components/Header.tsx +5 -3
  252. package/src/lib/components/Heading.tsx +7 -3
  253. package/src/lib/components/Main.tsx +8 -8
  254. package/src/lib/components/MobileTopNavigation.tsx +16 -11
  255. package/src/lib/components/PageProgress.tsx +28 -0
  256. package/src/lib/components/TopNavigation.tsx +57 -66
  257. package/src/lib/components/context/ZudokuContext.ts +50 -32
  258. package/src/lib/components/navigation/{Sidebar.tsx → Navigation.tsx} +18 -16
  259. package/src/lib/components/navigation/{SidebarBadge.tsx → NavigationBadge.tsx} +1 -1
  260. package/src/lib/components/navigation/{SidebarCategory.tsx → NavigationCategory.tsx} +16 -14
  261. package/src/lib/components/navigation/{SidebarItem.tsx → NavigationItem.tsx} +23 -17
  262. package/src/lib/components/navigation/{SidebarWrapper.tsx → NavigationWrapper.tsx} +2 -2
  263. package/src/lib/components/navigation/utils.ts +27 -28
  264. package/src/lib/core/ZudokuContext.ts +9 -15
  265. package/src/lib/core/plugins.ts +2 -2
  266. package/src/lib/hooks/useEvent.test.tsx +7 -5
  267. package/src/lib/plugins/api-catalog/Catalog.tsx +1 -1
  268. package/src/lib/plugins/api-catalog/index.tsx +19 -19
  269. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +14 -10
  270. package/src/lib/plugins/custom-pages/index.tsx +20 -11
  271. package/src/lib/plugins/markdown/MdxPage.tsx +6 -3
  272. package/src/lib/plugins/markdown/index.tsx +19 -40
  273. package/src/lib/plugins/openapi/OperationList.tsx +1 -1
  274. package/src/lib/plugins/openapi/OperationListItem.tsx +1 -1
  275. package/src/lib/plugins/openapi/SchemaList.tsx +2 -2
  276. package/src/lib/plugins/openapi/graphql/gql.ts +5 -5
  277. package/src/lib/plugins/openapi/graphql/graphql.ts +6 -6
  278. package/src/lib/plugins/openapi/index.tsx +11 -11
  279. package/src/lib/plugins/openapi/interfaces.ts +3 -3
  280. package/src/lib/plugins/openapi/schema/SchemaView.tsx +1 -1
  281. package/src/lib/plugins/openapi/util/{createSidebarCategory.tsx → createNavigationCategory.tsx} +6 -5
  282. package/src/lib/plugins/openapi/util/getRoutes.tsx +2 -2
  283. package/src/lib/plugins/openapi/util/methodColorMap.tsx +1 -1
  284. package/src/lib/ui/CodeBlock.tsx +1 -1
  285. package/src/lib/util/MdxComponents.tsx +13 -2
  286. package/src/lib/util/useScrollToAnchor.ts +3 -3
  287. package/dist/config/validators/InputSidebarSchema.d.ts +0 -220
  288. package/dist/config/validators/InputSidebarSchema.js +0 -63
  289. package/dist/config/validators/InputSidebarSchema.js.map +0 -1
  290. package/dist/config/validators/SidebarSchema.d.ts +0 -46
  291. package/dist/config/validators/SidebarSchema.js +0 -118
  292. package/dist/config/validators/SidebarSchema.js.map +0 -1
  293. package/dist/lib/components/navigation/Sidebar.d.ts +0 -5
  294. package/dist/lib/components/navigation/Sidebar.js +0 -10
  295. package/dist/lib/components/navigation/Sidebar.js.map +0 -1
  296. package/dist/lib/components/navigation/SidebarBadge.js.map +0 -1
  297. package/dist/lib/components/navigation/SidebarCategory.d.ts +0 -5
  298. package/dist/lib/components/navigation/SidebarCategory.js.map +0 -1
  299. package/dist/lib/components/navigation/SidebarItem.d.ts +0 -6
  300. package/dist/lib/components/navigation/SidebarItem.js +0 -44
  301. package/dist/lib/components/navigation/SidebarItem.js.map +0 -1
  302. package/dist/lib/components/navigation/SidebarWrapper.js.map +0 -1
  303. package/dist/lib/plugins/markdown/resolver.d.ts +0 -32
  304. package/dist/lib/plugins/markdown/resolver.js +0 -46
  305. package/dist/lib/plugins/markdown/resolver.js.map +0 -1
  306. package/dist/lib/plugins/openapi/util/createSidebarCategory.d.ts +0 -9
  307. package/dist/lib/plugins/openapi/util/createSidebarCategory.js.map +0 -1
  308. package/dist/vite/plugin-configure-tailwind.d.ts +0 -2
  309. package/dist/vite/plugin-configure-tailwind.js +0 -38
  310. package/dist/vite/plugin-configure-tailwind.js.map +0 -1
  311. package/dist/vite/plugin-sidebar.js.map +0 -1
  312. package/dist/vite/plugin-theme-css.d.ts +0 -5
  313. package/dist/vite/plugin-theme-css.js +0 -77
  314. package/dist/vite/plugin-theme-css.js.map +0 -1
  315. package/lib/Markdown-r4buN85T.js.map +0 -1
  316. package/lib/MdxPage-DYKsTerz.js.map +0 -1
  317. package/lib/OasProvider-8vNiLpIG.js +0 -33
  318. package/lib/OasProvider-8vNiLpIG.js.map +0 -1
  319. package/lib/SchemaList-1oJKvBxh.js.map +0 -1
  320. package/lib/hook-7wZANGJP.js +0 -1483
  321. package/lib/hook-7wZANGJP.js.map +0 -1
  322. package/lib/index-Cucjfk3D.js.map +0 -1
  323. package/lib/joinPath-B7kNnUX4.js +0 -8
  324. package/lib/joinPath-B7kNnUX4.js.map +0 -1
  325. package/src/lib/plugins/markdown/resolver.ts +0 -59
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Cucjfk3D.js","sources":["../src/lib/plugins/openapi/client/GraphQLClient.tsx","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/jsutils/devAssert.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/jsutils/isObjectLike.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/jsutils/invariant.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/language/location.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/language/printLocation.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/error/GraphQLError.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/error/syntaxError.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/language/ast.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/language/characterClasses.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/language/blockString.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/language/tokenKind.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/language/lexer.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/jsutils/inspect.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/jsutils/instanceOf.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/language/source.mjs","../../../node_modules/.pnpm/graphql@16.11.0/node_modules/graphql/utilities/stripIgnoredCharacters.mjs","../src/lib/plugins/openapi/client/GraphQLContext.tsx","../src/lib/plugins/openapi/client/useCreateQuery.ts","../src/lib/plugins/openapi/graphql/graphql.ts","../src/lib/plugins/openapi/graphql/gql.ts","../src/lib/ui/Select.tsx","../src/lib/components/PathRenderer.tsx","../src/lib/util/pastellize.ts","../src/lib/plugins/openapi/ColorizedParam.tsx","../src/lib/plugins/openapi/state.ts","../src/lib/ui/Textarea.tsx","../src/lib/ui/DropdownMenu.tsx","../src/lib/plugins/openapi/playground/ExamplesDropdown.tsx","../src/lib/plugins/openapi/playground/BodyPanel.tsx","../src/lib/plugins/openapi/playground/createUrl.ts","../src/lib/plugins/openapi/playground/fileUtils.ts","../src/lib/ui/Checkbox.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/ui/Label.tsx","../src/lib/ui/RadioGroup.tsx","../src/lib/plugins/openapi/playground/IdentitySelector.tsx","../src/lib/plugins/openapi/playground/IdentityDialog.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/playground/rememberedIdentity.ts","../src/lib/plugins/openapi/playground/RequestLoginDialog.tsx","../src/lib/plugins/openapi/util/methodToColor.ts","../src/lib/plugins/openapi/playground/result-panel/RequestTab.tsx","../src/lib/ui/Collapsible.tsx","../src/lib/util/humanFileSize.ts","../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/useRememberSkipLoginDialog.tsx","../src/lib/plugins/openapi/playground/Playground.tsx","../src/lib/plugins/openapi/playground/PlaygroundDialog.tsx","../src/lib/plugins/openapi/util/methodColorMap.tsx","../src/lib/plugins/openapi/util/createSidebarCategory.tsx","../src/lib/plugins/openapi/context.tsx","../src/lib/plugins/openapi/util/getRoutes.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,\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","export function devAssert(condition, message) {\n const booleanCondition = Boolean(condition);\n\n if (!booleanCondition) {\n throw new Error(message);\n }\n}\n","/**\n * Return true if `value` is object-like. A value is object-like if it's not\n * `null` and has a `typeof` result of \"object\".\n */\nexport function isObjectLike(value) {\n return typeof value == 'object' && value !== null;\n}\n","export function invariant(condition, message) {\n const booleanCondition = Boolean(condition);\n\n if (!booleanCondition) {\n throw new Error(\n message != null ? message : 'Unexpected invariant triggered.',\n );\n }\n}\n","import { invariant } from '../jsutils/invariant.mjs';\nconst LineRegExp = /\\r\\n|[\\n\\r]/g;\n/**\n * Represents a location in a Source.\n */\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nexport function getLocation(source, position) {\n let lastLineStart = 0;\n let line = 1;\n\n for (const match of source.body.matchAll(LineRegExp)) {\n typeof match.index === 'number' || invariant(false);\n\n if (match.index >= position) {\n break;\n }\n\n lastLineStart = match.index + match[0].length;\n line += 1;\n }\n\n return {\n line,\n column: position + 1 - lastLineStart,\n };\n}\n","import { getLocation } from './location.mjs';\n\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\nexport function printLocation(location) {\n return printSourceLocation(\n location.source,\n getLocation(location.source, location.start),\n );\n}\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nexport function printSourceLocation(source, sourceLocation) {\n const firstLineColumnOffset = source.locationOffset.column - 1;\n const body = ''.padStart(firstLineColumnOffset) + source.body;\n const lineIndex = sourceLocation.line - 1;\n const lineOffset = source.locationOffset.line - 1;\n const lineNum = sourceLocation.line + lineOffset;\n const columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;\n const columnNum = sourceLocation.column + columnOffset;\n const locationStr = `${source.name}:${lineNum}:${columnNum}\\n`;\n const lines = body.split(/\\r\\n|[\\n\\r]/g);\n const locationLine = lines[lineIndex]; // Special case for minified documents\n\n if (locationLine.length > 120) {\n const subLineIndex = Math.floor(columnNum / 80);\n const subLineColumnNum = columnNum % 80;\n const subLines = [];\n\n for (let i = 0; i < locationLine.length; i += 80) {\n subLines.push(locationLine.slice(i, i + 80));\n }\n\n return (\n locationStr +\n printPrefixedLines([\n [`${lineNum} |`, subLines[0]],\n ...subLines.slice(1, subLineIndex + 1).map((subLine) => ['|', subLine]),\n ['|', '^'.padStart(subLineColumnNum)],\n ['|', subLines[subLineIndex + 1]],\n ])\n );\n }\n\n return (\n locationStr +\n printPrefixedLines([\n // Lines specified like this: [\"prefix\", \"string\"],\n [`${lineNum - 1} |`, lines[lineIndex - 1]],\n [`${lineNum} |`, locationLine],\n ['|', '^'.padStart(columnNum)],\n [`${lineNum + 1} |`, lines[lineIndex + 1]],\n ])\n );\n}\n\nfunction printPrefixedLines(lines) {\n const existingLines = lines.filter(([_, line]) => line !== undefined);\n const padLen = Math.max(...existingLines.map(([prefix]) => prefix.length));\n return existingLines\n .map(([prefix, line]) => prefix.padStart(padLen) + (line ? ' ' + line : ''))\n .join('\\n');\n}\n","import { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { getLocation } from '../language/location.mjs';\nimport {\n printLocation,\n printSourceLocation,\n} from '../language/printLocation.mjs';\n\nfunction toNormalizedOptions(args) {\n const firstArg = args[0];\n\n if (firstArg == null || 'kind' in firstArg || 'length' in firstArg) {\n return {\n nodes: firstArg,\n source: args[1],\n positions: args[2],\n path: args[3],\n originalError: args[4],\n extensions: args[5],\n };\n }\n\n return firstArg;\n}\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n\nexport class GraphQLError extends Error {\n /**\n * An array of `{ line, column }` locations within the source GraphQL document\n * which correspond to this error.\n *\n * Errors during validation often contain multiple locations, for example to\n * point out two things with the same name. Errors during execution include a\n * single location, the field which produced the error.\n *\n * Enumerable, and appears in the result of JSON.stringify().\n */\n\n /**\n * An array describing the JSON-path into the execution response which\n * corresponds to this error. Only included for errors during execution.\n *\n * Enumerable, and appears in the result of JSON.stringify().\n */\n\n /**\n * An array of GraphQL AST Nodes corresponding to this error.\n */\n\n /**\n * The source GraphQL document for the first location of this error.\n *\n * Note that if this Error represents more than one node, the source may not\n * represent nodes after the first node.\n */\n\n /**\n * An array of character offsets within the source GraphQL document\n * which correspond to this error.\n */\n\n /**\n * The original error thrown from a field resolver during execution.\n */\n\n /**\n * Extension fields to add to the formatted error.\n */\n\n /**\n * @deprecated Please use the `GraphQLErrorOptions` constructor overload instead.\n */\n constructor(message, ...rawArgs) {\n var _this$nodes, _nodeLocations$, _ref;\n\n const { nodes, source, positions, path, originalError, extensions } =\n toNormalizedOptions(rawArgs);\n super(message);\n this.name = 'GraphQLError';\n this.path = path !== null && path !== void 0 ? path : undefined;\n this.originalError =\n originalError !== null && originalError !== void 0\n ? originalError\n : undefined; // Compute list of blame nodes.\n\n this.nodes = undefinedIfEmpty(\n Array.isArray(nodes) ? nodes : nodes ? [nodes] : undefined,\n );\n const nodeLocations = undefinedIfEmpty(\n (_this$nodes = this.nodes) === null || _this$nodes === void 0\n ? void 0\n : _this$nodes.map((node) => node.loc).filter((loc) => loc != null),\n ); // Compute locations in the source for the given nodes/positions.\n\n this.source =\n source !== null && source !== void 0\n ? source\n : nodeLocations === null || nodeLocations === void 0\n ? void 0\n : (_nodeLocations$ = nodeLocations[0]) === null ||\n _nodeLocations$ === void 0\n ? void 0\n : _nodeLocations$.source;\n this.positions =\n positions !== null && positions !== void 0\n ? positions\n : nodeLocations === null || nodeLocations === void 0\n ? void 0\n : nodeLocations.map((loc) => loc.start);\n this.locations =\n positions && source\n ? positions.map((pos) => getLocation(source, pos))\n : nodeLocations === null || nodeLocations === void 0\n ? void 0\n : nodeLocations.map((loc) => getLocation(loc.source, loc.start));\n const originalExtensions = isObjectLike(\n originalError === null || originalError === void 0\n ? void 0\n : originalError.extensions,\n )\n ? originalError === null || originalError === void 0\n ? void 0\n : originalError.extensions\n : undefined;\n this.extensions =\n (_ref =\n extensions !== null && extensions !== void 0\n ? extensions\n : originalExtensions) !== null && _ref !== void 0\n ? _ref\n : Object.create(null); // Only properties prescribed by the spec should be enumerable.\n // Keep the rest as non-enumerable.\n\n Object.defineProperties(this, {\n message: {\n writable: true,\n enumerable: true,\n },\n name: {\n enumerable: false,\n },\n nodes: {\n enumerable: false,\n },\n source: {\n enumerable: false,\n },\n positions: {\n enumerable: false,\n },\n originalError: {\n enumerable: false,\n },\n }); // Include (non-enumerable) stack trace.\n\n /* c8 ignore start */\n // FIXME: https://github.com/graphql/graphql-js/issues/2317\n\n if (\n originalError !== null &&\n originalError !== void 0 &&\n originalError.stack\n ) {\n Object.defineProperty(this, 'stack', {\n value: originalError.stack,\n writable: true,\n configurable: true,\n });\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, GraphQLError);\n } else {\n Object.defineProperty(this, 'stack', {\n value: Error().stack,\n writable: true,\n configurable: true,\n });\n }\n /* c8 ignore stop */\n }\n\n get [Symbol.toStringTag]() {\n return 'GraphQLError';\n }\n\n toString() {\n let output = this.message;\n\n if (this.nodes) {\n for (const node of this.nodes) {\n if (node.loc) {\n output += '\\n\\n' + printLocation(node.loc);\n }\n }\n } else if (this.source && this.locations) {\n for (const location of this.locations) {\n output += '\\n\\n' + printSourceLocation(this.source, location);\n }\n }\n\n return output;\n }\n\n toJSON() {\n const formattedError = {\n message: this.message,\n };\n\n if (this.locations != null) {\n formattedError.locations = this.locations;\n }\n\n if (this.path != null) {\n formattedError.path = this.path;\n }\n\n if (this.extensions != null && Object.keys(this.extensions).length > 0) {\n formattedError.extensions = this.extensions;\n }\n\n return formattedError;\n }\n}\n\nfunction undefinedIfEmpty(array) {\n return array === undefined || array.length === 0 ? undefined : array;\n}\n/**\n * See: https://spec.graphql.org/draft/#sec-Errors\n */\n\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n *\n * @deprecated Please use `error.toString` instead. Will be removed in v17\n */\nexport function printError(error) {\n return error.toString();\n}\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n *\n * @deprecated Please use `error.toJSON` instead. Will be removed in v17\n */\n\nexport function formatError(error) {\n return error.toJSON();\n}\n","import { GraphQLError } from './GraphQLError.mjs';\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\n\nexport function syntaxError(source, position, description) {\n return new GraphQLError(`Syntax Error: ${description}`, {\n source,\n positions: [position],\n });\n}\n","/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport class Location {\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The Token at which this Node begins.\n */\n\n /**\n * The Token at which this Node ends.\n */\n\n /**\n * The Source document the AST represents.\n */\n constructor(startToken, endToken, source) {\n this.start = startToken.start;\n this.end = endToken.end;\n this.startToken = startToken;\n this.endToken = endToken;\n this.source = source;\n }\n\n get [Symbol.toStringTag]() {\n return 'Location';\n }\n\n toJSON() {\n return {\n start: this.start,\n end: this.end,\n };\n }\n}\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexport class Token {\n /**\n * The kind of Token.\n */\n\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The 1-indexed line number on which this Token appears.\n */\n\n /**\n * The 1-indexed column number at which this Token begins.\n */\n\n /**\n * For non-punctuation tokens, represents the interpreted value of the token.\n *\n * Note: is undefined for punctuation tokens, but typed as string for\n * convenience in the parser.\n */\n\n /**\n * Tokens exist as nodes in a double-linked-list amongst all tokens\n * including ignored tokens. <SOF> is always the first node and <EOF>\n * the last.\n */\n constructor(kind, start, end, line, column, value) {\n this.kind = kind;\n this.start = start;\n this.end = end;\n this.line = line;\n this.column = column; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n this.value = value;\n this.prev = null;\n this.next = null;\n }\n\n get [Symbol.toStringTag]() {\n return 'Token';\n }\n\n toJSON() {\n return {\n kind: this.kind,\n value: this.value,\n line: this.line,\n column: this.column,\n };\n }\n}\n/**\n * The list of all possible AST node types.\n */\n\n/**\n * @internal\n */\nexport const QueryDocumentKeys = {\n Name: [],\n Document: ['definitions'],\n OperationDefinition: [\n 'name',\n 'variableDefinitions',\n 'directives',\n 'selectionSet',\n ],\n VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],\n Variable: ['name'],\n SelectionSet: ['selections'],\n Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n Argument: ['name', 'value'],\n FragmentSpread: ['name', 'directives'],\n InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n FragmentDefinition: [\n 'name', // Note: fragment variable definitions are deprecated and will removed in v17.0.0\n 'variableDefinitions',\n 'typeCondition',\n 'directives',\n 'selectionSet',\n ],\n IntValue: [],\n FloatValue: [],\n StringValue: [],\n BooleanValue: [],\n NullValue: [],\n EnumValue: [],\n ListValue: ['values'],\n ObjectValue: ['fields'],\n ObjectField: ['name', 'value'],\n Directive: ['name', 'arguments'],\n NamedType: ['name'],\n ListType: ['type'],\n NonNullType: ['type'],\n SchemaDefinition: ['description', 'directives', 'operationTypes'],\n OperationTypeDefinition: ['type'],\n ScalarTypeDefinition: ['description', 'name', 'directives'],\n ObjectTypeDefinition: [\n 'description',\n 'name',\n 'interfaces',\n 'directives',\n 'fields',\n ],\n FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n InputValueDefinition: [\n 'description',\n 'name',\n 'type',\n 'defaultValue',\n 'directives',\n ],\n InterfaceTypeDefinition: [\n 'description',\n 'name',\n 'interfaces',\n 'directives',\n 'fields',\n ],\n UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n EnumValueDefinition: ['description', 'name', 'directives'],\n InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n SchemaExtension: ['directives', 'operationTypes'],\n ScalarTypeExtension: ['name', 'directives'],\n ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n UnionTypeExtension: ['name', 'directives', 'types'],\n EnumTypeExtension: ['name', 'directives', 'values'],\n InputObjectTypeExtension: ['name', 'directives', 'fields'],\n};\nconst kindValues = new Set(Object.keys(QueryDocumentKeys));\n/**\n * @internal\n */\n\nexport function isNode(maybeNode) {\n const maybeKind =\n maybeNode === null || maybeNode === void 0 ? void 0 : maybeNode.kind;\n return typeof maybeKind === 'string' && kindValues.has(maybeKind);\n}\n/** Name */\n\nvar OperationTypeNode;\n\n(function (OperationTypeNode) {\n OperationTypeNode['QUERY'] = 'query';\n OperationTypeNode['MUTATION'] = 'mutation';\n OperationTypeNode['SUBSCRIPTION'] = 'subscription';\n})(OperationTypeNode || (OperationTypeNode = {}));\n\nexport { OperationTypeNode };\n","/**\n * ```\n * WhiteSpace ::\n * - \"Horizontal Tab (U+0009)\"\n * - \"Space (U+0020)\"\n * ```\n * @internal\n */\nexport function isWhiteSpace(code) {\n return code === 0x0009 || code === 0x0020;\n}\n/**\n * ```\n * Digit :: one of\n * - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * ```\n * @internal\n */\n\nexport function isDigit(code) {\n return code >= 0x0030 && code <= 0x0039;\n}\n/**\n * ```\n * Letter :: one of\n * - `A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`\n * - `N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`\n * - `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`\n * - `n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`\n * ```\n * @internal\n */\n\nexport function isLetter(code) {\n return (\n (code >= 0x0061 && code <= 0x007a) || // A-Z\n (code >= 0x0041 && code <= 0x005a) // a-z\n );\n}\n/**\n * ```\n * NameStart ::\n * - Letter\n * - `_`\n * ```\n * @internal\n */\n\nexport function isNameStart(code) {\n return isLetter(code) || code === 0x005f;\n}\n/**\n * ```\n * NameContinue ::\n * - Letter\n * - Digit\n * - `_`\n * ```\n * @internal\n */\n\nexport function isNameContinue(code) {\n return isLetter(code) || isDigit(code) || code === 0x005f;\n}\n","import { isWhiteSpace } from './characterClasses.mjs';\n/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\n\nexport function dedentBlockStringLines(lines) {\n var _firstNonEmptyLine2;\n\n let commonIndent = Number.MAX_SAFE_INTEGER;\n let firstNonEmptyLine = null;\n let lastNonEmptyLine = -1;\n\n for (let i = 0; i < lines.length; ++i) {\n var _firstNonEmptyLine;\n\n const line = lines[i];\n const indent = leadingWhitespace(line);\n\n if (indent === line.length) {\n continue; // skip empty lines\n }\n\n firstNonEmptyLine =\n (_firstNonEmptyLine = firstNonEmptyLine) !== null &&\n _firstNonEmptyLine !== void 0\n ? _firstNonEmptyLine\n : i;\n lastNonEmptyLine = i;\n\n if (i !== 0 && indent < commonIndent) {\n commonIndent = indent;\n }\n }\n\n return lines // Remove common indentation from all lines but first.\n .map((line, i) => (i === 0 ? line : line.slice(commonIndent))) // Remove leading and trailing blank lines.\n .slice(\n (_firstNonEmptyLine2 = firstNonEmptyLine) !== null &&\n _firstNonEmptyLine2 !== void 0\n ? _firstNonEmptyLine2\n : 0,\n lastNonEmptyLine + 1,\n );\n}\n\nfunction leadingWhitespace(str) {\n let i = 0;\n\n while (i < str.length && isWhiteSpace(str.charCodeAt(i))) {\n ++i;\n }\n\n return i;\n}\n/**\n * @internal\n */\n\nexport function isPrintableAsBlockString(value) {\n if (value === '') {\n return true; // empty string is printable\n }\n\n let isEmptyLine = true;\n let hasIndent = false;\n let hasCommonIndent = true;\n let seenNonEmptyLine = false;\n\n for (let i = 0; i < value.length; ++i) {\n switch (value.codePointAt(i)) {\n case 0x0000:\n case 0x0001:\n case 0x0002:\n case 0x0003:\n case 0x0004:\n case 0x0005:\n case 0x0006:\n case 0x0007:\n case 0x0008:\n case 0x000b:\n case 0x000c:\n case 0x000e:\n case 0x000f:\n return false;\n // Has non-printable characters\n\n case 0x000d:\n // \\r\n return false;\n // Has \\r or \\r\\n which will be replaced as \\n\n\n case 10:\n // \\n\n if (isEmptyLine && !seenNonEmptyLine) {\n return false; // Has leading new line\n }\n\n seenNonEmptyLine = true;\n isEmptyLine = true;\n hasIndent = false;\n break;\n\n case 9: // \\t\n\n case 32:\n // <space>\n hasIndent || (hasIndent = isEmptyLine);\n break;\n\n default:\n hasCommonIndent && (hasCommonIndent = hasIndent);\n isEmptyLine = false;\n }\n }\n\n if (isEmptyLine) {\n return false; // Has trailing empty lines\n }\n\n if (hasCommonIndent && seenNonEmptyLine) {\n return false; // Has internal indent\n }\n\n return true;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nexport function printBlockString(value, options) {\n const escapedValue = value.replace(/\"\"\"/g, '\\\\\"\"\"'); // Expand a block string's raw value into independent lines.\n\n const lines = escapedValue.split(/\\r\\n|[\\n\\r]/g);\n const isSingleLine = lines.length === 1; // If common indentation is found we can fix some of those cases by adding leading new line\n\n const forceLeadingNewLine =\n lines.length > 1 &&\n lines\n .slice(1)\n .every((line) => line.length === 0 || isWhiteSpace(line.charCodeAt(0))); // Trailing triple quotes just looks confusing but doesn't force trailing new line\n\n const hasTrailingTripleQuotes = escapedValue.endsWith('\\\\\"\"\"'); // Trailing quote (single or double) or slash forces trailing new line\n\n const hasTrailingQuote = value.endsWith('\"') && !hasTrailingTripleQuotes;\n const hasTrailingSlash = value.endsWith('\\\\');\n const forceTrailingNewline = hasTrailingQuote || hasTrailingSlash;\n const printAsMultipleLines =\n !(options !== null && options !== void 0 && options.minimize) && // add leading and trailing new lines only if it improves readability\n (!isSingleLine ||\n value.length > 70 ||\n forceTrailingNewline ||\n forceLeadingNewLine ||\n hasTrailingTripleQuotes);\n let result = ''; // Format a multi-line block quote to account for leading space.\n\n const skipLeadingNewLine = isSingleLine && isWhiteSpace(value.charCodeAt(0));\n\n if ((printAsMultipleLines && !skipLeadingNewLine) || forceLeadingNewLine) {\n result += '\\n';\n }\n\n result += escapedValue;\n\n if (printAsMultipleLines || forceTrailingNewline) {\n result += '\\n';\n }\n\n return '\"\"\"' + result + '\"\"\"';\n}\n","/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nvar TokenKind;\n\n(function (TokenKind) {\n TokenKind['SOF'] = '<SOF>';\n TokenKind['EOF'] = '<EOF>';\n TokenKind['BANG'] = '!';\n TokenKind['DOLLAR'] = '$';\n TokenKind['AMP'] = '&';\n TokenKind['PAREN_L'] = '(';\n TokenKind['PAREN_R'] = ')';\n TokenKind['SPREAD'] = '...';\n TokenKind['COLON'] = ':';\n TokenKind['EQUALS'] = '=';\n TokenKind['AT'] = '@';\n TokenKind['BRACKET_L'] = '[';\n TokenKind['BRACKET_R'] = ']';\n TokenKind['BRACE_L'] = '{';\n TokenKind['PIPE'] = '|';\n TokenKind['BRACE_R'] = '}';\n TokenKind['NAME'] = 'Name';\n TokenKind['INT'] = 'Int';\n TokenKind['FLOAT'] = 'Float';\n TokenKind['STRING'] = 'String';\n TokenKind['BLOCK_STRING'] = 'BlockString';\n TokenKind['COMMENT'] = 'Comment';\n})(TokenKind || (TokenKind = {}));\n\nexport { TokenKind };\n/**\n * The enum type representing the token kinds values.\n *\n * @deprecated Please use `TokenKind`. Will be remove in v17.\n */\n","import { syntaxError } from '../error/syntaxError.mjs';\nimport { Token } from './ast.mjs';\nimport { dedentBlockStringLines } from './blockString.mjs';\nimport { isDigit, isNameContinue, isNameStart } from './characterClasses.mjs';\nimport { TokenKind } from './tokenKind.mjs';\n/**\n * Given a Source object, creates a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\n\nexport class Lexer {\n /**\n * The previously focused non-ignored token.\n */\n\n /**\n * The currently focused non-ignored token.\n */\n\n /**\n * The (1-indexed) line containing the current token.\n */\n\n /**\n * The character offset at which the current line begins.\n */\n constructor(source) {\n const startOfFileToken = new Token(TokenKind.SOF, 0, 0, 0, 0);\n this.source = source;\n this.lastToken = startOfFileToken;\n this.token = startOfFileToken;\n this.line = 1;\n this.lineStart = 0;\n }\n\n get [Symbol.toStringTag]() {\n return 'Lexer';\n }\n /**\n * Advances the token stream to the next non-ignored token.\n */\n\n advance() {\n this.lastToken = this.token;\n const token = (this.token = this.lookahead());\n return token;\n }\n /**\n * Looks ahead and returns the next non-ignored token, but does not change\n * the state of Lexer.\n */\n\n lookahead() {\n let token = this.token;\n\n if (token.kind !== TokenKind.EOF) {\n do {\n if (token.next) {\n token = token.next;\n } else {\n // Read the next token and form a link in the token linked-list.\n const nextToken = readNextToken(this, token.end); // @ts-expect-error next is only mutable during parsing.\n\n token.next = nextToken; // @ts-expect-error prev is only mutable during parsing.\n\n nextToken.prev = token;\n token = nextToken;\n }\n } while (token.kind === TokenKind.COMMENT);\n }\n\n return token;\n }\n}\n/**\n * @internal\n */\n\nexport function isPunctuatorTokenKind(kind) {\n return (\n kind === TokenKind.BANG ||\n kind === TokenKind.DOLLAR ||\n kind === TokenKind.AMP ||\n kind === TokenKind.PAREN_L ||\n kind === TokenKind.PAREN_R ||\n kind === TokenKind.SPREAD ||\n kind === TokenKind.COLON ||\n kind === TokenKind.EQUALS ||\n kind === TokenKind.AT ||\n kind === TokenKind.BRACKET_L ||\n kind === TokenKind.BRACKET_R ||\n kind === TokenKind.BRACE_L ||\n kind === TokenKind.PIPE ||\n kind === TokenKind.BRACE_R\n );\n}\n/**\n * A Unicode scalar value is any Unicode code point except surrogate code\n * points. In other words, the inclusive ranges of values 0x0000 to 0xD7FF and\n * 0xE000 to 0x10FFFF.\n *\n * SourceCharacter ::\n * - \"Any Unicode scalar value\"\n */\n\nfunction isUnicodeScalarValue(code) {\n return (\n (code >= 0x0000 && code <= 0xd7ff) || (code >= 0xe000 && code <= 0x10ffff)\n );\n}\n/**\n * The GraphQL specification defines source text as a sequence of unicode scalar\n * values (which Unicode defines to exclude surrogate code points). However\n * JavaScript defines strings as a sequence of UTF-16 code units which may\n * include surrogates. A surrogate pair is a valid source character as it\n * encodes a supplementary code point (above U+FFFF), but unpaired surrogate\n * code points are not valid source characters.\n */\n\nfunction isSupplementaryCodePoint(body, location) {\n return (\n isLeadingSurrogate(body.charCodeAt(location)) &&\n isTrailingSurrogate(body.charCodeAt(location + 1))\n );\n}\n\nfunction isLeadingSurrogate(code) {\n return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction isTrailingSurrogate(code) {\n return code >= 0xdc00 && code <= 0xdfff;\n}\n/**\n * Prints the code point (or end of file reference) at a given location in a\n * source for use in error messages.\n *\n * Printable ASCII is printed quoted, while other points are printed in Unicode\n * code point form (ie. U+1234).\n */\n\nfunction printCodePointAt(lexer, location) {\n const code = lexer.source.body.codePointAt(location);\n\n if (code === undefined) {\n return TokenKind.EOF;\n } else if (code >= 0x0020 && code <= 0x007e) {\n // Printable ASCII\n const char = String.fromCodePoint(code);\n return char === '\"' ? \"'\\\"'\" : `\"${char}\"`;\n } // Unicode code point\n\n return 'U+' + code.toString(16).toUpperCase().padStart(4, '0');\n}\n/**\n * Create a token with line and column location information.\n */\n\nfunction createToken(lexer, kind, start, end, value) {\n const line = lexer.line;\n const col = 1 + start - lexer.lineStart;\n return new Token(kind, start, end, line, col, value);\n}\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace until it finds the next lexable token, then lexes\n * punctuators immediately or calls the appropriate helper function for more\n * complicated tokens.\n */\n\nfunction readNextToken(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position); // SourceCharacter\n\n switch (code) {\n // Ignored ::\n // - UnicodeBOM\n // - WhiteSpace\n // - LineTerminator\n // - Comment\n // - Comma\n //\n // UnicodeBOM :: \"Byte Order Mark (U+FEFF)\"\n //\n // WhiteSpace ::\n // - \"Horizontal Tab (U+0009)\"\n // - \"Space (U+0020)\"\n //\n // Comma :: ,\n case 0xfeff: // <BOM>\n\n case 0x0009: // \\t\n\n case 0x0020: // <space>\n\n case 0x002c:\n // ,\n ++position;\n continue;\n // LineTerminator ::\n // - \"New Line (U+000A)\"\n // - \"Carriage Return (U+000D)\" [lookahead != \"New Line (U+000A)\"]\n // - \"Carriage Return (U+000D)\" \"New Line (U+000A)\"\n\n case 0x000a:\n // \\n\n ++position;\n ++lexer.line;\n lexer.lineStart = position;\n continue;\n\n case 0x000d:\n // \\r\n if (body.charCodeAt(position + 1) === 0x000a) {\n position += 2;\n } else {\n ++position;\n }\n\n ++lexer.line;\n lexer.lineStart = position;\n continue;\n // Comment\n\n case 0x0023:\n // #\n return readComment(lexer, position);\n // Token ::\n // - Punctuator\n // - Name\n // - IntValue\n // - FloatValue\n // - StringValue\n //\n // Punctuator :: one of ! $ & ( ) ... : = @ [ ] { | }\n\n case 0x0021:\n // !\n return createToken(lexer, TokenKind.BANG, position, position + 1);\n\n case 0x0024:\n // $\n return createToken(lexer, TokenKind.DOLLAR, position, position + 1);\n\n case 0x0026:\n // &\n return createToken(lexer, TokenKind.AMP, position, position + 1);\n\n case 0x0028:\n // (\n return createToken(lexer, TokenKind.PAREN_L, position, position + 1);\n\n case 0x0029:\n // )\n return createToken(lexer, TokenKind.PAREN_R, position, position + 1);\n\n case 0x002e:\n // .\n if (\n body.charCodeAt(position + 1) === 0x002e &&\n body.charCodeAt(position + 2) === 0x002e\n ) {\n return createToken(lexer, TokenKind.SPREAD, position, position + 3);\n }\n\n break;\n\n case 0x003a:\n // :\n return createToken(lexer, TokenKind.COLON, position, position + 1);\n\n case 0x003d:\n // =\n return createToken(lexer, TokenKind.EQUALS, position, position + 1);\n\n case 0x0040:\n // @\n return createToken(lexer, TokenKind.AT, position, position + 1);\n\n case 0x005b:\n // [\n return createToken(lexer, TokenKind.BRACKET_L, position, position + 1);\n\n case 0x005d:\n // ]\n return createToken(lexer, TokenKind.BRACKET_R, position, position + 1);\n\n case 0x007b:\n // {\n return createToken(lexer, TokenKind.BRACE_L, position, position + 1);\n\n case 0x007c:\n // |\n return createToken(lexer, TokenKind.PIPE, position, position + 1);\n\n case 0x007d:\n // }\n return createToken(lexer, TokenKind.BRACE_R, position, position + 1);\n // StringValue\n\n case 0x0022:\n // \"\n if (\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022\n ) {\n return readBlockString(lexer, position);\n }\n\n return readString(lexer, position);\n } // IntValue | FloatValue (Digit | -)\n\n if (isDigit(code) || code === 0x002d) {\n return readNumber(lexer, position, code);\n } // Name\n\n if (isNameStart(code)) {\n return readName(lexer, position);\n }\n\n throw syntaxError(\n lexer.source,\n position,\n code === 0x0027\n ? 'Unexpected single quote character (\\'), did you mean to use a double quote (\")?'\n : isUnicodeScalarValue(code) || isSupplementaryCodePoint(body, position)\n ? `Unexpected character: ${printCodePointAt(lexer, position)}.`\n : `Invalid character: ${printCodePointAt(lexer, position)}.`,\n );\n }\n\n return createToken(lexer, TokenKind.EOF, bodyLength, bodyLength);\n}\n/**\n * Reads a comment token from the source file.\n *\n * ```\n * Comment :: # CommentChar* [lookahead != CommentChar]\n *\n * CommentChar :: SourceCharacter but not LineTerminator\n * ```\n */\n\nfunction readComment(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position); // LineTerminator (\\n | \\r)\n\n if (code === 0x000a || code === 0x000d) {\n break;\n } // SourceCharacter\n\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n break;\n }\n }\n\n return createToken(\n lexer,\n TokenKind.COMMENT,\n start,\n position,\n body.slice(start + 1, position),\n );\n}\n/**\n * Reads a number token from the source file, either a FloatValue or an IntValue\n * depending on whether a FractionalPart or ExponentPart is encountered.\n *\n * ```\n * IntValue :: IntegerPart [lookahead != {Digit, `.`, NameStart}]\n *\n * IntegerPart ::\n * - NegativeSign? 0\n * - NegativeSign? NonZeroDigit Digit*\n *\n * NegativeSign :: -\n *\n * NonZeroDigit :: Digit but not `0`\n *\n * FloatValue ::\n * - IntegerPart FractionalPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n * - IntegerPart FractionalPart [lookahead != {Digit, `.`, NameStart}]\n * - IntegerPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *\n * FractionalPart :: . Digit+\n *\n * ExponentPart :: ExponentIndicator Sign? Digit+\n *\n * ExponentIndicator :: one of `e` `E`\n *\n * Sign :: one of + -\n * ```\n */\n\nfunction readNumber(lexer, start, firstCode) {\n const body = lexer.source.body;\n let position = start;\n let code = firstCode;\n let isFloat = false; // NegativeSign (-)\n\n if (code === 0x002d) {\n code = body.charCodeAt(++position);\n } // Zero (0)\n\n if (code === 0x0030) {\n code = body.charCodeAt(++position);\n\n if (isDigit(code)) {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid number, unexpected digit after 0: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n } else {\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n } // Full stop (.)\n\n if (code === 0x002e) {\n isFloat = true;\n code = body.charCodeAt(++position);\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n } // E e\n\n if (code === 0x0045 || code === 0x0065) {\n isFloat = true;\n code = body.charCodeAt(++position); // + -\n\n if (code === 0x002b || code === 0x002d) {\n code = body.charCodeAt(++position);\n }\n\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n } // Numbers cannot be followed by . or NameStart\n\n if (code === 0x002e || isNameStart(code)) {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid number, expected digit but got: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n\n return createToken(\n lexer,\n isFloat ? TokenKind.FLOAT : TokenKind.INT,\n start,\n position,\n body.slice(start, position),\n );\n}\n/**\n * Returns the new position in the source after reading one or more digits.\n */\n\nfunction readDigits(lexer, start, firstCode) {\n if (!isDigit(firstCode)) {\n throw syntaxError(\n lexer.source,\n start,\n `Invalid number, expected digit but got: ${printCodePointAt(\n lexer,\n start,\n )}.`,\n );\n }\n\n const body = lexer.source.body;\n let position = start + 1; // +1 to skip first firstCode\n\n while (isDigit(body.charCodeAt(position))) {\n ++position;\n }\n\n return position;\n}\n/**\n * Reads a single-quote string token from the source file.\n *\n * ```\n * StringValue ::\n * - `\"\"` [lookahead != `\"`]\n * - `\"` StringCharacter+ `\"`\n *\n * StringCharacter ::\n * - SourceCharacter but not `\"` or `\\` or LineTerminator\n * - `\\u` EscapedUnicode\n * - `\\` EscapedCharacter\n *\n * EscapedUnicode ::\n * - `{` HexDigit+ `}`\n * - HexDigit HexDigit HexDigit HexDigit\n *\n * EscapedCharacter :: one of `\"` `\\` `/` `b` `f` `n` `r` `t`\n * ```\n */\n\nfunction readString(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n let chunkStart = position;\n let value = '';\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position); // Closing Quote (\")\n\n if (code === 0x0022) {\n value += body.slice(chunkStart, position);\n return createToken(lexer, TokenKind.STRING, start, position + 1, value);\n } // Escape Sequence (\\)\n\n if (code === 0x005c) {\n value += body.slice(chunkStart, position);\n const escape =\n body.charCodeAt(position + 1) === 0x0075 // u\n ? body.charCodeAt(position + 2) === 0x007b // {\n ? readEscapedUnicodeVariableWidth(lexer, position)\n : readEscapedUnicodeFixedWidth(lexer, position)\n : readEscapedCharacter(lexer, position);\n value += escape.value;\n position += escape.size;\n chunkStart = position;\n continue;\n } // LineTerminator (\\n | \\r)\n\n if (code === 0x000a || code === 0x000d) {\n break;\n } // SourceCharacter\n\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character within String: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n }\n\n throw syntaxError(lexer.source, position, 'Unterminated string.');\n} // The string value and lexed size of an escape sequence.\n\nfunction readEscapedUnicodeVariableWidth(lexer, position) {\n const body = lexer.source.body;\n let point = 0;\n let size = 3; // Cannot be larger than 12 chars (\\u{00000000}).\n\n while (size < 12) {\n const code = body.charCodeAt(position + size++); // Closing Brace (})\n\n if (code === 0x007d) {\n // Must be at least 5 chars (\\u{0}) and encode a Unicode scalar value.\n if (size < 5 || !isUnicodeScalarValue(point)) {\n break;\n }\n\n return {\n value: String.fromCodePoint(point),\n size,\n };\n } // Append this hex digit to the code point.\n\n point = (point << 4) | readHexDigit(code);\n\n if (point < 0) {\n break;\n }\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid Unicode escape sequence: \"${body.slice(\n position,\n position + size,\n )}\".`,\n );\n}\n\nfunction readEscapedUnicodeFixedWidth(lexer, position) {\n const body = lexer.source.body;\n const code = read16BitHexCode(body, position + 2);\n\n if (isUnicodeScalarValue(code)) {\n return {\n value: String.fromCodePoint(code),\n size: 6,\n };\n } // GraphQL allows JSON-style surrogate pair escape sequences, but only when\n // a valid pair is formed.\n\n if (isLeadingSurrogate(code)) {\n // \\u\n if (\n body.charCodeAt(position + 6) === 0x005c &&\n body.charCodeAt(position + 7) === 0x0075\n ) {\n const trailingCode = read16BitHexCode(body, position + 8);\n\n if (isTrailingSurrogate(trailingCode)) {\n // JavaScript defines strings as a sequence of UTF-16 code units and\n // encodes Unicode code points above U+FFFF using a surrogate pair of\n // code units. Since this is a surrogate pair escape sequence, just\n // include both codes into the JavaScript string value. Had JavaScript\n // not been internally based on UTF-16, then this surrogate pair would\n // be decoded to retrieve the supplementary code point.\n return {\n value: String.fromCodePoint(code, trailingCode),\n size: 12,\n };\n }\n }\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid Unicode escape sequence: \"${body.slice(position, position + 6)}\".`,\n );\n}\n/**\n * Reads four hexadecimal characters and returns the positive integer that 16bit\n * hexadecimal string represents. For example, \"000f\" will return 15, and \"dead\"\n * will return 57005.\n *\n * Returns a negative number if any char was not a valid hexadecimal digit.\n */\n\nfunction read16BitHexCode(body, position) {\n // readHexDigit() returns -1 on error. ORing a negative value with any other\n // value always produces a negative value.\n return (\n (readHexDigit(body.charCodeAt(position)) << 12) |\n (readHexDigit(body.charCodeAt(position + 1)) << 8) |\n (readHexDigit(body.charCodeAt(position + 2)) << 4) |\n readHexDigit(body.charCodeAt(position + 3))\n );\n}\n/**\n * Reads a hexadecimal character and returns its positive integer value (0-15).\n *\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 if the provided character code was not a valid hexadecimal digit.\n *\n * HexDigit :: one of\n * - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * - `A` `B` `C` `D` `E` `F`\n * - `a` `b` `c` `d` `e` `f`\n */\n\nfunction readHexDigit(code) {\n return code >= 0x0030 && code <= 0x0039 // 0-9\n ? code - 0x0030\n : code >= 0x0041 && code <= 0x0046 // A-F\n ? code - 0x0037\n : code >= 0x0061 && code <= 0x0066 // a-f\n ? code - 0x0057\n : -1;\n}\n/**\n * | Escaped Character | Code Point | Character Name |\n * | ----------------- | ---------- | ---------------------------- |\n * | `\"` | U+0022 | double quote |\n * | `\\` | U+005C | reverse solidus (back slash) |\n * | `/` | U+002F | solidus (forward slash) |\n * | `b` | U+0008 | backspace |\n * | `f` | U+000C | form feed |\n * | `n` | U+000A | line feed (new line) |\n * | `r` | U+000D | carriage return |\n * | `t` | U+0009 | horizontal tab |\n */\n\nfunction readEscapedCharacter(lexer, position) {\n const body = lexer.source.body;\n const code = body.charCodeAt(position + 1);\n\n switch (code) {\n case 0x0022:\n // \"\n return {\n value: '\\u0022',\n size: 2,\n };\n\n case 0x005c:\n // \\\n return {\n value: '\\u005c',\n size: 2,\n };\n\n case 0x002f:\n // /\n return {\n value: '\\u002f',\n size: 2,\n };\n\n case 0x0062:\n // b\n return {\n value: '\\u0008',\n size: 2,\n };\n\n case 0x0066:\n // f\n return {\n value: '\\u000c',\n size: 2,\n };\n\n case 0x006e:\n // n\n return {\n value: '\\u000a',\n size: 2,\n };\n\n case 0x0072:\n // r\n return {\n value: '\\u000d',\n size: 2,\n };\n\n case 0x0074:\n // t\n return {\n value: '\\u0009',\n size: 2,\n };\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character escape sequence: \"${body.slice(\n position,\n position + 2,\n )}\".`,\n );\n}\n/**\n * Reads a block string token from the source file.\n *\n * ```\n * StringValue ::\n * - `\"\"\"` BlockStringCharacter* `\"\"\"`\n *\n * BlockStringCharacter ::\n * - SourceCharacter but not `\"\"\"` or `\\\"\"\"`\n * - `\\\"\"\"`\n * ```\n */\n\nfunction readBlockString(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let lineStart = lexer.lineStart;\n let position = start + 3;\n let chunkStart = position;\n let currentLine = '';\n const blockLines = [];\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position); // Closing Triple-Quote (\"\"\")\n\n if (\n code === 0x0022 &&\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022\n ) {\n currentLine += body.slice(chunkStart, position);\n blockLines.push(currentLine);\n const token = createToken(\n lexer,\n TokenKind.BLOCK_STRING,\n start,\n position + 3, // Return a string of the lines joined with U+000A.\n dedentBlockStringLines(blockLines).join('\\n'),\n );\n lexer.line += blockLines.length - 1;\n lexer.lineStart = lineStart;\n return token;\n } // Escaped Triple-Quote (\\\"\"\")\n\n if (\n code === 0x005c &&\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022 &&\n body.charCodeAt(position + 3) === 0x0022\n ) {\n currentLine += body.slice(chunkStart, position);\n chunkStart = position + 1; // skip only slash\n\n position += 4;\n continue;\n } // LineTerminator\n\n if (code === 0x000a || code === 0x000d) {\n currentLine += body.slice(chunkStart, position);\n blockLines.push(currentLine);\n\n if (code === 0x000d && body.charCodeAt(position + 1) === 0x000a) {\n position += 2;\n } else {\n ++position;\n }\n\n currentLine = '';\n chunkStart = position;\n lineStart = position;\n continue;\n } // SourceCharacter\n\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character within String: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n }\n\n throw syntaxError(lexer.source, position, 'Unterminated string.');\n}\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * ```\n * Name ::\n * - NameStart NameContinue* [lookahead != NameContinue]\n * ```\n */\n\nfunction readName(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position);\n\n if (isNameContinue(code)) {\n ++position;\n } else {\n break;\n }\n }\n\n return createToken(\n lexer,\n TokenKind.NAME,\n start,\n position,\n body.slice(start, position),\n );\n}\n","const MAX_ARRAY_LENGTH = 10;\nconst MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nexport function inspect(value) {\n return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n switch (typeof value) {\n case 'string':\n return JSON.stringify(value);\n\n case 'function':\n return value.name ? `[function ${value.name}]` : '[function]';\n\n case 'object':\n return formatObjectValue(value, seenValues);\n\n default:\n return String(value);\n }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n if (value === null) {\n return 'null';\n }\n\n if (previouslySeenValues.includes(value)) {\n return '[Circular]';\n }\n\n const seenValues = [...previouslySeenValues, value];\n\n if (isJSONable(value)) {\n const jsonValue = value.toJSON(); // check for infinite recursion\n\n if (jsonValue !== value) {\n return typeof jsonValue === 'string'\n ? jsonValue\n : formatValue(jsonValue, seenValues);\n }\n } else if (Array.isArray(value)) {\n return formatArray(value, seenValues);\n }\n\n return formatObject(value, seenValues);\n}\n\nfunction isJSONable(value) {\n return typeof value.toJSON === 'function';\n}\n\nfunction formatObject(object, seenValues) {\n const entries = Object.entries(object);\n\n if (entries.length === 0) {\n return '{}';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[' + getObjectTag(object) + ']';\n }\n\n const properties = entries.map(\n ([key, value]) => key + ': ' + formatValue(value, seenValues),\n );\n return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n if (array.length === 0) {\n return '[]';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[Array]';\n }\n\n const len = Math.min(MAX_ARRAY_LENGTH, array.length);\n const remaining = array.length - len;\n const items = [];\n\n for (let i = 0; i < len; ++i) {\n items.push(formatValue(array[i], seenValues));\n }\n\n if (remaining === 1) {\n items.push('... 1 more item');\n } else if (remaining > 1) {\n items.push(`... ${remaining} more items`);\n }\n\n return '[' + items.join(', ') + ']';\n}\n\nfunction getObjectTag(object) {\n const tag = Object.prototype.toString\n .call(object)\n .replace(/^\\[object /, '')\n .replace(/]$/, '');\n\n if (tag === 'Object' && typeof object.constructor === 'function') {\n const name = object.constructor.name;\n\n if (typeof name === 'string' && name !== '') {\n return name;\n }\n }\n\n return tag;\n}\n","import { inspect } from './inspect.mjs';\n/* c8 ignore next 3 */\n\nconst isProduction =\n globalThis.process && // eslint-disable-next-line no-undef\n process.env.NODE_ENV === 'production';\n/**\n * A replacement for instanceof which includes an error warning when multi-realm\n * constructors are detected.\n * See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production\n * See: https://webpack.js.org/guides/production/\n */\n\nexport const instanceOf =\n /* c8 ignore next 6 */\n // FIXME: https://github.com/graphql/graphql-js/issues/2317\n isProduction\n ? function instanceOf(value, constructor) {\n return value instanceof constructor;\n }\n : function instanceOf(value, constructor) {\n if (value instanceof constructor) {\n return true;\n }\n\n if (typeof value === 'object' && value !== null) {\n var _value$constructor;\n\n // Prefer Symbol.toStringTag since it is immune to minification.\n const className = constructor.prototype[Symbol.toStringTag];\n const valueClassName = // We still need to support constructor's name to detect conflicts with older versions of this library.\n Symbol.toStringTag in value // @ts-expect-error TS bug see, https://github.com/microsoft/TypeScript/issues/38009\n ? value[Symbol.toStringTag]\n : (_value$constructor = value.constructor) === null ||\n _value$constructor === void 0\n ? void 0\n : _value$constructor.name;\n\n if (className === valueClassName) {\n const stringifiedValue = inspect(value);\n throw new Error(`Cannot use ${className} \"${stringifiedValue}\" from another module or realm.\n\nEnsure that there is only one instance of \"graphql\" in the node_modules\ndirectory. If different versions of \"graphql\" are the dependencies of other\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate \"graphql\" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results.`);\n }\n }\n\n return false;\n };\n","import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { instanceOf } from '../jsutils/instanceOf.mjs';\n\n/**\n * A representation of source input to GraphQL. The `name` and `locationOffset` parameters are\n * optional, but they are useful for clients who store GraphQL documents in source files.\n * For example, if the GraphQL input starts at line 40 in a file named `Foo.graphql`, it might\n * be useful for `name` to be `\"Foo.graphql\"` and location to be `{ line: 40, column: 1 }`.\n * The `line` and `column` properties in `locationOffset` are 1-indexed.\n */\nexport class Source {\n constructor(\n body,\n name = 'GraphQL request',\n locationOffset = {\n line: 1,\n column: 1,\n },\n ) {\n typeof body === 'string' ||\n devAssert(false, `Body must be a string. Received: ${inspect(body)}.`);\n this.body = body;\n this.name = name;\n this.locationOffset = locationOffset;\n this.locationOffset.line > 0 ||\n devAssert(\n false,\n 'line in locationOffset is 1-indexed and must be positive.',\n );\n this.locationOffset.column > 0 ||\n devAssert(\n false,\n 'column in locationOffset is 1-indexed and must be positive.',\n );\n }\n\n get [Symbol.toStringTag]() {\n return 'Source';\n }\n}\n/**\n * Test if the given value is a Source object.\n *\n * @internal\n */\n\nexport function isSource(source) {\n return instanceOf(source, Source);\n}\n","import { printBlockString } from '../language/blockString.mjs';\nimport { isPunctuatorTokenKind, Lexer } from '../language/lexer.mjs';\nimport { isSource, Source } from '../language/source.mjs';\nimport { TokenKind } from '../language/tokenKind.mjs';\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n * - UnicodeBOM\n * - WhiteSpace\n * - LineTerminator\n * - Comment\n * - Comma\n * - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n *\n * Query example:\n *\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n * someField(foo: $foo, bar: $bar) {\n * a\n * b {\n * c\n * d\n * }\n * }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n *\n * SDL example:\n *\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n * \"\"\"\n * Field description\n * \"\"\"\n * bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n */\n\nexport function stripIgnoredCharacters(source) {\n const sourceObj = isSource(source) ? source : new Source(source);\n const body = sourceObj.body;\n const lexer = new Lexer(sourceObj);\n let strippedBody = '';\n let wasLastAddedTokenNonPunctuator = false;\n\n while (lexer.advance().kind !== TokenKind.EOF) {\n const currentToken = lexer.token;\n const tokenKind = currentToken.kind;\n /**\n * Every two non-punctuator tokens should have space between them.\n * Also prevent case of non-punctuator token following by spread resulting\n * in invalid token (e.g. `1...` is invalid Float token).\n */\n\n const isNonPunctuator = !isPunctuatorTokenKind(currentToken.kind);\n\n if (wasLastAddedTokenNonPunctuator) {\n if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {\n strippedBody += ' ';\n }\n }\n\n const tokenBody = body.slice(currentToken.start, currentToken.end);\n\n if (tokenKind === TokenKind.BLOCK_STRING) {\n strippedBody += printBlockString(currentToken.value, {\n minimize: true,\n });\n } else {\n strippedBody += tokenBody;\n }\n\n wasLastAddedTokenNonPunctuator = isNonPunctuator;\n }\n\n return strippedBody;\n}\n","import { createContext, type ReactNode } from \"react\";\nimport { GraphQLClient } from \"./GraphQLClient.js\";\n\nexport const GraphQLContext = createContext<GraphQLClient | undefined>(\n undefined,\n);\n\nexport const GraphQLProvider = ({\n children,\n client,\n}: {\n children: ReactNode;\n client: GraphQLClient;\n}) => (\n <GraphQLContext.Provider value={client}>{children}</GraphQLContext.Provider>\n);\n","import { stripIgnoredCharacters } from \"graphql\";\nimport { use } from \"react\";\nimport type { TypedDocumentString } from \"../graphql/graphql.js\";\nimport type { GraphQLClient } from \"./GraphQLClient.js\";\nimport { GraphQLContext } from \"./GraphQLContext.js\";\n\ntype NoExtraProps<T, U extends T = T> = U & {\n [K in Exclude<keyof U, keyof T>]?: never;\n};\n\ntype VarArgs<TVariables> =\n TVariables extends Record<string, never> ? [] : [NoExtraProps<TVariables>];\n\nexport const createQuery = <TResult, TVariables>(\n client: GraphQLClient,\n query: TypedDocumentString<TResult, TVariables>,\n ...[variables]: TVariables extends Record<string, never>\n ? []\n : [NoExtraProps<TVariables>]\n) => {\n return {\n queryFn: () => client.fetch(query, variables),\n queryKey: [stripIgnoredCharacters(query.toString()), variables],\n } as const;\n};\n\nexport const useCreateQuery = <TResult, TVariables>(\n query: TypedDocumentString<TResult, TVariables>,\n ...[variables]: TVariables extends Record<string, never>\n ? []\n : [NoExtraProps<TVariables>]\n) => {\n const graphQLClient = use(GraphQLContext);\n\n if (graphQLClient === undefined) {\n throw new Error(\"useGraphQL must be used within a GraphQLProvider\");\n }\n\n const args =\n variables === undefined\n ? ([] as VarArgs<TVariables>)\n : ([variables] as VarArgs<TVariables>);\n\n return createQuery(graphQLClient, query, ...args);\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 Components = {\n __typename?: \"Components\";\n schemas?: Maybe<Array<SchemaItem>>;\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 extensions?: Maybe<Scalars[\"JSONObject\"][\"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 extensions?: Maybe<Scalars[\"JSONObject\"][\"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 extensions?: Maybe<Scalars[\"JSONObject\"][\"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 components?: Maybe<Components>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n extensions?: Maybe<Scalars[\"JSONObject\"][\"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 tag?: Maybe<SchemaTag>;\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 SchemaTagArgs = {\n name?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n slug?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n untagged?: InputMaybe<Scalars[\"Boolean\"][\"input\"]>;\n};\n\nexport type SchemaItem = {\n __typename?: \"SchemaItem\";\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n schema: Scalars[\"JSONSchema\"][\"output\"];\n};\n\nexport type SchemaTag = {\n __typename?: \"SchemaTag\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n isUntagged: Scalars[\"Boolean\"][\"output\"];\n name?: Maybe<Scalars[\"String\"][\"output\"]>;\n next?: Maybe<SchemaTag>;\n operations: Array<OperationItem>;\n prev?: Maybe<SchemaTag>;\n slug?: Maybe<Scalars[\"String\"][\"output\"]>;\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 extensions?: Maybe<Scalars[\"JSONObject\"][\"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 deprecated?: boolean | null;\n extensions?: any | null;\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 explode?: boolean | 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 SchemaWarmupQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type SchemaWarmupQuery = {\n __typename?: \"Query\";\n schema: { __typename?: \"Schema\"; openapi: string };\n};\n\nexport type OperationsForTagQueryVariables = 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 OperationsForTagQuery = {\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 servers: Array<{ __typename?: \"Server\"; url: string }>;\n tag?: {\n __typename?: \"SchemaTag\";\n name?: string | null;\n description?: string | null;\n operations: Array<\n { __typename?: \"OperationItem\"; slug: string } & {\n \" $fragmentRefs\"?: {\n OperationsFragmentFragment: OperationsFragmentFragment;\n };\n }\n >;\n next?: {\n __typename?: \"SchemaTag\";\n name?: string | null;\n slug?: string | null;\n } | null;\n prev?: {\n __typename?: \"SchemaTag\";\n name?: string | null;\n slug?: string | null;\n } | null;\n } | null;\n };\n};\n\nexport type GetSchemasQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetSchemasQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n title: string;\n description?: string | null;\n summary?: string | null;\n components?: {\n __typename?: \"Components\";\n schemas?: Array<{\n __typename?: \"SchemaItem\";\n name: string;\n schema: any;\n extensions?: any | null;\n }> | null;\n } | null;\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 GetSidebarOperationsQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetSidebarOperationsQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n tags: Array<{\n __typename?: \"SchemaTag\";\n slug?: string | null;\n name?: string | null;\n extensions?: any | null;\n operations: Array<{\n __typename?: \"OperationItem\";\n summary?: string | null;\n slug: string;\n method: string;\n operationId?: string | null;\n path: string;\n }>;\n }>;\n components?: {\n __typename?: \"Components\";\n schemas?: Array<{ __typename: \"SchemaItem\" }> | null;\n } | null;\n };\n};\n\nexport class TypedDocumentString<TResult, TVariables>\n extends String\n implements DocumentTypeDecoration<TResult, TVariables>\n{\n __apiType?: DocumentTypeDecoration<TResult, TVariables>[\"__apiType\"];\n private value: string;\n public __meta__?: Record<string, any> | undefined;\n\n constructor(value: string, __meta__?: Record<string, any> | undefined) {\n super(value);\n this.value = value;\n this.__meta__ = __meta__;\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 deprecated\n extensions\n parameters {\n name\n in\n description\n required\n schema\n style\n explode\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 SchemaWarmupDocument = new TypedDocumentString(`\n query SchemaWarmup($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n openapi\n }\n}\n `) as unknown as TypedDocumentString<\n SchemaWarmupQuery,\n SchemaWarmupQueryVariables\n>;\nexport const OperationsForTagDocument = new TypedDocumentString(`\n query OperationsForTag($input: JSON!, $type: SchemaType!, $tag: String, $untagged: Boolean) {\n schema(input: $input, type: $type) {\n servers {\n url\n }\n description\n summary\n title\n url\n version\n tag(slug: $tag, untagged: $untagged) {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n next {\n name\n slug\n }\n prev {\n name\n slug\n }\n }\n }\n}\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n deprecated\n extensions\n parameters {\n name\n in\n description\n required\n schema\n style\n explode\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 OperationsForTagQuery,\n OperationsForTagQueryVariables\n>;\nexport const GetSchemasDocument = new TypedDocumentString(`\n query GetSchemas($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n title\n description\n summary\n components {\n schemas {\n name\n schema\n extensions\n }\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetSchemasQuery,\n GetSchemasQueryVariables\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 GetSidebarOperationsDocument = new TypedDocumentString(`\n query GetSidebarOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n tags {\n slug\n name\n extensions\n operations {\n summary\n slug\n method\n operationId\n path\n }\n }\n components {\n schemas {\n __typename\n }\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetSidebarOperationsQuery,\n GetSidebarOperationsQueryVariables\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 */\ntype 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\": typeof types.ServersQueryDocument;\n \"\\n fragment OperationsFragment on OperationItem {\\n slug\\n summary\\n method\\n description\\n operationId\\n contentTypes\\n path\\n deprecated\\n extensions\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n explode\\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\": typeof types.OperationsFragmentFragmentDoc;\n \"\\n query SchemaWarmup($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n openapi\\n }\\n }\\n\": typeof types.SchemaWarmupDocument;\n \"\\n query OperationsForTag(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n servers {\\n url\\n }\\n description\\n summary\\n title\\n url\\n version\\n tag(slug: $tag, untagged: $untagged) {\\n name\\n description\\n operations {\\n slug\\n ...OperationsFragment\\n }\\n next {\\n name\\n slug\\n }\\n prev {\\n name\\n slug\\n }\\n }\\n }\\n }\\n\": typeof types.OperationsForTagDocument;\n \"\\n query GetSchemas($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n title\\n description\\n summary\\n components {\\n schemas {\\n name\\n schema\\n extensions\\n }\\n }\\n }\\n }\\n\": typeof types.GetSchemasDocument;\n \"\\n query getServerQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\": typeof types.GetServerQueryDocument;\n \"\\n query GetSidebarOperations($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n tags {\\n slug\\n name\\n extensions\\n operations {\\n summary\\n slug\\n method\\n operationId\\n path\\n }\\n }\\n components {\\n schemas {\\n __typename\\n }\\n }\\n }\\n }\\n\": typeof types.GetSidebarOperationsDocument;\n};\nconst documents: 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 deprecated\\n extensions\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n explode\\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 SchemaWarmup($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n openapi\\n }\\n }\\n\":\n types.SchemaWarmupDocument,\n \"\\n query OperationsForTag(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n servers {\\n url\\n }\\n description\\n summary\\n title\\n url\\n version\\n tag(slug: $tag, untagged: $untagged) {\\n name\\n description\\n operations {\\n slug\\n ...OperationsFragment\\n }\\n next {\\n name\\n slug\\n }\\n prev {\\n name\\n slug\\n }\\n }\\n }\\n }\\n\":\n types.OperationsForTagDocument,\n \"\\n query GetSchemas($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n title\\n description\\n summary\\n components {\\n schemas {\\n name\\n schema\\n extensions\\n }\\n }\\n }\\n }\\n\":\n types.GetSchemasDocument,\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 GetSidebarOperations($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n tags {\\n slug\\n name\\n extensions\\n operations {\\n summary\\n slug\\n method\\n operationId\\n path\\n }\\n }\\n components {\\n schemas {\\n __typename\\n }\\n }\\n }\\n }\\n\":\n types.GetSidebarOperationsDocument,\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 deprecated\\n extensions\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n explode\\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 SchemaWarmup($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n openapi\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").SchemaWarmupDocument;\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 OperationsForTag(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n servers {\\n url\\n }\\n description\\n summary\\n title\\n url\\n version\\n tag(slug: $tag, untagged: $untagged) {\\n name\\n description\\n operations {\\n slug\\n ...OperationsFragment\\n }\\n next {\\n name\\n slug\\n }\\n prev {\\n name\\n slug\\n }\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").OperationsForTagDocument;\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 GetSchemas($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n title\\n description\\n summary\\n components {\\n schemas {\\n name\\n schema\\n extensions\\n }\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetSchemasDocument;\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 GetSidebarOperations($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n tags {\\n slug\\n name\\n extensions\\n operations {\\n summary\\n slug\\n method\\n operationId\\n path\\n }\\n }\\n components {\\n schemas {\\n __typename\\n }\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetSidebarOperationsDocument;\n\nexport function graphql(source: string) {\n return (documents as any)[source] ?? {};\n}\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"truncate\">{children}</span>\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"shrink-0 h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md 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 position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n \"divide-y\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center py-1.5 pl-8 pr-2 text-sm outline-hidden 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 <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { Fragment, type ReactNode } from \"react\";\n\ntype PathParamProps = {\n name: string;\n index: number;\n originalValue?: string;\n};\n\nexport const PathRenderer = ({\n path,\n renderParam,\n}: {\n path: string;\n renderParam: (props: PathParamProps) => ReactNode;\n}) => {\n let paramIndex = 0;\n return path.split(\"/\").map((part, i, arr) => {\n const matches = Array.from(part.matchAll(/{([^}]+)}/g));\n const elements: ReactNode[] = [];\n let lastIndex = 0;\n\n matches.forEach((match) => {\n const [originalValue, name] = match;\n if (!name) return;\n const startIndex = match.index!;\n\n if (startIndex > lastIndex) {\n elements.push(\n <Fragment key={`text-${lastIndex}-${startIndex}`}>\n {part.slice(lastIndex, startIndex)}\n </Fragment>,\n );\n }\n\n elements.push(\n <Fragment key={`param-${name}`}>\n {renderParam({ name, originalValue, index: paramIndex++ })}\n </Fragment>,\n );\n\n lastIndex = startIndex + originalValue.length;\n });\n\n if (lastIndex < part.length) {\n elements.push(\n <Fragment key={`text-${lastIndex}-${part.length}`}>\n {part.slice(lastIndex)}\n </Fragment>,\n );\n }\n\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Fragment key={`${part}-${i}`}>\n {elements}\n {i < arr.length - 1 && \"/\"}\n <wbr />\n </Fragment>\n );\n });\n};\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 // This may not contain (inline-)flex or (inline-)block otherwise it breaks the browser's full text search\n \"relative transition-all duration-100 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-sm data-[active=true]:bottom-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 { useMemo } from \"react\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\ninterface SelectedServerState {\n selectedServer?: string;\n setSelectedServer: (newServer: string) => void;\n}\n\nexport const useSelectedServerStore = create<SelectedServerState>()(\n persist(\n (set) => ({\n selectedServer: undefined,\n setSelectedServer: (newServer: string) =>\n set({ selectedServer: newServer }),\n }),\n { name: \"zudoku-selected-server\" },\n ),\n);\n\n/**\n * Simple wrapper for `useSelectedServerStore` to fall back to first of the provided servers\n */\nexport const useSelectedServer = (servers: Array<{ url: string }>) => {\n const { selectedServer, setSelectedServer } = useSelectedServerStore();\n\n const finalSelectedServer = useMemo(\n () =>\n selectedServer && servers.some((s) => s.url === selectedServer)\n ? selectedServer\n : (servers.at(0)?.url ?? \"\"),\n [selectedServer, servers],\n );\n\n return { selectedServer: finalSelectedServer, setSelectedServer };\n};\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-hidden 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","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-xs px-2 py-1.5 text-sm outline-hidden 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-xs px-2 py-1.5 text-sm outline-hidden 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-xs py-1.5 pl-8 pr-2 text-sm outline-hidden 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-xs py-1.5 pl-8 pr-2 text-sm outline-hidden 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 { ChevronDownIcon } from \"lucide-react\";\nimport { 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 type { Content, Example } from \"../SidecarExamples.js\";\n\nconst ExamplesDropdown = ({\n examples,\n onSelect,\n}: {\n examples: Content;\n onSelect: (example: Example, mediaType: string) => void;\n}) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\">\n Use Example <ChevronDownIcon className=\"w-4 h-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-72\">\n {examples.map((mediaTypeObject) => (\n <div key={mediaTypeObject.mediaType}>\n <DropdownMenuLabel>{mediaTypeObject.mediaType}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n {mediaTypeObject.examples?.map((example) => (\n <DropdownMenuItem\n key={example.name}\n onSelect={() => onSelect(example, mediaTypeObject.mediaType)}\n >\n <span\n className=\"line-clamp-1\"\n title={example.summary ?? example.name}\n >\n {example.summary ?? example.name}\n </span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </div>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default ExamplesDropdown;\n","import { useFormContext } from \"react-hook-form\";\nimport { Textarea } from \"zudoku/ui/Textarea.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { type Content } from \"../SidecarExamples.js\";\nimport ExamplesDropdown from \"./ExamplesDropdown.js\";\nimport { type PlaygroundForm } from \"./Playground.js\";\n\nexport const BodyPanel = ({ examples }: { examples?: Content }) => {\n const { register, setValue, watch } = useFormContext<PlaygroundForm>();\n\n const headers = watch(\"headers\");\n\n return (\n <div className=\"flex flex-col gap-2 \">\n <div className=\"flex justify-between gap-2\">\n <span className=\"font-semibold\">Body</span>\n <div className=\"flex flex-col gap-2\">\n {examples && examples.length > 0 && (\n <ExamplesDropdown\n examples={examples}\n onSelect={(example, mediaType) => {\n setValue(\"body\", JSON.stringify(example.value, null, 2));\n setValue(\"headers\", [\n ...headers.filter((h) => h.name !== \"Content-Type\"),\n {\n name: \"Content-Type\",\n value: mediaType,\n active: true,\n },\n ]);\n }}\n />\n )}\n </div>\n </div>\n <Textarea\n {...register(\"body\")}\n className={cn(\n \"border w-full rounded-lg bg-muted/40 p-2 h-64 font-mono text-[13px]\",\n )}\n />\n </div>\n );\n};\n\nexport default BodyPanel;\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","export function isBinaryContentType(contentType: string) {\n return /^(application\\/octet-stream|image\\/|audio\\/|video\\/|font\\/|application\\/pdf|application\\/zip|application\\/x-protobuf|application\\/x-binary)/i.test(\n contentType,\n );\n}\n\nexport const extractFileName = (\n headers: Array<[string, string]>,\n url: string,\n): string => {\n const contentDisposition = headers.find(\n ([key]) => key.toLowerCase() === \"content-disposition\",\n )?.[1];\n\n if (contentDisposition) {\n const filenameMatch = contentDisposition.match(\n /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/,\n );\n if (filenameMatch?.[1]) {\n return filenameMatch[1].replace(/['\"]/g, \"\");\n }\n }\n\n // Extract filename from URL as fallback\n try {\n const urlPath = new URL(url).pathname;\n const fileName = urlPath.split(\"/\").pop() || \"download\";\n return fileName.includes(\".\") ? fileName : \"download\";\n } catch {\n return \"download\";\n }\n};\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-[min(6px,var(--radius)-4px)] ring-offset-background focus-visible:outline-hidden 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 \"border border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary\",\n className,\n )}\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 };\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-hidden 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 KeyboardEvent, 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: KeyboardEvent<HTMLInputElement>) => void;\n ref?: Ref<HTMLInputElement>;\n shouldFilter?: boolean;\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\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 = ({ shouldFilter, ...props }: AutocompleteProps) => {\n return (\n <Command className=\"bg-transparent\" shouldFilter={shouldFilter}>\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 \"grid grid-cols-[2fr_3fr] items-center\",\n);\n\nexport const ParamsGridItem = createVariantComponent(\n \"div\",\n \"group hover:bg-accent px-4 py-1 grid col-span-full grid-cols-subgrid\",\n);\n\nexport default ParamsGrid;\n","import { XIcon } from \"lucide-react\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport {\n type 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 { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport ParamsGrid, { ParamsGridItem } from \"./ParamsGrid.js\";\nimport { type Header, 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 headers: schemaHeaders,\n}: {\n control: Control<PlaygroundForm>;\n headers: Header[];\n}) => {\n const { fields, append, remove } = useFieldArray<PlaygroundForm, \"headers\">({\n control,\n name: \"headers\",\n });\n const { setValue, watch } = useFormContext<PlaygroundForm>();\n const valueRefs = useRef<Array<HTMLInputElement | null>>([]);\n const nameRefs = useRef<Array<HTMLInputElement | null>>([]);\n const watchedHeaders = watch(\"headers\");\n\n const addNewHeader = useCallback(() => {\n append({ name: \"\", value: \"\", active: false });\n }, [append]);\n\n useEffect(() => {\n if (watchedHeaders.length === 0) {\n addNewHeader();\n }\n }, [watchedHeaders, addNewHeader]);\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 const missingHeaders = schemaHeaders\n .filter((h) => !watchedHeaders.some((f) => f.name === h.name))\n .map(({ name }) => name);\n\n return (\n <div className=\"flex flex-col gap-2 \">\n <div className=\"flex items-center justify-between\">\n <span className=\"font-semibold\">Headers</span>\n <Button\n className=\"\"\n onClick={addNewHeader}\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n >\n + Add header\n </Button>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Card className=\"overflow-hidden rounded-lg\">\n <ParamsGrid>\n {fields.map((field, i) => {\n const currentHeader = schemaHeaders.find(\n (h) => h.name === watch(`headers.${i}.name`),\n );\n return (\n <ParamsGridItem key={field.id}>\n <div className=\"flex items-center gap-2 \">\n <Controller\n control={control}\n name={`headers.${i}.active`}\n render={({ field }) => (\n <Checkbox\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 focus-visible:ring-0 bg-transparent hover:bg-transparent text-xs font-mono\"\n options={[...missingHeaders, ...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 const hasEnum =\n currentHeader?.enum && currentHeader.enum.length > 0;\n\n if (!hasEnum) {\n return (\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 (\n e.key === \"Enter\" &&\n e.currentTarget.value.trim()\n ) {\n handleValueEnter(i);\n }\n }}\n autoComplete=\"off\"\n />\n );\n }\n\n return (\n <Autocomplete\n shouldFilter={false}\n value={field.value}\n options={currentHeader.enum ?? []}\n onChange={(e) => {\n field.onChange(e);\n setValue(`headers.${i}.active`, true);\n }}\n className=\"border-0 shadow-none focus-visible:ring-0 bg-transparent hover:bg-transparent text-xs font-mono\"\n />\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={() => remove(i)}\n type=\"button\"\n >\n <XIcon size={16} />\n </Button>\n </div>\n </ParamsGridItem>\n );\n })}\n </ParamsGrid>\n </Card>\n </div>\n </div>\n );\n};\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-hidden 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 { Card } from \"zudoku/ui/Card.js\";\nimport { Label } from \"zudoku/ui/Label.js\";\nimport { RadioGroup, RadioGroupItem } from \"zudoku/ui/RadioGroup.js\";\nimport { type ApiIdentity } from \"../../../core/ZudokuContext.js\";\nimport { NO_IDENTITY } from \"./Playground.js\";\n\nconst IdentitySelector = ({\n identities,\n setValue,\n value,\n}: {\n identities?: ApiIdentity[];\n setValue: (value: string) => void;\n value?: string;\n}) => (\n <Card className=\"w-full overflow-hidden rounded-lg\">\n <RadioGroup\n onValueChange={(value) => setValue(value)}\n value={value}\n defaultValue={NO_IDENTITY}\n className=\"gap-0\"\n disabled={identities?.length === 0}\n >\n <Label className=\"h-10 border-b items-center flex gap-2 p-4 cursor-pointer hover:bg-accent\">\n <RadioGroupItem value={NO_IDENTITY} id=\"none\" />\n <span>None</span>\n </Label>\n <div className=\"divide-y\">\n {identities?.map((identity) => (\n <Label\n key={identity.id}\n className=\"h-10 items-center flex gap-2 p-4 cursor-pointer hover:bg-accent\"\n >\n <RadioGroupItem value={identity.id} id={identity.id} />\n <span>{identity.label}</span>\n </Label>\n ))}\n </div>\n </RadioGroup>\n </Card>\n);\n\nexport default IdentitySelector;\n","import { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Checkbox } from \"zudoku/ui/Checkbox.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogTitle,\n} from \"zudoku/ui/Dialog.js\";\nimport { Label } from \"zudoku/ui/Label.js\";\nimport { type ApiIdentity } from \"../../../core/ZudokuContext.js\";\nimport IdentitySelector from \"./IdentitySelector.js\";\n\nconst IdentityDialog = ({\n onSubmit,\n identities,\n open,\n onOpenChange,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSubmit: ({\n rememberedIdentity,\n identity,\n }: {\n rememberedIdentity: boolean;\n identity?: string;\n }) => void;\n identities: ApiIdentity[];\n}) => {\n const [identity, setIdentity] = useState<string | undefined>(undefined);\n const [rememberedIdentity, setRememberedIdentity] = useState<boolean>(false);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogTitle>Select an auth identity</DialogTitle>\n <DialogDescription>\n Please select an identity for this request.\n </DialogDescription>\n <div className=\"max-h-80 overflow-auto\">\n <IdentitySelector\n identities={identities}\n setValue={setIdentity}\n value={identity}\n />\n </div>\n <DialogFooter className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"remember\"\n checked={rememberedIdentity}\n onCheckedChange={(checked) =>\n setRememberedIdentity(\n checked === \"indeterminate\" ? false : !!checked,\n )\n }\n />\n <Label htmlFor=\"remember\">Remember my choice</Label>\n </div>\n\n <Button\n onClick={() => onSubmit({ identity: identity, rememberedIdentity })}\n >\n Send\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport { IdentityDialog };\n","import { type 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, { ParamsGridItem } from \"./ParamsGrid.js\";\nimport type { PlaygroundForm } from \"./Playground.js\";\n\nexport const PathParams = ({\n control,\n url,\n}: {\n control: Control<PlaygroundForm>;\n url: string;\n}) => {\n const { fields } = useFieldArray<PlaygroundForm, \"pathParams\">({\n control,\n name: \"pathParams\",\n });\n\n const sortedFields = [...fields].sort(\n (a, b) => url.indexOf(`{${a.name}}`) - url.indexOf(`{${b.name}}`),\n );\n\n return (\n <Card className=\"rounded-lg overflow-hidden\">\n <ParamsGrid>\n {sortedFields.map((field, i) => (\n <ParamsGridItem key={field.id}>\n <Controller\n control={control}\n name={`pathParams.${i}.name`}\n render={() => (\n <div className=\"flex items-center\">\n <ColorizedParam\n slug={field.name}\n name={field.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 focus-visible:ring-0\"\n />\n )}\n />\n </div>\n </ParamsGridItem>\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 type 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, { ParamsGridItem } 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, \"queryParams\">({\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 overflow-hidden\">\n <div className=\"w-full \">\n <ParamsGrid>\n {fields.map((field, i) => {\n const currentParam = queryParams.find(\n (param) => param.name === form.watch(`queryParams.${i}.name`),\n );\n return (\n <ParamsGridItem key={field.id}>\n <div key={field.id} className=\"flex items-center gap-2\">\n <Controller\n control={control}\n name={`queryParams.${i}.active`}\n render={({ field }) => (\n <Checkbox\n id={`queryParams.${i}.active`}\n className=\"me-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 shadow-none focus-visible:ring-0 bg-transparent hover:bg-transparent text-xs font-mono\"\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 focus-visible:ring-0 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=\"border-0 shadow-none focus-visible:ring-0 bg-transparent hover:bg-transparent text-xs font-mono\"\n />\n );\n }}\n name={`queryParams.${i}.value`}\n />\n </div>\n </ParamsGridItem>\n );\n })}\n </ParamsGrid>\n </div>\n </Card>\n );\n};\n","import { create } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\n\ninterface IdentityState {\n rememberedIdentity: string | null;\n setRememberedIdentity: (identity: string | null) => void;\n getRememberedIdentity: (availableIdentities: string[]) => string | undefined;\n}\n\nexport const useIdentityStore = create<IdentityState>()(\n persist(\n (set, get) => ({\n rememberedIdentity: null,\n setRememberedIdentity: (identity: string | null) =>\n set({ rememberedIdentity: identity }),\n getRememberedIdentity: (availableIdentities: string[]) =>\n availableIdentities.find(\n (identity) => identity === get().rememberedIdentity,\n ),\n }),\n {\n name: \"identity-storage\",\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n","import { Button } from \"zudoku/ui/Button.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogTitle,\n} from \"zudoku/ui/Dialog.js\";\n\nconst RequestLoginDialog = ({\n open,\n setOpen,\n onSignUp,\n onLogin,\n}: {\n open: boolean;\n onSignUp?: () => void;\n onLogin?: () => void;\n setOpen: (open: boolean) => void;\n}) => {\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent>\n <DialogTitle>Welcome to the Playground!</DialogTitle>\n <DialogDescription>\n The Playground is a tool for developers to test and explore our APIs.\n To use the Playground, you need to login.\n </DialogDescription>\n <DialogFooter className=\"flex gap-2 sm:justify-between\">\n <Button type=\"button\" variant=\"ghost\" onClick={() => setOpen(false)}>\n Skip\n </Button>\n <div className=\"flex gap-2\">\n {onSignUp && (\n <Button type=\"button\" variant=\"outline\" onClick={onSignUp}>\n Sign Up\n </Button>\n )}\n {onLogin && (\n <Button type=\"button\" variant=\"default\" onClick={onLogin}>\n Login\n </Button>\n )}\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default RequestLoginDialog;\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 ps-1.5 pt-2\">\n {headers.map(([key, value]) => (\n <Fragment key={key}>\n <div className=\"text-primary\">{key}</div>\n <div className=\"break-all\">{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=\"ps-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","/**\n * Converts a number of bytes to a human-readable file size string\n * @param bytes - The number of bytes (defaults to 0)\n * @returns A formatted string like \"1.23 MB\" or \"456 B\"\n */\nexport const humanFileSize = (bytes = 0) => {\n if (bytes === 0) {\n return \"0 B\";\n }\n\n const exponent = Math.floor(Math.log(bytes) / Math.log(1000.0));\n const decimal = (bytes / Math.pow(1000.0, exponent)).toFixed(\n exponent ? 2 : 0,\n );\n return `${decimal} ${exponent ? `${\"kMGTPEZY\"[exponent - 1]}B` : \"B\"}`;\n};\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, DownloadIcon } from \"lucide-react\";\nimport { Fragment, useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Callout } from \"zudoku/ui/Callout.js\";\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 { Card } from \"../../../../ui/Card.js\";\nimport { SyntaxHighlight } from \"../../../../ui/SyntaxHighlight.js\";\nimport { humanFileSize } from \"../../../../util/humanFileSize.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\nconst SYNTAX_HIGHLIGHT_MAX_SIZE_THRESHOLD = 64_000;\n\nexport const ResponseTab = ({\n body = \"\",\n headers,\n status,\n time,\n size,\n url,\n isBinary = false,\n fileName,\n blob,\n}: {\n body?: string;\n headers: Array<[string, string]>;\n status: number;\n time: number;\n size: number;\n url: string;\n isBinary?: boolean;\n fileName?: string;\n blob?: Blob;\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\" && !isBinary,\n });\n\n const handleDownload = () => {\n if (blob && fileName) {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n };\n\n const sortedHeaders = sortHeadersByRelevance([...headers]);\n const shouldDisableHighlighting = size > SYNTAX_HIGHLIGHT_MAX_SIZE_THRESHOLD;\n\n return (\n <div className=\"flex flex-col gap-2 h-full overflow-auto max-h-[calc(100vh-220px)] \">\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 ps-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 {isBinary ? (\n <div className=\"p-4 text-center\">\n <div className=\"flex flex-col items-center gap-4\">\n <div className=\"text-lg font-semibold\">Binary Content</div>\n <div className=\"text-sm text-muted-foreground\">\n This response contains binary data that cannot be displayed as\n text.\n </div>\n <Button\n onClick={handleDownload}\n className=\"flex items-center gap-2\"\n disabled={!blob}\n >\n <DownloadIcon className=\"h-4 w-4\" />\n Download {fileName || \"file\"} ({humanFileSize(size)})\n </Button>\n </div>\n </div>\n ) : (\n <>\n {shouldDisableHighlighting && (\n <Callout type=\"info\" className=\"my-0 p-2\">\n Code highlight is disabled for responses larger than{\" \"}\n {humanFileSize(SYNTAX_HIGHLIGHT_MAX_SIZE_THRESHOLD)}\n </Callout>\n )}\n <SyntaxHighlight\n language={\n view === \"types\"\n ? \"typescript\"\n : view === \"raw\"\n ? jsonContent\n ? \"plain\"\n : detectedLanguage\n : \"json\"\n }\n showCopy=\"always\"\n disabled={shouldDisableHighlighting}\n noBackground\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 </>\n )}\n </Card>\n <div className=\"flex gap-2 justify-between items-center\">\n <div className=\"flex text-xs gap-5 border bg-muted rounded-md p-2 items-center h-8 font-mono\">\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>{\" \"}\n {humanFileSize(size)}\n </div>\n </div>\n {jsonContent && !isBinary && (\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 { type UseMutationResult } from \"@tanstack/react-query\";\nimport { Spinner } from \"../../../../components/Spinner.js\";\nimport { Button } from \"../../../../ui/Button.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 { type PlaygroundResult } from \"../Playground.js\";\nimport { RequestTab } from \"./RequestTab.js\";\nimport { ResponseTab } from \"./ResponseTab.js\";\n\nexport const ResultPanel = ({\n queryMutation,\n showPathParamsWarning,\n showLongRunningWarning,\n onCancel,\n}: {\n queryMutation: UseMutationResult<PlaygroundResult, Error, any>;\n showPathParamsWarning: boolean;\n showLongRunningWarning?: boolean;\n onCancel?: () => void;\n}) => {\n const status = ((queryMutation.data?.status ?? 0) / 100).toFixed(0);\n return (\n <div className=\"min-w-0 p-4 py-4 bg-muted/50\">\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 <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 ms-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 isBinary={queryMutation.data.isBinary}\n fileName={queryMutation.data.fileName}\n blob={queryMutation.data.blob}\n />\n </TabsContent>\n </Tabs>\n ) : (\n <div className=\"grid place-items-center h-full\">\n {queryMutation.isPending ? (\n <div className=\"flex flex-col gap-2 items-center mt-20\">\n <Spinner size={20} />\n <div\n className={cn(\n \"opacity-0 pointer-events-none transition-opacity h-20 text-sm text-muted-foreground duration-300 flex flex-col gap-2 items-center\",\n showLongRunningWarning && \"opacity-100 pointer-events-auto\",\n )}\n >\n Looks like the request is taking longer than expected.\n <Button\n type=\"button\"\n onClick={onCancel}\n size=\"sm\"\n className=\"w-fit\"\n variant=\"outline\"\n >\n Cancel\n </Button>\n </div>\n </div>\n ) : (\n <span className=\"text-[16px] font-semibold text-muted-foreground\">\n Send a request first to see the response here\n </span>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default ResultPanel;\n","import { create } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\n\ntype RememberSkipLoginState = {\n skipLogin: boolean;\n setSkipLogin: (skipLogin: boolean) => void;\n};\n\nexport const useRememberSkipLoginDialog = create<RememberSkipLoginState>()(\n persist(\n (set) => ({\n skipLogin: false,\n setSkipLogin: (skipLogin: boolean) => set({ skipLogin }),\n }),\n {\n name: \"remember-skip-login\",\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n","import { useNProgress } from \"@tanem/react-nprogress\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { Fragment, useEffect, useRef, useState, useTransition } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"zudoku/ui/Select.js\";\nimport { useApiIdentities } from \"../../../components/context/ZudokuContext.js\";\nimport { PathRenderer } from \"../../../components/PathRenderer.js\";\nimport { useLatest } from \"../../../util/useLatest.js\";\nimport { ColorizedParam } from \"../ColorizedParam.js\";\nimport { type Content } from \"../SidecarExamples.js\";\nimport { useSelectedServer } from \"../state.js\";\nimport BodyPanel from \"./BodyPanel.js\";\nimport { createUrl } from \"./createUrl.js\";\nimport { extractFileName, isBinaryContentType } from \"./fileUtils.js\";\nimport { Headers } from \"./Headers.js\";\nimport { IdentityDialog } from \"./IdentityDialog.js\";\nimport IdentitySelector from \"./IdentitySelector.js\";\nimport { PathParams } from \"./PathParams.js\";\nimport { QueryParams } from \"./QueryParams.js\";\nimport { useIdentityStore } from \"./rememberedIdentity.js\";\nimport RequestLoginDialog from \"./RequestLoginDialog.js\";\nimport { ResultPanel } from \"./result-panel/ResultPanel.js\";\nimport { useRememberSkipLoginDialog } from \"./useRememberSkipLoginDialog.js\";\n\nexport const NO_IDENTITY = \"__none\";\n\nexport type Header = {\n name: string;\n defaultValue?: string;\n defaultActive?: boolean;\n isRequired?: boolean;\n enum?: string[];\n type?: string;\n};\n\nexport type QueryParam = {\n name: string;\n defaultValue?: string;\n defaultActive?: boolean;\n isRequired?: boolean;\n enum?: string[];\n type?: string;\n};\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<{\n name: string;\n value: string;\n }>;\n headers: Array<{\n name: string;\n value: string;\n active: boolean;\n enum?: string[];\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 isBinary?: boolean;\n fileName?: string;\n blob?: Blob;\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 requiresLogin?: boolean;\n onLogin?: () => void;\n onSignUp?: () => void;\n};\n\nexport const Playground = ({\n server,\n servers = [],\n url,\n method,\n headers = [],\n queryParams = [],\n pathParams = [],\n defaultBody = \"\",\n examples,\n requiresLogin = false,\n onLogin,\n onSignUp,\n}: PlaygroundContentProps) => {\n const { selectedServer, setSelectedServer } = useSelectedServer(\n servers.map((url) => ({ url })),\n );\n const [showSelectIdentity, setShowSelectIdentity] = useState(false);\n const identities = useApiIdentities();\n const { setRememberedIdentity, getRememberedIdentity } = useIdentityStore();\n const [, startTransition] = useTransition();\n const { skipLogin, setSkipLogin } = useRememberSkipLoginDialog();\n const [showLongRunningWarning, setShowLongRunningWarning] = useState(false);\n const abortControllerRef = useRef<AbortController | undefined>(undefined);\n const latestSetRememberedIdentity = useLatest(setRememberedIdentity);\n\n const { register, control, handleSubmit, watch, setValue, ...form } =\n useForm<PlaygroundForm>({\n defaultValues: {\n body: defaultBody,\n queryParams:\n queryParams.length > 0\n ? queryParams.map((param) => ({\n name: param.name,\n value: param.defaultValue ?? \"\",\n active: param.defaultActive ?? false,\n enum: param.enum ?? [],\n }))\n : [\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:\n headers.length > 0\n ? headers.map((header) => ({\n name: header.name,\n value: header.defaultValue ?? \"\",\n active: header.defaultActive ?? false,\n }))\n : [\n {\n name: \"\",\n value: \"\",\n active: false,\n },\n ],\n identity: getRememberedIdentity([\n NO_IDENTITY,\n ...(identities.data?.map((i) => i.id) ?? []),\n ]),\n },\n });\n const formState = watch();\n\n useEffect(() => {\n if (formState.identity) {\n latestSetRememberedIdentity.current(formState.identity);\n }\n }, [latestSetRememberedIdentity, formState.identity]);\n\n const queryMutation = useMutation({\n gcTime: 0,\n mutationFn: async (data: PlaygroundForm) => {\n const start = performance.now();\n\n const headers = Object.fromEntries([\n ...data.headers\n .filter((h) => h.name && h.active)\n .map((header) => [header.name, header.value]),\n ]);\n\n const request = new Request(\n createUrl(server ?? selectedServer, url, data),\n {\n method: method.toUpperCase(),\n headers,\n body: data.body ? data.body : undefined,\n },\n );\n\n if (data.identity !== NO_IDENTITY) {\n await identities.data\n ?.find((i) => i.id === data.identity)\n ?.authorizeRequest(request);\n }\n\n const warningTimeout = setTimeout(\n () => setShowLongRunningWarning(true),\n 3210,\n );\n abortControllerRef.current = new AbortController();\n\n try {\n const response = await fetch(request, {\n cache: \"no-store\",\n signal: abortControllerRef.current.signal,\n });\n\n clearTimeout(warningTimeout);\n setShowLongRunningWarning(false);\n\n const time = performance.now() - start;\n const url = new URL(request.url);\n const responseHeaders = Array.from(response.headers.entries());\n const contentType = response.headers.get(\"content-type\") || \"\";\n const isBinary = isBinaryContentType(contentType);\n\n let body = \"\";\n let blob: Blob | undefined;\n let fileName: string | undefined;\n\n if (isBinary) {\n blob = await response.blob();\n fileName = extractFileName(responseHeaders, request.url);\n body = `Binary content (${contentType})`;\n } else {\n body = await response.text();\n }\n\n const responseSize = response.headers.get(\"content-length\");\n\n return {\n status: response.status,\n headers: responseHeaders,\n size: responseSize ? parseInt(responseSize) : body.length,\n body,\n time,\n isBinary,\n fileName,\n blob,\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 clearTimeout(warningTimeout);\n setShowLongRunningWarning(false);\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 isRequestAnimating = queryMutation.isPending;\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => setIsAnimating(isRequestAnimating), 100);\n return () => clearTimeout(timer);\n }, [isRequestAnimating]);\n\n const { isFinished, progress } = useNProgress({ isAnimating });\n\n useEffect(() => {\n return () => {\n abortControllerRef.current?.abort();\n };\n }, []);\n\n const path = (\n <PathRenderer\n path={url}\n renderParam={({ name, originalValue, index }) => {\n const formValue = formState.pathParams.find(\n (param) => param.name === name,\n )?.value;\n\n return (\n <ColorizedParam\n name={name}\n backgroundOpacity=\"0\"\n slug={name}\n onClick={() => form.setFocus(`pathParams.${index}.value`)}\n >\n {formValue || originalValue}\n </ColorizedParam>\n );\n }}\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 {server ? (\n <span>{server.replace(/^https?:\\/\\//, \"\").replace(/\\/$/, \"\")}</span>\n ) : (\n servers.length > 1 && (\n <Select\n onValueChange={(value) => {\n startTransition(() => setSelectedServer(value));\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 translate-y-[4px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {servers.map((s) => (\n <SelectItem key={s} value={s}>\n {s.replace(/^https?:\\/\\//, \"\").replace(/\\/$/, \"\")}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n )}\n </div>\n );\n\n const showLogin = requiresLogin && !skipLogin;\n const isBodySupported = [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(\n method.toUpperCase(),\n );\n\n return (\n <FormProvider\n {...{ register, control, handleSubmit, watch, setValue, ...form }}\n >\n <form\n onSubmit={handleSubmit((data) => {\n if (identities.data?.length === 0 || data.identity) {\n queryMutation.mutate(data);\n } else {\n setShowSelectIdentity(true);\n }\n })}\n className=\"relative\"\n >\n <IdentityDialog\n identities={identities.data ?? []}\n open={showSelectIdentity}\n onOpenChange={setShowSelectIdentity}\n onSubmit={({ rememberedIdentity, identity }) => {\n if (rememberedIdentity) {\n setValue(\"identity\", identity ?? NO_IDENTITY);\n }\n setShowSelectIdentity(false);\n queryMutation.mutate({ ...formState, identity });\n }}\n />\n <RequestLoginDialog\n open={showLogin}\n setOpen={(open) => setSkipLogin(!open)}\n onSignUp={onSignUp}\n onLogin={onLogin}\n />\n\n <div className=\"grid grid-cols-[1fr_min-content_1fr] text-sm\">\n <div className=\"col-span-3 p-4 border-b\">\n <div className=\"flex gap-2 items-stretch\">\n <div className=\"flex flex-1 items-center w-full border rounded-md relative overflow-hidden\">\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=\"items-center px-2 font-mono text-xs break-all leading-6 relative h-full w-full\">\n <div className=\"h-full py-1.5\">\n {serverSelect}\n {path}\n {urlQueryParams.length > 0 ? \"?\" : \"\"}\n {urlQueryParams}\n </div>\n <div\n className=\"h-[1px] bg-primary absolute left-0 -bottom-0 z-10 transition-all duration-300 ease-in-out\"\n style={{\n opacity: isFinished ? 0 : 1,\n width: isFinished ? 0 : `${progress * 100}%`,\n }}\n />\n </div>\n </div>\n\n <Button\n type=\"submit\"\n disabled={identities.isLoading || form.formState.isSubmitting}\n >\n Send\n </Button>\n </div>\n </div>\n <div className=\"flex flex-col gap-5 p-4 after:bg-muted-foreground/20 relative overflow-y-auto h-[80vh]\">\n {identities.data?.length !== 0 && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-col gap-2\">\n <span className=\"font-semibold\">Authentication</span>\n <IdentitySelector\n value={formState.identity}\n identities={identities.data ?? []}\n setValue={(value) => setValue(\"identity\", value)}\n />\n </div>\n </div>\n )}\n\n {pathParams.length > 0 && (\n <div className=\"flex flex-col gap-2\">\n <span className=\"font-semibold\">Path Parameters</span>\n <PathParams url={url} control={control} />\n </div>\n )}\n\n <div className=\"flex flex-col gap-2\">\n <span className=\"font-semibold\">Query Parameters</span>\n <QueryParams control={control} queryParams={queryParams} />\n </div>\n\n <Headers control={control} headers={headers} />\n {isBodySupported && <BodyPanel examples={examples} />}\n </div>\n <div className=\"w-px bg-muted-foreground/20\" />\n <ResultPanel\n queryMutation={queryMutation}\n showPathParamsWarning={formState.pathParams.some(\n (p) => p.value === \"\",\n )}\n showLongRunningWarning={showLongRunningWarning}\n onCancel={() => {\n abortControllerRef.current?.abort(\n \"Request cancelled by the user\",\n );\n setShowLongRunningWarning(false);\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\n type=\"button\"\n className=\"flex gap-1 items-center px-2 py-1 rounded-md transition text-xs bg-primary text-primary-foreground shadow-xs hover:bg-primary/80\"\n >\n Test\n <HeroPlayIcon size={14} />\n </button>\n )}\n </DialogTrigger>\n\n <DialogContent\n className=\"max-w-screen-xl w-full overflow-hidden p-0\"\n aria-describedby={undefined}\n showCloseButton={false}\n >\n <VisuallyHidden>\n <DialogTitle>Playground</DialogTitle>\n </VisuallyHidden>\n {open && <Playground {...props} />}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport { PlaygroundDialog };\n","import { ColorMap } from \"../../../components/navigation/SidebarBadge.js\";\n\nexport const 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","import type { SidebarItem } from \"../../../../config/validators/SidebarSchema.js\";\nimport type { OperationResult } from \"../index.js\";\nimport { MethodColorMap } from \"./methodColorMap.js\";\n\nexport const createSidebarCategory = ({\n label,\n path,\n operations,\n collapsible,\n collapsed,\n}: {\n label: string;\n path: string;\n operations: OperationResult[];\n collapsible?: boolean;\n collapsed?: boolean;\n}): SidebarItem => ({\n type: \"category\",\n label,\n link: {\n type: \"doc\" as const,\n id: path,\n label,\n },\n collapsible,\n collapsed,\n items: operations.map((operation) => ({\n type: \"link\" as const,\n label: operation.summary ?? operation.path,\n href: `${path}#${operation.slug}`,\n badge: {\n label: operation.method,\n color: MethodColorMap[operation.method.toLowerCase()]!,\n invert: true,\n },\n })),\n});\n","import { createContext, useContext } from \"react\";\nimport { type OasPluginContext } from \"./interfaces.js\";\n\nconst OasContext = createContext<{ config: OasPluginContext } | undefined>(\n undefined,\n);\n\nexport const OasConfigProvider = OasContext.Provider;\n\nexport const useOasConfig = () => {\n const ctx = useContext(OasContext);\n if (!ctx) {\n throw new Error(\"useOasConfig must be used within a OasConfigProvider\");\n }\n return ctx.config;\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport {\n generatePath,\n Navigate,\n redirect,\n type RouteObject,\n useLocation,\n useParams,\n} from \"react-router\";\nimport { joinUrl } from \"../../../util/joinUrl.js\";\nimport type { GraphQLClient } from \"../client/GraphQLClient.js\";\nimport { useCreateQuery } from \"../client/useCreateQuery.js\";\nimport { useOasConfig } from \"../context.js\";\nimport {\n GetSidebarOperationsQuery,\n type OpenApiPluginOptions,\n UNTAGGED_PATH,\n} from \"../index.js\";\nimport type { OasPluginConfig } from \"../interfaces.js\";\n\n// Creates the main provider route that wraps operation routes.\nconst createOasProvider = (opts: {\n routePath: string;\n basePath: string;\n version?: string;\n routes: RouteObject[];\n client: GraphQLClient;\n config: OpenApiPluginOptions;\n}): RouteObject => ({\n path: opts.routePath,\n async lazy() {\n const { OasProvider } = await import(\"../OasProvider.js\");\n return {\n element: (\n <OasProvider\n basePath={opts.basePath}\n version={opts.version}\n client={opts.client}\n config={opts.config}\n />\n ),\n };\n },\n children: opts.routes,\n});\n\n// Creates a route for displaying the operation list used for both tagged and untagged operations.\nconst createRoute = ({\n path,\n tag,\n untagged,\n}: {\n path: string;\n tag?: string;\n untagged?: boolean;\n}): RouteObject => ({\n path,\n async lazy() {\n const { OperationList } = await import(\"../OperationList.js\");\n return { element: <OperationList tag={tag} untagged={untagged} /> };\n },\n});\n\nconst NonTagPagesOperationList = ({\n render,\n path,\n}: {\n render: (tag: string) => React.ReactNode;\n path: string;\n}) => {\n const { type, input } = useOasConfig();\n const { tag: currentTag } = useParams();\n const location = useLocation();\n const query = useCreateQuery(GetSidebarOperationsQuery, { type, input });\n const {\n data: { schema },\n } = useSuspenseQuery(query);\n\n const firstTag = schema.tags.at(0);\n\n if (!currentTag && firstTag?.slug) {\n return (\n <Navigate\n to={{\n pathname: generatePath(path, { tag: firstTag.slug }),\n search: location.search,\n }}\n />\n );\n }\n\n if (currentTag && schema.tags.some((t) => t.slug === currentTag)) {\n return render(currentTag);\n }\n\n return null;\n};\n\nconst createNonTagPagesRoute = ({ path }: { path: string }): RouteObject => ({\n path,\n async lazy() {\n const { OperationList } = await import(\"../OperationList.js\");\n return {\n element: (\n <NonTagPagesOperationList\n path={path}\n render={(tag) => <OperationList tag={tag} />}\n />\n ),\n };\n },\n});\n\nconst createAdditionalRoutes = (basePath: string) => [\n // Category without tagged operations\n createRoute({\n path: joinUrl(basePath, UNTAGGED_PATH),\n untagged: true,\n }),\n // Schema list route\n {\n path: joinUrl(basePath, \"~schemas\"),\n lazy: async () => {\n const { SchemaList } = await import(\"../SchemaList.js\");\n return { element: <SchemaList /> };\n },\n },\n];\n\n// Creates routes for a specific version, including tag-based routes and the untagged operations route.\nconst createVersionRoutes = (\n versionPath: string,\n tagPages: string[],\n): RouteObject[] => {\n const firstTagRoute = joinUrl(versionPath, tagPages.at(0) ?? UNTAGGED_PATH);\n\n return [\n // Redirect to first tag on the index route\n { index: true, loader: () => redirect(firstTagRoute) },\n // Create routes for each tag\n ...tagPages.map((tag) =>\n createRoute({\n path: joinUrl(versionPath, tag),\n tag,\n }),\n ),\n ...createAdditionalRoutes(versionPath),\n ];\n};\n\nexport const getVersions = (config: OasPluginConfig) =>\n config.type === \"file\" ? Object.keys(config.input) : [];\n\nexport const getRoutes = ({\n basePath,\n config,\n client,\n}: {\n client: GraphQLClient;\n config: OpenApiPluginOptions;\n basePath: string;\n}): RouteObject[] => {\n const tagPages = config.tagPages;\n\n // If the config does not provide tag pages the catch-all\n // route handles all operations on a single page\n if (!tagPages) {\n return [\n createOasProvider({\n basePath,\n routePath: basePath,\n routes: [\n createNonTagPagesRoute({ path: basePath + \"/:tag?\" }),\n ...createAdditionalRoutes(basePath),\n ],\n client,\n config,\n }),\n ];\n }\n\n const versions = getVersions(config);\n // The latest version always is added as index path\n const versionsInPath =\n versions.length > 1 ? [undefined, ...versions] : [undefined];\n\n return versionsInPath.map((version) => {\n const versionPath = joinUrl(basePath, version);\n return createOasProvider({\n basePath,\n version,\n routePath: versionPath,\n routes: createVersionRoutes(versionPath, tagPages),\n client,\n config,\n });\n });\n};\n","import { CirclePlayIcon, LogInIcon } from \"lucide-react\";\nimport { type ReactNode } from \"react\";\nimport { matchPath } from \"react-router\";\nimport { useAuth } from \"../../authentication/hook.js\";\nimport { type ZudokuPlugin } from \"../../core/plugins.js\";\nimport { Button } from \"../../ui/Button.js\";\nimport { joinUrl } from \"../../util/joinUrl.js\";\nimport { GraphQLClient } from \"./client/GraphQLClient.js\";\nimport { createQuery } from \"./client/useCreateQuery.js\";\nimport type { GetSidebarOperationsQuery as GetSidebarOperationsQueryResult } from \"./graphql/graphql.js\";\nimport { graphql } from \"./graphql/index.js\";\nimport { type OasPluginConfig } from \"./interfaces.js\";\nimport type { PlaygroundContentProps } from \"./playground/Playground.js\";\nimport { PlaygroundDialog } from \"./playground/PlaygroundDialog.js\";\nimport { createSidebarCategory } from \"./util/createSidebarCategory.js\";\nimport { getRoutes, getVersions } from \"./util/getRoutes.js\";\n\nexport const GetSidebarOperationsQuery = graphql(`\n query GetSidebarOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n tags {\n slug\n name\n extensions\n operations {\n summary\n slug\n method\n operationId\n path\n }\n }\n components {\n schemas {\n __typename\n }\n }\n }\n }\n`);\n\nexport type OperationResult =\n GetSidebarOperationsQueryResult[\"schema\"][\"tags\"][number][\"operations\"][number];\n\nexport type OpenApiPluginOptions = OasPluginConfig;\n\nexport const UNTAGGED_PATH = \"~endpoints\";\n\nexport const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {\n const basePath = joinUrl(config.navigationId ?? \"/reference\");\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 children,\n ...props\n }: Partial<PlaygroundContentProps> & { children: ReactNode } & Pick<\n PlaygroundContentProps,\n \"server\"\n > & {\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 {children ?? (\n <>\n Open in Playground <CirclePlayIcon size={16} />\n </>\n )}\n </Button>\n </PlaygroundDialog>\n );\n },\n }),\n getSidebar: async (path, context) => {\n if (!matchPath({ path: basePath, end: false }, path)) {\n return [];\n }\n\n const match = matchPath(\n { path: `${basePath}/:version?/:tag`, end: true },\n path,\n );\n\n try {\n const versionParam = match?.params.version;\n const version = versionParam ?? getVersions(config).at(0);\n const { type } = config;\n const input = type === \"file\" ? config.input[version!] : config.input;\n\n const query = createQuery(client, GetSidebarOperationsQuery, {\n type,\n input,\n });\n const data = await context.queryClient.ensureQueryData(query);\n\n const categories = data.schema.tags.flatMap((tag) => {\n if (!tag.name || tag.operations.length === 0) return [];\n\n const categoryPath = joinUrl(basePath, versionParam, tag.slug);\n\n const isCollapsed =\n tag.extensions?.[\"x-zudoku-collapsed\"] ??\n !config.options?.expandAllTags;\n const isCollapsible =\n tag.extensions?.[\"x-zudoku-collapsible\"] ?? true;\n\n return createSidebarCategory({\n label: tag.name,\n path: categoryPath,\n operations: tag.operations,\n collapsed: isCollapsed,\n collapsible: isCollapsible,\n });\n });\n\n const untaggedOperations = data.schema.tags.find(\n (tag) => !tag.name,\n )?.operations;\n\n if (untaggedOperations) {\n categories.push(\n createSidebarCategory({\n label: \"Other endpoints\",\n path: joinUrl(basePath, versionParam, UNTAGGED_PATH),\n operations: untaggedOperations,\n collapsed: !config.options?.expandAllTags,\n }),\n );\n }\n\n if (data.schema.components?.schemas?.length) {\n categories.push({\n type: \"link\" as const,\n label: \"Schemas\",\n href: joinUrl(basePath, versionParam, \"~schemas\"),\n });\n }\n\n return categories;\n } catch {\n return [];\n }\n },\n getRoutes: () => getRoutes({ basePath, config, client }),\n };\n};\n"],"names":["localServerPromise","throwIfError","response","ZudokuError","GraphQLClient","config","#getLocalServer","m","#executeFetch","init","query","variables","operationName","result","devAssert","condition","message","isObjectLike","value","invariant","LineRegExp","getLocation","source","position","lastLineStart","line","match","printLocation","location","printSourceLocation","sourceLocation","firstLineColumnOffset","body","lineIndex","lineOffset","lineNum","columnOffset","columnNum","locationStr","lines","locationLine","subLineIndex","subLineColumnNum","subLines","i","printPrefixedLines","subLine","existingLines","_","padLen","prefix","toNormalizedOptions","args","firstArg","GraphQLError","rawArgs","_this$nodes","_nodeLocations$","_ref","nodes","positions","path","originalError","extensions","undefinedIfEmpty","nodeLocations","node","loc","pos","originalExtensions","output","formattedError","array","syntaxError","description","Location","startToken","endToken","Token","kind","start","end","column","QueryDocumentKeys","kindValues","isNode","maybeNode","maybeKind","OperationTypeNode","isWhiteSpace","code","isDigit","isLetter","isNameStart","isNameContinue","dedentBlockStringLines","_firstNonEmptyLine2","commonIndent","firstNonEmptyLine","lastNonEmptyLine","_firstNonEmptyLine","indent","leadingWhitespace","str","printBlockString","options","escapedValue","isSingleLine","forceLeadingNewLine","hasTrailingTripleQuotes","hasTrailingQuote","hasTrailingSlash","forceTrailingNewline","printAsMultipleLines","skipLeadingNewLine","TokenKind","Lexer","startOfFileToken","token","nextToken","readNextToken","isPunctuatorTokenKind","isUnicodeScalarValue","isSupplementaryCodePoint","isLeadingSurrogate","isTrailingSurrogate","printCodePointAt","lexer","char","createToken","col","bodyLength","readComment","readBlockString","readString","readNumber","readName","firstCode","isFloat","readDigits","chunkStart","escape","readEscapedUnicodeVariableWidth","readEscapedUnicodeFixedWidth","readEscapedCharacter","point","size","readHexDigit","read16BitHexCode","trailingCode","lineStart","currentLine","blockLines","MAX_ARRAY_LENGTH","MAX_RECURSIVE_DEPTH","inspect","formatValue","seenValues","formatObjectValue","previouslySeenValues","isJSONable","jsonValue","formatArray","formatObject","object","entries","getObjectTag","key","len","remaining","items","tag","name","isProduction","instanceOf","constructor","_value$constructor","className","valueClassName","stringifiedValue","Source","locationOffset","isSource","stripIgnoredCharacters","sourceObj","strippedBody","wasLastAddedTokenNonPunctuator","currentToken","tokenKind","isNonPunctuator","tokenBody","GraphQLContext","createContext","GraphQLProvider","children","client","createQuery","useCreateQuery","graphQLClient","use","TypedDocumentString","__meta__","OperationsFragmentFragmentDoc","ServersQueryDocument","SchemaWarmupDocument","OperationsForTagDocument","GetSchemasDocument","GetServerQueryDocument","GetSidebarOperationsDocument","documents","types.ServersQueryDocument","types.OperationsFragmentFragmentDoc","types.SchemaWarmupDocument","types.OperationsForTagDocument","types.GetSchemasDocument","types.GetServerQueryDocument","types.GetSidebarOperationsDocument","graphql","Select","SelectPrimitive","SelectValue","SelectTrigger","React","props","ref","jsxs","cn","jsx","ChevronDown","SelectScrollUpButton","ChevronUp","SelectScrollDownButton","SelectContent","SelectLabel","SelectItem","Check","SelectSeparator","PathRenderer","renderParam","paramIndex","part","arr","matches","elements","lastIndex","originalValue","startIndex","Fragment","c2n","c","s2n","s","a","pastellize","hue","saturation","lightness","DATA_ATTR","usePastellizedColor","resolvedTheme","useTheme","ColorizedParam","slug","title","onClick","useRef","normalizedSlug","normalized","text","background","textColor","backgroundColor","borderColor","useEffect","onMouseEnter","el","onMouseLeave","useSelectedServerStore","create","persist","set","newServer","useSelectedServer","servers","selectedServer","setSelectedServer","useMemo","Textarea","DropdownMenu","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuSubTrigger","inset","ChevronRightIcon","DropdownMenuSubContent","DropdownMenuContent","sideOffset","DropdownMenuItem","DropdownMenuCheckboxItem","checked","CheckIcon","DropdownMenuRadioItem","DotIcon","DropdownMenuLabel","DropdownMenuSeparator","ExamplesDropdown","examples","onSelect","Button","ChevronDownIcon","mediaTypeObject","example","BodyPanel","register","setValue","watch","useFormContext","headers","mediaType","h","createUrl","host","data","filledPath","url","param","isBinaryContentType","contentType","extractFileName","contentDisposition","filenameMatch","fileName","Checkbox","CheckboxPrimitive","Popover","PopoverPrimitive","PopoverContent","align","AutocompletePopover","onChange","placeholder","onEnterPress","open","setOpen","useState","dontClose","setDontClose","count","useCommandState","state","inputRef","PopoverAnchor","CommandInlineInput","e","CommandList","enumValue","CommandItem","selected","Autocomplete","shouldFilter","Command","createVariantComponent","cvx","MyVariant","asChild","Comp","Slot","ParamsGrid","ParamsGridItem","headerOptions","Headers","control","schemaHeaders","fields","append","remove","useFieldArray","valueRefs","nameRefs","watchedHeaders","addNewHeader","useCallback","handleHeaderEnter","index","handleValueEnter","missingHeaders","f","Card","field","currentHeader","Controller","Input","XIcon","labelVariants","cva","Label","LabelPrimitive","RadioGroup","RadioGroupPrimitive","RadioGroupItem","Circle","IdentitySelector","identities","NO_IDENTITY","identity","IdentityDialog","onSubmit","onOpenChange","setIdentity","rememberedIdentity","setRememberedIdentity","Dialog","DialogContent","DialogTitle","DialogDescription","DialogFooter","PathParams","sortedFields","b","InlineInput","QueryParams","queryParams","form","requiredFields","currentParam","useIdentityStore","get","availableIdentities","createJSONStorage","RequestLoginDialog","onSignUp","onLogin","TextColorMap","methodToColor","methodForColor","method","RequestTab","Collapsible","CollapsibleTrigger","CollapsibleContent","CollapsiblePrimitive","humanFileSize","bytes","exponent","inferType","firstValue","generateInterface","obj","indentation","propertyType","convertToTypes","json","statusCodeMap","mimeTypeToLanguage","mimeType","mime","detectLanguage","tryParseJson","sortHeadersByRelevance","priorityOrder","keyA","keyB","indexA","indexB","SYNTAX_HIGHLIGHT_MAX_SIZE_THRESHOLD","ResponseTab","status","time","isBinary","blob","detectedLanguage","jsonContent","beautifiedBody","view","setView","types","useQuery","handleDownload","link","sortedHeaders","shouldDisableHighlighting","DownloadIcon","Callout","SyntaxHighlight","ResultPanel","queryMutation","showPathParamsWarning","showLongRunningWarning","onCancel","CardHeader","CardTitle","CardContent","Tabs","TabsList","TabsTrigger","TabsContent","Spinner","useRememberSkipLoginDialog","skipLogin","Playground","server","pathParams","defaultBody","requiresLogin","showSelectIdentity","setShowSelectIdentity","useApiIdentities","getRememberedIdentity","startTransition","useTransition","setSkipLogin","setShowLongRunningWarning","abortControllerRef","latestSetRememberedIdentity","useLatest","handleSubmit","useForm","header","formState","useMutation","request","warningTimeout","responseHeaders","responseSize","error","isRequestAnimating","isAnimating","setIsAnimating","timer","isFinished","progress","useNProgress","formValue","urlQueryParams","p","serverSelect","showLogin","isBodySupported","FormProvider","HeroPlayIcon","PlaygroundDialog","DialogTrigger","VisuallyHidden","MethodColorMap","createSidebarCategory","label","operations","collapsible","collapsed","operation","OasContext","OasConfigProvider","useOasConfig","ctx","useContext","createOasProvider","opts","OasProvider","createRoute","untagged","OperationList","NonTagPagesOperationList","render","type","input","currentTag","useParams","useLocation","GetSidebarOperationsQuery","schema","useSuspenseQuery","firstTag","Navigate","generatePath","t","createNonTagPagesRoute","createAdditionalRoutes","basePath","joinUrl","UNTAGGED_PATH","SchemaList","createVersionRoutes","versionPath","tagPages","firstTagRoute","redirect","getVersions","getRoutes","versions","version","openApiPlugin","requireAuth","auth","useAuth","LogInIcon","CirclePlayIcon","context","matchPath","versionParam","categories","categoryPath","isCollapsed","isCollapsible","untaggedOperations"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}