zudoku 0.0.0-f9d5b02 → 0.0.0-fabd0c1

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 (580) hide show
  1. package/client.d.ts +7 -0
  2. package/dist/app/demo.js +1 -1
  3. package/dist/app/demo.js.map +1 -1
  4. package/dist/app/entry.client.d.ts +1 -0
  5. package/dist/app/entry.client.js +14 -1
  6. package/dist/app/entry.client.js.map +1 -1
  7. package/dist/app/entry.server.d.ts +1 -0
  8. package/dist/app/entry.server.js +2 -2
  9. package/dist/app/entry.server.js.map +1 -1
  10. package/dist/app/main.d.ts +1 -1
  11. package/dist/app/main.js +2 -1
  12. package/dist/app/main.js.map +1 -1
  13. package/dist/app/sentry.d.ts +3 -0
  14. package/dist/app/sentry.js +19 -0
  15. package/dist/app/sentry.js.map +1 -0
  16. package/dist/app/standalone.js +1 -1
  17. package/dist/app/standalone.js.map +1 -1
  18. package/dist/app/tailwind.d.ts +2 -1
  19. package/dist/app/tailwind.js +64 -52
  20. package/dist/app/tailwind.js.map +1 -1
  21. package/dist/cli/cli.js +0 -2
  22. package/dist/cli/cli.js.map +1 -1
  23. package/dist/cli/cmds/build.js +1 -0
  24. package/dist/cli/cmds/build.js.map +1 -1
  25. package/dist/cli/common/logger.js +9 -0
  26. package/dist/cli/common/logger.js.map +1 -1
  27. package/dist/cli/common/outdated.js +2 -1
  28. package/dist/cli/common/outdated.js.map +1 -1
  29. package/dist/config/common.d.ts +8 -0
  30. package/dist/config/common.js +2 -0
  31. package/dist/config/common.js.map +1 -0
  32. package/dist/config/config.d.ts +3 -2
  33. package/dist/config/loader.d.ts +20 -0
  34. package/dist/config/loader.js +154 -0
  35. package/dist/config/loader.js.map +1 -0
  36. package/dist/config/validators/InputSidebarSchema.d.ts +14 -13
  37. package/dist/config/validators/InputSidebarSchema.js.map +1 -1
  38. package/dist/config/validators/common.d.ts +4945 -0
  39. package/dist/config/validators/common.js +280 -0
  40. package/dist/config/validators/common.js.map +1 -0
  41. package/dist/config/validators/icon-types.d.ts +1 -0
  42. package/dist/config/validators/icon-types.js +2 -0
  43. package/dist/config/validators/icon-types.js.map +1 -0
  44. package/dist/config/validators/validate.d.ts +800 -530
  45. package/dist/config/validators/validate.js +9 -228
  46. package/dist/config/validators/validate.js.map +1 -1
  47. package/dist/lib/authentication/AuthenticationPlugin.d.ts +4 -2
  48. package/dist/lib/authentication/AuthenticationPlugin.js +3 -0
  49. package/dist/lib/authentication/AuthenticationPlugin.js.map +1 -1
  50. package/dist/lib/authentication/authentication.d.ts +1 -1
  51. package/dist/lib/authentication/components/CallbackHandler.js +1 -1
  52. package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
  53. package/dist/lib/authentication/components/SignIn.js +1 -1
  54. package/dist/lib/authentication/components/SignIn.js.map +1 -1
  55. package/dist/lib/authentication/components/SignOut.js +1 -1
  56. package/dist/lib/authentication/components/SignOut.js.map +1 -1
  57. package/dist/lib/authentication/hook.d.ts +5 -4
  58. package/dist/lib/authentication/hook.js +1 -3
  59. package/dist/lib/authentication/hook.js.map +1 -1
  60. package/dist/lib/authentication/providers/auth0.js +2 -2
  61. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  62. package/dist/lib/authentication/providers/openid.d.ts +7 -1
  63. package/dist/lib/authentication/providers/openid.js +18 -27
  64. package/dist/lib/authentication/providers/openid.js.map +1 -1
  65. package/dist/lib/authentication/state.d.ts +25 -4
  66. package/dist/lib/authentication/state.js +28 -5
  67. package/dist/lib/authentication/state.js.map +1 -1
  68. package/dist/lib/components/AnchorLink.d.ts +1 -1
  69. package/dist/lib/components/AnchorLink.js +1 -1
  70. package/dist/lib/components/AnchorLink.js.map +1 -1
  71. package/dist/lib/components/Bootstrap.d.ts +1 -2
  72. package/dist/lib/components/Bootstrap.js +11 -7
  73. package/dist/lib/components/Bootstrap.js.map +1 -1
  74. package/dist/lib/components/Header.js +14 -6
  75. package/dist/lib/components/Header.js.map +1 -1
  76. package/dist/lib/components/Heading.d.ts +4 -4
  77. package/dist/lib/components/Heading.js +1 -1
  78. package/dist/lib/components/Heading.js.map +1 -1
  79. package/dist/lib/components/Layout.js +14 -5
  80. package/dist/lib/components/Layout.js.map +1 -1
  81. package/dist/lib/components/Markdown.js +1 -1
  82. package/dist/lib/components/Markdown.js.map +1 -1
  83. package/dist/lib/components/MobileTopNavigation.js +5 -7
  84. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  85. package/dist/lib/components/NotFoundPage.js +1 -1
  86. package/dist/lib/components/NotFoundPage.js.map +1 -1
  87. package/dist/lib/components/ReactMarkdown.d.ts +29 -0
  88. package/dist/lib/components/ReactMarkdown.js +182 -0
  89. package/dist/lib/components/ReactMarkdown.js.map +1 -0
  90. package/dist/lib/components/Search.d.ts +3 -1
  91. package/dist/lib/components/Search.js +3 -3
  92. package/dist/lib/components/Search.js.map +1 -1
  93. package/dist/lib/components/SlotletProvider.d.ts +2 -2
  94. package/dist/lib/components/SyntaxHighlight.js +2 -6
  95. package/dist/lib/components/SyntaxHighlight.js.map +1 -1
  96. package/dist/lib/components/ThemeSwitch.js +5 -3
  97. package/dist/lib/components/ThemeSwitch.js.map +1 -1
  98. package/dist/lib/components/TopNavigation.d.ts +2 -0
  99. package/dist/lib/components/TopNavigation.js +13 -7
  100. package/dist/lib/components/TopNavigation.js.map +1 -1
  101. package/dist/lib/components/Zudoku.js +1 -1
  102. package/dist/lib/components/Zudoku.js.map +1 -1
  103. package/dist/lib/components/context/ZudokuContext.js +1 -1
  104. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  105. package/dist/lib/components/index.d.ts +15 -5
  106. package/dist/lib/components/index.js +1 -1
  107. package/dist/lib/components/index.js.map +1 -1
  108. package/dist/lib/components/navigation/Sidebar.d.ts +3 -1
  109. package/dist/lib/components/navigation/Sidebar.js +2 -2
  110. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  111. package/dist/lib/components/navigation/SidebarBadge.d.ts +0 -9
  112. package/dist/lib/components/navigation/SidebarBadge.js +0 -9
  113. package/dist/lib/components/navigation/SidebarBadge.js.map +1 -1
  114. package/dist/lib/components/navigation/SidebarCategory.d.ts +2 -2
  115. package/dist/lib/components/navigation/SidebarCategory.js +4 -5
  116. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  117. package/dist/lib/components/navigation/SidebarItem.d.ts +2 -4
  118. package/dist/lib/components/navigation/SidebarItem.js +6 -11
  119. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  120. package/dist/lib/components/navigation/SidebarWrapper.js +1 -1
  121. package/dist/lib/components/navigation/SidebarWrapper.js.map +1 -1
  122. package/dist/lib/components/navigation/utils.js +1 -1
  123. package/dist/lib/components/navigation/utils.js.map +1 -1
  124. package/dist/lib/core/ZudokuContext.d.ts +1 -1
  125. package/dist/lib/core/plugins.d.ts +5 -1
  126. package/dist/lib/core/plugins.js.map +1 -1
  127. package/dist/lib/errors/RouterError.js +1 -1
  128. package/dist/lib/errors/RouterError.js.map +1 -1
  129. package/dist/lib/oas/graphql/index.js +4 -1
  130. package/dist/lib/oas/graphql/index.js.map +1 -1
  131. package/dist/lib/oas/parser/upgrade/index.d.ts +2 -2
  132. package/dist/lib/oas/parser/upgrade/index.js +3 -20
  133. package/dist/lib/oas/parser/upgrade/index.js.map +1 -1
  134. package/dist/lib/plugins/api-catalog/Catalog.d.ts +2 -0
  135. package/dist/lib/plugins/api-catalog/Catalog.js +36 -0
  136. package/dist/lib/plugins/api-catalog/Catalog.js.map +1 -0
  137. package/dist/lib/plugins/api-catalog/index.d.ts +30 -0
  138. package/dist/lib/plugins/api-catalog/index.js +15 -0
  139. package/dist/lib/plugins/api-catalog/index.js.map +1 -0
  140. package/dist/lib/plugins/api-keys/CreateApiKey.js +1 -1
  141. package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -1
  142. package/dist/lib/plugins/api-keys/ProtectedRoute.js +1 -1
  143. package/dist/lib/plugins/api-keys/ProtectedRoute.js.map +1 -1
  144. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +1 -1
  145. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  146. package/dist/lib/plugins/api-keys/index.js +3 -0
  147. package/dist/lib/plugins/api-keys/index.js.map +1 -1
  148. package/dist/lib/plugins/markdown/MdxPage.d.ts +9 -1
  149. package/dist/lib/plugins/markdown/MdxPage.js +16 -3
  150. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  151. package/dist/lib/plugins/markdown/index.d.ts +3 -1
  152. package/dist/lib/plugins/markdown/index.js +1 -1
  153. package/dist/lib/plugins/markdown/index.js.map +1 -1
  154. package/dist/lib/plugins/markdown/resolver.js.map +1 -1
  155. package/dist/lib/plugins/openapi/ColorizedParam.js +2 -2
  156. package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
  157. package/dist/lib/plugins/openapi/OperationList.js +24 -3
  158. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  159. package/dist/lib/plugins/openapi/OperationListItem.d.ts +2 -1
  160. package/dist/lib/plugins/openapi/OperationListItem.js +14 -4
  161. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  162. package/dist/lib/plugins/openapi/Route.d.ts +4 -2
  163. package/dist/lib/plugins/openapi/Route.js +25 -2
  164. package/dist/lib/plugins/openapi/Route.js.map +1 -1
  165. package/dist/lib/plugins/openapi/Sidecar.js +3 -13
  166. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  167. package/dist/lib/plugins/openapi/client/GraphQLClient.js +12 -0
  168. package/dist/lib/plugins/openapi/client/GraphQLClient.js.map +1 -1
  169. package/dist/lib/plugins/openapi/client/useCreateQuery.d.ts +1 -1
  170. package/dist/lib/plugins/openapi/client/useCreateQuery.js +4 -2
  171. package/dist/lib/plugins/openapi/client/useCreateQuery.js.map +1 -1
  172. package/dist/lib/plugins/openapi/context.d.ts +3 -3
  173. package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
  174. package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
  175. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  176. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +2 -0
  177. package/dist/lib/plugins/openapi/graphql/graphql.js +1 -0
  178. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  179. package/dist/lib/plugins/openapi/index.js +13 -13
  180. package/dist/lib/plugins/openapi/index.js.map +1 -1
  181. package/dist/lib/plugins/openapi/interfaces.d.ts +20 -1
  182. package/dist/lib/plugins/openapi/playground/PathParams.js +1 -1
  183. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  184. package/dist/lib/plugins/openapi/post-processors/removeExtensions.d.ts +6 -0
  185. package/dist/lib/plugins/openapi/post-processors/removeExtensions.js +14 -0
  186. package/dist/lib/plugins/openapi/post-processors/removeExtensions.js.map +1 -0
  187. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.d.ts +1 -0
  188. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js +125 -0
  189. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js.map +1 -0
  190. package/dist/lib/plugins/openapi/post-processors/removePaths.d.ts +11 -0
  191. package/dist/lib/plugins/openapi/post-processors/removePaths.js +33 -0
  192. package/dist/lib/plugins/openapi/post-processors/removePaths.js.map +1 -0
  193. package/dist/lib/plugins/openapi/post-processors/removePaths.test.d.ts +1 -0
  194. package/dist/lib/plugins/openapi/post-processors/removePaths.test.js +104 -0
  195. package/dist/lib/plugins/openapi/post-processors/removePaths.test.js.map +1 -0
  196. package/dist/lib/plugins/openapi/post-processors/traverse.d.ts +1 -0
  197. package/dist/lib/plugins/openapi/post-processors/traverse.js +2 -0
  198. package/dist/lib/plugins/openapi/post-processors/traverse.js.map +1 -0
  199. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  200. package/dist/lib/plugins/openapi/util/methodToColor.d.ts +20 -0
  201. package/dist/lib/plugins/openapi/util/methodToColor.js +24 -0
  202. package/dist/lib/plugins/openapi/util/methodToColor.js.map +1 -0
  203. package/dist/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.d.ts +1 -0
  204. package/dist/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.js +27 -0
  205. package/dist/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.js.map +1 -0
  206. package/dist/lib/plugins/redirect/index.d.ts +1 -1
  207. package/dist/lib/plugins/redirect/index.js +1 -1
  208. package/dist/lib/plugins/redirect/index.js.map +1 -1
  209. package/dist/lib/plugins/search-inkeep/index.d.ts +22 -3
  210. package/dist/lib/plugins/search-inkeep/index.js +41 -5
  211. package/dist/lib/plugins/search-inkeep/index.js.map +1 -1
  212. package/dist/lib/plugins/search-inkeep/inkeep.d.ts +3 -4
  213. package/dist/lib/plugins/search-inkeep/inkeep.js.map +1 -1
  214. package/dist/lib/ui/Button.d.ts +1 -1
  215. package/dist/lib/ui/Command.d.ts +1 -1
  216. package/dist/lib/util/MdxComponents.d.ts +18 -19
  217. package/dist/lib/util/MdxComponents.js +1 -3
  218. package/dist/lib/util/MdxComponents.js.map +1 -1
  219. package/dist/lib/util/createVariantComponent.d.ts +2 -2
  220. package/dist/lib/util/traverse.d.ts +2 -0
  221. package/dist/lib/util/traverse.js +18 -0
  222. package/dist/lib/util/traverse.js.map +1 -0
  223. package/dist/lib/util/useExposedProps.js +1 -1
  224. package/dist/lib/util/useExposedProps.js.map +1 -1
  225. package/dist/lib/util/useOnScreen.d.ts +1 -1
  226. package/dist/lib/util/useScrollToAnchor.js +1 -1
  227. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  228. package/dist/lib/util/useScrollToTop.js +1 -1
  229. package/dist/lib/util/useScrollToTop.js.map +1 -1
  230. package/dist/vite/build.js +15 -3
  231. package/dist/vite/build.js.map +1 -1
  232. package/dist/vite/config.d.ts +6 -4
  233. package/dist/vite/config.js +70 -23
  234. package/dist/vite/config.js.map +1 -1
  235. package/dist/vite/config.test.js +7 -5
  236. package/dist/vite/config.test.js.map +1 -1
  237. package/dist/vite/css/collect.d.ts +2 -0
  238. package/dist/vite/css/collect.js +27 -0
  239. package/dist/vite/css/collect.js.map +1 -0
  240. package/dist/vite/css/plugin.d.ts +5 -0
  241. package/dist/vite/css/plugin.js +79 -0
  242. package/dist/vite/css/plugin.js.map +1 -0
  243. package/dist/vite/dev-server.js +19 -6
  244. package/dist/vite/dev-server.js.map +1 -1
  245. package/dist/vite/output.d.ts +1 -1
  246. package/dist/vite/output.js +39 -10
  247. package/dist/vite/output.js.map +1 -1
  248. package/dist/vite/plugin-api.js +93 -20
  249. package/dist/vite/plugin-api.js.map +1 -1
  250. package/dist/vite/plugin-component.js +15 -19
  251. package/dist/vite/plugin-component.js.map +1 -1
  252. package/dist/vite/plugin-config-reload.d.ts +1 -2
  253. package/dist/vite/plugin-config-reload.js.map +1 -1
  254. package/dist/vite/plugin-config.js +20 -0
  255. package/dist/vite/plugin-config.js.map +1 -1
  256. package/dist/vite/plugin-docs.test.js +15 -23
  257. package/dist/vite/plugin-docs.test.js.map +1 -1
  258. package/dist/vite/plugin-mdx.js +60 -4
  259. package/dist/vite/plugin-mdx.js.map +1 -1
  260. package/dist/vite/{plugin-custom-css.d.ts → plugin-theme-css.d.ts} +2 -2
  261. package/dist/vite/{plugin-custom-css.js → plugin-theme-css.js} +10 -3
  262. package/dist/vite/plugin-theme-css.js.map +1 -0
  263. package/dist/vite/plugin.d.ts +1 -2
  264. package/dist/vite/plugin.js +6 -2
  265. package/dist/vite/plugin.js.map +1 -1
  266. package/dist/vite/prerender.d.ts +2 -1
  267. package/dist/vite/prerender.js +2 -2
  268. package/dist/vite/prerender.js.map +1 -1
  269. package/dist/vite/remarkStaticGeneration.js +5 -5
  270. package/dist/vite/remarkStaticGeneration.js.map +1 -1
  271. package/dist/vite/sitemap.d.ts +1 -1
  272. package/dist/zuplo/env.d.ts +6 -0
  273. package/dist/zuplo/env.js +9 -0
  274. package/dist/zuplo/env.js.map +1 -0
  275. package/dist/zuplo/with-zuplo.d.ts +3 -0
  276. package/dist/zuplo/with-zuplo.js +28 -0
  277. package/dist/zuplo/with-zuplo.js.map +1 -0
  278. package/lib/AnchorLink-DFZZbmvr.js +34 -0
  279. package/lib/AnchorLink-DFZZbmvr.js.map +1 -0
  280. package/lib/{AuthenticationPlugin-DeGDVa1r.js → AuthenticationPlugin-fB7viE7A.js} +23 -21
  281. package/lib/AuthenticationPlugin-fB7viE7A.js.map +1 -0
  282. package/lib/{Button-jK0EsymC.js → Button-DeAoTouo.js} +4 -4
  283. package/lib/{Button-jK0EsymC.js.map → Button-DeAoTouo.js.map} +1 -1
  284. package/lib/{CategoryHeading-Bb9dqxD3.js → CategoryHeading-CBconmtI.js} +3 -3
  285. package/lib/{CategoryHeading-Bb9dqxD3.js.map → CategoryHeading-CBconmtI.js.map} +1 -1
  286. package/lib/ClientOnly-E7hGysn1.js.map +1 -1
  287. package/lib/{Dialog-k70Qfukb.js → Dialog-Bxv1yEIg.js} +3 -3
  288. package/lib/{Dialog-k70Qfukb.js.map → Dialog-Bxv1yEIg.js.map} +1 -1
  289. package/lib/{Markdown-BorQdbxW.js → Markdown-CZDLNOFc.js} +13227 -13217
  290. package/lib/Markdown-CZDLNOFc.js.map +1 -0
  291. package/lib/MdxPage-CPBw4_lf.js +188 -0
  292. package/lib/MdxPage-CPBw4_lf.js.map +1 -0
  293. package/lib/OperationList-n4U_BHmO.js +5062 -0
  294. package/lib/OperationList-n4U_BHmO.js.map +1 -0
  295. package/lib/Route-C8nwd9A2.js +37 -0
  296. package/lib/Route-C8nwd9A2.js.map +1 -0
  297. package/lib/{Select-DP74t8Yy.js → Select-D3XuKKuH.js} +5 -5
  298. package/lib/{Select-DP74t8Yy.js.map → Select-D3XuKKuH.js.map} +1 -1
  299. package/lib/SlotletProvider-pfc9oejW.js +221 -0
  300. package/lib/SlotletProvider-pfc9oejW.js.map +1 -0
  301. package/lib/{Spinner-3cQDBVGr.js → Spinner-DuxJLLNE.js} +2 -2
  302. package/lib/{Spinner-3cQDBVGr.js.map → Spinner-DuxJLLNE.js.map} +1 -1
  303. package/lib/StaggeredRender-DgsamH_G.js +17 -0
  304. package/lib/StaggeredRender-DgsamH_G.js.map +1 -0
  305. package/lib/{SyntaxHighlight-CBmwwKoM.js → SyntaxHighlight-Bz-lOJtH.js} +9 -13
  306. package/lib/{SyntaxHighlight-CBmwwKoM.js.map → SyntaxHighlight-Bz-lOJtH.js.map} +1 -1
  307. package/lib/assets/{index-B_Jk_Yzp.js → index-C7jnHK4b.js} +218 -197
  308. package/lib/assets/index-C7jnHK4b.js.map +1 -0
  309. package/lib/assets/{worker-CPsGZsve.js → worker-D2kRl-cG.js} +5326 -4949
  310. package/lib/assets/worker-D2kRl-cG.js.map +1 -0
  311. package/lib/chunk-D52XG6IA-Dl7HLe6j.js +1823 -0
  312. package/lib/chunk-D52XG6IA-Dl7HLe6j.js.map +1 -0
  313. package/lib/{cn-BmFQLtkS.js → cn-qaFjX9_3.js} +2 -2
  314. package/lib/cn-qaFjX9_3.js.map +1 -0
  315. package/lib/{context-D1nXWxm7.js → context-h_UkBLvr.js} +2 -2
  316. package/lib/context-h_UkBLvr.js.map +1 -0
  317. package/lib/{createServer-DK-g7kbB.js → createServer-69sLlmQA.js} +5350 -5760
  318. package/lib/createServer-69sLlmQA.js.map +1 -0
  319. package/lib/{hook-Diu0rqp-.js → hook-DgGeo5iL.js} +12 -14
  320. package/lib/{hook-Diu0rqp-.js.map → hook-DgGeo5iL.js.map} +1 -1
  321. package/lib/{index-CkwDvuPt.js → index-CBXSgjaE.js} +259 -238
  322. package/lib/index-CBXSgjaE.js.map +1 -0
  323. package/lib/index-CPNSgwSb.js +36 -0
  324. package/lib/index-CPNSgwSb.js.map +1 -0
  325. package/lib/index-DStSNvP-.js +1284 -0
  326. package/lib/index-DStSNvP-.js.map +1 -0
  327. package/lib/index-LNp6rxyU.js.map +1 -1
  328. package/lib/index.esm-BSV1C092.js +692 -0
  329. package/lib/index.esm-BSV1C092.js.map +1 -0
  330. package/lib/index.esm-BnnBRKJX.js +1214 -0
  331. package/lib/index.esm-BnnBRKJX.js.map +1 -0
  332. package/lib/invariant-Caa8-XvF.js.map +1 -1
  333. package/lib/jsx-runtime-Dx-03ztt.js +446 -0
  334. package/lib/jsx-runtime-Dx-03ztt.js.map +1 -0
  335. package/lib/object_hash-BNWPnMN9.js +787 -0
  336. package/lib/object_hash-BNWPnMN9.js.map +1 -0
  337. package/lib/post-processors/removeExtensions.js +11 -0
  338. package/lib/post-processors/removeExtensions.js.map +1 -0
  339. package/lib/post-processors/removePaths.js +28 -0
  340. package/lib/post-processors/removePaths.js.map +1 -0
  341. package/lib/post-processors/traverse.js +12 -0
  342. package/lib/post-processors/traverse.js.map +1 -0
  343. package/lib/prism-csharp.min-DUwvItt4.js +63 -0
  344. package/lib/{prism-csharp.min-Yizuc34Y.js.map → prism-csharp.min-DUwvItt4.js.map} +1 -1
  345. package/lib/prism-java.min-BtgBR4yd.js +35 -0
  346. package/lib/{prism-java.min-d5iT_mOd.js.map → prism-java.min-BtgBR4yd.js.map} +1 -1
  347. package/lib/prism-markup-BNGj0Tvm.js.map +1 -1
  348. package/lib/prism-ruby.min-DeDXCp1r.js +38 -0
  349. package/lib/{prism-ruby.min-C7LwcKyz.js.map → prism-ruby.min-DeDXCp1r.js.map} +1 -1
  350. package/lib/prism-typescript.min-CD7H2IYQ.js +34 -0
  351. package/lib/{prism-typescript.min-oSVeWCAd.js.map → prism-typescript.min-CD7H2IYQ.js.map} +1 -1
  352. package/lib/state-CFQsUZUP.js +202 -0
  353. package/lib/state-CFQsUZUP.js.map +1 -0
  354. package/lib/ui/Accordion.js +2 -2
  355. package/lib/ui/Accordion.js.map +1 -1
  356. package/lib/ui/ActionButton.js +4 -4
  357. package/lib/ui/ActionButton.js.map +1 -1
  358. package/lib/ui/Alert.js +3 -3
  359. package/lib/ui/Alert.js.map +1 -1
  360. package/lib/ui/AlertDialog.js +2 -2
  361. package/lib/ui/AlertDialog.js.map +1 -1
  362. package/lib/ui/Badge.js +3 -3
  363. package/lib/ui/Badge.js.map +1 -1
  364. package/lib/ui/Breadcrumb.js +2 -2
  365. package/lib/ui/Breadcrumb.js.map +1 -1
  366. package/lib/ui/Button.js +3 -3
  367. package/lib/ui/Button.js.map +1 -1
  368. package/lib/ui/Callout.js +2 -2
  369. package/lib/ui/Callout.js.map +1 -1
  370. package/lib/ui/Card.js +2 -2
  371. package/lib/ui/Card.js.map +1 -1
  372. package/lib/ui/Carousel.js +407 -401
  373. package/lib/ui/Carousel.js.map +1 -1
  374. package/lib/ui/Checkbox.js +2 -2
  375. package/lib/ui/Checkbox.js.map +1 -1
  376. package/lib/ui/Command.js +111 -108
  377. package/lib/ui/Command.js.map +1 -1
  378. package/lib/ui/Dialog.js +2 -2
  379. package/lib/ui/Dialog.js.map +1 -1
  380. package/lib/ui/Drawer.js +81 -81
  381. package/lib/ui/Drawer.js.map +1 -1
  382. package/lib/ui/DropdownMenu.js +2 -2
  383. package/lib/ui/DropdownMenu.js.map +1 -1
  384. package/lib/ui/Form.js +3 -3
  385. package/lib/ui/Form.js.map +1 -1
  386. package/lib/ui/HoverCard.js +2 -2
  387. package/lib/ui/Input.js +2 -2
  388. package/lib/ui/Input.js.map +1 -1
  389. package/lib/ui/Label.js +3 -3
  390. package/lib/ui/Pagination.js +2 -2
  391. package/lib/ui/Pagination.js.map +1 -1
  392. package/lib/ui/Popover.js +2 -2
  393. package/lib/ui/Popover.js.map +1 -1
  394. package/lib/ui/Progress.js +2 -2
  395. package/lib/ui/Progress.js.map +1 -1
  396. package/lib/ui/RadioGroup.js +2 -2
  397. package/lib/ui/RadioGroup.js.map +1 -1
  398. package/lib/ui/ScrollArea.js +2 -2
  399. package/lib/ui/ScrollArea.js.map +1 -1
  400. package/lib/ui/Select.js +2 -2
  401. package/lib/ui/Select.js.map +1 -1
  402. package/lib/ui/Skeleton.js +2 -2
  403. package/lib/ui/Skeleton.js.map +1 -1
  404. package/lib/ui/Slider.js +2 -2
  405. package/lib/ui/Switch.js +2 -2
  406. package/lib/ui/Switch.js.map +1 -1
  407. package/lib/ui/Tabs.js +2 -2
  408. package/lib/ui/Textarea.js +2 -2
  409. package/lib/ui/Textarea.js.map +1 -1
  410. package/lib/ui/Toggle.js +3 -3
  411. package/lib/ui/Toggle.js.map +1 -1
  412. package/lib/ui/ToggleGroup.js +2 -2
  413. package/lib/ui/ToggleGroup.js.map +1 -1
  414. package/lib/ui/Tooltip.js +2 -2
  415. package/lib/useExposedProps-DE9lR6MF.js +9 -0
  416. package/lib/useExposedProps-DE9lR6MF.js.map +1 -0
  417. package/lib/{utils-DcpDOncX.js → utils-B4O1uet5.js} +35 -36
  418. package/lib/{utils-DcpDOncX.js.map → utils-B4O1uet5.js.map} +1 -1
  419. package/lib/zudoku.auth-auth0.js +9 -8
  420. package/lib/zudoku.auth-auth0.js.map +1 -1
  421. package/lib/zudoku.auth-clerk.js +2 -2
  422. package/lib/zudoku.auth-clerk.js.map +1 -1
  423. package/lib/zudoku.auth-openid.js +365 -371
  424. package/lib/zudoku.auth-openid.js.map +1 -1
  425. package/lib/zudoku.components.js +814 -967
  426. package/lib/zudoku.components.js.map +1 -1
  427. package/lib/zudoku.openapi-worker.js +1 -1
  428. package/lib/zudoku.openapi-worker.js.map +1 -1
  429. package/lib/zudoku.plugin-api-catalog.js +123 -0
  430. package/lib/zudoku.plugin-api-catalog.js.map +1 -0
  431. package/lib/zudoku.plugin-api-keys.js +40 -39
  432. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  433. package/lib/zudoku.plugin-custom-pages.js +4 -4
  434. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  435. package/lib/zudoku.plugin-markdown.js +16 -15
  436. package/lib/zudoku.plugin-markdown.js.map +1 -1
  437. package/lib/zudoku.plugin-openapi.js +5 -5
  438. package/lib/zudoku.plugin-redirect.js +1 -1
  439. package/lib/zudoku.plugin-redirect.js.map +1 -1
  440. package/lib/zudoku.plugin-search-inkeep.js +53 -24
  441. package/lib/zudoku.plugin-search-inkeep.js.map +1 -1
  442. package/package.json +74 -51
  443. package/src/app/demo.tsx +1 -1
  444. package/src/app/entry.client.tsx +16 -1
  445. package/src/app/entry.server.tsx +3 -2
  446. package/src/app/main.tsx +6 -2
  447. package/src/app/sentry.ts +24 -0
  448. package/src/app/standalone.tsx +1 -1
  449. package/src/app/tailwind.ts +67 -52
  450. package/src/lib/authentication/AuthenticationPlugin.tsx +4 -1
  451. package/src/lib/authentication/authentication.ts +1 -1
  452. package/src/lib/authentication/components/CallbackHandler.tsx +1 -1
  453. package/src/lib/authentication/components/SignIn.tsx +1 -1
  454. package/src/lib/authentication/components/SignOut.tsx +1 -1
  455. package/src/lib/authentication/hook.ts +1 -3
  456. package/src/lib/authentication/providers/auth0.tsx +3 -2
  457. package/src/lib/authentication/providers/openid.tsx +22 -33
  458. package/src/lib/authentication/state.ts +44 -10
  459. package/src/lib/components/AnchorLink.tsx +1 -1
  460. package/src/lib/components/Bootstrap.tsx +25 -20
  461. package/src/lib/components/Header.tsx +44 -11
  462. package/src/lib/components/Heading.tsx +13 -13
  463. package/src/lib/components/Layout.tsx +55 -38
  464. package/src/lib/components/Markdown.tsx +1 -1
  465. package/src/lib/components/MobileTopNavigation.tsx +26 -33
  466. package/src/lib/components/NotFoundPage.tsx +1 -1
  467. package/src/lib/components/ReactMarkdown.license.txt +21 -0
  468. package/src/lib/components/ReactMarkdown.tsx +264 -0
  469. package/src/lib/components/Search.tsx +3 -3
  470. package/src/lib/components/SlotletProvider.tsx +1 -1
  471. package/src/lib/components/SyntaxHighlight.tsx +3 -6
  472. package/src/lib/components/ThemeSwitch.tsx +6 -4
  473. package/src/lib/components/TopNavigation.tsx +26 -18
  474. package/src/lib/components/Zudoku.tsx +1 -1
  475. package/src/lib/components/context/ZudokuContext.ts +1 -1
  476. package/src/lib/components/index.ts +1 -1
  477. package/src/lib/components/navigation/Sidebar.tsx +18 -8
  478. package/src/lib/components/navigation/SidebarBadge.tsx +0 -10
  479. package/src/lib/components/navigation/SidebarCategory.tsx +11 -10
  480. package/src/lib/components/navigation/SidebarItem.tsx +11 -14
  481. package/src/lib/components/navigation/SidebarWrapper.tsx +1 -1
  482. package/src/lib/components/navigation/utils.ts +1 -1
  483. package/src/lib/core/ZudokuContext.ts +1 -1
  484. package/src/lib/core/plugins.ts +5 -1
  485. package/src/lib/errors/RouterError.tsx +1 -1
  486. package/src/lib/oas/graphql/index.ts +4 -1
  487. package/src/lib/oas/parser/upgrade/index.ts +4 -27
  488. package/src/lib/plugins/api-catalog/Catalog.tsx +123 -0
  489. package/src/lib/plugins/api-catalog/index.tsx +64 -0
  490. package/src/lib/plugins/api-keys/CreateApiKey.tsx +1 -1
  491. package/src/lib/plugins/api-keys/ProtectedRoute.tsx +1 -1
  492. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +1 -1
  493. package/src/lib/plugins/api-keys/index.tsx +4 -1
  494. package/src/lib/plugins/custom-pages/index.tsx +1 -1
  495. package/src/lib/plugins/markdown/MdxPage.tsx +28 -2
  496. package/src/lib/plugins/markdown/index.tsx +5 -2
  497. package/src/lib/plugins/markdown/resolver.ts +2 -4
  498. package/src/lib/plugins/openapi/ColorizedParam.tsx +2 -2
  499. package/src/lib/plugins/openapi/OperationList.tsx +64 -8
  500. package/src/lib/plugins/openapi/OperationListItem.tsx +31 -2
  501. package/src/lib/plugins/openapi/Route.tsx +45 -9
  502. package/src/lib/plugins/openapi/Sidecar.tsx +3 -17
  503. package/src/lib/plugins/openapi/client/GraphQLClient.tsx +17 -0
  504. package/src/lib/plugins/openapi/client/useCreateQuery.ts +5 -2
  505. package/src/lib/plugins/openapi/context.tsx +2 -2
  506. package/src/lib/plugins/openapi/graphql/gql.ts +2 -2
  507. package/src/lib/plugins/openapi/graphql/graphql.ts +3 -0
  508. package/src/lib/plugins/openapi/index.tsx +35 -28
  509. package/src/lib/plugins/openapi/interfaces.ts +22 -1
  510. package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -0
  511. package/src/lib/plugins/openapi/post-processors/removeExtensions.test.ts +144 -0
  512. package/src/lib/plugins/openapi/post-processors/removeExtensions.ts +24 -0
  513. package/src/lib/plugins/openapi/post-processors/removePaths.test.ts +126 -0
  514. package/src/lib/plugins/openapi/post-processors/removePaths.ts +55 -0
  515. package/src/lib/plugins/openapi/post-processors/traverse.ts +1 -0
  516. package/src/lib/plugins/openapi/schema/SchemaView.tsx +1 -1
  517. package/src/lib/plugins/openapi/util/methodToColor.ts +27 -0
  518. package/src/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.tsx +32 -0
  519. package/src/lib/plugins/redirect/index.tsx +2 -2
  520. package/src/lib/plugins/search-inkeep/index.tsx +78 -23
  521. package/src/lib/plugins/search-inkeep/inkeep.ts +3 -9
  522. package/src/lib/util/MdxComponents.tsx +3 -8
  523. package/src/lib/util/createVariantComponent.tsx +2 -2
  524. package/src/lib/util/traverse.ts +25 -0
  525. package/src/lib/util/useExposedProps.tsx +1 -1
  526. package/src/lib/util/useScrollToAnchor.ts +1 -1
  527. package/src/lib/util/useScrollToTop.ts +1 -1
  528. package/dist/lib/plugins/search-inkeep/InkeepCustomTrigger.d.ts +0 -2
  529. package/dist/lib/plugins/search-inkeep/InkeepCustomTrigger.js +0 -3
  530. package/dist/lib/plugins/search-inkeep/InkeepCustomTrigger.js.map +0 -1
  531. package/dist/vite/plugin-custom-css.js.map +0 -1
  532. package/lib/AnchorLink-CDlhr8gL.js +0 -706
  533. package/lib/AnchorLink-CDlhr8gL.js.map +0 -1
  534. package/lib/AuthenticationPlugin-DeGDVa1r.js.map +0 -1
  535. package/lib/InkeepCustomTrigger-CE5-K5ex.js +0 -6
  536. package/lib/InkeepCustomTrigger-CE5-K5ex.js.map +0 -1
  537. package/lib/Markdown-BorQdbxW.js.map +0 -1
  538. package/lib/MdxPage-DFlbtJWi.js +0 -174
  539. package/lib/MdxPage-DFlbtJWi.js.map +0 -1
  540. package/lib/OperationList-KshJrrLL.js +0 -4691
  541. package/lib/OperationList-KshJrrLL.js.map +0 -1
  542. package/lib/Route-DlG_HTMu.js +0 -11
  543. package/lib/Route-DlG_HTMu.js.map +0 -1
  544. package/lib/SidebarBadge-DxFJcJ6V.js +0 -51
  545. package/lib/SidebarBadge-DxFJcJ6V.js.map +0 -1
  546. package/lib/SlotletProvider-D2v6rJy1.js +0 -252
  547. package/lib/SlotletProvider-D2v6rJy1.js.map +0 -1
  548. package/lib/assets/index-B_Jk_Yzp.js.map +0 -1
  549. package/lib/assets/worker-CPsGZsve.js.map +0 -1
  550. package/lib/cn-BmFQLtkS.js.map +0 -1
  551. package/lib/context-D1nXWxm7.js.map +0 -1
  552. package/lib/createServer-DK-g7kbB.js.map +0 -1
  553. package/lib/index-BcesIHH4.js +0 -1273
  554. package/lib/index-BcesIHH4.js.map +0 -1
  555. package/lib/index-BuAyrJe3.js +0 -46
  556. package/lib/index-BuAyrJe3.js.map +0 -1
  557. package/lib/index-CkwDvuPt.js.map +0 -1
  558. package/lib/index-Czzd9rjU.js +0 -899
  559. package/lib/index-Czzd9rjU.js.map +0 -1
  560. package/lib/index-Yn8c3UWE.js +0 -921
  561. package/lib/index-Yn8c3UWE.js.map +0 -1
  562. package/lib/index.esm-C5mr_sKO.js +0 -1193
  563. package/lib/index.esm-C5mr_sKO.js.map +0 -1
  564. package/lib/jsx-runtime-B6kdoens.js +0 -635
  565. package/lib/jsx-runtime-B6kdoens.js.map +0 -1
  566. package/lib/prism-csharp.min-Yizuc34Y.js +0 -35
  567. package/lib/prism-java.min-d5iT_mOd.js +0 -7
  568. package/lib/prism-markup-templating-DZrrEs0A.js +0 -62
  569. package/lib/prism-markup-templating-DZrrEs0A.js.map +0 -1
  570. package/lib/prism-php.min-o7FpoMP_.js +0 -11
  571. package/lib/prism-php.min-o7FpoMP_.js.map +0 -1
  572. package/lib/prism-ruby.min-C7LwcKyz.js +0 -10
  573. package/lib/prism-typescript.min-oSVeWCAd.js +0 -6
  574. package/lib/router-lfyopgBI.js +0 -3024
  575. package/lib/router-lfyopgBI.js.map +0 -1
  576. package/lib/state-BsPrOUAh.js +0 -252
  577. package/lib/state-BsPrOUAh.js.map +0 -1
  578. package/lib/useExposedProps-CTPtylCV.js +0 -10
  579. package/lib/useExposedProps-CTPtylCV.js.map +0 -1
  580. package/src/lib/plugins/search-inkeep/InkeepCustomTrigger.tsx +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.components.js","sources":["../src/lib/errors/ServerError.tsx","../../../node_modules/.pnpm/@tanstack+query-core@5.60.6/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.60.6/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.60.6/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../node_modules/.pnpm/@tanstack+query-core@5.60.6/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../node_modules/.pnpm/@tanstack+query-core@5.60.6/node_modules/@tanstack/query-core/build/modern/hydration.js","../../../node_modules/.pnpm/@tanstack+react-query@5.61.0_react@18.3.1/node_modules/@tanstack/react-query/build/modern/HydrationBoundary.js","../../../node_modules/.pnpm/react-router-dom@6.27.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-router-dom/server.js","../src/lib/components/Bootstrap.tsx","../src/lib/components/navigation/SidebarCategory.tsx","../src/lib/components/navigation/SidebarItem.tsx","../src/lib/util/useScrollToAnchor.ts","../src/lib/util/useScrollToTop.ts","../src/lib/ui/Skeleton.tsx","../src/lib/core/plugins.ts","../src/lib/components/Banner.tsx","../src/lib/components/Search.tsx","../src/lib/components/ThemeSwitch.tsx","../src/lib/components/TopNavigation.tsx","../src/lib/components/MobileTopNavigation.tsx","../src/lib/components/Header.tsx","../src/lib/components/navigation/SidebarWrapper.tsx","../src/lib/components/navigation/Sidebar.tsx","../src/lib/components/Layout.tsx","../../../node_modules/.pnpm/react-error-boundary@4.1.2_react@18.3.1/node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../src/lib/core/ZudokuContext.ts","../src/lib/errors/TopLevelError.tsx","../src/lib/util/requestIdleCallbackPolyfill.ts","../src/lib/components/context/ComponentsContext.tsx","../src/lib/components/context/ZudokuProvider.tsx","../src/lib/components/Zudoku.tsx","../src/lib/components/index.ts"],"sourcesContent":["import { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function ServerError({ error }: { error: unknown }) {\n return <ErrorAlert error={error} />;\n}\n","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n cache: this,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Map();\n this.#mutationId = Date.now();\n }\n #mutations;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n const scope = scopeFor(mutation);\n const mutations = this.#mutations.get(scope) ?? [];\n mutations.push(mutation);\n this.#mutations.set(scope, mutations);\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n const scope = scopeFor(mutation);\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations.get(scope)?.filter((x) => x !== mutation);\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope);\n } else {\n this.#mutations.set(scope, mutations);\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const firstPendingMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m.state.status === \"pending\");\n return !firstPendingMutation || firstPendingMutation === mutation;\n }\n runNext(mutation) {\n const foundMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation);\n });\n });\n }\n getAll() {\n return [...this.#mutations.values()].flat();\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id ?? String(mutation.mutationId);\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true;\n } else {\n context.signal.addEventListener(\"abort\", () => {\n cancelled = true;\n });\n }\n return context.signal;\n }\n });\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const queryFnContext = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext);\n const page = await queryFn(\n queryFnContext\n );\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data)\n return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam)\n return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1)\n return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0)\n return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const cachedData = this.getQueryData(options.queryKey);\n if (cachedData === void 0)\n return this.fetchQuery(options);\n else {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n const refetchFilters = {\n type: \"active\",\n ...filters\n };\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(refetchFilters, options);\n });\n }\n cancelQueries(filters = {}, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters = {}, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters.refetchType === \"none\") {\n return Promise.resolve();\n }\n const refetchFilters = {\n ...filters,\n type: filters.refetchType ?? filters.type ?? \"active\"\n };\n return this.refetchQueries(refetchFilters, options);\n });\n }\n refetchQueries(filters = {}, options) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options?.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n let result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n result = { ...result, ...queryDefault.defaultOptions };\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n let result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n result = { ...result, ...queryDefault.defaultOptions };\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.enabled !== true && defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/hydration.ts\nfunction defaultTransformerFn(data) {\n return data;\n}\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...mutation.options.scope && { scope: mutation.options.scope },\n ...mutation.meta && { meta: mutation.meta }\n };\n}\nfunction dehydrateQuery(query, serializeData) {\n return {\n state: {\n ...query.state,\n ...query.state.data !== void 0 && {\n data: serializeData(query.state.data)\n }\n },\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...query.state.status === \"pending\" && {\n promise: query.promise?.then(serializeData).catch((error) => {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`\n );\n }\n return Promise.reject(new Error(\"redacted\"));\n })\n },\n ...query.meta && { meta: query.meta }\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === \"success\";\n}\nfunction dehydrate(client, options = {}) {\n const filterMutation = options.shouldDehydrateMutation ?? client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const mutations = client.getMutationCache().getAll().flatMap(\n (mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []\n );\n const filterQuery = options.shouldDehydrateQuery ?? client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn;\n const queries = client.getQueryCache().getAll().flatMap(\n (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData)] : []\n );\n return { mutations, queries };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== \"object\" || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n const deserializeData = options?.defaultOptions?.deserializeData ?? client.getDefaultOptions().hydrate?.deserializeData ?? defaultTransformerFn;\n const mutations = dehydratedState.mutations || [];\n const queries = dehydratedState.queries || [];\n mutations.forEach(({ state, ...mutationOptions }) => {\n mutationCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.mutations,\n ...options?.defaultOptions?.mutations,\n ...mutationOptions\n },\n state\n );\n });\n queries.forEach(({ queryKey, state, queryHash, meta, promise }) => {\n let query = queryCache.get(queryHash);\n const data = state.data === void 0 ? state.data : deserializeData(state.data);\n if (query) {\n if (query.state.dataUpdatedAt < state.dataUpdatedAt) {\n const { fetchStatus: _ignored, ...serializedState } = state;\n query.setState({\n ...serializedState,\n data\n });\n }\n } else {\n query = queryCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.queries,\n ...options?.defaultOptions?.queries,\n queryKey,\n queryHash,\n meta\n },\n // Reset fetch status to idle to avoid\n // query being stuck in fetching state upon hydration\n {\n ...state,\n data,\n fetchStatus: \"idle\"\n }\n );\n }\n if (promise) {\n const initialPromise = Promise.resolve(promise).then(deserializeData);\n void query.fetch(void 0, { initialPromise });\n }\n });\n}\nexport {\n defaultShouldDehydrateMutation,\n defaultShouldDehydrateQuery,\n dehydrate,\n hydrate\n};\n//# sourceMappingURL=hydration.js.map","\"use client\";\n\n// src/HydrationBoundary.tsx\nimport * as React from \"react\";\nimport { hydrate } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nvar HydrationBoundary = ({\n children,\n options = {},\n state,\n queryClient\n}) => {\n const client = useQueryClient(queryClient);\n const [hydrationQueue, setHydrationQueue] = React.useState();\n const optionsRef = React.useRef(options);\n optionsRef.current = options;\n React.useMemo(() => {\n if (state) {\n if (typeof state !== \"object\") {\n return;\n }\n const queryCache = client.getQueryCache();\n const queries = state.queries || [];\n const newQueries = [];\n const existingQueries = [];\n for (const dehydratedQuery of queries) {\n const existingQuery = queryCache.get(dehydratedQuery.queryHash);\n if (!existingQuery) {\n newQueries.push(dehydratedQuery);\n } else {\n const hydrationIsNewer = dehydratedQuery.state.dataUpdatedAt > existingQuery.state.dataUpdatedAt;\n const queryAlreadyQueued = hydrationQueue?.find(\n (query) => query.queryHash === dehydratedQuery.queryHash\n );\n if (hydrationIsNewer && (!queryAlreadyQueued || dehydratedQuery.state.dataUpdatedAt > queryAlreadyQueued.state.dataUpdatedAt)) {\n existingQueries.push(dehydratedQuery);\n }\n }\n }\n if (newQueries.length > 0) {\n hydrate(client, { queries: newQueries }, optionsRef.current);\n }\n if (existingQueries.length > 0) {\n setHydrationQueue(\n (prev) => prev ? [...prev, ...existingQueries] : existingQueries\n );\n }\n }\n }, [client, hydrationQueue, state]);\n React.useEffect(() => {\n if (hydrationQueue) {\n hydrate(client, { queries: hydrationQueue }, optionsRef.current);\n setHydrationQueue(void 0);\n }\n }, [client, hydrationQueue]);\n return children;\n};\nexport {\n HydrationBoundary\n};\n//# sourceMappingURL=HydrationBoundary.js.map","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar React = require('react');\nvar router = require('@remix-run/router');\nvar reactRouter = require('react-router');\nvar reactRouterDom = require('react-router-dom');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar React__namespace = /*#__PURE__*/_interopNamespace(React);\n\n/**\n * A `<Router>` that may not navigate to any other location. This is useful\n * on the server where there is no stateful UI.\n */\nfunction StaticRouter({\n basename,\n children,\n location: locationProp = \"/\",\n future\n}) {\n if (typeof locationProp === \"string\") {\n locationProp = reactRouterDom.parsePath(locationProp);\n }\n let action = router.Action.Pop;\n let location = {\n pathname: locationProp.pathname || \"/\",\n search: locationProp.search || \"\",\n hash: locationProp.hash || \"\",\n state: locationProp.state != null ? locationProp.state : null,\n key: locationProp.key || \"default\"\n };\n let staticNavigator = getStatelessNavigator();\n return /*#__PURE__*/React__namespace.createElement(reactRouterDom.Router, {\n basename: basename,\n children: children,\n location: location,\n navigationType: action,\n navigator: staticNavigator,\n future: future,\n static: true\n });\n}\n/**\n * A Data Router that may not navigate to any other location. This is useful\n * on the server where there is no stateful UI.\n */\nfunction StaticRouterProvider({\n context,\n router: router$1,\n hydrate = true,\n nonce\n}) {\n !(router$1 && context) ? process.env.NODE_ENV !== \"production\" ? router.UNSAFE_invariant(false, \"You must provide `router` and `context` to <StaticRouterProvider>\") : router.UNSAFE_invariant(false) : void 0;\n let dataRouterContext = {\n router: router$1,\n navigator: getStatelessNavigator(),\n static: true,\n staticContext: context,\n basename: context.basename || \"/\"\n };\n let fetchersContext = new Map();\n let hydrateScript = \"\";\n if (hydrate !== false) {\n let data = {\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: serializeErrors(context.errors)\n };\n // Use JSON.parse here instead of embedding a raw JS object here to speed\n // up parsing on the client. Dual-stringify is needed to ensure all quotes\n // are properly escaped in the resulting string. See:\n // https://v8.dev/blog/cost-of-javascript-2019#json\n let json = htmlEscape(JSON.stringify(JSON.stringify(data)));\n hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${json});`;\n }\n let {\n state\n } = dataRouterContext.router;\n return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(reactRouterDom.UNSAFE_DataRouterContext.Provider, {\n value: dataRouterContext\n }, /*#__PURE__*/React__namespace.createElement(reactRouterDom.UNSAFE_DataRouterStateContext.Provider, {\n value: state\n }, /*#__PURE__*/React__namespace.createElement(reactRouterDom.UNSAFE_FetchersContext.Provider, {\n value: fetchersContext\n }, /*#__PURE__*/React__namespace.createElement(reactRouterDom.UNSAFE_ViewTransitionContext.Provider, {\n value: {\n isTransitioning: false\n }\n }, /*#__PURE__*/React__namespace.createElement(reactRouterDom.Router, {\n basename: dataRouterContext.basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: dataRouterContext.navigator,\n static: dataRouterContext.static,\n future: {\n v7_relativeSplatPath: router$1.future.v7_relativeSplatPath\n }\n }, /*#__PURE__*/React__namespace.createElement(DataRoutes, {\n routes: router$1.routes,\n future: router$1.future,\n state: state\n })))))), hydrateScript ? /*#__PURE__*/React__namespace.createElement(\"script\", {\n suppressHydrationWarning: true,\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: hydrateScript\n }\n }) : null);\n}\nfunction DataRoutes({\n routes,\n future,\n state\n}) {\n return reactRouter.UNSAFE_useRoutesImpl(routes, undefined, state, future);\n}\nfunction serializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n // Hey you! If you change this, please change the corresponding logic in\n // deserializeErrors in react-router-dom/index.tsx :)\n if (router.isRouteErrorResponse(val)) {\n serialized[key] = {\n ...val,\n __type: \"RouteErrorResponse\"\n };\n } else if (val instanceof Error) {\n // Do not serialize stack traces from SSR for security reasons\n serialized[key] = {\n message: val.message,\n __type: \"Error\",\n // If this is a subclass (i.e., ReferenceError), send up the type so we\n // can re-create the same type during hydration.\n ...(val.name !== \"Error\" ? {\n __subType: val.name\n } : {})\n };\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nfunction getStatelessNavigator() {\n return {\n createHref,\n encodeLocation,\n push(to) {\n throw new Error(`You cannot use navigator.push() on the server because it is a stateless ` + `environment. This error was probably triggered when you did a ` + `\\`navigate(${JSON.stringify(to)})\\` somewhere in your app.`);\n },\n replace(to) {\n throw new Error(`You cannot use navigator.replace() on the server because it is a stateless ` + `environment. This error was probably triggered when you did a ` + `\\`navigate(${JSON.stringify(to)}, { replace: true })\\` somewhere ` + `in your app.`);\n },\n go(delta) {\n throw new Error(`You cannot use navigator.go() on the server because it is a stateless ` + `environment. This error was probably triggered when you did a ` + `\\`navigate(${delta})\\` somewhere in your app.`);\n },\n back() {\n throw new Error(`You cannot use navigator.back() on the server because it is a stateless ` + `environment.`);\n },\n forward() {\n throw new Error(`You cannot use navigator.forward() on the server because it is a stateless ` + `environment.`);\n }\n };\n}\nfunction createStaticHandler(routes, opts) {\n return router.createStaticHandler(routes, {\n ...opts,\n mapRouteProperties: reactRouter.UNSAFE_mapRouteProperties\n });\n}\nfunction createStaticRouter(routes, context, opts = {}) {\n let manifest = {};\n let dataRoutes = router.UNSAFE_convertRoutesToDataRoutes(routes, reactRouter.UNSAFE_mapRouteProperties, undefined, manifest);\n // Because our context matches may be from a framework-agnostic set of\n // routes passed to createStaticHandler(), we update them here with our\n // newly created/enhanced data routes\n let matches = context.matches.map(match => {\n let route = manifest[match.route.id] || match.route;\n return {\n ...match,\n route\n };\n });\n let msg = method => `You cannot use router.${method}() on the server because it is a stateless environment`;\n return {\n get basename() {\n return context.basename;\n },\n get future() {\n return {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: opts.future?.v7_partialHydration === true,\n v7_prependBasename: false,\n v7_relativeSplatPath: opts.future?.v7_relativeSplatPath === true,\n v7_skipActionErrorRevalidation: false\n };\n },\n get state() {\n return {\n historyAction: router.Action.Pop,\n location: context.location,\n matches,\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: context.errors,\n initialized: true,\n navigation: router.IDLE_NAVIGATION,\n restoreScrollPosition: null,\n preventScrollReset: false,\n revalidation: \"idle\",\n fetchers: new Map(),\n blockers: new Map()\n };\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return undefined;\n },\n initialize() {\n throw msg(\"initialize\");\n },\n subscribe() {\n throw msg(\"subscribe\");\n },\n enableScrollRestoration() {\n throw msg(\"enableScrollRestoration\");\n },\n navigate() {\n throw msg(\"navigate\");\n },\n fetch() {\n throw msg(\"fetch\");\n },\n revalidate() {\n throw msg(\"revalidate\");\n },\n createHref,\n encodeLocation,\n getFetcher() {\n return router.IDLE_FETCHER;\n },\n deleteFetcher() {\n throw msg(\"deleteFetcher\");\n },\n dispose() {\n throw msg(\"dispose\");\n },\n getBlocker() {\n return router.IDLE_BLOCKER;\n },\n deleteBlocker() {\n throw msg(\"deleteBlocker\");\n },\n patchRoutes() {\n throw msg(\"patchRoutes\");\n },\n _internalFetchControllers: new Map(),\n _internalActiveDeferreds: new Map(),\n _internalSetRoutes() {\n throw msg(\"_internalSetRoutes\");\n }\n };\n}\nfunction createHref(to) {\n return typeof to === \"string\" ? to : reactRouterDom.createPath(to);\n}\nfunction encodeLocation(to) {\n let href = typeof to === \"string\" ? to : reactRouterDom.createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n let encoded = ABSOLUTE_URL_REGEX.test(href) ? new URL(href) : new URL(href, \"http://localhost\");\n return {\n pathname: encoded.pathname,\n search: encoded.search,\n hash: encoded.hash\n };\n}\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n// This utility is based on https://github.com/zertosh/htmlescape\n// License: https://github.com/zertosh/htmlescape/blob/0527ca7156a524d256101bb310a9f970f63078ad/LICENSE\nconst ESCAPE_LOOKUP = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nconst ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\nfunction htmlEscape(str) {\n return str.replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n}\n\nexports.StaticRouter = StaticRouter;\nexports.StaticRouterProvider = StaticRouterProvider;\nexports.createStaticHandler = createStaticHandler;\nexports.createStaticRouter = createStaticRouter;\n","import {\n HydrationBoundary,\n QueryClient,\n QueryClientProvider,\n} from \"@tanstack/react-query\";\nimport { type HelmetData, HelmetProvider } from \"@zudoku/react-helmet-async\";\nimport { StrictMode, useMemo } from \"react\";\nimport { type createBrowserRouter, RouterProvider } from \"react-router-dom\";\nimport {\n type createStaticRouter,\n type StaticHandlerContext,\n StaticRouterProvider,\n} from \"react-router-dom/server.js\";\nimport { StaggeredRenderContext } from \"../plugins/openapi/StaggeredRender.js\";\n\nconst Bootstrap = ({\n router,\n hydrate = false,\n}: {\n hydrate?: boolean;\n router: ReturnType<typeof createBrowserRouter>;\n}) => {\n const queryClient = useMemo(() => new QueryClient(), []);\n\n return (\n <StrictMode>\n <QueryClientProvider client={queryClient}>\n <HydrationBoundary state={hydrate ? (window as any).DATA : undefined}>\n <HelmetProvider>\n <StaggeredRenderContext.Provider value={{ stagger: !hydrate }}>\n <RouterProvider router={router} />\n </StaggeredRenderContext.Provider>\n </HelmetProvider>\n </HydrationBoundary>\n </QueryClientProvider>\n </StrictMode>\n );\n};\n\nconst BootstrapStatic = ({\n router,\n context,\n queryClient,\n helmetContext,\n}: {\n helmetContext: HelmetData[\"context\"];\n context: StaticHandlerContext;\n queryClient: QueryClient;\n router: ReturnType<typeof createStaticRouter>;\n}) => (\n <StrictMode>\n <QueryClientProvider client={queryClient}>\n <HelmetProvider context={helmetContext}>\n <StaticRouterProvider router={router} context={context} />\n </HelmetProvider>\n </QueryClientProvider>\n </StrictMode>\n);\n\nexport { Bootstrap, BootstrapStatic };\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { NavLink, useMatch } from \"react-router-dom\";\nimport type { SidebarItemCategory } from \"../../../config/validators/SidebarSchema.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { navigationListItem, SidebarItem } from \"./SidebarItem.js\";\nimport { useIsCategoryOpen } from \"./utils.js\";\n\nexport const SidebarCategory = ({\n category,\n level,\n}: {\n category: SidebarItemCategory;\n level: number;\n}) => {\n const isCategoryOpen = useIsCategoryOpen(category);\n const [hasInteracted, setHasInteracted] = useState(false);\n\n const isCollapsible = category.collapsible ?? true;\n const isCollapsed = category.collapsed ?? true;\n const isDefaultOpen = Boolean(\n !isCollapsible || !isCollapsed || isCategoryOpen,\n );\n const [open, setOpen] = useState(isDefaultOpen);\n const isActive = useMatch(category.link?.id ?? \"\");\n\n useEffect(() => {\n // this is triggered when an item from the sidebar is clicked\n // and the sidebar, enclosing this item, is not opened\n if (isCategoryOpen) {\n setOpen(true);\n }\n }, [isCategoryOpen]);\n\n const ToggleButton = isCollapsible && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n setOpen((prev) => !prev);\n setHasInteracted(true);\n }}\n >\n <ChevronRightIcon\n size={16}\n className={cn(\n hasInteracted && \"transition\",\n \"shrink-0 group-data-[state=open]:rotate-90\",\n )}\n />\n </button>\n );\n\n return (\n <Collapsible.Root\n className=\"flex flex-col\"\n defaultOpen={isDefaultOpen}\n open={open}\n onOpenChange={() => setOpen(true)}\n >\n <Collapsible.Trigger className=\"group\" asChild disabled={!isCollapsible}>\n <div\n onClick={() => setHasInteracted(true)}\n className={navigationListItem({\n isActive: false,\n isTopLevel: level === 0,\n className: [\n \"text-start\",\n isCollapsible\n ? \"cursor-pointer\"\n : \"cursor-default hover:bg-transparent\",\n ],\n })}\n >\n {category.icon && (\n <category.icon\n size={16}\n className={cn(\n \"align-[-0.125em] -translate-x-1\",\n isActive && \"text-primary\",\n )}\n />\n )}\n {category.link?.type === \"doc\" ? (\n <NavLink\n to={joinPath(category.link.id)}\n className=\"flex-1\"\n onClick={() => {\n // if it is the current path and closed then open it because there's no path change to trigger the open\n if (isActive && !open) {\n setOpen(true);\n }\n }}\n >\n <div\n className={cn(\n \"flex items-center gap-2 justify-between w-full\",\n isActive ? \"text-primary\" : \"text-foreground/80\",\n )}\n >\n <div className=\"truncate\">{category.label}</div>\n {ToggleButton}\n </div>\n </NavLink>\n ) : (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex gap-2 truncate w-full\">{category.label}</div>\n {ToggleButton}\n </div>\n )}\n </div>\n </Collapsible.Trigger>\n <Collapsible.Content\n className={cn(\n // CollapsibleContent class is used to animate and it should only be applied when the user has triggered the toggle\n hasInteracted && \"CollapsibleContent\",\n )}\n >\n <ul className=\"mt-1 border-l ms-0.5\">\n {category.items.map((item) => (\n <SidebarItem\n key={\n (\"id\" in item ? item.id : \"\") +\n (\"href\" in item ? item.href : \"\") +\n item.label\n }\n level={level + 1}\n item={item}\n />\n ))}\n </ul>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { cva } from \"class-variance-authority\";\nimport { ExternalLinkIcon } from \"lucide-react\";\nimport { NavLink, useSearchParams } from \"react-router-dom\";\n\nimport type { SidebarItem as SidebarItemType } from \"../../../config/validators/SidebarSchema.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { AnchorLink } from \"../AnchorLink.js\";\nimport { useViewportAnchor } from \"../context/ViewportAnchorContext.js\";\nimport { SidebarBadge } from \"./SidebarBadge.js\";\nimport { SidebarCategory } from \"./SidebarCategory.js\";\n\nexport const navigationListItem = cva(\n \"flex items-center gap-2 px-[--padding-nav-item] py-1.5 rounded-lg hover:bg-accent transition-colors duration-300\",\n {\n variants: {\n isTopLevel: {\n true: \"font-medium -mx-[--padding-nav-item]\",\n false: \"-mr-[--padding-nav-item] ml-[--padding-nav-item]\",\n },\n isActive: {\n true: \"text-primary font-medium\",\n false: \"text-foreground/80\",\n },\n isMuted: {\n true: \"text-foreground/30\",\n false: \"\",\n },\n },\n defaultVariants: {\n isActive: false,\n },\n },\n);\n\nexport const DATA_ANCHOR_ATTR = \"data-anchor\";\n\nexport const SidebarItem = ({\n item,\n level = 0,\n}: {\n item: SidebarItemType;\n basePath?: string;\n level?: number;\n}) => {\n const { activeAnchor } = useViewportAnchor();\n const [searchParams] = useSearchParams();\n\n switch (item.type) {\n case \"category\":\n return <SidebarCategory category={item} level={level} />;\n case \"doc\":\n return (\n <NavLink\n className={({ isActive }) =>\n navigationListItem({ isActive, isTopLevel: level === 0 })\n }\n to={joinPath(item.id)}\n >\n {item.icon && <item.icon size={16} className=\"align-[-0.125em]\" />}\n {item.badge ? (\n <>\n <span className=\"truncate flex-1\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n item.label\n )}\n </NavLink>\n );\n case \"link\":\n return item.href.startsWith(\"#\") ? (\n <AnchorLink\n to={{ hash: item.href, search: searchParams.toString() }}\n {...{ [DATA_ANCHOR_ATTR]: item.href.slice(1) }}\n className={navigationListItem({\n isActive: item.href.slice(1) === activeAnchor,\n isTopLevel: level === 0,\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </AnchorLink>\n ) : !item.href.startsWith(\"http\") ? (\n <NavLink\n className={navigationListItem({\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n to={item.href}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </NavLink>\n ) : (\n <a\n className={navigationListItem({ isTopLevel: level === 0 })}\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span className=\"whitespace-normal\">{item.label}</span>\n {/* This prevents that the icon would be positioned in its own line if the text fills a line entirely */}\n <span className=\"whitespace-nowrap\">\n <ExternalLinkIcon className=\"inline -translate-y-0.5\" size={12} />\n </span>\n </a>\n );\n }\n};\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useViewportAnchor } from \"../components/context/ViewportAnchorContext.js\";\nimport { DATA_ANCHOR_ATTR } from \"../components/navigation/SidebarItem.js\";\n\nconst scrollIntoViewIfNeeded = (\n element: Element | null,\n options: ScrollIntoViewOptions = { block: \"center\" },\n) => {\n if (!element) return;\n\n const rect = element.getBoundingClientRect();\n const isInView =\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n\n if (isInView) return;\n\n element.scrollIntoView(options);\n};\n\nexport const useScrollToAnchor = () => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n\n useEffect(() => {\n if (!location.hash) return;\n\n const hash = decodeURIComponent(location.hash.split(\"/\")[0]!.slice(1));\n\n const scrollToElement = () => {\n const element = document.getElementById(hash);\n const link = document.querySelector(`[${DATA_ANCHOR_ATTR}=\"${hash}\"]`);\n\n if (element) {\n element.scrollIntoView();\n scrollIntoViewIfNeeded(link);\n requestIdleCallback(() => setActiveAnchor(hash));\n return true;\n }\n\n return false;\n };\n\n if (!scrollToElement()) {\n const observer = new MutationObserver((_, obs) => {\n if (!scrollToElement()) return;\n obs.disconnect();\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => observer.disconnect();\n }\n }, [location.hash, setActiveAnchor]);\n};\n","import { useEffect, useRef } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useScrollToTop = () => {\n const location = useLocation();\n const previousPath = useRef(location.pathname);\n\n useEffect(() => {\n if (previousPath.current === location.pathname) return;\n window.scrollTo(0, 0);\n previousPath.current = location.pathname;\n }, [location.pathname]);\n};\n","import { cn } from \"../util/cn.js\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import { type ReactElement } from \"react\";\nimport { type RouteObject } from \"react-router-dom\";\nimport type { Sidebar } from \"../../config/validators/SidebarSchema.js\";\nimport { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport { ZudokuContext, type ApiIdentity } from \"./ZudokuContext.js\";\n\nexport type ZudokuPlugin =\n | CommonPlugin\n | ProfileMenuPlugin\n | NavigationPlugin\n | ApiIdentityPlugin\n | SearchProviderPlugin;\n\nexport type { RouteObject };\n\nexport interface NavigationPlugin {\n getRoutes: () => RouteObject[];\n getSidebar?: (path: string) => Promise<Sidebar>;\n}\n\nexport interface ApiIdentityPlugin {\n getIdentities: (context: ZudokuContext) => Promise<ApiIdentity[]>;\n}\n\nexport interface SearchProviderPlugin {\n renderSearch: (o: {\n isOpen: boolean;\n onClose: () => void;\n }) => React.JSX.Element | null;\n}\n\nexport interface ProfileMenuPlugin {\n getProfileMenuItems: (context: ZudokuContext) => ProfileNavigationItem[];\n}\n\nexport type ProfileNavigationItem = {\n label: string;\n path?: string;\n children?: ProfileNavigationItem[];\n};\n\nexport interface CommonPlugin {\n initialize?: (\n context: ZudokuContext,\n ) => Promise<void | boolean> | void | boolean;\n getHead?: () => ReactElement | undefined;\n getMdxComponents?: () => MdxComponentsType;\n}\n\nexport const isProfileMenuPlugin = (\n obj: ZudokuPlugin,\n): obj is ProfileMenuPlugin =>\n \"getProfileMenuItems\" in obj && typeof obj.getProfileMenuItems === \"function\";\n\nexport const isNavigationPlugin = (\n obj: ZudokuPlugin,\n): obj is NavigationPlugin =>\n \"getRoutes\" in obj && typeof obj.getRoutes === \"function\";\n\nexport const isSearchPlugin = (\n obj: ZudokuPlugin,\n): obj is SearchProviderPlugin =>\n \"renderSearch\" in obj && typeof obj.renderSearch === \"function\";\n\nexport const needsInitialization = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"initialize\" in obj && typeof obj.initialize === \"function\";\n\nexport const hasHead = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"getHead\" in obj && typeof obj.getHead === \"function\";\n\nexport const isMdxProviderPlugin = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"getMdxComponents\" in obj && typeof obj.getMdxComponents === \"function\";\n\nexport const isApiIdentityPlugin = (\n obj: ZudokuPlugin,\n): obj is ApiIdentityPlugin =>\n \"getIdentities\" in obj && typeof obj.getIdentities === \"function\";\n","import { CircleXIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { cn } from \"../util/cn.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\n\nconst COLOR_MAP = {\n info: \"bg-blue-500\",\n note: \"bg-gray-500\",\n tip: \"bg-green-600\",\n caution: \"bg-orange-500\",\n danger: \"bg-rose-500\",\n} as const;\n\nexport const Banner = () => {\n const { page } = useZudoku();\n const [isBannerOpen, setIsBannerOpen] = useState(true);\n\n if (!page?.banner || !isBannerOpen) {\n return <style>{`:root { --banner-height: 0px; }`}</style>;\n }\n\n const mappedColor =\n page.banner.color && page.banner.color in COLOR_MAP\n ? COLOR_MAP[page.banner.color as keyof typeof COLOR_MAP]\n : !page.banner.color\n ? \"bg-primary\"\n : undefined;\n\n const style = !mappedColor ? { backgroundColor: page.banner.color } : {};\n\n return (\n <div\n className={cn(\n \"relative text-primary-foreground text-sm font-medium px-4 py-2 flex gap-2 items-center\",\n mappedColor,\n )}\n style={style}\n >\n <div className=\"w-full\">{page.banner.message}</div>\n {page.banner.dismissible && (\n <button\n type=\"button\"\n className=\"md:absolute md:right-4 -m-1.5 p-1.5 hover:bg-accent-foreground/10 rounded-md\"\n onClick={() => setIsBannerOpen(false)}\n >\n <CircleXIcon size={16} />\n </button>\n )}\n </div>\n );\n};\n","import { SearchIcon } from \"lucide-react\";\nimport { Suspense, useCallback, useEffect, useState } from \"react\";\nimport { isSearchPlugin } from \"../core/plugins.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\n\nexport const Search = () => {\n const ctx = useZudoku();\n const [isOpen, setIsOpen] = useState(false);\n\n const onClose = useCallback(() => setIsOpen(false), []);\n\n useEffect(() => {\n if (isOpen) {\n return;\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === \"k\" && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n setIsOpen(true);\n }\n }\n\n window.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen, setIsOpen]);\n\n const searchPlugin = ctx.plugins.find(isSearchPlugin);\n\n if (!searchPlugin) {\n return null;\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className=\"flex items-center border border-input hover:bg-accent hover:text-accent-foreground p-4 relative h-8 justify-start rounded-lg bg-background text-sm text-muted-foreground shadow-none w-full sm:w-72\"\n >\n <div className=\"flex items-center gap-2 flex-grow\">\n <SearchIcon size={14} />\n Search\n </div>\n <kbd className=\"absolute right-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex\">\n ⌘K\n </kbd>\n </button>\n <Suspense fallback={null}>\n {searchPlugin.renderSearch({\n isOpen,\n onClose,\n })}\n </Suspense>\n </>\n );\n};\n","import { MoonStarIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\n\nexport const ThemeSwitch = () => {\n const { theme, setTheme } = useTheme();\n const ThemeIcon = theme === \"dark\" ? MoonStarIcon : SunIcon;\n\n return (\n <ClientOnly>\n <Button\n variant=\"ghost\"\n aria-label={\n theme === \"dark\" ? \"Switch to light mode\" : \"Switch to dark mode\"\n }\n className=\"p-2.5 -m-2.5 rounded-full\"\n onClick={() => setTheme(theme === \"dark\" ? \"light\" : \"dark\")}\n >\n <ThemeIcon size={18} />\n </Button>\n </ClientOnly>\n );\n};\n","import { cx } from \"class-variance-authority\";\nimport { Suspense } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { TopNavigationItem } from \"../../config/validators/validate.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport { useCurrentNavigation, useZudoku } from \"./context/ZudokuContext.js\";\nimport { traverseSidebar } from \"./navigation/utils.js\";\n\nexport const isHiddenItem =\n (isAuthenticated?: boolean) =>\n (item: { display?: \"auth\" | \"anon\" | \"always\" }) => {\n return (\n (item.display === \"auth\" && isAuthenticated) ||\n (item.display === \"anon\" && !isAuthenticated) ||\n !item.display ||\n item.display === \"always\"\n );\n };\n\nexport const TopNavigation = () => {\n const { topNavigation } = useZudoku();\n const { isAuthenticated } = useAuth();\n\n // Hide top nav if there is only one item\n if (topNavigation.length <= 1) {\n return <style>{`:root { --top-nav-height: 0px; }`}</style>;\n }\n\n return (\n <Suspense>\n <nav className=\"hidden lg:block border-b text-sm px-12 h-[--top-nav-height]\">\n <ul className=\"flex flex-row items-center gap-8\">\n {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (\n <li key={item.id}>\n <TopNavItem {...item} />\n </li>\n ))}\n </ul>\n </nav>\n </Suspense>\n );\n};\n\nconst TopNavItem = ({ id, label, default: defaultLink }: TopNavigationItem) => {\n const { sidebars } = useZudoku();\n const nav = useCurrentNavigation();\n const currentSidebar = sidebars[id];\n\n // TODO: This is a bit of a hack to get the first link in the sidebar\n // We should really process this when we load the config so we can validate\n // that the sidebar is actually set. In this case we just fall back to linking\n // to the id if we can't resolve a sidebar.\n const first =\n defaultLink ??\n (currentSidebar\n ? traverseSidebar(currentSidebar, (item) => {\n if (item.type === \"doc\") return joinPath(item.id);\n })\n : joinPath(id));\n\n if (!first) {\n throw new Error(\n `No links found in top navigation for top navigation '${id}'. Check that the sidebar isn't empty or that a default link set.`,\n );\n }\n\n // Manually set the active sidebar based on our logic of what is active\n const isActive = nav.topNavItem?.id === id;\n\n return (\n <Link\n className={cx(\n \"block py-3.5 font-medium -mb-px border-b-2\",\n isActive\n ? \"border-primary text-foreground\"\n : \"border-transparent text-foreground/75 hover:text-foreground hover:border-accent-foreground/25\",\n )}\n to={first}\n >\n {label}\n </Link>\n );\n};\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { cx } from \"class-variance-authority\";\nimport { MenuIcon } from \"lucide-react\";\nimport { NavLink } from \"react-router-dom\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerTitle,\n DrawerTrigger,\n} from \"../ui/Drawer.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Search } from \"./Search.js\";\nimport { ThemeSwitch } from \"./ThemeSwitch.js\";\nimport { isHiddenItem } from \"./TopNavigation.js\";\n\nexport const MobileTopNavigation = () => {\n const { topNavigation } = useZudoku();\n const { isAuthenticated } = useAuth();\n\n return (\n <Drawer direction=\"right\">\n <div className=\"flex lg:hidden justify-self-end\">\n <DrawerTrigger className=\"lg:hidden\">\n <MenuIcon size={22} />\n </DrawerTrigger>\n </div>\n <DrawerContent\n className=\"lg:hidden h-screen right-0 left-auto w-[320px] rounded-none overflow-auto\"\n aria-describedby={undefined}\n >\n <VisuallyHidden>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <div className=\"flex p-4\">\n <Search />\n </div>\n <ul className=\"flex flex-col items-center gap-4 p-4\">\n <li>\n <ThemeSwitch />\n </li>\n {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (\n <li key={item.label}>\n <NavLink\n className={({ isActive }) =>\n cx(\n \"block font-medium border-b-2\",\n isActive\n ? \"border-primary text-foreground\"\n : \"border-transparent text-foreground/75 hover:text-foreground hover:border-accent-foreground/25\",\n )\n }\n to={item.id}\n >\n <DrawerClose>{item.label}</DrawerClose>\n </NavLink>\n </li>\n ))}\n </ul>\n </DrawerContent>\n </Drawer>\n );\n};\n","import { memo } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Skeleton } from \"zudoku/ui/Skeleton.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { isProfileMenuPlugin, ProfileNavigationItem } from \"../core/plugins.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"../ui/DropdownMenu.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport { Banner } from \"./Banner.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { MobileTopNavigation } from \"./MobileTopNavigation.js\";\nimport { Search } from \"./Search.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { ThemeSwitch } from \"./ThemeSwitch.js\";\nimport { TopNavigation } from \"./TopNavigation.js\";\n\nconst RecursiveMenu = ({ item }: { item: ProfileNavigationItem }) => {\n return item.children ? (\n <DropdownMenuSub key={item.label}>\n <DropdownMenuSubTrigger>{item.label}</DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent>\n {item.children.map((item, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <RecursiveMenu key={i} item={item} />\n ))}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n ) : (\n <Link to={item.path ?? \"\"}>\n <DropdownMenuItem key={item.label}>{item.label}</DropdownMenuItem>\n </Link>\n );\n};\n\nexport const Header = memo(function HeaderInner() {\n const auth = useAuth();\n const { isAuthenticated, profile, isAuthEnabled } = useAuth();\n const context = useZudoku();\n const { page, plugins } = context;\n\n const accountItems = plugins\n .filter((p) => isProfileMenuPlugin(p))\n .flatMap((p) => p.getProfileMenuItems(context))\n .map((i) => <RecursiveMenu key={i.label} item={i} />);\n\n return (\n <header className=\"sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full\">\n <Banner />\n <div className=\"max-w-screen-2xl mx-auto\">\n <div className=\"grid grid-cols-2 lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-10 lg:px-12 h-[--top-header-height]\">\n <div className=\"flex\">\n <Link to=\"/\">\n <div className=\"flex items-center gap-3.5\">\n {page?.logo && (\n <>\n <img\n src={\n /https?:\\/\\//.test(page.logo.src.light)\n ? page.logo.src.light\n : joinPath(\n import.meta.env.BASE_URL,\n page.logo.src.light,\n )\n }\n alt={page.logo.alt ?? page.pageTitle}\n style={{ width: page.logo.width }}\n className=\"h-10 dark:hidden\"\n loading=\"lazy\"\n />\n <img\n data-hide-on-theme=\"light\"\n src={\n /https?:\\/\\//.test(page.logo.src.dark)\n ? page.logo.src.dark\n : joinPath(\n import.meta.env.BASE_URL,\n page.logo.src.dark,\n )\n }\n alt={page.logo.alt ?? page.pageTitle}\n style={{ width: page.logo.width }}\n className=\"h-10\"\n loading=\"lazy\"\n />\n </>\n )}\n <span className=\"font-bold text-2xl text-foreground/85 tracking-wide\">\n {page?.pageTitle}\n </span>\n </div>\n </Link>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-[--sidecar-grid-cols] items-center gap-8\">\n <div className=\"w-full justify-center hidden lg:flex\">\n <Search />\n </div>\n\n <MobileTopNavigation />\n <div className=\"hidden lg:flex items-center justify-self-end text-sm gap-2\">\n <Slotlet name=\"head-navigation-start\" />\n {isAuthEnabled && (\n <ClientOnly\n fallback={<Skeleton className=\"rounded h-5 w-24 mr-4\" />}\n >\n {!isAuthenticated ? (\n <Button variant=\"ghost\" onClick={() => auth.login()}>\n Login\n </Button>\n ) : (\n accountItems.length > 0 && (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\">\n {profile?.email ? `${profile.email}` : \"My Account\"}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-56\">\n <DropdownMenuLabel>My Account</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {accountItems}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n )}\n </ClientOnly>\n )}\n <ThemeSwitch />\n <Slotlet name=\"head-navigation-end\" />\n </div>\n </div>\n </div>\n <Slotlet name=\"top-navigation-before\" />\n <TopNavigation />\n <Slotlet name=\"top-navigation-after\" />\n </div>\n </header>\n );\n});\n","import { forwardRef, type PropsWithChildren } from \"react\";\nimport { cn } from \"../../util/cn.js\";\n\nexport const SidebarWrapper = forwardRef<\n HTMLDivElement,\n PropsWithChildren<{ pushMainContent?: boolean; className?: string }>\n>(({ children, className, pushMainContent }, ref) => (\n <nav\n // this data attribute is used in `Layout.tsx` to determine if side navigation\n // is present for the current page so the main content is pushed to the right\n // it's also important to set `peer` class here.\n // maybe this could be simplified by adjusting the layout\n data-navigation={String(pushMainContent)}\n className={cn(\n \"scrollbar peer hidden lg:flex flex-col fixed text-sm overflow-y-auto shrink-0\",\n \"px-[--padding-nav-item] -mx-[--padding-nav-item] pb-20 mt-[--padding-content-top]\",\n \"w-[--side-nav-width] h-[calc(100%-var(--header-height))] scroll-pt-2 gap-2\",\n className,\n )}\n ref={ref}\n >\n {children}\n </nav>\n));\n\nSidebarWrapper.displayName = \"SidebarWrapper\";\n","import { useRef } from \"react\";\n\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { DrawerContent, DrawerTitle } from \"../../ui/Drawer.js\";\nimport { useCurrentNavigation } from \"../context/ZudokuContext.js\";\nimport { Slotlet } from \"../SlotletProvider.js\";\nimport { SidebarItem } from \"./SidebarItem.js\";\nimport { SidebarWrapper } from \"./SidebarWrapper.js\";\n\nexport const Sidebar = () => {\n const navRef = useRef<HTMLDivElement | null>(null);\n const navigation = useCurrentNavigation();\n\n return (\n <>\n <SidebarWrapper\n ref={navRef}\n pushMainContent={navigation.sidebar.length > 0}\n >\n <Slotlet name=\"zudoku-before-navigation\" />\n {navigation.sidebar.map((item) => (\n <SidebarItem key={item.label} item={item} />\n ))}\n <Slotlet name=\"zudoku-after-navigation\" />\n </SidebarWrapper>\n <DrawerContent\n className=\"lg:hidden h-screen left-0 p-6 w-[320px] rounded-none overflow-auto\"\n aria-describedby={undefined}\n >\n <VisuallyHidden>\n <DrawerTitle>Sidebar</DrawerTitle>\n </VisuallyHidden>\n {navigation.sidebar.map((item) => (\n <SidebarItem key={item.label} item={item} />\n ))}\n </DrawerContent>\n </>\n );\n};\n","import { Helmet } from \"@zudoku/react-helmet-async\";\nimport { PanelLeftIcon } from \"lucide-react\";\nimport { Suspense, useEffect, useRef, type ReactNode } from \"react\";\nimport { Outlet, useLocation } from \"react-router-dom\";\nimport { Drawer, DrawerTrigger } from \"../ui/Drawer.js\";\nimport { cn } from \"../util/cn.js\";\nimport { useScrollToAnchor } from \"../util/useScrollToAnchor.js\";\nimport { useScrollToTop } from \"../util/useScrollToTop.js\";\nimport { useViewportAnchor } from \"./context/ViewportAnchorContext.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Header } from \"./Header.js\";\nimport { Sidebar } from \"./navigation/Sidebar.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { Spinner } from \"./Spinner.js\";\n\nexport const Layout = ({ children }: { children?: ReactNode }) => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n const { meta, authentication } = useZudoku();\n\n useScrollToAnchor();\n useScrollToTop();\n\n const previousLocationPath = useRef(location.pathname);\n\n useEffect(() => {\n // Initialize the authentication plugin\n authentication?.pageLoad?.();\n }, [authentication]);\n\n useEffect(() => {\n // always reset on location change\n if (location.pathname !== previousLocationPath.current) {\n setActiveAnchor(\"\");\n }\n previousLocationPath.current = location.pathname;\n }, [location.pathname, setActiveAnchor]);\n\n return (\n <>\n {import.meta.env.MODE === \"standalone\" && (\n <style>{`:root { --top-nav-height: 0px; }`}</style>\n )}\n <Helmet titleTemplate={meta?.title}>\n {meta?.description && (\n <meta name=\"description\" content={meta.description} />\n )}\n {meta?.favicon && <link rel=\"icon\" href={meta.favicon} />}\n </Helmet>\n <Slotlet name=\"layout-before-head\" />\n <Header />\n <Slotlet name=\"layout-after-head\" />\n\n <div className=\"w-full max-w-screen-2xl mx-auto px-10 lg:px-12\">\n <Suspense\n fallback={\n <main className=\"grid h-[calc(100vh-var(--header-height))] place-items-center\">\n <Spinner />\n </main>\n }\n >\n <Drawer direction=\"left\">\n <Sidebar />\n <div\n className={cn(\n \"lg:hidden -mx-10 px-10 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 left-0 right-0 border-b\",\n \"peer-data-[navigation=false]:hidden\",\n )}\n >\n <DrawerTrigger className=\"flex items-center gap-2\">\n <PanelLeftIcon size={16} strokeWidth={1.5} />\n <span className=\"text-sm\">Menu</span>\n </DrawerTrigger>\n </div>\n <main\n className={cn(\n \"h-full dark:border-white/10 translate-x-0\",\n \"lg:overflow-visible\",\n // This works in tandem with the `SidebarWrapper` component\n \"lg:peer-data-[navigation=true]:w-[calc(100%-var(--side-nav-width))]\",\n \"lg:peer-data-[navigation=true]:translate-x-[--side-nav-width] lg:peer-data-[navigation=true]:pl-12\",\n )}\n >\n <Slotlet name=\"zudoku-before-content\" />\n {children ?? <Outlet />}\n <Slotlet name=\"zudoku-after-content\" />\n </main>\n </Drawer>\n </Suspense>\n </div>\n </>\n );\n};\n","'use client';\nimport { createContext, Component, createElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback !== undefined) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n","import { ReactNode } from \"react\";\nimport type { SidebarConfig } from \"../../config/validators/SidebarSchema.js\";\nimport { TopNavigationItem } from \"../../config/validators/validate.js\";\nimport { type AuthenticationProvider } from \"../authentication/authentication.js\";\nimport type { ComponentsContextType } from \"../components/context/ComponentsContext.js\";\nimport { Slotlets } from \"../components/SlotletProvider.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport type { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport {\n isApiIdentityPlugin,\n isNavigationPlugin,\n type NavigationPlugin,\n needsInitialization,\n type ZudokuPlugin,\n} from \"./plugins.js\";\n\nexport interface ApiIdentity {\n authorizeRequest: (request: Request) => Request;\n label: string;\n id: string;\n}\n\nexport type ApiKeyCache = \"api-keys\";\n\ntype Metadata = Partial<{\n title: string;\n description: string;\n logo: string;\n favicon: string;\n generator: string;\n applicationName: string;\n referrer: string;\n keywords: string[];\n authors: string[];\n creator: string;\n publisher: string;\n}>;\n\ntype Page = Partial<{\n pageTitle?: string;\n logo?: {\n src: {\n light: string;\n dark: string;\n };\n width?: string;\n alt?: string;\n };\n banner?: {\n message: ReactNode;\n color?: \"note\" | \"tip\" | \"info\" | \"caution\" | \"danger\" | (string & {});\n dismissible?: boolean;\n };\n}>;\n\nexport type ZudokuContextOptions = {\n metadata?: Metadata;\n page?: Page;\n authentication?: AuthenticationProvider;\n topNavigation?: TopNavigationItem[];\n sidebars?: SidebarConfig;\n plugins?: ZudokuPlugin[];\n slotlets?: Slotlets;\n mdx?: {\n components?: MdxComponentsType;\n };\n overrides?: ComponentsContextType;\n};\n\nexport class ZudokuContext {\n public plugins: NonNullable<ZudokuContextOptions[\"plugins\"]>;\n public sidebars: SidebarConfig;\n public topNavigation: NonNullable<ZudokuContextOptions[\"topNavigation\"]>;\n public meta: ZudokuContextOptions[\"metadata\"];\n public page: ZudokuContextOptions[\"page\"];\n public authentication?: ZudokuContextOptions[\"authentication\"];\n private navigationPlugins: NavigationPlugin[];\n\n constructor(config: ZudokuContextOptions) {\n this.plugins = config.plugins ?? [];\n this.topNavigation = config.topNavigation ?? [];\n this.sidebars = config.sidebars ?? {};\n this.navigationPlugins = this.plugins.filter(isNavigationPlugin);\n this.authentication = config.authentication;\n this.meta = config.metadata;\n this.page = config.page;\n }\n\n initialize = async (): Promise<void> => {\n await Promise.all(\n this.plugins\n .filter(needsInitialization)\n .map((plugin) => plugin.initialize?.(this)),\n );\n };\n\n getApiIdentities = async () => {\n const keys = await Promise.all(\n this.plugins\n .filter(isApiIdentityPlugin)\n .map((plugin) => plugin.getIdentities(this)),\n );\n\n return keys.flat();\n };\n\n getPluginSidebar = async (path: string) => {\n const navigations = await Promise.all(\n this.navigationPlugins.map((plugin) =>\n plugin.getSidebar?.(joinPath(path)),\n ),\n );\n\n return navigations.flatMap((nav) => nav ?? []);\n };\n\n signRequest = async (request: Request) => {\n if (!this.authentication) {\n throw new Error(\"No authentication provider configured\");\n }\n\n const accessToken = await this.authentication.getAccessToken();\n\n request.headers.set(\"Authorization\", `Bearer ${accessToken}`);\n\n return request;\n };\n}\n","import { FallbackProps } from \"react-error-boundary\";\nimport { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function TopLevelError({ error, resetErrorBoundary }: FallbackProps) {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return <ErrorAlert error={error} />;\n}\n","const root = globalThis;\n\nif (!root.requestIdleCallback || !root.cancelIdleCallback) {\n root.requestIdleCallback = (cb: IdleRequestCallback) => setTimeout(cb, 1);\n root.cancelIdleCallback = clearTimeout;\n}\n","import {\n createContext,\n useContext,\n type ComponentProps,\n type ComponentType,\n} from \"react\";\nimport { Header } from \"../Header.js\";\n\nexport const DEFAULT_COMPONENTS = {\n Header,\n};\n\nexport type ComponentsContextType = {\n Header?: ComponentType<ComponentProps<typeof Header>>;\n};\n\nconst ComponentsContext =\n createContext<Required<ComponentsContextType>>(DEFAULT_COMPONENTS);\n\nexport const ComponentsProvider = ComponentsContext.Provider;\n\nexport const useComponents = () => {\n return useContext(ComponentsContext);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport type { PropsWithChildren } from \"react\";\nimport { ZudokuContext } from \"../../core/ZudokuContext.js\";\nimport { ZudokuReactContext } from \"./ZudokuContext.js\";\n\nexport const ZudokuProvider = ({\n children,\n context,\n}: PropsWithChildren<{ context: ZudokuContext }>) => {\n useSuspenseQuery({\n queryFn: async () => {\n await context.initialize();\n return true;\n },\n queryKey: [\"zudoku-initialize\"],\n });\n\n return (\n <ZudokuReactContext.Provider value={context}>\n {children}\n </ZudokuReactContext.Provider>\n );\n};\n","import { MDXProvider } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { ThemeProvider } from \"next-themes\";\nimport {\n Fragment,\n memo,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Outlet, useNavigation } from \"react-router-dom\";\nimport { hasHead, isMdxProviderPlugin } from \"../core/plugins.js\";\nimport { ZudokuContext, ZudokuContextOptions } from \"../core/ZudokuContext.js\";\nimport { TopLevelError } from \"../errors/TopLevelError.js\";\nimport { StaggeredRenderContext } from \"../plugins/openapi/StaggeredRender.js\";\nimport { MdxComponents } from \"../util/MdxComponents.js\";\nimport \"../util/requestIdleCallbackPolyfill.js\";\nimport {\n ComponentsProvider,\n DEFAULT_COMPONENTS,\n} from \"./context/ComponentsContext.js\";\nimport { ViewportAnchorProvider } from \"./context/ViewportAnchorContext.js\";\nimport { ZudokuProvider } from \"./context/ZudokuProvider.js\";\nimport { SlotletProvider } from \"./SlotletProvider.js\";\n\nconst ZudokoInner = memo(\n ({ children, ...props }: PropsWithChildren<ZudokuContextOptions>) => {\n const components = useMemo(\n () => ({ ...DEFAULT_COMPONENTS, ...props.overrides }),\n [props.overrides],\n );\n\n const mdxComponents = useMemo(() => {\n const componentsFromPlugins = (props.plugins ?? [])\n .filter(isMdxProviderPlugin)\n .flatMap((plugin) =>\n plugin.getMdxComponents ? [plugin.getMdxComponents()] : [],\n );\n\n return {\n ...componentsFromPlugins.reduce(\n (acc, curr) => ({ ...acc, ...curr }),\n {},\n ),\n ...MdxComponents,\n ...props.mdx?.components,\n };\n }, [props.mdx?.components, props.plugins]);\n const { stagger } = useContext(StaggeredRenderContext);\n const [didNavigate, setDidNavigate] = useState(false);\n const staggeredValue = useMemo(\n () => (didNavigate ? { stagger: true } : { stagger }),\n [stagger, didNavigate],\n );\n const navigation = useNavigation();\n\n useEffect(() => {\n if (didNavigate) {\n return;\n }\n setDidNavigate(true);\n }, [didNavigate, navigation.location]);\n\n const [zudokuContext] = useState(() => new ZudokuContext(props));\n\n const heads = props.plugins\n ?.filter(hasHead)\n // eslint-disable-next-line react/no-array-index-key\n .map((plugin, i) => <Fragment key={i}>{plugin.getHead?.()}</Fragment>);\n\n return (\n <>\n <Helmet>{heads}</Helmet>\n <StaggeredRenderContext.Provider value={staggeredValue}>\n <ZudokuProvider context={zudokuContext}>\n <MDXProvider components={mdxComponents}>\n <ThemeProvider attribute=\"class\" disableTransitionOnChange>\n <ComponentsProvider value={components}>\n <SlotletProvider slotlets={props.slotlets}>\n <ViewportAnchorProvider>\n {children ?? <Outlet />}\n </ViewportAnchorProvider>\n </SlotletProvider>\n </ComponentsProvider>\n </ThemeProvider>\n </MDXProvider>\n </ZudokuProvider>\n </StaggeredRenderContext.Provider>\n </>\n );\n },\n);\n\nZudokoInner.displayName = \"ZudokoInner\";\n\nconst Zudoku = (props: ZudokuContextOptions) => {\n return (\n <ErrorBoundary FallbackComponent={TopLevelError}>\n <ZudokoInner {...props} />\n </ErrorBoundary>\n );\n};\nZudoku.displayName = \"Zudoku\";\n\nexport { Zudoku };\n","import { useMDXComponents as useMDXComponentsImport } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { Link as LinkImport } from \"react-router-dom\";\nimport { useAuthState } from \"../authentication/state.js\";\nimport { RouterError as RouterErrorImport } from \"../errors/RouterError.js\";\nimport { ServerError as ServerErrorImport } from \"../errors/ServerError.js\";\nimport { Button as ButtonImport } from \"../ui/Button.js\";\nimport { Callout as CalloutImport } from \"../ui/Callout.js\";\nimport {\n Bootstrap as BootstrapImport,\n BootstrapStatic as BootstrapStaticImport,\n} from \"./Bootstrap.js\";\nimport { ClientOnly as ClientOnlyImport } from \"./ClientOnly.js\";\nimport { Layout as LayoutImport } from \"./Layout.js\";\nimport { Zudoku as ZudokuImport } from \"./Zudoku.js\";\nimport { useZudoku as useZudokuImport } from \"./context/ZudokuContext.js\";\nexport const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;\nexport const Layout = /*@__PURE__*/ LayoutImport;\nexport const RouterError = /*@__PURE__*/ RouterErrorImport;\nexport const ServerError = /*@__PURE__*/ ServerErrorImport;\nexport const Bootstrap = /*@__PURE__*/ BootstrapImport;\nexport const BootstrapStatic = /*@__PURE__*/ BootstrapStaticImport;\n\nexport const Head = /*@__PURE__*/ Helmet;\n\nexport const useZudoku = /*@__PURE__*/ useZudokuImport;\nexport const useAuth = /*@__PURE__*/ useAuthState;\nexport const Zudoku = /*@__PURE__*/ ZudokuImport;\n\nexport const Callout = /*@__PURE__*/ CalloutImport;\nexport const ClientOnly = /*@__PURE__*/ ClientOnlyImport;\nexport const Button = /*@__PURE__*/ ButtonImport;\nexport const Link: typeof LinkImport = /*@__PURE__*/ LinkImport;\n"],"names":["ServerError","error","jsx","ErrorAlert","QueryCache","_a","Subscribable","config","__privateAdd","_queries","__privateSet","client","options","state","queryKey","queryHash","hashQueryKeyByOptions","query","Query","__privateGet","queryInMap","notifyManager","filters","defaultedFilters","matchQuery","queries","event","listener","MutationCache","_mutations","_mutationId","mutation","Mutation","__privateWrapper","scope","scopeFor","mutations","x","firstPendingMutation","m","foundMutation","matchMutation","pausedMutations","noop","infiniteQueryBehavior","pages","context","direction","_c","_b","oldPages","_d","oldPageParams","_e","result","currentPage","fetchFn","cancelled","addSignalProperty","object","queryFn","ensureQueryFn","fetchPage","data","param","previous","queryFnContext","page","maxPages","addTo","addToStart","addToEnd","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","QueryClient","_queryCache","_mutationCache","_defaultOptions","_queryDefaults","_mutationDefaults","_mountCount","_unsubscribeFocus","_unsubscribeOnline","focusManager","focused","onlineManager","online","cachedData","defaultedOptions","resolveStaleTime","updater","prevData","functionalUpdate","queryCache","refetchFilters","cancelOptions","defaultedCancelOptions","promises","fetchOptions","promise","hashKey","defaults","queryDefault","partialMatchKey","mutationKey","skipToken","defaultTransformerFn","hydrate","dehydratedState","mutationCache","deserializeData","mutationOptions","meta","_ignored","serializedState","initialPromise","HydrationBoundary","children","queryClient","useQueryClient","hydrationQueue","setHydrationQueue","React","optionsRef","newQueries","existingQueries","dehydratedQuery","existingQuery","hydrationIsNewer","queryAlreadyQueued","prev","server","require$$0","router","require$$1","reactRouter","require$$2","reactRouterDom","require$$3","_interopNamespace","n","k","d","React__namespace","StaticRouter","basename","locationProp","future","action","location","staticNavigator","getStatelessNavigator","StaticRouterProvider","router$1","nonce","dataRouterContext","fetchersContext","hydrateScript","serializeErrors","htmlEscape","DataRoutes","routes","errors","entries","serialized","key","val","createHref","encodeLocation","to","delta","createStaticHandler","opts","createStaticRouter","manifest","dataRoutes","matches","match","route","msg","method","href","encoded","ABSOLUTE_URL_REGEX","ESCAPE_LOOKUP","ESCAPE_REGEX","str","StaticRouterProvider_1","Bootstrap","useMemo","StrictMode","QueryClientProvider","HelmetProvider","StaggeredRenderContext","RouterProvider","BootstrapStatic","helmetContext","SidebarCategory","category","level","isCategoryOpen","useIsCategoryOpen","hasInteracted","setHasInteracted","useState","isCollapsible","isCollapsed","isDefaultOpen","open","setOpen","isActive","useMatch","useEffect","ToggleButton","e","ChevronRightIcon","cn","jsxs","Collapsible","navigationListItem","NavLink","joinPath","item","SidebarItem","cva","DATA_ANCHOR_ATTR","activeAnchor","useViewportAnchor","searchParams","useSearchParams","Fragment","SidebarBadge","AnchorLink","ExternalLinkIcon","scrollIntoViewIfNeeded","element","rect","useScrollToAnchor","useLocation","setActiveAnchor","hash","scrollToElement","link","observer","_","obs","useScrollToTop","previousPath","useRef","Skeleton","className","props","isProfileMenuPlugin","obj","isNavigationPlugin","isSearchPlugin","needsInitialization","hasHead","isMdxProviderPlugin","isApiIdentityPlugin","COLOR_MAP","Banner","useZudoku","isBannerOpen","setIsBannerOpen","mappedColor","style","CircleXIcon","Search","ctx","isOpen","setIsOpen","onClose","useCallback","onKeyDown","searchPlugin","SearchIcon","Suspense","ThemeSwitch","theme","setTheme","useTheme","ThemeIcon","MoonStarIcon","SunIcon","ClientOnly","Button","isHiddenItem","isAuthenticated","TopNavigation","topNavigation","useAuth","TopNavItem","id","label","defaultLink","sidebars","nav","useCurrentNavigation","currentSidebar","first","traverseSidebar","Link","cx","MobileTopNavigation","Drawer","DrawerTrigger","MenuIcon","DrawerContent","VisuallyHidden","DrawerTitle","DrawerClose","RecursiveMenu","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuPortal","DropdownMenuSubContent","i","DropdownMenuItem","Header","memo","auth","profile","isAuthEnabled","plugins","accountItems","p","Slotlet","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","SidebarWrapper","forwardRef","pushMainContent","ref","Sidebar","navRef","navigation","Layout","authentication","previousLocationPath","Helmet","Spinner","PanelLeftIcon","Outlet","ErrorBoundaryContext","createContext","initialState","ErrorBoundary","Component","_this$props$onReset","_this$props","_len","args","_key","info","_this$props$onError","_this$props2","prevProps","prevState","didCatch","resetKeys","hasArrayChanged","_this$props$onReset2","_this$props3","fallbackRender","FallbackComponent","fallback","childToRender","createElement","a","b","index","ZudokuContext","__publicField","plugin","path","request","accessToken","TopLevelError","resetErrorBoundary","root","cb","DEFAULT_COMPONENTS","ComponentsContext","ComponentsProvider","ZudokuProvider","useSuspenseQuery","ZudokuReactContext","ZudokoInner","components","mdxComponents","acc","curr","MdxComponents","stagger","useContext","didNavigate","setDidNavigate","staggeredValue","useNavigation","zudokuContext","heads","MDXProvider","ThemeProvider","SlotletProvider","ViewportAnchorProvider","Zudoku","useMDXComponents","useMDXComponentsImport","LayoutImport","RouterError","RouterErrorImport","ServerErrorImport","BootstrapImport","BootstrapStaticImport","Head","useZudokuImport","useAuthState","ZudokuImport","Callout","CalloutImport","ClientOnlyImport","ButtonImport","LinkImport"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,24]}
1
+ {"version":3,"file":"zudoku.components.js","sources":["../src/lib/errors/ServerError.tsx","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/hydration.js","../../../node_modules/.pnpm/@tanstack+react-query@5.62.3_react@19.0.0/node_modules/@tanstack/react-query/build/modern/HydrationBoundary.js","../../../node_modules/.pnpm/react-router@7.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/react-router/dist/development/dom-export.mjs","../src/lib/components/Bootstrap.tsx","../../../node_modules/.pnpm/spin-delay@2.0.1_react@19.0.0/node_modules/spin-delay/dist/index.js","../src/lib/components/navigation/SidebarBadge.tsx","../src/lib/components/navigation/SidebarCategory.tsx","../src/lib/components/navigation/SidebarItem.tsx","../src/lib/util/useScrollToAnchor.ts","../src/lib/util/useScrollToTop.ts","../src/lib/ui/Skeleton.tsx","../src/lib/core/plugins.ts","../src/lib/components/Banner.tsx","../src/lib/components/Search.tsx","../src/lib/components/ThemeSwitch.tsx","../src/lib/components/TopNavigation.tsx","../src/lib/components/MobileTopNavigation.tsx","../src/lib/components/Header.tsx","../src/lib/components/navigation/SidebarWrapper.tsx","../src/lib/components/navigation/Sidebar.tsx","../src/lib/components/Layout.tsx","../../../node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../src/lib/core/ZudokuContext.ts","../src/lib/errors/TopLevelError.tsx","../src/lib/util/requestIdleCallbackPolyfill.ts","../src/lib/components/context/ComponentsContext.tsx","../src/lib/components/context/ZudokuProvider.tsx","../src/lib/components/Zudoku.tsx","../src/lib/components/index.ts"],"sourcesContent":["import { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function ServerError({ error }: { error: unknown }) {\n return <ErrorAlert error={error} />;\n}\n","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n cache: this,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Map();\n this.#mutationId = Date.now();\n }\n #mutations;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n const scope = scopeFor(mutation);\n const mutations = this.#mutations.get(scope) ?? [];\n mutations.push(mutation);\n this.#mutations.set(scope, mutations);\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n const scope = scopeFor(mutation);\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations.get(scope)?.filter((x) => x !== mutation);\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope);\n } else {\n this.#mutations.set(scope, mutations);\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const firstPendingMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m.state.status === \"pending\");\n return !firstPendingMutation || firstPendingMutation === mutation;\n }\n runNext(mutation) {\n const foundMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation);\n });\n });\n }\n getAll() {\n return [...this.#mutations.values()].flat();\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id ?? String(mutation.mutationId);\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true;\n } else {\n context.signal.addEventListener(\"abort\", () => {\n cancelled = true;\n });\n }\n return context.signal;\n }\n });\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const queryFnContext = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext);\n const page = await queryFn(\n queryFnContext\n );\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data)\n return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam)\n return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1)\n return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0)\n return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const cachedData = this.getQueryData(options.queryKey);\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n } else {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n const refetchFilters = {\n type: \"active\",\n ...filters\n };\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(refetchFilters, options);\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n const refetchFilters = {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n };\n return this.refetchQueries(refetchFilters, options);\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n let result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n result = { ...result, ...queryDefault.defaultOptions };\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/hydration.ts\nfunction defaultTransformerFn(data) {\n return data;\n}\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...mutation.options.scope && { scope: mutation.options.scope },\n ...mutation.meta && { meta: mutation.meta }\n };\n}\nfunction dehydrateQuery(query, serializeData) {\n return {\n state: {\n ...query.state,\n ...query.state.data !== void 0 && {\n data: serializeData(query.state.data)\n }\n },\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...query.state.status === \"pending\" && {\n promise: query.promise?.then(serializeData).catch((error) => {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`\n );\n }\n return Promise.reject(new Error(\"redacted\"));\n })\n },\n ...query.meta && { meta: query.meta }\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === \"success\";\n}\nfunction dehydrate(client, options = {}) {\n const filterMutation = options.shouldDehydrateMutation ?? client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const mutations = client.getMutationCache().getAll().flatMap(\n (mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []\n );\n const filterQuery = options.shouldDehydrateQuery ?? client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn;\n const queries = client.getQueryCache().getAll().flatMap(\n (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData)] : []\n );\n return { mutations, queries };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== \"object\" || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n const deserializeData = options?.defaultOptions?.deserializeData ?? client.getDefaultOptions().hydrate?.deserializeData ?? defaultTransformerFn;\n const mutations = dehydratedState.mutations || [];\n const queries = dehydratedState.queries || [];\n mutations.forEach(({ state, ...mutationOptions }) => {\n mutationCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.mutations,\n ...options?.defaultOptions?.mutations,\n ...mutationOptions\n },\n state\n );\n });\n queries.forEach(({ queryKey, state, queryHash, meta, promise }) => {\n let query = queryCache.get(queryHash);\n const data = state.data === void 0 ? state.data : deserializeData(state.data);\n if (query) {\n if (query.state.dataUpdatedAt < state.dataUpdatedAt) {\n const { fetchStatus: _ignored, ...serializedState } = state;\n query.setState({\n ...serializedState,\n data\n });\n }\n } else {\n query = queryCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.queries,\n ...options?.defaultOptions?.queries,\n queryKey,\n queryHash,\n meta\n },\n // Reset fetch status to idle to avoid\n // query being stuck in fetching state upon hydration\n {\n ...state,\n data,\n fetchStatus: \"idle\"\n }\n );\n }\n if (promise) {\n const initialPromise = Promise.resolve(promise).then(deserializeData);\n void query.fetch(void 0, { initialPromise });\n }\n });\n}\nexport {\n defaultShouldDehydrateMutation,\n defaultShouldDehydrateQuery,\n dehydrate,\n hydrate\n};\n//# sourceMappingURL=hydration.js.map","\"use client\";\n\n// src/HydrationBoundary.tsx\nimport * as React from \"react\";\nimport { hydrate } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nvar HydrationBoundary = ({\n children,\n options = {},\n state,\n queryClient\n}) => {\n const client = useQueryClient(queryClient);\n const [hydrationQueue, setHydrationQueue] = React.useState();\n const optionsRef = React.useRef(options);\n optionsRef.current = options;\n React.useMemo(() => {\n if (state) {\n if (typeof state !== \"object\") {\n return;\n }\n const queryCache = client.getQueryCache();\n const queries = state.queries || [];\n const newQueries = [];\n const existingQueries = [];\n for (const dehydratedQuery of queries) {\n const existingQuery = queryCache.get(dehydratedQuery.queryHash);\n if (!existingQuery) {\n newQueries.push(dehydratedQuery);\n } else {\n const hydrationIsNewer = dehydratedQuery.state.dataUpdatedAt > existingQuery.state.dataUpdatedAt;\n const queryAlreadyQueued = hydrationQueue?.find(\n (query) => query.queryHash === dehydratedQuery.queryHash\n );\n if (hydrationIsNewer && (!queryAlreadyQueued || dehydratedQuery.state.dataUpdatedAt > queryAlreadyQueued.state.dataUpdatedAt)) {\n existingQueries.push(dehydratedQuery);\n }\n }\n }\n if (newQueries.length > 0) {\n hydrate(client, { queries: newQueries }, optionsRef.current);\n }\n if (existingQueries.length > 0) {\n setHydrationQueue(\n (prev) => prev ? [...prev, ...existingQueries] : existingQueries\n );\n }\n }\n }, [client, hydrationQueue, state]);\n React.useEffect(() => {\n if (hydrationQueue) {\n hydrate(client, { queries: hydrationQueue }, optionsRef.current);\n setHydrationQueue(void 0);\n }\n }, [client, hydrationQueue]);\n return children;\n};\nexport {\n HydrationBoundary\n};\n//# sourceMappingURL=HydrationBoundary.js.map","/**\n * react-router v7.0.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport {\n FrameworkContext,\n RemixErrorBoundary,\n RouterProvider,\n createBrowserHistory,\n createClientRoutes,\n createClientRoutesWithHMRRevalidationOptOut,\n createRouter,\n decodeViaTurboStream,\n deserializeErrors,\n getPatchRoutesOnNavigationFunction,\n getSingleFetchDataStrategy,\n invariant,\n mapRouteProperties,\n matchRoutes,\n shouldHydrateRouteLoader,\n useFogOFWarDiscovery\n} from \"./chunk-D52XG6IA.mjs\";\n\n// lib/dom-export/dom-router-provider.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nfunction RouterProvider2(props) {\n return /* @__PURE__ */ React.createElement(RouterProvider, { flushSync: ReactDOM.flushSync, ...props });\n}\n\n// lib/dom-export/hydrated-router.tsx\nimport * as React2 from \"react\";\nvar ssrInfo = null;\nvar router = null;\nfunction initSsrInfo() {\n if (!ssrInfo && window.__reactRouterContext && window.__reactRouterManifest && window.__reactRouterRouteModules) {\n ssrInfo = {\n context: window.__reactRouterContext,\n manifest: window.__reactRouterManifest,\n routeModules: window.__reactRouterRouteModules,\n stateDecodingPromise: void 0,\n router: void 0,\n routerInitialized: false\n };\n }\n}\nfunction createHydratedRouter() {\n initSsrInfo();\n if (!ssrInfo) {\n throw new Error(\n \"You must be using the SSR features of React Router in order to skip passing a `router` prop to `<RouterProvider>`\"\n );\n }\n let localSsrInfo = ssrInfo;\n if (!ssrInfo.stateDecodingPromise) {\n let stream = ssrInfo.context.stream;\n invariant(stream, \"No stream found for single fetch decoding\");\n ssrInfo.context.stream = void 0;\n ssrInfo.stateDecodingPromise = decodeViaTurboStream(stream, window).then((value) => {\n ssrInfo.context.state = value.value;\n localSsrInfo.stateDecodingPromise.value = true;\n }).catch((e) => {\n localSsrInfo.stateDecodingPromise.error = e;\n });\n }\n if (ssrInfo.stateDecodingPromise.error) {\n throw ssrInfo.stateDecodingPromise.error;\n }\n if (!ssrInfo.stateDecodingPromise.value) {\n throw ssrInfo.stateDecodingPromise;\n }\n let routes = createClientRoutes(\n ssrInfo.manifest.routes,\n ssrInfo.routeModules,\n ssrInfo.context.state,\n ssrInfo.context.isSpaMode\n );\n let hydrationData = void 0;\n if (!ssrInfo.context.isSpaMode) {\n hydrationData = {\n ...ssrInfo.context.state,\n loaderData: { ...ssrInfo.context.state.loaderData }\n };\n let initialMatches = matchRoutes(\n routes,\n window.location,\n window.__reactRouterContext?.basename\n );\n if (initialMatches) {\n for (let match of initialMatches) {\n let routeId = match.route.id;\n let route = ssrInfo.routeModules[routeId];\n let manifestRoute = ssrInfo.manifest.routes[routeId];\n if (route && manifestRoute && shouldHydrateRouteLoader(\n manifestRoute,\n route,\n ssrInfo.context.isSpaMode\n ) && (route.HydrateFallback || !manifestRoute.hasLoader)) {\n delete hydrationData.loaderData[routeId];\n } else if (manifestRoute && !manifestRoute.hasLoader) {\n hydrationData.loaderData[routeId] = null;\n }\n }\n }\n if (hydrationData && hydrationData.errors) {\n hydrationData.errors = deserializeErrors(hydrationData.errors);\n }\n }\n let router2 = createRouter({\n routes,\n history: createBrowserHistory(),\n basename: ssrInfo.context.basename,\n hydrationData,\n mapRouteProperties,\n dataStrategy: getSingleFetchDataStrategy(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n () => router2\n ),\n patchRoutesOnNavigation: getPatchRoutesOnNavigationFunction(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.isSpaMode,\n ssrInfo.context.basename\n )\n });\n ssrInfo.router = router2;\n if (router2.state.initialized) {\n ssrInfo.routerInitialized = true;\n router2.initialize();\n }\n router2.createRoutesForHMR = /* spacer so ts-ignore does not affect the right hand of the assignment */\n createClientRoutesWithHMRRevalidationOptOut;\n window.__reactRouterDataRouter = router2;\n return router2;\n}\nfunction HydratedRouter() {\n if (!router) {\n router = createHydratedRouter();\n }\n let [criticalCss, setCriticalCss] = React2.useState(\n process.env.NODE_ENV === \"development\" ? ssrInfo?.context.criticalCss : void 0\n );\n if (process.env.NODE_ENV === \"development\") {\n if (ssrInfo) {\n window.__reactRouterClearCriticalCss = () => setCriticalCss(void 0);\n }\n }\n let [location, setLocation] = React2.useState(router.state.location);\n React2.useLayoutEffect(() => {\n if (ssrInfo && ssrInfo.router && !ssrInfo.routerInitialized) {\n ssrInfo.routerInitialized = true;\n ssrInfo.router.initialize();\n }\n }, []);\n React2.useLayoutEffect(() => {\n if (ssrInfo && ssrInfo.router) {\n return ssrInfo.router.subscribe((newState) => {\n if (newState.location !== location) {\n setLocation(newState.location);\n }\n });\n }\n }, [location]);\n invariant(ssrInfo, \"ssrInfo unavailable for HydratedRouter\");\n useFogOFWarDiscovery(\n router,\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.isSpaMode\n );\n return (\n // This fragment is important to ensure we match the <ServerRouter> JSX\n // structure so that useId values hydrate correctly\n /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\n FrameworkContext.Provider,\n {\n value: {\n manifest: ssrInfo.manifest,\n routeModules: ssrInfo.routeModules,\n future: ssrInfo.context.future,\n criticalCss,\n isSpaMode: ssrInfo.context.isSpaMode\n }\n },\n /* @__PURE__ */ React2.createElement(RemixErrorBoundary, { location }, /* @__PURE__ */ React2.createElement(RouterProvider2, { router }))\n ), /* @__PURE__ */ React2.createElement(React2.Fragment, null))\n );\n}\nexport {\n HydratedRouter,\n RouterProvider2 as RouterProvider\n};\n","import {\n HydrationBoundary,\n QueryClient,\n QueryClientProvider,\n} from \"@tanstack/react-query\";\nimport { type HelmetData, HelmetProvider } from \"@zudoku/react-helmet-async\";\nimport { StrictMode } from \"react\";\nimport {\n type createBrowserRouter,\n type createStaticRouter,\n type StaticHandlerContext,\n StaticRouterProvider,\n} from \"react-router\";\nimport { RouterProvider } from \"react-router/dom\";\nimport { StaggeredRenderContext } from \"../plugins/openapi/StaggeredRender.js\";\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60 * 5,\n },\n },\n});\n\nconst Bootstrap = ({\n router,\n hydrate = false,\n}: {\n hydrate?: boolean;\n router: ReturnType<typeof createBrowserRouter>;\n}) => (\n <StrictMode>\n <QueryClientProvider client={queryClient}>\n <HydrationBoundary state={hydrate ? (window as any).DATA : undefined}>\n <HelmetProvider>\n <StaggeredRenderContext.Provider value={{ stagger: !hydrate }}>\n <RouterProvider router={router} />\n </StaggeredRenderContext.Provider>\n </HelmetProvider>\n </HydrationBoundary>\n </QueryClientProvider>\n </StrictMode>\n);\n\nconst BootstrapStatic = ({\n router,\n context,\n queryClient,\n helmetContext,\n}: {\n helmetContext: HelmetData[\"context\"];\n context: StaticHandlerContext;\n queryClient: QueryClient;\n router: ReturnType<typeof createStaticRouter>;\n}) => (\n <StrictMode>\n <QueryClientProvider client={queryClient}>\n <HelmetProvider context={helmetContext}>\n <StaticRouterProvider router={router} context={context} />\n </HelmetProvider>\n </QueryClientProvider>\n </StrictMode>\n);\n\nexport { Bootstrap, BootstrapStatic };\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :\n typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :\n (global = global || self, factory(global.spinDelay = {}, global.react));\n}(this, (function (exports, react) {\n const defaultOptions = {\n delay: 500,\n minDuration: 200,\n ssr: true\n };\n\n function useIsSSR() {\n const [isSSR, setIsSSR] = react.useState(true);\n react.useEffect(() => {\n setIsSSR(false);\n }, []);\n return isSSR;\n }\n\n function useSpinDelay(loading, options) {\n options = Object.assign({}, defaultOptions, options);\n const isSSR = useIsSSR() && options.ssr;\n const initialState = isSSR && loading ? 'DISPLAY' : 'IDLE';\n const [state, setState] = react.useState(initialState);\n const timeout = react.useRef(null);\n react.useEffect(() => {\n if (loading && (state === 'IDLE' || isSSR)) {\n clearTimeout(timeout.current);\n const delay = isSSR ? 0 : options.delay;\n timeout.current = setTimeout(() => {\n if (!loading) {\n return setState('IDLE');\n }\n\n timeout.current = setTimeout(() => {\n setState('EXPIRE');\n }, options.minDuration);\n setState('DISPLAY');\n }, delay);\n\n if (!isSSR) {\n setState('DELAY');\n }\n }\n\n if (!loading && state !== 'DISPLAY') {\n clearTimeout(timeout.current);\n setState('IDLE');\n }\n }, [loading, state, options.delay, options.minDuration, isSSR]);\n react.useEffect(() => {\n return () => clearTimeout(timeout.current);\n }, []);\n return state === 'DISPLAY' || state === 'EXPIRE';\n }\n\n exports.defaultOptions = defaultOptions;\n exports.useSpinDelay = useSpinDelay;\n\n})));\n//# sourceMappingURL=index.js.map\n","import { cn } from \"../../util/cn.js\";\n\nexport const ColorMap = {\n green: \"bg-green-400 dark:bg-green-800\",\n blue: \"bg-sky-400 dark:bg-sky-800\",\n yellow: \"bg-yellow-400 dark:bg-yellow-800\",\n red: \"bg-red-400 dark:bg-red-800\",\n purple: \"bg-purple-400 dark:bg-purple-600\",\n indigo: \"bg-indigo-400 dark:bg-indigo-600\",\n gray: \"bg-gray-400 dark:bg-gray-600\",\n};\n\nexport const SidebarBadge = ({\n color,\n label,\n className,\n}: {\n color: keyof typeof ColorMap;\n label: string;\n className?: string;\n}) => {\n return (\n <span\n className={cn(\n \"mt-0.5 flex items-center duration-200 transition-opacity text-center uppercase font-mono text-[0.65rem] font-bold rounded text-background dark:text-zinc-50 h-4 px-1\",\n ColorMap[color],\n className,\n )}\n >\n {label}\n </span>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { NavLink, useMatch } from \"react-router\";\nimport type { SidebarItemCategory } from \"../../../config/validators/SidebarSchema.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { navigationListItem, SidebarItem } from \"./SidebarItem.js\";\nimport { useIsCategoryOpen } from \"./utils.js\";\n\nexport const SidebarCategory = ({\n category,\n onRequestClose,\n}: {\n category: SidebarItemCategory;\n onRequestClose?: () => void;\n}) => {\n const isCategoryOpen = useIsCategoryOpen(category);\n const [hasInteracted, setHasInteracted] = useState(false);\n\n const isCollapsible = category.collapsible ?? true;\n const isCollapsed = category.collapsed ?? true;\n const isDefaultOpen = Boolean(\n !isCollapsible || !isCollapsed || isCategoryOpen,\n );\n const [open, setOpen] = useState(isDefaultOpen);\n const isActive = useMatch(category.link?.id ?? \"\");\n\n useEffect(() => {\n // this is triggered when an item from the sidebar is clicked\n // and the sidebar, enclosing this item, is not opened\n if (isCategoryOpen) {\n setOpen(true);\n }\n }, [isCategoryOpen]);\n\n const ToggleButton = isCollapsible && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n setOpen((prev) => !prev);\n setHasInteracted(true);\n }}\n >\n <ChevronRightIcon\n size={16}\n className={cn(\n hasInteracted && \"transition\",\n \"shrink-0 group-data-[state=open]:rotate-90\",\n )}\n />\n </button>\n );\n\n return (\n <Collapsible.Root\n className=\"flex flex-col\"\n defaultOpen={isDefaultOpen}\n open={open}\n onOpenChange={() => setOpen(true)}\n >\n <Collapsible.Trigger className=\"group\" asChild disabled={!isCollapsible}>\n <div\n onClick={() => setHasInteracted(true)}\n className={navigationListItem({\n isActive: false,\n className: [\n \"text-start\",\n isCollapsible\n ? \"cursor-pointer\"\n : \"cursor-default hover:bg-transparent\",\n ],\n })}\n >\n {category.icon && (\n <category.icon\n size={16}\n className={cn(\"align-[-0.125em] \", isActive && \"text-primary\")}\n />\n )}\n {category.link?.type === \"doc\" ? (\n <NavLink\n to={joinPath(category.link.id)}\n className=\"flex-1\"\n onClick={() => {\n // if it is the current path and closed then open it because there's no path change to trigger the open\n if (isActive && !open) {\n setOpen(true);\n }\n }}\n >\n <div\n className={cn(\n \"flex items-center gap-2 justify-between w-full\",\n isActive ? \"text-primary\" : \"text-foreground/80\",\n )}\n >\n <div className=\"truncate\">{category.label}</div>\n {ToggleButton}\n </div>\n </NavLink>\n ) : (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex gap-2 truncate w-full\">{category.label}</div>\n {ToggleButton}\n </div>\n )}\n </div>\n </Collapsible.Trigger>\n <Collapsible.Content\n className={cn(\n // CollapsibleContent class is used to animate and it should only be applied when the user has triggered the toggle\n hasInteracted && \"CollapsibleContent\",\n \"ms-6 my-1\",\n )}\n >\n <ul\n className={\n \"relative after:absolute after:-left-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border\"\n }\n >\n {category.items.map((item) => (\n <SidebarItem\n key={\n (\"id\" in item ? item.id : \"\") +\n (\"href\" in item ? item.href : \"\") +\n item.label\n }\n onRequestClose={onRequestClose}\n item={item}\n />\n ))}\n </ul>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { cva } from \"class-variance-authority\";\nimport { ExternalLinkIcon } from \"lucide-react\";\nimport { NavLink, useSearchParams } from \"react-router\";\n\nimport type { SidebarItem as SidebarItemType } from \"../../../config/validators/SidebarSchema.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { AnchorLink } from \"../AnchorLink.js\";\nimport { useViewportAnchor } from \"../context/ViewportAnchorContext.js\";\nimport { SidebarBadge } from \"./SidebarBadge.js\";\nimport { SidebarCategory } from \"./SidebarCategory.js\";\n\nexport const navigationListItem = cva(\n \"flex items-center gap-2 px-[--padding-nav-item] py-1.5 rounded-lg hover:bg-accent transition-colors duration-300\",\n {\n variants: {\n isActive: {\n true: \"text-primary font-medium\",\n false: \"text-foreground/80\",\n },\n isMuted: {\n true: \"text-foreground/30\",\n false: \"\",\n },\n },\n defaultVariants: {\n isActive: false,\n },\n },\n);\n\nexport const DATA_ANCHOR_ATTR = \"data-anchor\";\n\nexport const SidebarItem = ({\n item,\n onRequestClose,\n}: {\n item: SidebarItemType;\n onRequestClose?: () => void;\n}) => {\n const { activeAnchor } = useViewportAnchor();\n const [searchParams] = useSearchParams();\n\n switch (item.type) {\n case \"category\":\n return (\n <SidebarCategory category={item} onRequestClose={onRequestClose} />\n );\n case \"doc\":\n return (\n <NavLink\n className={({ isActive }) => navigationListItem({ isActive })}\n to={joinPath(item.id)}\n onClick={onRequestClose}\n >\n {item.icon && <item.icon size={16} className=\"align-[-0.125em]\" />}\n {item.badge ? (\n <>\n <span className=\"truncate flex-1\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n item.label\n )}\n </NavLink>\n );\n case \"link\":\n return item.href.startsWith(\"#\") ? (\n <AnchorLink\n to={{ hash: item.href, search: searchParams.toString() }}\n {...{ [DATA_ANCHOR_ATTR]: item.href.slice(1) }}\n className={navigationListItem({\n isActive: item.href.slice(1) === activeAnchor,\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n onClick={onRequestClose}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </AnchorLink>\n ) : !item.href.startsWith(\"http\") ? (\n <NavLink\n className={navigationListItem({\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n to={item.href}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </NavLink>\n ) : (\n <a\n className={navigationListItem()}\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onRequestClose}\n >\n <span className=\"whitespace-normal\">{item.label}</span>\n {/* This prevents that the icon would be positioned in its own line if the text fills a line entirely */}\n <span className=\"whitespace-nowrap\">\n <ExternalLinkIcon className=\"inline -translate-y-0.5\" size={12} />\n </span>\n </a>\n );\n }\n};\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router\";\nimport { useViewportAnchor } from \"../components/context/ViewportAnchorContext.js\";\nimport { DATA_ANCHOR_ATTR } from \"../components/navigation/SidebarItem.js\";\n\nconst scrollIntoViewIfNeeded = (\n element: Element | null,\n options: ScrollIntoViewOptions = { block: \"center\" },\n) => {\n if (!element) return;\n\n const rect = element.getBoundingClientRect();\n const isInView =\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n\n if (isInView) return;\n\n element.scrollIntoView(options);\n};\n\nexport const useScrollToAnchor = () => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n\n useEffect(() => {\n if (!location.hash) return;\n\n const hash = decodeURIComponent(location.hash.split(\"/\")[0]!.slice(1));\n\n const scrollToElement = () => {\n const element = document.getElementById(hash);\n const link = document.querySelector(`[${DATA_ANCHOR_ATTR}=\"${hash}\"]`);\n\n if (element) {\n element.scrollIntoView();\n scrollIntoViewIfNeeded(link);\n requestIdleCallback(() => setActiveAnchor(hash));\n return true;\n }\n\n return false;\n };\n\n if (!scrollToElement()) {\n const observer = new MutationObserver((_, obs) => {\n if (!scrollToElement()) return;\n obs.disconnect();\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => observer.disconnect();\n }\n }, [location.hash, setActiveAnchor]);\n};\n","import { useEffect, useRef } from \"react\";\nimport { useLocation } from \"react-router\";\n\nexport const useScrollToTop = () => {\n const location = useLocation();\n const previousPath = useRef(location.pathname);\n\n useEffect(() => {\n if (previousPath.current === location.pathname) return;\n window.scrollTo(0, 0);\n previousPath.current = location.pathname;\n }, [location.pathname]);\n};\n","import { cn } from \"../util/cn.js\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import type { LucideIcon } from \"lucide-react\";\nimport { type ReactElement } from \"react\";\nimport { type RouteObject } from \"react-router\";\nimport type { Sidebar } from \"../../config/validators/SidebarSchema.js\";\nimport { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport { ZudokuContext, type ApiIdentity } from \"./ZudokuContext.js\";\n\nexport type ZudokuPlugin =\n | CommonPlugin\n | ProfileMenuPlugin\n | NavigationPlugin\n | ApiIdentityPlugin\n | SearchProviderPlugin;\n\nexport type { RouteObject };\n\nexport interface NavigationPlugin {\n getRoutes: () => RouteObject[];\n getSidebar?: (path: string) => Promise<Sidebar>;\n}\n\nexport interface ApiIdentityPlugin {\n getIdentities: (context: ZudokuContext) => Promise<ApiIdentity[]>;\n}\n\nexport interface SearchProviderPlugin {\n renderSearch: (o: {\n isOpen: boolean;\n onClose: () => void;\n }) => React.JSX.Element | null;\n}\n\nexport interface ProfileMenuPlugin {\n getProfileMenuItems: (context: ZudokuContext) => ProfileNavigationItem[];\n}\n\nexport type ProfileNavigationItem = {\n label: string;\n path?: string;\n weight?: number;\n category?: \"top\" | \"middle\" | \"bottom\";\n children?: ProfileNavigationItem[];\n icon?: LucideIcon;\n};\n\nexport interface CommonPlugin {\n initialize?: (\n context: ZudokuContext,\n ) => Promise<void | boolean> | void | boolean;\n getHead?: () => ReactElement | undefined;\n getMdxComponents?: () => MdxComponentsType;\n}\n\nexport const isProfileMenuPlugin = (\n obj: ZudokuPlugin,\n): obj is ProfileMenuPlugin =>\n \"getProfileMenuItems\" in obj && typeof obj.getProfileMenuItems === \"function\";\n\nexport const isNavigationPlugin = (\n obj: ZudokuPlugin,\n): obj is NavigationPlugin =>\n \"getRoutes\" in obj && typeof obj.getRoutes === \"function\";\n\nexport const isSearchPlugin = (\n obj: ZudokuPlugin,\n): obj is SearchProviderPlugin =>\n \"renderSearch\" in obj && typeof obj.renderSearch === \"function\";\n\nexport const needsInitialization = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"initialize\" in obj && typeof obj.initialize === \"function\";\n\nexport const hasHead = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"getHead\" in obj && typeof obj.getHead === \"function\";\n\nexport const isMdxProviderPlugin = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"getMdxComponents\" in obj && typeof obj.getMdxComponents === \"function\";\n\nexport const isApiIdentityPlugin = (\n obj: ZudokuPlugin,\n): obj is ApiIdentityPlugin =>\n \"getIdentities\" in obj && typeof obj.getIdentities === \"function\";\n","import { CircleXIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { cn } from \"../util/cn.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\n\nconst COLOR_MAP = {\n info: \"bg-blue-500\",\n note: \"bg-gray-500\",\n tip: \"bg-green-600\",\n caution: \"bg-orange-500\",\n danger: \"bg-rose-500\",\n} as const;\n\nexport const Banner = () => {\n const { page } = useZudoku();\n const [isBannerOpen, setIsBannerOpen] = useState(true);\n\n if (!page?.banner || !isBannerOpen) {\n return <style>{`:root { --banner-height: 0px; }`}</style>;\n }\n\n const mappedColor =\n page.banner.color && page.banner.color in COLOR_MAP\n ? COLOR_MAP[page.banner.color as keyof typeof COLOR_MAP]\n : !page.banner.color\n ? \"bg-primary\"\n : undefined;\n\n const style = !mappedColor ? { backgroundColor: page.banner.color } : {};\n\n return (\n <div\n className={cn(\n \"relative text-primary-foreground text-sm font-medium px-4 py-2 flex gap-2 items-center\",\n mappedColor,\n )}\n style={style}\n >\n <div className=\"w-full\">{page.banner.message}</div>\n {page.banner.dismissible && (\n <button\n type=\"button\"\n className=\"md:absolute md:right-4 -m-1.5 p-1.5 hover:bg-accent-foreground/10 rounded-md\"\n onClick={() => setIsBannerOpen(false)}\n >\n <CircleXIcon size={16} />\n </button>\n )}\n </div>\n );\n};\n","import { SearchIcon } from \"lucide-react\";\nimport { Suspense, useCallback, useEffect, useState } from \"react\";\nimport { isSearchPlugin } from \"../core/plugins.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\n\nexport const Search = ({ className }: { className?: string }) => {\n const ctx = useZudoku();\n const [isOpen, setIsOpen] = useState(false);\n\n const onClose = useCallback(() => setIsOpen(false), []);\n\n useEffect(() => {\n if (isOpen) {\n return;\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === \"k\" && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n setIsOpen(true);\n }\n }\n\n window.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen, setIsOpen]);\n\n const searchPlugin = ctx.plugins.find(isSearchPlugin);\n\n if (!searchPlugin) {\n return null;\n }\n\n return (\n <div className={className}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className=\"flex items-center border border-input hover:bg-accent hover:text-accent-foreground p-4 relative h-8 justify-start rounded-lg bg-background text-sm text-muted-foreground shadow-none w-full sm:w-72\"\n >\n <div className=\"flex items-center gap-2 flex-grow\">\n <SearchIcon size={14} />\n Search\n </div>\n <kbd className=\"absolute right-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex\">\n ⌘K\n </kbd>\n </button>\n <Suspense fallback={null}>\n {searchPlugin.renderSearch({\n isOpen,\n onClose,\n })}\n </Suspense>\n </div>\n );\n};\n","import { MoonStarIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\n\nexport const ThemeSwitch = () => {\n const { resolvedTheme, setTheme } = useTheme();\n const ThemeIcon = resolvedTheme === \"dark\" ? MoonStarIcon : SunIcon;\n\n return (\n <ClientOnly>\n <Button\n variant=\"ghost\"\n aria-label={\n resolvedTheme === \"dark\"\n ? \"Switch to light mode\"\n : \"Switch to dark mode\"\n }\n className=\"p-2.5 -m-2.5 rounded-full\"\n onClick={() => setTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\")}\n >\n <ThemeIcon size={18} />\n </Button>\n </ClientOnly>\n );\n};\n","import { cx } from \"class-variance-authority\";\nimport { Suspense } from \"react\";\nimport { NavLink, useNavigation } from \"react-router\";\nimport { TopNavigationItem } from \"../../config/validators/common.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { ZudokuError } from \"../util/invariant.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport { useCurrentNavigation, useZudoku } from \"./context/ZudokuContext.js\";\nimport { traverseSidebar } from \"./navigation/utils.js\";\n\nexport const isHiddenItem =\n (isAuthenticated?: boolean) =>\n (item: { display?: \"auth\" | \"anon\" | \"always\" }) => {\n return (\n (item.display === \"auth\" && isAuthenticated) ||\n (item.display === \"anon\" && !isAuthenticated) ||\n !item.display ||\n item.display === \"always\"\n );\n };\n\nexport const TopNavigation = () => {\n const { topNavigation } = useZudoku();\n const { isAuthenticated } = useAuth();\n\n // Hide top nav if there is only one item\n if (topNavigation.length <= 1) {\n return <style>{`:root { --top-nav-height: 0px; }`}</style>;\n }\n\n return (\n <Suspense>\n <nav className=\"hidden lg:block border-b text-sm px-12 h-[--top-nav-height]\">\n <ul className=\"flex flex-row items-center gap-8\">\n {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (\n <li key={item.id}>\n <TopNavItem {...item} />\n </li>\n ))}\n </ul>\n </nav>\n </Suspense>\n );\n};\n\nexport const TopNavItem = ({\n id,\n label,\n default: defaultLink,\n}: TopNavigationItem) => {\n const { sidebars } = useZudoku();\n const currentSidebar = sidebars[id];\n const currentNav = useCurrentNavigation();\n const isNavigating = Boolean(useNavigation().location);\n const isActive = currentNav.topNavItem?.id === id && !isNavigating;\n\n // TODO: This is a bit of a hack to get the first link in the sidebar\n // We should really process this when we load the config so we can validate\n // that the sidebar is actually set. In this case we just fall back to linking\n // to the id if we can't resolve a sidebar.\n const first =\n defaultLink ??\n (currentSidebar\n ? traverseSidebar(currentSidebar, (item) => {\n if (item.type === \"doc\") return joinPath(item.id);\n })\n : joinPath(id));\n\n if (!first) {\n throw new ZudokuError(\"Page not found.\", {\n developerHint: `No links found in top navigation for '${id}'. Check that the sidebar isn't empty or that a default link is set.`,\n });\n }\n\n return (\n // We don't use isActive here because it has to be inside the sidebar,\n // the top nav id doesn't necessarily start with the sidebar id\n <NavLink\n className={({ isPending }) =>\n cx(\n \"block lg:py-3.5 font-medium -mb-px border-b-2\",\n isActive || isPending\n ? \"border-primary text-foreground\"\n : \"border-transparent text-foreground/75 hover:text-foreground hover:border-accent-foreground/25\",\n )\n }\n to={first}\n >\n {label}\n </NavLink>\n );\n};\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { MenuIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport {\n Drawer,\n DrawerContent,\n DrawerTitle,\n DrawerTrigger,\n} from \"../ui/Drawer.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Search } from \"./Search.js\";\nimport { ThemeSwitch } from \"./ThemeSwitch.js\";\nimport { isHiddenItem, TopNavItem } from \"./TopNavigation.js\";\n\nexport const MobileTopNavigation = () => {\n const { topNavigation } = useZudoku();\n const { isAuthenticated } = useAuth();\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n return (\n <Drawer\n direction=\"right\"\n open={drawerOpen}\n onOpenChange={(open) => setDrawerOpen(open)}\n >\n <div className=\"flex lg:hidden justify-self-end\">\n <DrawerTrigger className=\"lg:hidden\">\n <MenuIcon size={22} />\n </DrawerTrigger>\n </div>\n <DrawerContent\n className=\"lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none\"\n aria-describedby={undefined}\n >\n <div className=\"p-4 overflow-y-auto overscroll-none\">\n <VisuallyHidden>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <Search className=\"flex p-4\" />\n <ul className=\"flex flex-col items-center gap-4 p-4\">\n <li>\n <ThemeSwitch />\n </li>\n {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (\n <li key={item.label}>\n <button onClick={() => setDrawerOpen(false)}>\n <TopNavItem {...item} />\n </button>\n </li>\n ))}\n </ul>\n </div>\n </DrawerContent>\n </Drawer>\n );\n};\n","import { memo } from \"react\";\nimport { Link } from \"react-router\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Skeleton } from \"zudoku/ui/Skeleton.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { isProfileMenuPlugin, ProfileNavigationItem } from \"../core/plugins.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"../ui/DropdownMenu.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport { Banner } from \"./Banner.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { MobileTopNavigation } from \"./MobileTopNavigation.js\";\nimport { Search } from \"./Search.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { ThemeSwitch } from \"./ThemeSwitch.js\";\nimport { TopNavigation } from \"./TopNavigation.js\";\n\nconst RecursiveMenu = ({ item }: { item: ProfileNavigationItem }) => {\n return item.children ? (\n <DropdownMenuSub key={item.label}>\n <DropdownMenuSubTrigger>{item.label}</DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent>\n {item.children.map((item, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <RecursiveMenu key={i} item={item} />\n ))}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n ) : (\n <Link to={item.path ?? \"\"}>\n <DropdownMenuItem key={item.label} className=\"flex gap-2\">\n {item.icon && (\n <item.icon size={16} strokeWidth={1} absoluteStrokeWidth />\n )}\n {item.label}\n </DropdownMenuItem>\n </Link>\n );\n};\n\nexport const Header = memo(function HeaderInner() {\n const auth = useAuth();\n const { isAuthenticated, profile, isAuthEnabled } = useAuth();\n const context = useZudoku();\n const { page, plugins } = context;\n\n const accountItems = plugins\n .filter((p) => isProfileMenuPlugin(p))\n .flatMap((p) => p.getProfileMenuItems(context))\n .sort((i) => i.weight ?? 0);\n\n return (\n <header className=\"sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full\">\n <Banner />\n <div className=\"max-w-screen-2xl mx-auto\">\n <div className=\"grid grid-cols-[1fr_auto] lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-4 lg:px-12 h-[--top-header-height]\">\n <div className=\"flex\">\n <Link to=\"/\">\n <div className=\"flex items-center gap-3.5\">\n {page?.logo && (\n <>\n <img\n src={\n /https?:\\/\\//.test(page.logo.src.light)\n ? page.logo.src.light\n : joinPath(\n import.meta.env.BASE_URL,\n page.logo.src.light,\n )\n }\n alt={page.logo.alt ?? page.pageTitle}\n style={{ width: page.logo.width }}\n className=\"h-10 dark:hidden\"\n loading=\"lazy\"\n />\n <img\n src={\n /https?:\\/\\//.test(page.logo.src.dark)\n ? page.logo.src.dark\n : joinPath(\n import.meta.env.BASE_URL,\n page.logo.src.dark,\n )\n }\n alt={page.logo.alt ?? page.pageTitle}\n style={{ width: page.logo.width }}\n className=\"h-10 hidden dark:block\"\n loading=\"lazy\"\n />\n </>\n )}\n <span className=\"font-bold text-2xl text-foreground/85 tracking-wide\">\n {page?.pageTitle}\n </span>\n </div>\n </Link>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-[--sidecar-grid-cols] items-center gap-8\">\n <div className=\"w-full justify-center hidden lg:flex\">\n <Search />\n </div>\n\n <MobileTopNavigation />\n <div className=\"hidden lg:flex items-center justify-self-end text-sm gap-2\">\n <Slotlet name=\"head-navigation-start\" />\n {isAuthEnabled && (\n <ClientOnly\n fallback={<Skeleton className=\"rounded h-5 w-24 mr-4\" />}\n >\n {!isAuthenticated ? (\n <Button variant=\"ghost\" onClick={() => auth.login()}>\n Login\n </Button>\n ) : (\n Object.values(accountItems).length > 0 && (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\">\n {profile?.name ? `${profile.name}` : \"My Account\"}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-56\">\n <DropdownMenuLabel>\n {profile?.name ? `${profile.name}` : \"My Account\"}\n {profile?.email && (\n <div className=\"font-normal text-muted-foreground\">\n {profile.email}\n </div>\n )}\n </DropdownMenuLabel>\n {accountItems.filter((i) => i.category === \"top\")\n .length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter((i) => i.category === \"top\")\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n {accountItems.filter(\n (i) => !i.category || i.category === \"middle\",\n ).length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter(\n (i) => !i.category || i.category === \"middle\",\n )\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n {accountItems.filter((i) => i.category === \"bottom\")\n .length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter((i) => i.category === \"bottom\")\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n )}\n </ClientOnly>\n )}\n <ThemeSwitch />\n <Slotlet name=\"head-navigation-end\" />\n </div>\n </div>\n </div>\n <Slotlet name=\"top-navigation-before\" />\n <TopNavigation />\n <Slotlet name=\"top-navigation-after\" />\n </div>\n </header>\n );\n});\n","import { forwardRef, type PropsWithChildren } from \"react\";\nimport { cn } from \"../../util/cn.js\";\n\nexport const SidebarWrapper = forwardRef<\n HTMLDivElement,\n PropsWithChildren<{ pushMainContent?: boolean; className?: string }>\n>(({ children, className, pushMainContent }, ref) => (\n <nav\n // this data attribute is used in `Layout.tsx` to determine if side navigation\n // is present for the current page so the main content is pushed to the right\n // it's also important to set `peer` class here.\n // maybe this could be simplified by adjusting the layout\n data-navigation={String(pushMainContent)}\n className={cn(\n \"scrollbar peer hidden lg:flex flex-col fixed text-sm overflow-y-auto shrink-0\",\n \"-mx-[--padding-nav-item] pb-20 mt-[--padding-content-top]\",\n \"w-[--side-nav-width] h-[calc(100%-var(--header-height))] scroll-pt-2 gap-2\",\n className,\n )}\n ref={ref}\n >\n {children}\n </nav>\n));\n\nSidebarWrapper.displayName = \"SidebarWrapper\";\n","import { useRef } from \"react\";\n\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { DrawerContent, DrawerTitle } from \"../../ui/Drawer.js\";\nimport { useCurrentNavigation } from \"../context/ZudokuContext.js\";\nimport { Slotlet } from \"../SlotletProvider.js\";\nimport { SidebarItem } from \"./SidebarItem.js\";\nimport { SidebarWrapper } from \"./SidebarWrapper.js\";\n\nexport const Sidebar = ({\n onRequestClose,\n}: {\n onRequestClose?: () => void;\n}) => {\n const navRef = useRef<HTMLDivElement | null>(null);\n const navigation = useCurrentNavigation();\n\n return (\n <>\n <SidebarWrapper\n ref={navRef}\n pushMainContent={navigation.sidebar.length > 0}\n >\n <Slotlet name=\"zudoku-before-navigation\" />\n {navigation.sidebar.map((item) => (\n <SidebarItem key={item.label} item={item} />\n ))}\n <Slotlet name=\"zudoku-after-navigation\" />\n </SidebarWrapper>\n <DrawerContent\n className=\"lg:hidden h-[100dvh] left-0 w-[320px] rounded-none\"\n aria-describedby={undefined}\n >\n <div className=\"p-4 overflow-y-auto overscroll-none\">\n <VisuallyHidden>\n <DrawerTitle>Sidebar</DrawerTitle>\n </VisuallyHidden>\n {navigation.sidebar.map((item) => (\n <SidebarItem\n key={item.label}\n item={item}\n onRequestClose={onRequestClose}\n />\n ))}\n </div>\n </DrawerContent>\n </>\n );\n};\n","import { Helmet } from \"@zudoku/react-helmet-async\";\nimport { PanelLeftIcon } from \"lucide-react\";\nimport { Suspense, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { Outlet, useLocation, useNavigation } from \"react-router\";\nimport { useSpinDelay } from \"spin-delay\";\nimport { Drawer, DrawerTrigger } from \"../ui/Drawer.js\";\nimport { cn } from \"../util/cn.js\";\nimport { useScrollToAnchor } from \"../util/useScrollToAnchor.js\";\nimport { useScrollToTop } from \"../util/useScrollToTop.js\";\nimport { useViewportAnchor } from \"./context/ViewportAnchorContext.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Header } from \"./Header.js\";\nimport { Sidebar } from \"./navigation/Sidebar.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { Spinner } from \"./Spinner.js\";\n\nconst LoadingFallback = () => (\n <main className=\"grid h-[calc(100vh-var(--header-height))] place-items-center\">\n <Spinner />\n </main>\n);\n\nexport const Layout = ({ children }: { children?: ReactNode }) => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n const { meta, authentication } = useZudoku();\n\n useScrollToAnchor();\n useScrollToTop();\n\n const previousLocationPath = useRef(location.pathname);\n\n useEffect(() => {\n // Initialize the authentication plugin\n authentication?.onPageLoad?.();\n }, [authentication]);\n\n useEffect(() => {\n // always reset on location change\n if (location.pathname !== previousLocationPath.current) {\n setActiveAnchor(\"\");\n }\n previousLocationPath.current = location.pathname;\n }, [location.pathname, setActiveAnchor]);\n\n // Page transition is happening: https://reactrouter.com/start/framework/pending-ui#global-pending-navigation\n const isNavigating = Boolean(useNavigation().location);\n const showSpinner = useSpinDelay(isNavigating, {\n delay: 300,\n minDuration: 500,\n });\n const [isDrawerOpen, setDrawerOpen] = useState(false);\n\n return (\n <>\n {import.meta.env.MODE === \"standalone\" && (\n <style>{`:root { --top-nav-height: 0px; }`}</style>\n )}\n <Helmet titleTemplate={meta?.title}>\n {meta?.description && (\n <meta name=\"description\" content={meta.description} />\n )}\n {meta?.favicon && <link rel=\"icon\" href={meta.favicon} />}\n </Helmet>\n <Slotlet name=\"layout-before-head\" />\n <Header />\n <Slotlet name=\"layout-after-head\" />\n\n <div className=\"w-full max-w-screen-2xl mx-auto px-4 lg:px-12\">\n {showSpinner ? (\n <LoadingFallback />\n ) : (\n <Suspense fallback={<LoadingFallback />}>\n <Drawer\n direction=\"left\"\n open={isDrawerOpen}\n onOpenChange={(open) => setDrawerOpen(open)}\n >\n <Sidebar onRequestClose={() => setDrawerOpen(false)} />\n <div\n className={cn(\n \"lg:hidden -mx-10 px-10 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 left-0 right-0 border-b\",\n \"peer-data-[navigation=false]:hidden\",\n )}\n >\n <DrawerTrigger className=\"flex items-center gap-2\">\n <PanelLeftIcon size={16} strokeWidth={1.5} />\n <span className=\"text-sm\">Menu</span>\n </DrawerTrigger>\n </div>\n <main\n className={cn(\n \"h-full dark:border-white/10 translate-x-0\",\n \"lg:overflow-visible\",\n // This works in tandem with the `SidebarWrapper` component\n \"lg:peer-data-[navigation=true]:w-[calc(100%-var(--side-nav-width))]\",\n \"lg:peer-data-[navigation=true]:translate-x-[--side-nav-width] lg:peer-data-[navigation=true]:pl-12\",\n )}\n >\n <Slotlet name=\"zudoku-before-content\" />\n {children ?? <Outlet />}\n <Slotlet name=\"zudoku-after-content\" />\n </main>\n </Drawer>\n </Suspense>\n )}\n </div>\n </>\n );\n};\n","'use client';\nimport { createContext, Component, createElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback !== undefined) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n","import { ReactNode } from \"react\";\nimport { TopNavigationItem } from \"../../config/validators/common.js\";\nimport type { SidebarConfig } from \"../../config/validators/SidebarSchema.js\";\nimport { type AuthenticationProvider } from \"../authentication/authentication.js\";\nimport type { ComponentsContextType } from \"../components/context/ComponentsContext.js\";\nimport { Slotlets } from \"../components/SlotletProvider.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport type { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport {\n isApiIdentityPlugin,\n isNavigationPlugin,\n type NavigationPlugin,\n needsInitialization,\n type ZudokuPlugin,\n} from \"./plugins.js\";\n\nexport interface ApiIdentity {\n authorizeRequest: (request: Request) => Request;\n label: string;\n id: string;\n}\n\nexport type ApiKeyCache = \"api-keys\";\n\ntype Metadata = Partial<{\n title: string;\n description: string;\n logo: string;\n favicon: string;\n generator: string;\n applicationName: string;\n referrer: string;\n keywords: string[];\n authors: string[];\n creator: string;\n publisher: string;\n}>;\n\ntype Page = Partial<{\n pageTitle?: string;\n logo?: {\n src: {\n light: string;\n dark: string;\n };\n width?: string;\n alt?: string;\n };\n banner?: {\n message: ReactNode;\n color?: \"note\" | \"tip\" | \"info\" | \"caution\" | \"danger\" | (string & {});\n dismissible?: boolean;\n };\n}>;\n\nexport type ZudokuContextOptions = {\n metadata?: Metadata;\n page?: Page;\n authentication?: AuthenticationProvider;\n topNavigation?: TopNavigationItem[];\n sidebars?: SidebarConfig;\n plugins?: ZudokuPlugin[];\n slotlets?: Slotlets;\n mdx?: {\n components?: MdxComponentsType;\n };\n overrides?: ComponentsContextType;\n};\n\nexport class ZudokuContext {\n public plugins: NonNullable<ZudokuContextOptions[\"plugins\"]>;\n public sidebars: SidebarConfig;\n public topNavigation: NonNullable<ZudokuContextOptions[\"topNavigation\"]>;\n public meta: ZudokuContextOptions[\"metadata\"];\n public page: ZudokuContextOptions[\"page\"];\n public authentication?: ZudokuContextOptions[\"authentication\"];\n private navigationPlugins: NavigationPlugin[];\n\n constructor(config: ZudokuContextOptions) {\n this.plugins = config.plugins ?? [];\n this.topNavigation = config.topNavigation ?? [];\n this.sidebars = config.sidebars ?? {};\n this.navigationPlugins = this.plugins.filter(isNavigationPlugin);\n this.authentication = config.authentication;\n this.meta = config.metadata;\n this.page = config.page;\n }\n\n initialize = async (): Promise<void> => {\n await Promise.all(\n this.plugins\n .filter(needsInitialization)\n .map((plugin) => plugin.initialize?.(this)),\n );\n };\n\n getApiIdentities = async () => {\n const keys = await Promise.all(\n this.plugins\n .filter(isApiIdentityPlugin)\n .map((plugin) => plugin.getIdentities(this)),\n );\n\n return keys.flat();\n };\n\n getPluginSidebar = async (path: string) => {\n const navigations = await Promise.all(\n this.navigationPlugins.map((plugin) =>\n plugin.getSidebar?.(joinPath(path)),\n ),\n );\n\n return navigations.flatMap((nav) => nav ?? []);\n };\n\n signRequest = async (request: Request) => {\n if (!this.authentication) {\n throw new Error(\"No authentication provider configured\");\n }\n\n const accessToken = await this.authentication.getAccessToken();\n\n request.headers.set(\"Authorization\", `Bearer ${accessToken}`);\n\n return request;\n };\n}\n","import { FallbackProps } from \"react-error-boundary\";\nimport { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function TopLevelError({ error, resetErrorBoundary }: FallbackProps) {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return <ErrorAlert error={error} />;\n}\n","const root = globalThis;\n\nif (!root.requestIdleCallback || !root.cancelIdleCallback) {\n root.requestIdleCallback = (cb: IdleRequestCallback) => setTimeout(cb, 1);\n root.cancelIdleCallback = clearTimeout;\n}\n","import {\n createContext,\n useContext,\n type ComponentProps,\n type ComponentType,\n} from \"react\";\nimport { Header } from \"../Header.js\";\n\nexport const DEFAULT_COMPONENTS = {\n Header,\n};\n\nexport type ComponentsContextType = {\n Header?: ComponentType<ComponentProps<typeof Header>>;\n};\n\nconst ComponentsContext =\n createContext<Required<ComponentsContextType>>(DEFAULT_COMPONENTS);\n\nexport const ComponentsProvider = ComponentsContext.Provider;\n\nexport const useComponents = () => {\n return useContext(ComponentsContext);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport type { PropsWithChildren } from \"react\";\nimport { ZudokuContext } from \"../../core/ZudokuContext.js\";\nimport { ZudokuReactContext } from \"./ZudokuContext.js\";\n\nexport const ZudokuProvider = ({\n children,\n context,\n}: PropsWithChildren<{ context: ZudokuContext }>) => {\n useSuspenseQuery({\n queryFn: async () => {\n await context.initialize();\n return true;\n },\n queryKey: [\"zudoku-initialize\"],\n });\n\n return (\n <ZudokuReactContext.Provider value={context}>\n {children}\n </ZudokuReactContext.Provider>\n );\n};\n","import { MDXProvider } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { ThemeProvider } from \"next-themes\";\nimport {\n Fragment,\n memo,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Outlet, useNavigation } from \"react-router\";\nimport { hasHead, isMdxProviderPlugin } from \"../core/plugins.js\";\nimport { ZudokuContext, ZudokuContextOptions } from \"../core/ZudokuContext.js\";\nimport { TopLevelError } from \"../errors/TopLevelError.js\";\nimport { StaggeredRenderContext } from \"../plugins/openapi/StaggeredRender.js\";\nimport { MdxComponents } from \"../util/MdxComponents.js\";\nimport \"../util/requestIdleCallbackPolyfill.js\";\nimport {\n ComponentsProvider,\n DEFAULT_COMPONENTS,\n} from \"./context/ComponentsContext.js\";\nimport { ViewportAnchorProvider } from \"./context/ViewportAnchorContext.js\";\nimport { ZudokuProvider } from \"./context/ZudokuProvider.js\";\nimport { SlotletProvider } from \"./SlotletProvider.js\";\n\nconst ZudokoInner = memo(\n ({ children, ...props }: PropsWithChildren<ZudokuContextOptions>) => {\n const components = useMemo(\n () => ({ ...DEFAULT_COMPONENTS, ...props.overrides }),\n [props.overrides],\n );\n\n const mdxComponents = useMemo(() => {\n const componentsFromPlugins = (props.plugins ?? [])\n .filter(isMdxProviderPlugin)\n .flatMap((plugin) =>\n plugin.getMdxComponents ? [plugin.getMdxComponents()] : [],\n );\n\n return {\n ...componentsFromPlugins.reduce(\n (acc, curr) => ({ ...acc, ...curr }),\n {},\n ),\n ...MdxComponents,\n ...props.mdx?.components,\n };\n }, [props.mdx?.components, props.plugins]);\n const { stagger } = useContext(StaggeredRenderContext);\n const [didNavigate, setDidNavigate] = useState(false);\n const staggeredValue = useMemo(\n () => (didNavigate ? { stagger: true } : { stagger }),\n [stagger, didNavigate],\n );\n const navigation = useNavigation();\n\n useEffect(() => {\n if (didNavigate) {\n return;\n }\n setDidNavigate(true);\n }, [didNavigate, navigation.location]);\n\n const [zudokuContext] = useState(() => new ZudokuContext(props));\n\n const heads = props.plugins\n ?.filter(hasHead)\n // eslint-disable-next-line react/no-array-index-key\n .map((plugin, i) => <Fragment key={i}>{plugin.getHead?.()}</Fragment>);\n\n return (\n <>\n <Helmet>{heads}</Helmet>\n <StaggeredRenderContext.Provider value={staggeredValue}>\n <ZudokuProvider context={zudokuContext}>\n <MDXProvider components={mdxComponents}>\n <ThemeProvider attribute=\"class\" disableTransitionOnChange>\n <ComponentsProvider value={components}>\n <SlotletProvider slotlets={props.slotlets}>\n <ViewportAnchorProvider>\n {children ?? <Outlet />}\n </ViewportAnchorProvider>\n </SlotletProvider>\n </ComponentsProvider>\n </ThemeProvider>\n </MDXProvider>\n </ZudokuProvider>\n </StaggeredRenderContext.Provider>\n </>\n );\n },\n);\n\nZudokoInner.displayName = \"ZudokoInner\";\n\nconst Zudoku = (props: ZudokuContextOptions) => {\n return (\n <ErrorBoundary FallbackComponent={TopLevelError}>\n <ZudokoInner {...props} />\n </ErrorBoundary>\n );\n};\nZudoku.displayName = \"Zudoku\";\n\nexport { Zudoku };\n","import { useMDXComponents as useMDXComponentsImport } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { Link as LinkImport } from \"react-router\";\nimport { useAuthState } from \"../authentication/state.js\";\nimport { RouterError as RouterErrorImport } from \"../errors/RouterError.js\";\nimport { ServerError as ServerErrorImport } from \"../errors/ServerError.js\";\nimport { Button as ButtonImport } from \"../ui/Button.js\";\nimport { Callout as CalloutImport } from \"../ui/Callout.js\";\nimport {\n Bootstrap as BootstrapImport,\n BootstrapStatic as BootstrapStaticImport,\n} from \"./Bootstrap.js\";\nimport { ClientOnly as ClientOnlyImport } from \"./ClientOnly.js\";\nimport { Layout as LayoutImport } from \"./Layout.js\";\nimport { Zudoku as ZudokuImport } from \"./Zudoku.js\";\nimport { useZudoku as useZudokuImport } from \"./context/ZudokuContext.js\";\nexport const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;\nexport const Layout = /*@__PURE__*/ LayoutImport;\nexport const RouterError = /*@__PURE__*/ RouterErrorImport;\nexport const ServerError = /*@__PURE__*/ ServerErrorImport;\nexport const Bootstrap = /*@__PURE__*/ BootstrapImport;\nexport const BootstrapStatic = /*@__PURE__*/ BootstrapStaticImport;\n\nexport const Head = /*@__PURE__*/ Helmet;\n\nexport const useZudoku = /*@__PURE__*/ useZudokuImport;\nexport const useAuth = /*@__PURE__*/ useAuthState;\nexport const Zudoku = /*@__PURE__*/ ZudokuImport;\n\nexport const Callout = /*@__PURE__*/ CalloutImport;\nexport const ClientOnly = /*@__PURE__*/ ClientOnlyImport;\nexport const Button = /*@__PURE__*/ ButtonImport;\nexport const Link: typeof LinkImport = /*@__PURE__*/ LinkImport;\n"],"names":["ServerError","error","jsx","ErrorAlert","QueryCache","_a","Subscribable","config","__privateAdd","_queries","__privateSet","client","options","state","queryKey","queryHash","hashQueryKeyByOptions","query","Query","__privateGet","queryInMap","notifyManager","filters","defaultedFilters","matchQuery","queries","event","listener","MutationCache","_mutations","_mutationId","mutation","Mutation","__privateWrapper","scope","scopeFor","mutations","x","firstPendingMutation","m","foundMutation","matchMutation","pausedMutations","noop","infiniteQueryBehavior","pages","context","direction","_c","_b","oldPages","_d","oldPageParams","_e","result","currentPage","fetchFn","cancelled","addSignalProperty","object","queryFn","ensureQueryFn","fetchPage","data","param","previous","queryFnContext","page","maxPages","addTo","addToStart","addToEnd","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","QueryClient","_queryCache","_mutationCache","_defaultOptions","_queryDefaults","_mutationDefaults","_mountCount","_unsubscribeFocus","_unsubscribeOnline","focusManager","focused","onlineManager","online","cachedData","defaultedOptions","resolveStaleTime","updater","prevData","functionalUpdate","queryCache","refetchFilters","cancelOptions","defaultedCancelOptions","promises","fetchOptions","promise","hashKey","defaults","queryDefault","partialMatchKey","mutationKey","skipToken","defaultTransformerFn","hydrate","dehydratedState","mutationCache","deserializeData","mutationOptions","meta","_ignored","serializedState","initialPromise","HydrationBoundary","children","queryClient","useQueryClient","hydrationQueue","setHydrationQueue","React","optionsRef","newQueries","existingQueries","dehydratedQuery","existingQuery","hydrationIsNewer","queryAlreadyQueued","prev","RouterProvider2","props","RouterProvider","ReactDOM","Bootstrap","router","StrictMode","QueryClientProvider","HelmetProvider","StaggeredRenderContext","BootstrapStatic","helmetContext","StaticRouterProvider","global","factory","exports","require$$0","this","react","defaultOptions","useIsSSR","isSSR","setIsSSR","useSpinDelay","loading","initialState","setState","timeout","delay","ColorMap","SidebarBadge","color","label","className","cn","SidebarCategory","category","onRequestClose","isCategoryOpen","useIsCategoryOpen","hasInteracted","setHasInteracted","useState","isCollapsible","isCollapsed","isDefaultOpen","open","setOpen","isActive","useMatch","useEffect","ToggleButton","e","ChevronRightIcon","jsxs","Collapsible","navigationListItem","NavLink","joinPath","item","SidebarItem","cva","DATA_ANCHOR_ATTR","activeAnchor","useViewportAnchor","searchParams","useSearchParams","Fragment","AnchorLink","ExternalLinkIcon","scrollIntoViewIfNeeded","element","rect","useScrollToAnchor","location","useLocation","setActiveAnchor","hash","scrollToElement","link","observer","_","obs","useScrollToTop","previousPath","useRef","Skeleton","isProfileMenuPlugin","obj","isNavigationPlugin","isSearchPlugin","needsInitialization","hasHead","isMdxProviderPlugin","isApiIdentityPlugin","COLOR_MAP","Banner","useZudoku","isBannerOpen","setIsBannerOpen","mappedColor","style","CircleXIcon","Search","ctx","isOpen","setIsOpen","onClose","useCallback","onKeyDown","searchPlugin","SearchIcon","Suspense","ThemeSwitch","resolvedTheme","setTheme","useTheme","ThemeIcon","MoonStarIcon","SunIcon","ClientOnly","Button","isHiddenItem","isAuthenticated","TopNavigation","topNavigation","useAuth","TopNavItem","id","defaultLink","sidebars","currentSidebar","currentNav","useCurrentNavigation","isNavigating","useNavigation","first","traverseSidebar","ZudokuError","isPending","cx","MobileTopNavigation","drawerOpen","setDrawerOpen","Drawer","DrawerTrigger","MenuIcon","DrawerContent","VisuallyHidden","DrawerTitle","RecursiveMenu","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuPortal","DropdownMenuSubContent","i","Link","DropdownMenuItem","Header","memo","auth","profile","isAuthEnabled","plugins","accountItems","p","Slotlet","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","SidebarWrapper","forwardRef","pushMainContent","ref","Sidebar","navRef","navigation","LoadingFallback","Spinner","Layout","authentication","previousLocationPath","showSpinner","isDrawerOpen","Helmet","PanelLeftIcon","Outlet","ErrorBoundaryContext","createContext","ErrorBoundary","Component","_this$props$onReset","_this$props","_len","args","_key","info","_this$props$onError","_this$props2","prevProps","prevState","didCatch","resetKeys","hasArrayChanged","_this$props$onReset2","_this$props3","fallbackRender","FallbackComponent","fallback","childToRender","createElement","a","b","index","ZudokuContext","__publicField","plugin","path","nav","request","accessToken","TopLevelError","resetErrorBoundary","root","cb","DEFAULT_COMPONENTS","ComponentsContext","ComponentsProvider","ZudokuProvider","useSuspenseQuery","ZudokuReactContext","ZudokoInner","components","useMemo","mdxComponents","acc","curr","MdxComponents","stagger","useContext","didNavigate","setDidNavigate","staggeredValue","zudokuContext","heads","MDXProvider","ThemeProvider","SlotletProvider","ViewportAnchorProvider","Zudoku","useMDXComponents","useMDXComponentsImport","LayoutImport","RouterError","RouterErrorImport","ServerErrorImport","BootstrapImport","BootstrapStaticImport","Head","useZudokuImport","useAuthState","ZudokuImport","Callout","CalloutImport","ClientOnlyImport","ButtonImport","LinkImport"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,9,26]}