zudoku 0.57.0 → 0.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. package/cli.js +1 -0
  2. package/dist/app/ZuploBuildConfig.d.ts +1 -1
  3. package/dist/app/ZuploBuildConfig.js +1 -1
  4. package/dist/app/ZuploBuildConfig.js.map +1 -1
  5. package/dist/app/entry.client.js +5 -4
  6. package/dist/app/entry.client.js.map +1 -1
  7. package/dist/app/entry.server.js +2 -2
  8. package/dist/app/entry.server.js.map +1 -1
  9. package/dist/app/env.js +6 -6
  10. package/dist/app/env.js.map +1 -1
  11. package/dist/app/main.js.map +1 -1
  12. package/dist/app/standalone.js +4 -1
  13. package/dist/app/standalone.js.map +1 -1
  14. package/dist/cli/cli.js +2 -1
  15. package/dist/cli/cli.js.map +1 -1
  16. package/dist/cli/cmds/build.d.ts +1 -1
  17. package/dist/cli/cmds/dev.d.ts +1 -1
  18. package/dist/cli/cmds/preview.d.ts +1 -1
  19. package/dist/cli/common/analytics/lib.js +1 -1
  20. package/dist/cli/common/analytics/lib.js.map +1 -1
  21. package/dist/cli/common/logger.js +0 -1
  22. package/dist/cli/common/logger.js.map +1 -1
  23. package/dist/cli/common/machine-id/lib.js +3 -2
  24. package/dist/cli/common/machine-id/lib.js.map +1 -1
  25. package/dist/cli/common/outdated.js +2 -1
  26. package/dist/cli/common/outdated.js.map +1 -1
  27. package/dist/cli/common/output.js +2 -3
  28. package/dist/cli/common/output.js.map +1 -1
  29. package/dist/cli/common/utils/box.js +2 -2
  30. package/dist/cli/common/utils/box.js.map +1 -1
  31. package/dist/cli/common/validators/lib.js +1 -1
  32. package/dist/cli/common/validators/lib.js.map +1 -1
  33. package/dist/cli/dev/handler.js +0 -4
  34. package/dist/cli/dev/handler.js.map +1 -1
  35. package/dist/codegen.js +2 -2
  36. package/dist/codegen.js.map +1 -1
  37. package/dist/config/loader.js.map +1 -1
  38. package/dist/config/validators/BuildSchema.d.ts +1 -1
  39. package/dist/config/validators/BuildSchema.js +3 -3
  40. package/dist/config/validators/BuildSchema.js.map +1 -1
  41. package/dist/config/validators/InputNavigationSchema.d.ts +7 -1
  42. package/dist/config/validators/InputNavigationSchema.js +4 -2
  43. package/dist/config/validators/InputNavigationSchema.js.map +1 -1
  44. package/dist/config/validators/InputNavigationSchema.test-d.js +2 -1
  45. package/dist/config/validators/InputNavigationSchema.test-d.js.map +1 -1
  46. package/dist/config/validators/NavigationSchema.d.ts +1 -1
  47. package/dist/config/validators/NavigationSchema.js +2 -2
  48. package/dist/config/validators/NavigationSchema.js.map +1 -1
  49. package/dist/config/validators/ProtectedRoutesSchema.d.ts +1 -1
  50. package/dist/config/validators/ProtectedRoutesSchema.js +1 -1
  51. package/dist/config/validators/ProtectedRoutesSchema.js.map +1 -1
  52. package/dist/config/validators/auth.d.ts +2 -2
  53. package/dist/config/validators/auth.js +1 -1
  54. package/dist/config/validators/auth.js.map +1 -1
  55. package/dist/config/validators/validate.d.ts +1 -1
  56. package/dist/config/validators/validate.js +3 -3
  57. package/dist/config/validators/validate.js.map +1 -1
  58. package/dist/config/validators/validate.test.js +1 -2
  59. package/dist/config/validators/validate.test.js.map +1 -1
  60. package/dist/flat-config.d.ts +2 -0
  61. package/dist/index.d.ts +5 -5
  62. package/dist/index.js +2 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/lib/MissingIcon.d.ts +1 -1
  65. package/dist/lib/MissingIcon.js.map +1 -1
  66. package/dist/lib/auth/issuer.test.js +1 -0
  67. package/dist/lib/auth/issuer.test.js.map +1 -1
  68. package/dist/lib/authentication/AuthenticationPlugin.d.ts +1 -1
  69. package/dist/lib/authentication/authentication.d.ts +1 -3
  70. package/dist/lib/authentication/components/OAuthErrorPage.d.ts +1 -1
  71. package/dist/lib/authentication/components/OAuthErrorPage.js.map +1 -1
  72. package/dist/lib/authentication/components/SignOut.js +1 -1
  73. package/dist/lib/authentication/components/SignOut.js.map +1 -1
  74. package/dist/lib/authentication/providers/auth0.d.ts +2 -2
  75. package/dist/lib/authentication/providers/auth0.js +1 -1
  76. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  77. package/dist/lib/authentication/providers/azureb2c.d.ts +2 -2
  78. package/dist/lib/authentication/providers/azureb2c.js.map +1 -1
  79. package/dist/lib/authentication/providers/clerk.d.ts +2 -2
  80. package/dist/lib/authentication/providers/openid.d.ts +2 -2
  81. package/dist/lib/authentication/providers/openid.js.map +1 -1
  82. package/dist/lib/authentication/providers/supabase.d.ts +2 -2
  83. package/dist/lib/authentication/providers/supabase.js +1 -0
  84. package/dist/lib/authentication/providers/supabase.js.map +1 -1
  85. package/dist/lib/authentication/use-broadcast/shared.d.ts +1 -1
  86. package/dist/lib/authentication/use-broadcast/shared.js +3 -3
  87. package/dist/lib/authentication/use-broadcast/shared.js.map +1 -1
  88. package/dist/lib/authentication/use-broadcast/useBroadcast.js +2 -2
  89. package/dist/lib/authentication/use-broadcast/useBroadcast.js.map +1 -1
  90. package/dist/lib/components/Autocomplete.js.map +1 -1
  91. package/dist/lib/components/Bootstrap.js.map +1 -1
  92. package/dist/lib/components/BuildCheck.js +2 -1
  93. package/dist/lib/components/BuildCheck.js.map +1 -1
  94. package/dist/lib/components/Header.js +1 -3
  95. package/dist/lib/components/Header.js.map +1 -1
  96. package/dist/lib/components/Heading.d.ts +1 -1
  97. package/dist/lib/components/Heading.js +1 -1
  98. package/dist/lib/components/Heading.js.map +1 -1
  99. package/dist/lib/components/Layout.js.map +1 -1
  100. package/dist/lib/components/Markdown.js +2 -2
  101. package/dist/lib/components/Markdown.js.map +1 -1
  102. package/dist/lib/components/MobileTopNavigation.js +4 -4
  103. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  104. package/dist/lib/components/PathRenderer.js +1 -1
  105. package/dist/lib/components/PathRenderer.js.map +1 -1
  106. package/dist/lib/components/Search.js +1 -1
  107. package/dist/lib/components/Search.js.map +1 -1
  108. package/dist/lib/components/Slot.js.map +1 -1
  109. package/dist/lib/components/Slot.test.js +7 -3
  110. package/dist/lib/components/Slot.test.js.map +1 -1
  111. package/dist/lib/components/TopNavigation.d.ts +1 -1
  112. package/dist/lib/components/TopNavigation.js +2 -2
  113. package/dist/lib/components/TopNavigation.js.map +1 -1
  114. package/dist/lib/components/Zudoku.js +2 -2
  115. package/dist/lib/components/Zudoku.js.map +1 -1
  116. package/dist/lib/components/context/ComponentsContext.js.map +1 -1
  117. package/dist/lib/components/context/RouterEventsEmitter.js.map +1 -1
  118. package/dist/lib/components/context/SlotProvider.js.map +1 -1
  119. package/dist/lib/components/context/ViewportAnchorContext.js +1 -1
  120. package/dist/lib/components/context/ViewportAnchorContext.js.map +1 -1
  121. package/dist/lib/components/context/ZudokuContext.d.ts +1 -1
  122. package/dist/lib/components/context/ZudokuProvider.d.ts +1 -1
  123. package/dist/lib/components/index.js +1 -1
  124. package/dist/lib/components/index.js.map +1 -1
  125. package/dist/lib/components/navigation/NavigationCategory.js +6 -1
  126. package/dist/lib/components/navigation/NavigationCategory.js.map +1 -1
  127. package/dist/lib/components/navigation/NavigationItem.js +2 -2
  128. package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
  129. package/dist/lib/components/navigation/NavigationWrapper.js.map +1 -1
  130. package/dist/lib/components/navigation/Toc.js.map +1 -1
  131. package/dist/lib/components/navigation/ZudokuLogo.d.ts +1 -1
  132. package/dist/lib/components/navigation/utils.d.ts +3 -3
  133. package/dist/lib/components/navigation/utils.js +1 -2
  134. package/dist/lib/components/navigation/utils.js.map +1 -1
  135. package/dist/lib/core/ZudokuContext.d.ts +1 -1
  136. package/dist/lib/core/ZudokuContext.js +1 -0
  137. package/dist/lib/core/ZudokuContext.js.map +1 -1
  138. package/dist/lib/errors/ErrorAlert.js +0 -1
  139. package/dist/lib/errors/ErrorAlert.js.map +1 -1
  140. package/dist/lib/errors/TopLevelError.d.ts +2 -2
  141. package/dist/lib/errors/TopLevelError.js +1 -2
  142. package/dist/lib/errors/TopLevelError.js.map +1 -1
  143. package/dist/lib/oas/graphql/circular.js +2 -2
  144. package/dist/lib/oas/graphql/circular.js.map +1 -1
  145. package/dist/lib/oas/graphql/index.js +2 -1
  146. package/dist/lib/oas/graphql/index.js.map +1 -1
  147. package/dist/lib/oas/parser/dereference/index.js +2 -1
  148. package/dist/lib/oas/parser/dereference/index.js.map +1 -1
  149. package/dist/lib/oas/parser/dereference/resolveRef.js +3 -3
  150. package/dist/lib/oas/parser/dereference/resolveRef.js.map +1 -1
  151. package/dist/lib/oas/parser/index.js +1 -1
  152. package/dist/lib/oas/parser/index.js.map +1 -1
  153. package/dist/lib/oas/parser/upgrade/index.js +2 -1
  154. package/dist/lib/oas/parser/upgrade/index.js.map +1 -1
  155. package/dist/lib/plugins/api-keys/CreateApiKey.d.ts +1 -1
  156. package/dist/lib/plugins/api-keys/SettingsApiKeys.d.ts +1 -1
  157. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +5 -6
  158. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  159. package/dist/lib/plugins/api-keys/index.d.ts +3 -3
  160. package/dist/lib/plugins/api-keys/index.js +1 -1
  161. package/dist/lib/plugins/api-keys/index.js.map +1 -1
  162. package/dist/lib/plugins/custom-pages/index.d.ts +1 -1
  163. package/dist/lib/plugins/markdown/MdxPage.d.ts +1 -1
  164. package/dist/lib/plugins/markdown/MdxPage.js +3 -3
  165. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  166. package/dist/lib/plugins/markdown/index.d.ts +1 -1
  167. package/dist/lib/plugins/openapi/ColorizedParam.js +4 -1
  168. package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
  169. package/dist/lib/plugins/openapi/Endpoint.js +2 -2
  170. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
  171. package/dist/lib/plugins/openapi/OasProvider.d.ts +1 -1
  172. package/dist/lib/plugins/openapi/OasProvider.js +1 -0
  173. package/dist/lib/plugins/openapi/OasProvider.js.map +1 -1
  174. package/dist/lib/plugins/openapi/OperationList.d.ts +1 -1
  175. package/dist/lib/plugins/openapi/OperationList.js +8 -4
  176. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  177. package/dist/lib/plugins/openapi/OperationListItem.d.ts +1 -1
  178. package/dist/lib/plugins/openapi/OperationListItem.js +6 -4
  179. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  180. package/dist/lib/plugins/openapi/ParamInfos.d.ts +1 -1
  181. package/dist/lib/plugins/openapi/ParamInfos.js +3 -1
  182. package/dist/lib/plugins/openapi/ParamInfos.js.map +1 -1
  183. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  184. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  185. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.d.ts +1 -1
  186. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +2 -2
  187. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  188. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  189. package/dist/lib/plugins/openapi/Sidecar.js +4 -2
  190. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  191. package/dist/lib/plugins/openapi/StaggeredRender.d.ts +1 -1
  192. package/dist/lib/plugins/openapi/client/GraphQLContext.d.ts +1 -1
  193. package/dist/lib/plugins/openapi/client/createServer.js +1 -2
  194. package/dist/lib/plugins/openapi/client/createServer.js.map +1 -1
  195. package/dist/lib/plugins/openapi/client/useCreateQuery.js.map +1 -1
  196. package/dist/lib/plugins/openapi/context.d.ts +1 -1
  197. package/dist/lib/plugins/openapi/graphql/fragment-masking.js.map +1 -1
  198. package/dist/lib/plugins/openapi/graphql/gql.js +0 -1
  199. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  200. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  201. package/dist/lib/plugins/openapi/index.d.ts +2 -2
  202. package/dist/lib/plugins/openapi/index.js +2 -1
  203. package/dist/lib/plugins/openapi/index.js.map +1 -1
  204. package/dist/lib/plugins/openapi/interfaces.d.ts +3 -3
  205. package/dist/lib/plugins/openapi/playground/BodyPanel.d.ts +1 -1
  206. package/dist/lib/plugins/openapi/playground/Headers.d.ts +1 -1
  207. package/dist/lib/plugins/openapi/playground/IdentityDialog.d.ts +1 -1
  208. package/dist/lib/plugins/openapi/playground/IdentitySelector.d.ts +1 -1
  209. package/dist/lib/plugins/openapi/playground/Playground.d.ts +1 -1
  210. package/dist/lib/plugins/openapi/playground/Playground.js +1 -1
  211. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  212. package/dist/lib/plugins/openapi/playground/QueryParams.d.ts +1 -1
  213. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js +3 -1
  214. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js.map +1 -1
  215. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +2 -2
  216. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.d.ts +1 -1
  217. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.js +1 -1
  218. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.js.map +1 -1
  219. package/dist/lib/plugins/openapi/processors/removeExtensions.test.js +1 -0
  220. package/dist/lib/plugins/openapi/processors/removeExtensions.test.js.map +1 -1
  221. package/dist/lib/plugins/openapi/processors/removeParameters.test.js +1 -0
  222. package/dist/lib/plugins/openapi/processors/removeParameters.test.js.map +1 -1
  223. package/dist/lib/plugins/openapi/processors/traverse.d.ts +1 -1
  224. package/dist/lib/plugins/openapi/processors/traverse.js.map +1 -1
  225. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.js +1 -1
  226. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.js.map +1 -1
  227. package/dist/lib/plugins/openapi/util/createHttpSnippet.d.ts +1 -1
  228. package/dist/lib/plugins/openapi/util/createHttpSnippet.js +1 -1
  229. package/dist/lib/plugins/openapi/util/createHttpSnippet.js.map +1 -1
  230. package/dist/lib/plugins/openapi/util/createNavigationCategory.js +1 -0
  231. package/dist/lib/plugins/openapi/util/createNavigationCategory.js.map +1 -1
  232. package/dist/lib/plugins/openapi/util/generateSchemaExample.d.ts +1 -1
  233. package/dist/lib/plugins/openapi/util/generateSchemaExample.js +1 -2
  234. package/dist/lib/plugins/openapi/util/generateSchemaExample.js.map +1 -1
  235. package/dist/lib/plugins/openapi/util/getRoutes.js +1 -1
  236. package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
  237. package/dist/lib/plugins/openapi/util/methodColorMap.d.ts +1 -1
  238. package/dist/lib/plugins/search-inkeep/index.js +1 -1
  239. package/dist/lib/plugins/search-inkeep/index.js.map +1 -1
  240. package/dist/lib/plugins/search-pagefind/PagefindSearch.js +1 -1
  241. package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
  242. package/dist/lib/plugins/search-pagefind/ResultList.d.ts +1 -1
  243. package/dist/lib/plugins/search-pagefind/ResultList.js +4 -1
  244. package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
  245. package/dist/lib/plugins/search-pagefind/get-results.js +0 -1
  246. package/dist/lib/plugins/search-pagefind/get-results.js.map +1 -1
  247. package/dist/lib/shiki.d.ts +2 -5
  248. package/dist/lib/shiki.js +3 -6
  249. package/dist/lib/shiki.js.map +1 -1
  250. package/dist/lib/ui/Breadcrumb.js +1 -1
  251. package/dist/lib/ui/Breadcrumb.js.map +1 -1
  252. package/dist/lib/ui/Carousel.js.map +1 -1
  253. package/dist/lib/ui/CodeBlock.js +1 -1
  254. package/dist/lib/ui/CodeBlock.js.map +1 -1
  255. package/dist/lib/ui/Command.d.ts +2 -2
  256. package/dist/lib/ui/Command.js +2 -6
  257. package/dist/lib/ui/Command.js.map +1 -1
  258. package/dist/lib/ui/Dialog.js +1 -1
  259. package/dist/lib/ui/Dialog.js.map +1 -1
  260. package/dist/lib/ui/Form.d.ts +2 -2
  261. package/dist/lib/ui/Pagination.d.ts +1 -1
  262. package/dist/lib/ui/Pagination.js +1 -1
  263. package/dist/lib/ui/Pagination.js.map +1 -1
  264. package/dist/lib/ui/ToggleGroup.d.ts +1 -1
  265. package/dist/lib/util/MdxComponents.d.ts +1 -1
  266. package/dist/lib/util/MdxComponents.js +4 -2
  267. package/dist/lib/util/MdxComponents.js.map +1 -1
  268. package/dist/lib/util/cn.js.map +1 -1
  269. package/dist/lib/util/createVariantComponent.d.ts +2 -2
  270. package/dist/lib/util/createVariantComponent.js.map +1 -1
  271. package/dist/lib/util/groupBy.js +1 -0
  272. package/dist/lib/util/groupBy.js.map +1 -1
  273. package/dist/lib/util/humanFileSize.js +1 -1
  274. package/dist/lib/util/humanFileSize.js.map +1 -1
  275. package/dist/lib/util/invariant.js +3 -1
  276. package/dist/lib/util/invariant.js.map +1 -1
  277. package/dist/lib/util/pastellize.js +2 -2
  278. package/dist/lib/util/pastellize.js.map +1 -1
  279. package/dist/lib/util/useIsomorphicLayoutEffect.js.map +1 -1
  280. package/dist/lib/util/useScrollToAnchor.js +2 -0
  281. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  282. package/dist/ts.js +3 -3
  283. package/dist/ts.js.map +1 -1
  284. package/dist/vite/api/SchemaManager.js +6 -6
  285. package/dist/vite/api/SchemaManager.js.map +1 -1
  286. package/dist/vite/api/schema-codegen.js +1 -2
  287. package/dist/vite/api/schema-codegen.js.map +1 -1
  288. package/dist/vite/api/schema-codegen.test.js +1 -1
  289. package/dist/vite/api/schema-codegen.test.js.map +1 -1
  290. package/dist/vite/build.js +1 -1
  291. package/dist/vite/build.js.map +1 -1
  292. package/dist/vite/dev-server.js +2 -2
  293. package/dist/vite/dev-server.js.map +1 -1
  294. package/dist/vite/error-handler.d.ts +2 -2
  295. package/dist/vite/error-handler.js.map +1 -1
  296. package/dist/vite/mdx/remark-inject-filepath.d.ts +3 -0
  297. package/dist/vite/mdx/remark-inject-filepath.js +6 -0
  298. package/dist/vite/mdx/remark-inject-filepath.js.map +1 -0
  299. package/dist/vite/mdx/remark-last-modified.js +0 -1
  300. package/dist/vite/mdx/remark-last-modified.js.map +1 -1
  301. package/dist/vite/mdx/remark-link-rewrite.d.ts +2 -0
  302. package/dist/vite/mdx/remark-link-rewrite.js +20 -0
  303. package/dist/vite/mdx/remark-link-rewrite.js.map +1 -0
  304. package/dist/vite/mdx/remark-normalize-image-url.d.ts +2 -0
  305. package/dist/vite/mdx/remark-normalize-image-url.js +12 -0
  306. package/dist/vite/mdx/remark-normalize-image-url.js.map +1 -0
  307. package/dist/vite/{remarkStaticGeneration.d.ts → mdx/remark-static-generation.d.ts} +2 -2
  308. package/dist/vite/{remarkStaticGeneration.js → mdx/remark-static-generation.js} +2 -2
  309. package/dist/vite/mdx/remark-static-generation.js.map +1 -0
  310. package/dist/vite/output.d.ts +1 -1
  311. package/dist/vite/output.js +1 -1
  312. package/dist/vite/output.js.map +1 -1
  313. package/dist/vite/plugin-api-keys.d.ts +1 -1
  314. package/dist/vite/plugin-api-keys.js +1 -1
  315. package/dist/vite/plugin-api-keys.js.map +1 -1
  316. package/dist/vite/plugin-api.js +4 -4
  317. package/dist/vite/plugin-api.js.map +1 -1
  318. package/dist/vite/plugin-auth.d.ts +1 -1
  319. package/dist/vite/plugin-auth.js +1 -1
  320. package/dist/vite/plugin-auth.js.map +1 -1
  321. package/dist/vite/plugin-component.d.ts +1 -1
  322. package/dist/vite/plugin-config-reload.d.ts +1 -1
  323. package/dist/vite/plugin-custom-pages.d.ts +1 -1
  324. package/dist/vite/plugin-custom-pages.js +1 -1
  325. package/dist/vite/plugin-custom-pages.js.map +1 -1
  326. package/dist/vite/plugin-docs.js +2 -2
  327. package/dist/vite/plugin-docs.js.map +1 -1
  328. package/dist/vite/plugin-frontmatter.js +1 -1
  329. package/dist/vite/plugin-frontmatter.js.map +1 -1
  330. package/dist/vite/plugin-mdx.d.ts +1 -1
  331. package/dist/vite/plugin-mdx.js +9 -25
  332. package/dist/vite/plugin-mdx.js.map +1 -1
  333. package/dist/vite/plugin-metadata.d.ts +1 -1
  334. package/dist/vite/plugin-navigation.d.ts +2 -2
  335. package/dist/vite/plugin-navigation.js +34 -35
  336. package/dist/vite/plugin-navigation.js.map +1 -1
  337. package/dist/vite/plugin-redirect.d.ts +1 -1
  338. package/dist/vite/plugin-redirect.js +1 -1
  339. package/dist/vite/plugin-redirect.js.map +1 -1
  340. package/dist/vite/plugin-search.d.ts +1 -1
  341. package/dist/vite/plugin-search.js +1 -1
  342. package/dist/vite/plugin-search.js.map +1 -1
  343. package/dist/vite/plugin-shiki-register.js +1 -1
  344. package/dist/vite/plugin-shiki-register.js.map +1 -1
  345. package/dist/vite/plugin-theme.js +6 -6
  346. package/dist/vite/plugin-theme.js.map +1 -1
  347. package/dist/vite/plugin-theme.test.js +2 -0
  348. package/dist/vite/plugin-theme.test.js.map +1 -1
  349. package/dist/vite/plugin.d.ts +1 -1
  350. package/dist/vite/plugin.js +2 -2
  351. package/dist/vite/plugin.js.map +1 -1
  352. package/dist/vite/prerender/FileWritingResponse.js +5 -3
  353. package/dist/vite/prerender/FileWritingResponse.js.map +1 -1
  354. package/dist/vite/prerender/InMemoryResponse.js +3 -1
  355. package/dist/vite/prerender/InMemoryResponse.js.map +1 -1
  356. package/dist/vite/prerender/prerender.js +1 -1
  357. package/dist/vite/prerender/prerender.js.map +1 -1
  358. package/dist/vite/prerender/worker.d.ts +1 -1
  359. package/dist/vite/prerender/worker.js.map +1 -1
  360. package/dist/vite/reporter.js +2 -2
  361. package/dist/vite/reporter.js.map +1 -1
  362. package/dist/vite/shadcn-registry.d.ts +8 -33
  363. package/dist/vite/sitemap.js +4 -4
  364. package/dist/vite/sitemap.js.map +1 -1
  365. package/dist/zuplo/enrich-with-zuplo.js +3 -3
  366. package/dist/zuplo/enrich-with-zuplo.js.map +1 -1
  367. package/dist/zuplo/policy-types.js +0 -1
  368. package/dist/zuplo/policy-types.js.map +1 -1
  369. package/dist/zuplo/with-zuplo.js +1 -1
  370. package/dist/zuplo/with-zuplo.js.map +1 -1
  371. package/lib/{CodeBlock-yJjjRwj-.js → CodeBlock-CX_J17Hf.js} +10 -10
  372. package/lib/CodeBlock-CX_J17Hf.js.map +1 -0
  373. package/lib/{Command-CDn17s8X.js → Command-CUSlH0gJ.js} +21 -27
  374. package/lib/Command-CUSlH0gJ.js.map +1 -0
  375. package/lib/{Dialog-BrIjMmUK.js → Dialog-BmgXWOaz.js} +2 -2
  376. package/lib/Dialog-BmgXWOaz.js.map +1 -0
  377. package/lib/{MdxPage-BmOQ5m5g.js → MdxPage-Dae--mnh.js} +12 -12
  378. package/lib/MdxPage-Dae--mnh.js.map +1 -0
  379. package/lib/{OAuthErrorPage-Jv3r8wnL.js → OAuthErrorPage-C2pwoHzm.js} +6 -6
  380. package/lib/OAuthErrorPage-C2pwoHzm.js.map +1 -0
  381. package/lib/{OasProvider-CA_lpILt.js → OasProvider-qKBA2fuv.js} +3 -2
  382. package/lib/OasProvider-qKBA2fuv.js.map +1 -0
  383. package/lib/{OperationList-C-TObVw6.js → OperationList-sDq65nbj.js} +302 -306
  384. package/lib/OperationList-sDq65nbj.js.map +1 -0
  385. package/lib/{Pagination-CBiRGddW.js → Pagination-CmDrHzPg.js} +2 -2
  386. package/lib/{Pagination-CBiRGddW.js.map → Pagination-CmDrHzPg.js.map} +1 -1
  387. package/lib/{RouteGuard-JLH6tCY8.js → RouteGuard-BIksrt_C.js} +4 -4
  388. package/lib/{RouteGuard-JLH6tCY8.js.map → RouteGuard-BIksrt_C.js.map} +1 -1
  389. package/lib/{RouterError-DcVonMP1.js → RouterError-BYHrbLtD.js} +2 -2
  390. package/lib/{RouterError-DcVonMP1.js.map → RouterError-BYHrbLtD.js.map} +1 -1
  391. package/lib/{SchemaList-BeYWvBC7.js → SchemaList-DdwSRBpd.js} +7 -7
  392. package/lib/{SchemaList-BeYWvBC7.js.map → SchemaList-DdwSRBpd.js.map} +1 -1
  393. package/lib/{SchemaView-CRcShewo.js → SchemaView-CA_Q_bvL.js} +65 -62
  394. package/lib/SchemaView-CA_Q_bvL.js.map +1 -0
  395. package/lib/{Select-C3efYI1n.js → Select-DWh0wSay.js} +3 -3
  396. package/lib/{Select-C3efYI1n.js.map → Select-DWh0wSay.js.map} +1 -1
  397. package/lib/{SignUp-CxBGHgba.js → SignUp-u6c0hFsC.js} +4 -4
  398. package/lib/SignUp-u6c0hFsC.js.map +1 -0
  399. package/lib/{Slot-DOtTvoyj.js → Slot-BbdqiRXo.js} +267 -239
  400. package/lib/{Slot-DOtTvoyj.js.map → Slot-BbdqiRXo.js.map} +1 -1
  401. package/lib/{SyntaxHighlight-GR0eix_L.js → SyntaxHighlight-CvzJ7DNa.js} +6 -9
  402. package/lib/{SyntaxHighlight-GR0eix_L.js.map → SyntaxHighlight-CvzJ7DNa.js.map} +1 -1
  403. package/lib/{Toc-BlcGIkXc.js → Toc-BAa-kpqN.js} +2 -2
  404. package/lib/{Toc-BlcGIkXc.js.map → Toc-BAa-kpqN.js.map} +1 -1
  405. package/lib/{ZudokuContext-BuJD7yIX.js → ZudokuContext-BR-lnR7O.js} +16 -17
  406. package/lib/{ZudokuContext-BuJD7yIX.js.map → ZudokuContext-BR-lnR7O.js.map} +1 -1
  407. package/lib/chunk-QMGIS6GS-DqecZ6nq.js.map +1 -1
  408. package/lib/{circular-CGTcsqA3.js → circular-vrOlHc7z.js} +2 -2
  409. package/lib/{circular-CGTcsqA3.js.map → circular-vrOlHc7z.js.map} +1 -1
  410. package/lib/cn-dYga0KKN.js.map +1 -1
  411. package/lib/{createServer-DjgpuLne.js → createServer-BFra0x-X.js} +12 -27
  412. package/lib/createServer-BFra0x-X.js.map +1 -0
  413. package/lib/{errors-CrI3s7mR.js → errors-B6u81sEb.js} +2 -2
  414. package/lib/errors-B6u81sEb.js.map +1 -0
  415. package/lib/{hook-bv3iuX7X.js → hook-B4Q30zMI.js} +2 -2
  416. package/lib/{hook-bv3iuX7X.js.map → hook-B4Q30zMI.js.map} +1 -1
  417. package/lib/{index-HarEI51d.js → index-CQGi1b3U.js} +2 -2
  418. package/lib/{index-HarEI51d.js.map → index-CQGi1b3U.js.map} +1 -1
  419. package/lib/{index-CvTWnHZF.js → index-D1QlkVH3.js} +55 -52
  420. package/lib/index-D1QlkVH3.js.map +1 -0
  421. package/lib/{index-DzO-Qh6S.js → index-z-rQiwfg.js} +143 -146
  422. package/lib/index-z-rQiwfg.js.map +1 -0
  423. package/lib/invariant-Bm-FVUQE.js.map +1 -1
  424. package/lib/{mutation-Dy_5up8v.js → mutation-CiMUdKRU.js} +2 -2
  425. package/lib/{mutation-Dy_5up8v.js.map → mutation-CiMUdKRU.js.map} +1 -1
  426. package/lib/ui/Breadcrumb.js +22 -21
  427. package/lib/ui/Breadcrumb.js.map +1 -1
  428. package/lib/ui/Carousel.js.map +1 -1
  429. package/lib/ui/CodeBlock.js +1 -1
  430. package/lib/ui/Command.js +20 -26
  431. package/lib/ui/Command.js.map +1 -1
  432. package/lib/ui/Dialog.js +1 -1
  433. package/lib/ui/Dialog.js.map +1 -1
  434. package/lib/ui/Form.js.map +1 -1
  435. package/lib/ui/Pagination.js +28 -29
  436. package/lib/ui/Pagination.js.map +1 -1
  437. package/lib/ui/SyntaxHighlight.js +3 -3
  438. package/lib/ui/ToggleGroup.js.map +1 -1
  439. package/lib/zudoku.__internal.js +824 -815
  440. package/lib/zudoku.__internal.js.map +1 -1
  441. package/lib/zudoku.auth-auth0.js +1 -1
  442. package/lib/zudoku.auth-auth0.js.map +1 -1
  443. package/lib/zudoku.auth-azureb2c.js +5 -5
  444. package/lib/zudoku.auth-azureb2c.js.map +1 -1
  445. package/lib/zudoku.auth-clerk.js +2 -2
  446. package/lib/zudoku.auth-clerk.js.map +1 -1
  447. package/lib/zudoku.auth-openid.js +5 -5
  448. package/lib/zudoku.auth-openid.js.map +1 -1
  449. package/lib/zudoku.auth-supabase.js +3 -2
  450. package/lib/zudoku.auth-supabase.js.map +1 -1
  451. package/lib/zudoku.components.js +4 -4
  452. package/lib/zudoku.hooks.js +3 -3
  453. package/lib/zudoku.icons.js.map +1 -1
  454. package/lib/zudoku.plugin-api-catalog.js +5 -5
  455. package/lib/zudoku.plugin-api-keys.js +40 -40
  456. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  457. package/lib/zudoku.plugin-custom-pages.js +1 -1
  458. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  459. package/lib/zudoku.plugin-markdown.js +1 -1
  460. package/lib/zudoku.plugin-markdown.js.map +1 -1
  461. package/lib/zudoku.plugin-openapi.js +3 -3
  462. package/lib/zudoku.plugin-search-inkeep.js.map +1 -1
  463. package/lib/zudoku.plugin-search-pagefind.js +6 -6
  464. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  465. package/package.json +7 -22
  466. package/src/app/ZuploBuildConfig.ts +1 -1
  467. package/src/app/entry.client.tsx +6 -5
  468. package/src/app/entry.server.tsx +3 -3
  469. package/src/app/env.ts +6 -6
  470. package/src/app/main.tsx +2 -2
  471. package/src/app/standalone.tsx +7 -2
  472. package/src/lib/MissingIcon.tsx +1 -1
  473. package/src/lib/auth/issuer.test.ts +1 -0
  474. package/src/lib/authentication/AuthenticationPlugin.tsx +4 -4
  475. package/src/lib/authentication/authentication.ts +3 -3
  476. package/src/lib/authentication/components/OAuthErrorPage.tsx +1 -1
  477. package/src/lib/authentication/components/SignOut.tsx +1 -1
  478. package/src/lib/authentication/providers/auth0.tsx +5 -5
  479. package/src/lib/authentication/providers/azureb2c.tsx +5 -5
  480. package/src/lib/authentication/providers/clerk.tsx +5 -5
  481. package/src/lib/authentication/providers/openid.tsx +6 -6
  482. package/src/lib/authentication/providers/supabase.tsx +7 -6
  483. package/src/lib/authentication/use-broadcast/shared.ts +4 -4
  484. package/src/lib/authentication/use-broadcast/useBroadcast.ts +2 -2
  485. package/src/lib/components/AnchorLink.tsx +1 -1
  486. package/src/lib/components/Autocomplete.tsx +1 -1
  487. package/src/lib/components/Bootstrap.tsx +1 -0
  488. package/src/lib/components/BuildCheck.tsx +2 -1
  489. package/src/lib/components/Header.tsx +2 -3
  490. package/src/lib/components/Heading.tsx +2 -3
  491. package/src/lib/components/Layout.tsx +1 -1
  492. package/src/lib/components/Markdown.tsx +5 -2
  493. package/src/lib/components/MobileTopNavigation.tsx +11 -13
  494. package/src/lib/components/PathRenderer.tsx +2 -2
  495. package/src/lib/components/Search.tsx +1 -1
  496. package/src/lib/components/Slot.test.tsx +8 -8
  497. package/src/lib/components/Slot.tsx +2 -2
  498. package/src/lib/components/TopNavigation.tsx +3 -3
  499. package/src/lib/components/Zudoku.tsx +2 -2
  500. package/src/lib/components/context/ComponentsContext.tsx +2 -2
  501. package/src/lib/components/context/RouterEventsEmitter.tsx +1 -1
  502. package/src/lib/components/context/SlotProvider.tsx +4 -4
  503. package/src/lib/components/context/ViewportAnchorContext.tsx +2 -2
  504. package/src/lib/components/context/ZudokuContext.ts +1 -1
  505. package/src/lib/components/context/ZudokuProvider.tsx +1 -1
  506. package/src/lib/components/index.ts +1 -1
  507. package/src/lib/components/navigation/NavigationCategory.tsx +8 -1
  508. package/src/lib/components/navigation/NavigationItem.tsx +2 -2
  509. package/src/lib/components/navigation/NavigationWrapper.tsx +1 -1
  510. package/src/lib/components/navigation/Toc.tsx +2 -2
  511. package/src/lib/components/navigation/ZudokuLogo.tsx +1 -1
  512. package/src/lib/components/navigation/utils.ts +5 -6
  513. package/src/lib/core/ZudokuContext.ts +2 -1
  514. package/src/lib/errors/ErrorAlert.tsx +0 -1
  515. package/src/lib/errors/TopLevelError.tsx +2 -4
  516. package/src/lib/hooks/useEvent.test.tsx +2 -2
  517. package/src/lib/oas/graphql/circular.ts +3 -3
  518. package/src/lib/oas/graphql/index.ts +2 -1
  519. package/src/lib/oas/parser/dereference/index.ts +2 -1
  520. package/src/lib/oas/parser/dereference/resolveRef.ts +4 -4
  521. package/src/lib/oas/parser/index.ts +2 -2
  522. package/src/lib/oas/parser/upgrade/index.ts +2 -1
  523. package/src/lib/plugins/api-keys/CreateApiKey.tsx +1 -1
  524. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +5 -6
  525. package/src/lib/plugins/api-keys/index.tsx +8 -8
  526. package/src/lib/plugins/custom-pages/index.tsx +1 -1
  527. package/src/lib/plugins/markdown/MdxPage.tsx +5 -5
  528. package/src/lib/plugins/markdown/index.tsx +1 -1
  529. package/src/lib/plugins/openapi/ColorizedParam.tsx +3 -1
  530. package/src/lib/plugins/openapi/Endpoint.tsx +2 -2
  531. package/src/lib/plugins/openapi/OasProvider.tsx +2 -1
  532. package/src/lib/plugins/openapi/OperationList.tsx +5 -4
  533. package/src/lib/plugins/openapi/OperationListItem.tsx +18 -20
  534. package/src/lib/plugins/openapi/ParamInfos.tsx +2 -1
  535. package/src/lib/plugins/openapi/ParameterListItem.tsx +3 -3
  536. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +3 -3
  537. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +1 -1
  538. package/src/lib/plugins/openapi/Sidecar.tsx +2 -1
  539. package/src/lib/plugins/openapi/SidecarExamples.tsx +1 -1
  540. package/src/lib/plugins/openapi/StaggeredRender.tsx +1 -1
  541. package/src/lib/plugins/openapi/client/GraphQLContext.tsx +1 -1
  542. package/src/lib/plugins/openapi/client/createServer.ts +1 -2
  543. package/src/lib/plugins/openapi/client/useCreateQuery.ts +3 -2
  544. package/src/lib/plugins/openapi/context.tsx +1 -1
  545. package/src/lib/plugins/openapi/graphql/fragment-masking.ts +0 -1
  546. package/src/lib/plugins/openapi/graphql/gql.ts +0 -1
  547. package/src/lib/plugins/openapi/graphql/graphql.ts +0 -1
  548. package/src/lib/plugins/openapi/index.tsx +5 -4
  549. package/src/lib/plugins/openapi/interfaces.ts +5 -3
  550. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +2 -2
  551. package/src/lib/plugins/openapi/playground/Headers.tsx +1 -1
  552. package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +1 -1
  553. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +1 -1
  554. package/src/lib/plugins/openapi/playground/Playground.tsx +2 -2
  555. package/src/lib/plugins/openapi/playground/QueryParams.tsx +1 -1
  556. package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +1 -1
  557. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +1 -1
  558. package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +3 -1
  559. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +3 -3
  560. package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts +1 -1
  561. package/src/lib/plugins/openapi/processors/removeExtensions.test.ts +1 -0
  562. package/src/lib/plugins/openapi/processors/removeParameters.test.ts +1 -0
  563. package/src/lib/plugins/openapi/processors/traverse.ts +1 -1
  564. package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.tsx +1 -1
  565. package/src/lib/plugins/openapi/util/createHttpSnippet.ts +2 -2
  566. package/src/lib/plugins/openapi/util/createNavigationCategory.tsx +1 -0
  567. package/src/lib/plugins/openapi/util/generateSchemaExample.ts +3 -4
  568. package/src/lib/plugins/openapi/util/getRoutes.tsx +2 -2
  569. package/src/lib/plugins/openapi/util/methodColorMap.tsx +1 -1
  570. package/src/lib/plugins/search-inkeep/index.tsx +3 -3
  571. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +2 -4
  572. package/src/lib/plugins/search-pagefind/ResultList.tsx +3 -4
  573. package/src/lib/plugins/search-pagefind/get-results.tsx +0 -1
  574. package/src/lib/shiki.ts +6 -6
  575. package/src/lib/ui/Breadcrumb.tsx +1 -0
  576. package/src/lib/ui/Carousel.tsx +1 -0
  577. package/src/lib/ui/CodeBlock.tsx +3 -1
  578. package/src/lib/ui/Command.tsx +2 -4
  579. package/src/lib/ui/Dialog.tsx +1 -2
  580. package/src/lib/ui/Form.tsx +4 -4
  581. package/src/lib/ui/Pagination.tsx +1 -2
  582. package/src/lib/ui/ToggleGroup.tsx +1 -1
  583. package/src/lib/util/MdxComponents.tsx +9 -2
  584. package/src/lib/util/cn.ts +1 -1
  585. package/src/lib/util/createVariantComponent.tsx +2 -2
  586. package/src/lib/util/groupBy.ts +1 -0
  587. package/src/lib/util/humanFileSize.ts +2 -3
  588. package/src/lib/util/invariant.ts +1 -0
  589. package/src/lib/util/pastellize.ts +2 -2
  590. package/src/lib/util/types.ts +1 -1
  591. package/src/lib/util/useIsomorphicLayoutEffect.ts +1 -0
  592. package/src/lib/util/useScrollToAnchor.ts +3 -1
  593. package/src/shiki/langs/vue-vine.js +1 -0
  594. package/dist/lib/components/ReactMarkdown.d.ts +0 -29
  595. package/dist/lib/components/ReactMarkdown.js +0 -182
  596. package/dist/lib/components/ReactMarkdown.js.map +0 -1
  597. package/dist/vite/remarkStaticGeneration.js.map +0 -1
  598. package/lib/CodeBlock-yJjjRwj-.js.map +0 -1
  599. package/lib/Command-CDn17s8X.js.map +0 -1
  600. package/lib/Dialog-BrIjMmUK.js.map +0 -1
  601. package/lib/MdxPage-BmOQ5m5g.js.map +0 -1
  602. package/lib/OAuthErrorPage-Jv3r8wnL.js.map +0 -1
  603. package/lib/OasProvider-CA_lpILt.js.map +0 -1
  604. package/lib/OperationList-C-TObVw6.js.map +0 -1
  605. package/lib/SchemaView-CRcShewo.js.map +0 -1
  606. package/lib/SignUp-CxBGHgba.js.map +0 -1
  607. package/lib/createServer-DjgpuLne.js.map +0 -1
  608. package/lib/errors-CrI3s7mR.js.map +0 -1
  609. package/lib/index-CvTWnHZF.js.map +0 -1
  610. package/lib/index-DzO-Qh6S.js.map +0 -1
  611. package/src/lib/components/ReactMarkdown.license.txt +0 -21
  612. package/src/lib/components/ReactMarkdown.tsx +0 -264
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.plugin-search-pagefind.js","sources":["../src/lib/ui/Callout.tsx","../src/lib/plugins/search-pagefind/get-results.tsx","../src/lib/plugins/search-pagefind/ResultList.tsx","../src/lib/plugins/search-pagefind/PagefindSearch.tsx","../src/lib/plugins/search-pagefind/index.tsx"],"sourcesContent":["import {\n AlertTriangleIcon,\n InfoIcon,\n LightbulbIcon,\n type LucideIcon,\n ShieldAlertIcon,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nconst stylesMap = {\n note: {\n border: \"border-gray-300 dark:border-zinc-800\",\n bg: \"bg-gray-100 dark:bg-zinc-800/50\",\n iconColor: \"text-gray-600 dark:text-zinc-300\",\n titleColor: \"text-gray-600 dark:text-zinc-300\",\n textColor: \"text-gray-600 dark:text-zinc-300\",\n Icon: InfoIcon as LucideIcon,\n },\n tip: {\n border: \"border-green-500 dark:border-green-800\",\n bg: \"bg-green-200/25 dark:bg-green-950/70\",\n iconColor: \"text-green-600 dark:text-green-200\",\n titleColor: \"text-green-700 dark:text-green-200\",\n textColor: \"text-green-600 dark:text-green-50\",\n Icon: LightbulbIcon as LucideIcon,\n },\n info: {\n border: \"border-blue-400 dark:border-blue-900/60\",\n bg: \"bg-blue-50 dark:bg-blue-950/40\",\n iconColor: \"text-blue-400 dark:text-blue-200\",\n titleColor: \"text-blue-700 dark:text-blue-200\",\n textColor: \"text-blue-600 dark:text-blue-100\",\n Icon: InfoIcon as LucideIcon,\n },\n caution: {\n border: \"border-yellow-400 dark:border-yellow-400/25\",\n bg: \"bg-yellow-100/60 dark:bg-yellow-400/10\",\n iconColor: \"text-yellow-500 dark:text-yellow-300\",\n titleColor: \"text-yellow-600 dark:text-yellow-300\",\n textColor: \"text-yellow-700 dark:text-yellow-200\",\n Icon: AlertTriangleIcon as LucideIcon,\n },\n danger: {\n border: \"border-rose-400 dark:border-rose-800\",\n bg: \"bg-rose-50 dark:bg-rose-950/40\",\n iconColor: \"text-rose-400 dark:text-rose-300\",\n titleColor: \"text-rose-800 dark:text-rose-300\",\n textColor: \"text-rose-700 dark:text-rose-100\",\n Icon: ShieldAlertIcon as LucideIcon,\n },\n} as const;\n\ntype CalloutProps = {\n type: keyof typeof stylesMap;\n title?: string;\n children: ReactNode;\n className?: string;\n icon?: boolean;\n};\n\nexport const Callout = ({\n type,\n children,\n title,\n className,\n icon = true,\n}: CalloutProps) => {\n const { border, bg, iconColor, titleColor, textColor, Icon } =\n stylesMap[type];\n\n return (\n <div\n className={cn(\n \"not-prose rounded-md border p-4 text-md my-2\",\n icon &&\n \"grid grid-cols-[min-content_1fr] items-baseline grid-rows-[fit-content_1fr] gap-x-4 gap-y-2\",\n !icon && title && \"flex flex-col gap-2\",\n \"[&_a]:underline [&_a]:decoration-current [&_a]:decoration-from-font [&_a]:underline-offset-4 hover:[&_a]:decoration-1\",\n \"[&_.code-block-wrapper]:border\",\n \"[&_ul]:list-disc [&_ol]:list-decimal [&_ul]:ps-4 [&_ul>li]:ps-1 [&_ul>li]:my-1\",\n icon && title && \"items-center\",\n border,\n bg,\n className,\n )}\n >\n {icon && (\n <Icon\n className={cn(!title ? \"translate-y-1\" : \"align-middle\", iconColor)}\n size={20}\n aria-hidden=\"true\"\n />\n )}\n {title && <h3 className={cn(\"font-medium\", titleColor)}>{title}</h3>}\n <div\n className={cn(\n icon && \"col-start-2\",\n !title && icon && \"row-start-1\",\n textColor,\n \"overflow-x-auto\",\n )}\n >\n {children}\n </div>\n </div>\n );\n};\n","import type { AuthState } from \"../../authentication/state.js\";\nimport type { ZudokuContext } from \"../../core/ZudokuContext.js\";\nimport type { PagefindOptions } from \"./index.js\";\nimport type { PagefindSearchFragment, PagefindSearchResults } from \"./types.js\";\n\nexport const getResults = async ({\n search,\n options,\n auth,\n context,\n}: {\n search: PagefindSearchResults;\n options: PagefindOptions;\n auth: AuthState;\n context: ZudokuContext;\n}) => {\n const maxResults = options.maxResults ?? 10;\n const transformFn = options.transformResults ?? (() => true);\n\n const transformedResults: PagefindSearchFragment[] = [];\n\n const generator = searchResultGenerator({\n search,\n transformFn,\n auth,\n context,\n });\n\n for await (const result of generator) {\n transformedResults.push(result);\n if (transformedResults.length >= maxResults) break;\n }\n\n return transformedResults;\n};\n\nasync function* searchResultGenerator({\n search,\n transformFn,\n auth,\n context,\n}: {\n search: PagefindSearchResults;\n transformFn: NonNullable<PagefindOptions[\"transformResults\"]>;\n auth: AuthState<unknown>;\n context: ZudokuContext;\n}) {\n const batchSize = 5;\n let processedCount = 0;\n\n while (processedCount < search.results.length) {\n const batch = search.results.slice(\n processedCount,\n processedCount + batchSize,\n );\n processedCount += batch.length;\n\n const batchData = await Promise.all(batch.map((result) => result.data()));\n\n for (const result of batchData) {\n const transformed = transformFn({ result, auth, context });\n\n if (transformed === false) {\n // Skip this result\n continue;\n } else if (transformed === true || transformed == null) {\n // Keep the original result\n yield result;\n } else {\n // Return the transformed result\n yield transformed;\n }\n }\n }\n}\n","import { BracketsIcon, FileTextIcon } from \"lucide-react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { Link, useNavigate } from \"react-router\";\nimport { CommandGroup, CommandItem, CommandList } from \"zudoku/ui/Command.js\";\nimport { joinUrl } from \"../../util/joinUrl.js\";\nimport {\n type PagefindSearchFragment,\n type PagefindSubResult,\n} from \"./types.js\";\n\nconst sortSubResults = (a: PagefindSubResult, b: PagefindSubResult) => {\n const aScore = a.weighted_locations.reduce(\n (sum, loc) => sum + loc.balanced_score,\n 0,\n );\n const bScore = b.weighted_locations.reduce(\n (sum, loc) => sum + loc.balanced_score,\n 0,\n );\n return bScore - aScore;\n};\n\nconst hoverClassname = `cursor-pointer border border-transparent data-[selected=true]:border-border`;\n\nexport const ResultList = ({\n basePath,\n searchResults,\n searchTerm,\n onClose,\n maxSubResults = 4,\n}: {\n basePath?: string;\n searchResults: PagefindSearchFragment[];\n searchTerm: string;\n onClose: () => void;\n maxSubResults?: number;\n}) => {\n const navigate = useNavigate();\n const commandListRef = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n requestIdleCallback(() => {\n commandListRef.current?.scrollTo({ top: 0 });\n });\n }, [searchTerm]);\n\n const stripBasePath = (url: string) => {\n if (basePath && url.startsWith(basePath)) {\n return joinUrl(url.slice(basePath.length));\n }\n return url;\n };\n\n return (\n <CommandList className=\"max-h-[450px]\" ref={commandListRef}>\n {searchTerm && searchResults.length > 0 && (\n <CommandGroup\n className=\"text-sm text-muted-foreground\"\n heading={`${searchResults.length} results for \"${searchTerm}\"`}\n />\n )}\n {searchTerm &&\n searchResults.map((result) => (\n <CommandGroup\n key={[result.meta.title ?? result.excerpt, result.url].join(\"-\")}\n >\n <CommandItem\n asChild\n value={`${result.meta.title}-${result.url}`}\n className={hoverClassname}\n onSelect={() => {\n void navigate(stripBasePath(result.url));\n onClose();\n }}\n >\n <Link to={stripBasePath(result.url)}>\n {result.meta.section === \"openapi\" ? (\n <BracketsIcon />\n ) : (\n <FileTextIcon />\n )}\n {result.meta.title}\n </Link>\n </CommandItem>\n {result.sub_results\n .sort(sortSubResults)\n .slice(0, maxSubResults)\n .map((subResult) => (\n <CommandItem\n asChild\n key={`sub-${result.meta.title}-${subResult.url}`}\n value={`sub-${result.meta.title}-${subResult.url}`}\n className={hoverClassname}\n onSelect={() => {\n void navigate(stripBasePath(subResult.url));\n onClose();\n }}\n >\n <Link to={stripBasePath(subResult.url)} onClick={onClose}>\n <div className=\"flex flex-col items-start gap-2 ms-2.5 ps-5 border-l border-muted-foreground/50\">\n <span className=\"font-bold\">{subResult.title}</span>\n <span\n className=\"text-[13px] [&_mark]:bg-primary [&_mark]:text-primary-foreground\"\n dangerouslySetInnerHTML={{ __html: subResult.excerpt }}\n />\n </div>\n </Link>\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n );\n};\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { useRef, useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Callout } from \"zudoku/ui/Callout.js\";\nimport {\n CommandDialog,\n CommandEmpty,\n CommandInput,\n} from \"zudoku/ui/Command.js\";\nimport { DialogTitle } from \"zudoku/ui/Dialog.js\";\nimport { useAuthState } from \"../../authentication/state.js\";\nimport { useZudoku } from \"../../components/context/ZudokuContext.js\";\nimport { SEARCH_PROTECTED_SECTION } from \"../../core/RouteGuard.js\";\nimport { joinUrl } from \"../../util/joinUrl.js\";\nimport { getResults } from \"./get-results.js\";\nimport type { PagefindOptions } from \"./index.js\";\nimport { ResultList } from \"./ResultList.js\";\nimport type { Pagefind } from \"./types.js\";\n\nconst DEFAULT_RANKING = {\n // Slightly lower than default because API docs tend to have repetitive terms (parameter names, HTTP methods, etc.)\n termFrequency: 0.8,\n // Lower than default because API documentation pages tend to be longer due to comprehensive endpoint documentation\n pageLength: 0.6,\n // Slightly higher than default because in technical documentation, exact matches should be prioritized\n termSimilarity: 1.2,\n // Slightly lower than default because API docs might have legitimate repetition of terms\n termSaturation: 1.2,\n};\n\nconst importPagefind = (basePath?: string): Promise<Pagefind> =>\n import.meta.env.DEV\n ? // @ts-expect-error TypeScript can't resolve the import\n import(/* @vite-ignore */ \"/pagefind/pagefind.js\")\n : import(/* @vite-ignore */ joinUrl(basePath, \"/pagefind/pagefind.js\"));\n\nconst usePagefind = (options: PagefindOptions) => {\n const {\n options: { basePath },\n } = useZudoku();\n const { data: pagefind, ...result } = useQuery<Pagefind>({\n queryKey: [\"pagefind\", options.ranking],\n retry: false,\n queryFn: async () => {\n const pagefind = await importPagefind(basePath);\n await pagefind.init();\n await pagefind.options({\n ranking: {\n termFrequency:\n options.ranking?.termFrequency ?? DEFAULT_RANKING.termFrequency,\n pageLength: options.ranking?.pageLength ?? DEFAULT_RANKING.pageLength,\n termSimilarity:\n options.ranking?.termSimilarity ?? DEFAULT_RANKING.termSimilarity,\n termSaturation:\n options.ranking?.termSaturation ?? DEFAULT_RANKING.termSaturation,\n },\n });\n\n return pagefind;\n },\n enabled: typeof window !== \"undefined\",\n });\n\n if (result.isError && result.error.message !== \"NOT_BUILT_YET\") {\n // eslint-disable-next-line no-console\n console.error(result.error);\n }\n\n return { ...result, pagefind };\n};\n\nexport const PagefindSearch = ({\n isOpen,\n onClose,\n options,\n}: {\n isOpen: boolean;\n onClose: () => void;\n options: PagefindOptions;\n}) => {\n const { pagefind, error, isError } = usePagefind(options);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const auth = useAuthState();\n const context = useZudoku();\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { data: searchResults } = useQuery({\n queryKey: [\"pagefind-search\", searchTerm, auth.isAuthenticated],\n queryFn: async () => {\n const filters = auth.isAuthenticated\n ? undefined\n : { not: { section: SEARCH_PROTECTED_SECTION } };\n\n const search = await pagefind?.search(searchTerm, { filters });\n if (!search) return [];\n return getResults({ search, options, auth, context });\n },\n placeholderData: keepPreviousData,\n enabled: !!pagefind && !!searchTerm,\n });\n\n return (\n <CommandDialog\n command={{ shouldFilter: false }}\n content={{ className: \"max-w-[750px]\" }}\n open={isOpen}\n onOpenChange={onClose}\n >\n <VisuallyHidden>\n <DialogTitle>Search</DialogTitle>\n </VisuallyHidden>\n <CommandInput\n ref={inputRef}\n placeholder=\"Search...\"\n value={searchTerm}\n onValueChange={setSearchTerm}\n disabled={isError}\n />\n <CommandEmpty>\n {searchTerm ? (\n <div className=\"flex flex-col items-center\">\n No results found.\n <Button\n variant=\"link\"\n onClick={() => {\n setSearchTerm(\"\");\n inputRef.current?.focus();\n }}\n >\n Clear search\n </Button>\n </div>\n ) : (\n \"Start typing to search\"\n )}\n </CommandEmpty>\n {isError ? (\n <div className=\"p-4 text-sm\">\n {error.message === \"NOT_BUILT_YET\" ? (\n <Callout type=\"info\">\n Search is currently not available in development mode by default.\n <br />\n To still use search in development, run <code>\n zudoku build\n </code>{\" \"}\n and copy the <code>dist/pagefind</code> directory to your{\" \"}\n <code>public</code> directory.\n </Callout>\n ) : (\n \"An error occurred while loading search.\"\n )}\n </div>\n ) : (\n <ResultList\n basePath={context.options.basePath}\n searchResults={searchResults ?? []}\n searchTerm={searchTerm}\n onClose={onClose}\n maxSubResults={options.maxSubResults}\n />\n )}\n </CommandDialog>\n );\n};\n","import type { ZudokuConfig } from \"../../../config/validators/validate.js\";\nimport { ClientOnly } from \"../../components/ClientOnly.js\";\nimport type { ZudokuPlugin } from \"../../core/plugins.js\";\nimport { PagefindSearch } from \"./PagefindSearch.js\";\n\nexport type PagefindOptions = Extract<\n ZudokuConfig[\"search\"],\n { type: \"pagefind\" }\n>;\n\nexport const pagefindSearchPlugin = (\n options: PagefindOptions,\n): ZudokuPlugin => {\n return {\n renderSearch: ({ isOpen, onClose }) => (\n <ClientOnly>\n <PagefindSearch isOpen={isOpen} onClose={onClose} options={options} />\n </ClientOnly>\n ),\n };\n};\n"],"names":["stylesMap","InfoIcon","LightbulbIcon","AlertTriangleIcon","ShieldAlertIcon","Callout","type","children","title","className","icon","border","bg","iconColor","titleColor","textColor","Icon","jsxs","cn","jsx","getResults","search","options","auth","context","maxResults","transformFn","transformedResults","generator","searchResultGenerator","result","processedCount","batch","batchData","transformed","sortSubResults","a","b","aScore","sum","loc","hoverClassname","ResultList","basePath","searchResults","searchTerm","onClose","maxSubResults","navigate","useNavigate","commandListRef","useRef","useLayoutEffect","stripBasePath","url","joinUrl","CommandList","CommandGroup","CommandItem","Link","BracketsIcon","FileTextIcon","subResult","DEFAULT_RANKING","importPagefind","usePagefind","useZudoku","pagefind","useQuery","PagefindSearch","isOpen","error","isError","setSearchTerm","useState","useAuthState","inputRef","filters","SEARCH_PROTECTED_SECTION","keepPreviousData","CommandDialog","VisuallyHidden","DialogTitle","CommandInput","CommandEmpty","Button","pagefindSearchPlugin","ClientOnly"],"mappings":"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"}
1
+ {"version":3,"file":"zudoku.plugin-search-pagefind.js","sources":["../src/lib/ui/Callout.tsx","../src/lib/plugins/search-pagefind/get-results.tsx","../src/lib/plugins/search-pagefind/ResultList.tsx","../src/lib/plugins/search-pagefind/PagefindSearch.tsx","../src/lib/plugins/search-pagefind/index.tsx"],"sourcesContent":["import {\n AlertTriangleIcon,\n InfoIcon,\n LightbulbIcon,\n type LucideIcon,\n ShieldAlertIcon,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nconst stylesMap = {\n note: {\n border: \"border-gray-300 dark:border-zinc-800\",\n bg: \"bg-gray-100 dark:bg-zinc-800/50\",\n iconColor: \"text-gray-600 dark:text-zinc-300\",\n titleColor: \"text-gray-600 dark:text-zinc-300\",\n textColor: \"text-gray-600 dark:text-zinc-300\",\n Icon: InfoIcon as LucideIcon,\n },\n tip: {\n border: \"border-green-500 dark:border-green-800\",\n bg: \"bg-green-200/25 dark:bg-green-950/70\",\n iconColor: \"text-green-600 dark:text-green-200\",\n titleColor: \"text-green-700 dark:text-green-200\",\n textColor: \"text-green-600 dark:text-green-50\",\n Icon: LightbulbIcon as LucideIcon,\n },\n info: {\n border: \"border-blue-400 dark:border-blue-900/60\",\n bg: \"bg-blue-50 dark:bg-blue-950/40\",\n iconColor: \"text-blue-400 dark:text-blue-200\",\n titleColor: \"text-blue-700 dark:text-blue-200\",\n textColor: \"text-blue-600 dark:text-blue-100\",\n Icon: InfoIcon as LucideIcon,\n },\n caution: {\n border: \"border-yellow-400 dark:border-yellow-400/25\",\n bg: \"bg-yellow-100/60 dark:bg-yellow-400/10\",\n iconColor: \"text-yellow-500 dark:text-yellow-300\",\n titleColor: \"text-yellow-600 dark:text-yellow-300\",\n textColor: \"text-yellow-700 dark:text-yellow-200\",\n Icon: AlertTriangleIcon as LucideIcon,\n },\n danger: {\n border: \"border-rose-400 dark:border-rose-800\",\n bg: \"bg-rose-50 dark:bg-rose-950/40\",\n iconColor: \"text-rose-400 dark:text-rose-300\",\n titleColor: \"text-rose-800 dark:text-rose-300\",\n textColor: \"text-rose-700 dark:text-rose-100\",\n Icon: ShieldAlertIcon as LucideIcon,\n },\n} as const;\n\ntype CalloutProps = {\n type: keyof typeof stylesMap;\n title?: string;\n children: ReactNode;\n className?: string;\n icon?: boolean;\n};\n\nexport const Callout = ({\n type,\n children,\n title,\n className,\n icon = true,\n}: CalloutProps) => {\n const { border, bg, iconColor, titleColor, textColor, Icon } =\n stylesMap[type];\n\n return (\n <div\n className={cn(\n \"not-prose rounded-md border p-4 text-md my-2\",\n icon &&\n \"grid grid-cols-[min-content_1fr] items-baseline grid-rows-[fit-content_1fr] gap-x-4 gap-y-2\",\n !icon && title && \"flex flex-col gap-2\",\n \"[&_a]:underline [&_a]:decoration-current [&_a]:decoration-from-font [&_a]:underline-offset-4 hover:[&_a]:decoration-1\",\n \"[&_.code-block-wrapper]:border\",\n \"[&_ul]:list-disc [&_ol]:list-decimal [&_ul]:ps-4 [&_ul>li]:ps-1 [&_ul>li]:my-1\",\n icon && title && \"items-center\",\n border,\n bg,\n className,\n )}\n >\n {icon && (\n <Icon\n className={cn(!title ? \"translate-y-1\" : \"align-middle\", iconColor)}\n size={20}\n aria-hidden=\"true\"\n />\n )}\n {title && <h3 className={cn(\"font-medium\", titleColor)}>{title}</h3>}\n <div\n className={cn(\n icon && \"col-start-2\",\n !title && icon && \"row-start-1\",\n textColor,\n \"overflow-x-auto\",\n )}\n >\n {children}\n </div>\n </div>\n );\n};\n","import type { AuthState } from \"../../authentication/state.js\";\nimport type { ZudokuContext } from \"../../core/ZudokuContext.js\";\nimport type { PagefindOptions } from \"./index.js\";\nimport type { PagefindSearchFragment, PagefindSearchResults } from \"./types.js\";\n\nexport const getResults = async ({\n search,\n options,\n auth,\n context,\n}: {\n search: PagefindSearchResults;\n options: PagefindOptions;\n auth: AuthState;\n context: ZudokuContext;\n}) => {\n const maxResults = options.maxResults ?? 10;\n const transformFn = options.transformResults ?? (() => true);\n\n const transformedResults: PagefindSearchFragment[] = [];\n\n const generator = searchResultGenerator({\n search,\n transformFn,\n auth,\n context,\n });\n\n for await (const result of generator) {\n transformedResults.push(result);\n if (transformedResults.length >= maxResults) break;\n }\n\n return transformedResults;\n};\n\nasync function* searchResultGenerator({\n search,\n transformFn,\n auth,\n context,\n}: {\n search: PagefindSearchResults;\n transformFn: NonNullable<PagefindOptions[\"transformResults\"]>;\n auth: AuthState<unknown>;\n context: ZudokuContext;\n}) {\n const batchSize = 5;\n let processedCount = 0;\n\n while (processedCount < search.results.length) {\n const batch = search.results.slice(\n processedCount,\n processedCount + batchSize,\n );\n processedCount += batch.length;\n\n const batchData = await Promise.all(batch.map((result) => result.data()));\n\n for (const result of batchData) {\n const transformed = transformFn({ result, auth, context });\n\n if (transformed === false) {\n // Skip this result\n } else if (transformed === true || transformed == null) {\n // Keep the original result\n yield result;\n } else {\n // Return the transformed result\n yield transformed;\n }\n }\n }\n}\n","import { BracketsIcon, FileTextIcon } from \"lucide-react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { Link, useNavigate } from \"react-router\";\nimport { CommandGroup, CommandItem, CommandList } from \"zudoku/ui/Command.js\";\nimport { joinUrl } from \"../../util/joinUrl.js\";\nimport type { PagefindSearchFragment, PagefindSubResult } from \"./types.js\";\n\nconst sortSubResults = (a: PagefindSubResult, b: PagefindSubResult) => {\n const aScore = a.weighted_locations.reduce(\n (sum, loc) => sum + loc.balanced_score,\n 0,\n );\n const bScore = b.weighted_locations.reduce(\n (sum, loc) => sum + loc.balanced_score,\n 0,\n );\n return bScore - aScore;\n};\n\nconst hoverClassname = `cursor-pointer border border-transparent data-[selected=true]:border-border`;\n\nexport const ResultList = ({\n basePath,\n searchResults,\n searchTerm,\n onClose,\n maxSubResults = 4,\n}: {\n basePath?: string;\n searchResults: PagefindSearchFragment[];\n searchTerm: string;\n onClose: () => void;\n maxSubResults?: number;\n}) => {\n const navigate = useNavigate();\n const commandListRef = useRef<HTMLDivElement | null>(null);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Only scroll to top when search term changes\n useLayoutEffect(() => {\n requestIdleCallback(() => {\n commandListRef.current?.scrollTo({ top: 0 });\n });\n }, [searchTerm]);\n\n const stripBasePath = (url: string) => {\n if (basePath && url.startsWith(basePath)) {\n return joinUrl(url.slice(basePath.length));\n }\n return url;\n };\n\n return (\n <CommandList className=\"max-h-[450px]\" ref={commandListRef}>\n {searchTerm && searchResults.length > 0 && (\n <CommandGroup\n className=\"text-sm text-muted-foreground\"\n heading={`${searchResults.length} results for \"${searchTerm}\"`}\n />\n )}\n {searchTerm &&\n searchResults.map((result) => (\n <CommandGroup\n key={[result.meta.title ?? result.excerpt, result.url].join(\"-\")}\n >\n <CommandItem\n asChild\n value={`${result.meta.title}-${result.url}`}\n className={hoverClassname}\n onSelect={() => {\n void navigate(stripBasePath(result.url));\n onClose();\n }}\n >\n <Link to={stripBasePath(result.url)}>\n {result.meta.section === \"openapi\" ? (\n <BracketsIcon />\n ) : (\n <FileTextIcon />\n )}\n {result.meta.title}\n </Link>\n </CommandItem>\n {result.sub_results\n .sort(sortSubResults)\n .slice(0, maxSubResults)\n .map((subResult) => (\n <CommandItem\n asChild\n key={`sub-${result.meta.title}-${subResult.url}`}\n value={`sub-${result.meta.title}-${subResult.url}`}\n className={hoverClassname}\n onSelect={() => {\n void navigate(stripBasePath(subResult.url));\n onClose();\n }}\n >\n <Link to={stripBasePath(subResult.url)} onClick={onClose}>\n <div className=\"flex flex-col items-start gap-2 ms-2.5 ps-5 border-l border-muted-foreground/50\">\n <span className=\"font-bold\">{subResult.title}</span>\n <span\n className=\"text-[13px] [&_mark]:bg-primary [&_mark]:text-primary-foreground\"\n // biome-ignore lint/security/noDangerouslySetInnerHtml: Pagefind provides sanitized HTML\n dangerouslySetInnerHTML={{ __html: subResult.excerpt }}\n />\n </div>\n </Link>\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n );\n};\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { useRef, useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Callout } from \"zudoku/ui/Callout.js\";\nimport {\n CommandDialog,\n CommandEmpty,\n CommandInput,\n} from \"zudoku/ui/Command.js\";\nimport { DialogTitle } from \"zudoku/ui/Dialog.js\";\nimport { useAuthState } from \"../../authentication/state.js\";\nimport { useZudoku } from \"../../components/context/ZudokuContext.js\";\nimport { SEARCH_PROTECTED_SECTION } from \"../../core/RouteGuard.js\";\nimport { joinUrl } from \"../../util/joinUrl.js\";\nimport { getResults } from \"./get-results.js\";\nimport type { PagefindOptions } from \"./index.js\";\nimport { ResultList } from \"./ResultList.js\";\nimport type { Pagefind } from \"./types.js\";\n\nconst DEFAULT_RANKING = {\n // Slightly lower than default because API docs tend to have repetitive terms (parameter names, HTTP methods, etc.)\n termFrequency: 0.8,\n // Lower than default because API documentation pages tend to be longer due to comprehensive endpoint documentation\n pageLength: 0.6,\n // Slightly higher than default because in technical documentation, exact matches should be prioritized\n termSimilarity: 1.2,\n // Slightly lower than default because API docs might have legitimate repetition of terms\n termSaturation: 1.2,\n};\n\nconst importPagefind = (basePath?: string): Promise<Pagefind> =>\n import.meta.env.DEV\n ? // @ts-expect-error TypeScript can't resolve the import\n import(/* @vite-ignore */ \"/pagefind/pagefind.js\")\n : import(/* @vite-ignore */ joinUrl(basePath, \"/pagefind/pagefind.js\"));\n\nconst usePagefind = (options: PagefindOptions) => {\n const {\n options: { basePath },\n } = useZudoku();\n const { data: pagefind, ...result } = useQuery<Pagefind>({\n queryKey: [\"pagefind\", options.ranking],\n retry: false,\n queryFn: async () => {\n const pagefind = await importPagefind(basePath);\n await pagefind.init();\n await pagefind.options({\n ranking: {\n termFrequency:\n options.ranking?.termFrequency ?? DEFAULT_RANKING.termFrequency,\n pageLength: options.ranking?.pageLength ?? DEFAULT_RANKING.pageLength,\n termSimilarity:\n options.ranking?.termSimilarity ?? DEFAULT_RANKING.termSimilarity,\n termSaturation:\n options.ranking?.termSaturation ?? DEFAULT_RANKING.termSaturation,\n },\n });\n\n return pagefind;\n },\n enabled: typeof window !== \"undefined\",\n });\n\n if (result.isError && result.error.message !== \"NOT_BUILT_YET\") {\n // biome-ignore lint/suspicious/noConsole: Logging allowed here\n console.error(result.error);\n }\n\n return { ...result, pagefind };\n};\n\nexport const PagefindSearch = ({\n isOpen,\n onClose,\n options,\n}: {\n isOpen: boolean;\n onClose: () => void;\n options: PagefindOptions;\n}) => {\n const { pagefind, error, isError } = usePagefind(options);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const auth = useAuthState();\n const context = useZudoku();\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { data: searchResults } = useQuery({\n queryKey: [\"pagefind-search\", searchTerm, auth.isAuthenticated],\n queryFn: async () => {\n const filters = auth.isAuthenticated\n ? undefined\n : { not: { section: SEARCH_PROTECTED_SECTION } };\n\n const search = await pagefind?.search(searchTerm, { filters });\n if (!search) return [];\n return getResults({ search, options, auth, context });\n },\n placeholderData: keepPreviousData,\n enabled: !!pagefind && !!searchTerm,\n });\n\n return (\n <CommandDialog\n command={{ shouldFilter: false }}\n content={{ className: \"max-w-[750px]\" }}\n open={isOpen}\n onOpenChange={onClose}\n >\n <VisuallyHidden>\n <DialogTitle>Search</DialogTitle>\n </VisuallyHidden>\n <CommandInput\n ref={inputRef}\n placeholder=\"Search...\"\n value={searchTerm}\n onValueChange={setSearchTerm}\n disabled={isError}\n />\n <CommandEmpty>\n {searchTerm ? (\n <div className=\"flex flex-col items-center\">\n No results found.\n <Button\n variant=\"link\"\n onClick={() => {\n setSearchTerm(\"\");\n inputRef.current?.focus();\n }}\n >\n Clear search\n </Button>\n </div>\n ) : (\n \"Start typing to search\"\n )}\n </CommandEmpty>\n {isError ? (\n <div className=\"p-4 text-sm\">\n {error.message === \"NOT_BUILT_YET\" ? (\n <Callout type=\"info\">\n Search is currently not available in development mode by default.\n <br />\n To still use search in development, run <code>zudoku build</code>{\" \"}\n and copy the <code>dist/pagefind</code> directory to your{\" \"}\n <code>public</code> directory.\n </Callout>\n ) : (\n \"An error occurred while loading search.\"\n )}\n </div>\n ) : (\n <ResultList\n basePath={context.options.basePath}\n searchResults={searchResults ?? []}\n searchTerm={searchTerm}\n onClose={onClose}\n maxSubResults={options.maxSubResults}\n />\n )}\n </CommandDialog>\n );\n};\n","import type { ZudokuConfig } from \"../../../config/validators/validate.js\";\nimport { ClientOnly } from \"../../components/ClientOnly.js\";\nimport type { ZudokuPlugin } from \"../../core/plugins.js\";\nimport { PagefindSearch } from \"./PagefindSearch.js\";\n\nexport type PagefindOptions = Extract<\n ZudokuConfig[\"search\"],\n { type: \"pagefind\" }\n>;\n\nexport const pagefindSearchPlugin = (\n options: PagefindOptions,\n): ZudokuPlugin => {\n return {\n renderSearch: ({ isOpen, onClose }) => (\n <ClientOnly>\n <PagefindSearch isOpen={isOpen} onClose={onClose} options={options} />\n </ClientOnly>\n ),\n };\n};\n"],"names":["stylesMap","InfoIcon","LightbulbIcon","AlertTriangleIcon","ShieldAlertIcon","Callout","type","children","title","className","icon","border","bg","iconColor","titleColor","textColor","Icon","jsxs","cn","jsx","getResults","search","options","auth","context","maxResults","transformFn","transformedResults","generator","searchResultGenerator","result","processedCount","batch","batchData","transformed","sortSubResults","a","b","aScore","sum","loc","hoverClassname","ResultList","basePath","searchResults","searchTerm","onClose","maxSubResults","navigate","useNavigate","commandListRef","useRef","useLayoutEffect","stripBasePath","url","joinUrl","CommandList","CommandGroup","CommandItem","Link","BracketsIcon","FileTextIcon","subResult","DEFAULT_RANKING","importPagefind","usePagefind","useZudoku","pagefind","useQuery","PagefindSearch","isOpen","error","isError","setSearchTerm","useState","useAuthState","inputRef","filters","SEARCH_PROTECTED_SECTION","keepPreviousData","CommandDialog","VisuallyHidden","DialogTitle","CommandInput","CommandEmpty","Button","pagefindSearchPlugin","ClientOnly"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.57.0",
3
+ "version": "0.58.0",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -143,11 +143,10 @@
143
143
  "@apidevtools/json-schema-ref-parser": "12.0.2",
144
144
  "@envelop/core": "5.3.0",
145
145
  "@graphql-typed-document-node/core": "3.2.0",
146
- "@hookform/resolvers": "4.1.3",
147
146
  "@lekoarts/rehype-meta-as-attributes": "3.0.3",
148
147
  "@mdx-js/react": "3.1.0",
149
148
  "@mdx-js/rollup": "3.1.0",
150
- "@pothos/core": "4.7.0",
149
+ "@pothos/core": "4.8.0",
151
150
  "@radix-ui/react-accordion": "1.2.11",
152
151
  "@radix-ui/react-alert-dialog": "1.1.14",
153
152
  "@radix-ui/react-aspect-ratio": "1.1.7",
@@ -191,34 +190,27 @@
191
190
  "class-variance-authority": "0.7.1",
192
191
  "clsx": "2.1.1",
193
192
  "cmdk": "1.1.1",
194
- "colorjs.io": "0.5.2",
195
- "devlop": "^1.1.0",
196
- "dotenv": "16.5.0",
197
193
  "embla-carousel-react": "8.6.0",
198
194
  "estree-util-value-to-estree": "3.4.0",
199
195
  "express": "5.1.0",
200
196
  "fast-equals": "5.2.2",
201
- "framer-motion": "^12.12.2",
202
197
  "glob": "11.0.3",
203
198
  "glob-parent": "6.0.2",
204
199
  "graphql": "16.11.0",
205
200
  "graphql-type-json": "0.3.2",
206
- "graphql-yoga": "5.14.0",
201
+ "graphql-yoga": "5.15.1",
207
202
  "gray-matter": "4.0.3",
208
203
  "hast-util-to-jsx-runtime": "^2.3.6",
209
204
  "hast-util-to-string": "3.0.1",
210
- "html-url-attributes": "^3.0.1",
211
205
  "http-terminator": "3.2.0",
206
+ "javascript-stringify": "2.1.0",
212
207
  "json-schema-to-typescript-lite": "14.1.0",
213
208
  "loglevel": "1.9.2",
214
- "lru-cache": "11.1.0",
215
209
  "lucide-react": "0.525.0",
216
- "minimatch": "10.0.1",
217
210
  "motion": "12.23.3",
218
211
  "nanoevents": "^9.1.0",
219
212
  "next-themes": "0.4.6",
220
213
  "oauth4webapi": "2.17.0",
221
- "object-hash": "3.0.0",
222
214
  "openapi-types": "12.1.3",
223
215
  "pagefind": "1.4.0-alpha.1",
224
216
  "picocolors": "1.1.1",
@@ -238,17 +230,13 @@
238
230
  "remark-frontmatter": "5.0.0",
239
231
  "remark-gfm": "4.0.1",
240
232
  "remark-mdx-frontmatter": "5.2.0",
241
- "remark-parse": "^11.0.0",
242
- "remark-rehype": "^11.1.2",
243
- "rollup": "4.45.0",
233
+ "rollup": "4.46.0",
244
234
  "semver": "7.7.2",
245
235
  "shiki": "3.8.1",
246
236
  "sitemap": "8.0.0",
247
- "spin-delay": "2.0.1",
248
237
  "strip-ansi": "7.1.0",
249
238
  "tailwind-merge": "3.3.1",
250
239
  "tailwindcss": "4.1.11",
251
- "ulidx": "2.4.1",
252
240
  "unified": "^11.0.5",
253
241
  "unist-util-visit": "5.0.0",
254
242
  "vaul": "1.1.2",
@@ -256,13 +244,11 @@
256
244
  "vite": "6.3.5",
257
245
  "yaml": "2.8.0",
258
246
  "yargs": "18.0.0",
259
- "zod": "3.25.74",
260
- "zod-to-ts": "1.2.0",
247
+ "zod": "4.0.10",
261
248
  "zustand": "5.0.6"
262
249
  },
263
250
  "devDependencies": {
264
251
  "@graphql-codegen/cli": "5.0.7",
265
- "@graphql-codegen/client-preset": "4.8.2",
266
252
  "@inkeep/cxkit-types": "0.5.90",
267
253
  "@testing-library/dom": "10.4.0",
268
254
  "@testing-library/jest-dom": "6.6.3",
@@ -276,13 +262,12 @@
276
262
  "@types/mdast": "4.0.4",
277
263
  "@types/mdx": "2.0.13",
278
264
  "@types/node": "22.13.5",
279
- "@types/object-hash": "3.0.6",
280
265
  "@types/react-is": "19.0.0",
281
266
  "@types/semver": "7.7.0",
282
267
  "@types/unist": "^3.0.3",
283
268
  "@types/yargs": "17.0.33",
284
269
  "@vitest/coverage-v8": "3.2.1",
285
- "esbuild": "0.25.6",
270
+ "esbuild": "0.25.8",
286
271
  "happy-dom": "18.0.1",
287
272
  "mdast-util-mdx": "3.0.0",
288
273
  "react": "19.1.0",
@@ -1,4 +1,4 @@
1
- import { z } from "zod/v4";
1
+ import { z } from "zod";
2
2
 
3
3
  export const EntitlementsSchema = z.object({
4
4
  devPortalZuploBranding: z.boolean(),
@@ -1,15 +1,16 @@
1
+ import config from "virtual:zudoku-config";
1
2
  import { createRoot, hydrateRoot } from "react-dom/client";
2
3
  import {
3
4
  createBrowserRouter,
4
5
  matchRoutes,
5
6
  type RouteObject,
6
7
  } from "react-router";
7
- import config from "virtual:zudoku-config";
8
8
  import "vite/modulepreload-polyfill";
9
9
  import { Bootstrap } from "zudoku/__internal";
10
10
  import { getRoutesByConfig } from "./main.js";
11
11
 
12
12
  const routes = getRoutesByConfig(config);
13
+ // biome-ignore lint/style/noNonNullAssertion: We know the root element exists
13
14
  const root = document.getElementById("root")!;
14
15
 
15
16
  declare global {
@@ -33,7 +34,7 @@ if (root.childElementCount > 0) {
33
34
  }
34
35
 
35
36
  if (import.meta.env.IS_ZUPLO) {
36
- // eslint-disable-next-line no-console
37
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
37
38
  console.log(
38
39
  `%cPowered by Zuplo v${window.ZUDOKU_VERSION}`,
39
40
  [
@@ -46,7 +47,7 @@ if (import.meta.env.IS_ZUPLO) {
46
47
  ].join(" ;"),
47
48
  );
48
49
  } else {
49
- // eslint-disable-next-line no-console
50
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
50
51
  console.log(
51
52
  `%cZUDOKU%c by Zuplo v${window.ZUDOKU_VERSION}`,
52
53
  [
@@ -69,7 +70,7 @@ if (import.meta.env.IS_ZUPLO) {
69
70
  "letter-spacing: 5px",
70
71
  ].join(" ;"),
71
72
  );
72
- // eslint-disable-next-line no-console
73
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
73
74
  console.log("» Learn more about Zudoku https://zudoku.dev");
74
75
  }
75
76
 
@@ -84,7 +85,7 @@ async function hydrateLazyRoutes(routes: RouteObject[]) {
84
85
  lazyMatches.map(async (m) => {
85
86
  if (typeof m.route.lazy !== "function") return;
86
87
 
87
- const routeModule = await m.route.lazy!();
88
+ const routeModule = await m.route.lazy();
88
89
  Object.assign(m.route, { ...routeModule, lazy: undefined });
89
90
  }),
90
91
  );
@@ -1,8 +1,8 @@
1
+ import { Transform } from "node:stream";
1
2
  import { dehydrate, QueryClient } from "@tanstack/react-query";
2
- import { type HelmetData } from "@zudoku/react-helmet-async";
3
+ import type { HelmetData } from "@zudoku/react-helmet-async";
3
4
  import type express from "express";
4
5
  import logger from "loglevel";
5
- import { Transform } from "node:stream";
6
6
  import { renderToPipeableStream, renderToStaticMarkup } from "react-dom/server";
7
7
  import {
8
8
  createStaticHandler,
@@ -49,7 +49,7 @@ export const render = async ({
49
49
  if ([301, 302, 303, 307, 308].includes(context.status)) {
50
50
  return response.redirect(
51
51
  import.meta.env.PROD ? context.status : 307,
52
- context.headers.get("Location")!,
52
+ context.headers.get("Location") ?? "",
53
53
  );
54
54
  }
55
55
 
package/src/app/env.ts CHANGED
@@ -1,4 +1,4 @@
1
- import z from "zod";
1
+ import { z } from "zod";
2
2
  import { BuildConfigSchema } from "./ZuploBuildConfig.js";
3
3
 
4
4
  const getZuploBuildConfig = () => {
@@ -11,17 +11,17 @@ const getZuploBuildConfig = () => {
11
11
  return zuploBuildConfig;
12
12
  } catch (error) {
13
13
  if (error instanceof z.ZodError) {
14
- // eslint-disable-next-line no-console
14
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
15
15
  console.error("ZUPLO_BUILD_CONFIG is invalid.");
16
- // eslint-disable-next-line no-console
17
- console.log(error.errors);
16
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
17
+ console.log(error.issues);
18
18
  return undefined;
19
19
  }
20
- // eslint-disable-next-line no-console
20
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
21
21
  console.error(
22
22
  "ZUPLO_BUILD_CONFIG is a reserved environment variable and cannot be used for custom configuration. Please remove it from your environment variables.",
23
23
  );
24
- // eslint-disable-next-line no-console
24
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
25
25
  console.log(error);
26
26
  return undefined;
27
27
  }
package/src/app/main.tsx CHANGED
@@ -1,4 +1,3 @@
1
- import type { RouteObject } from "react-router";
2
1
  import { configuredApiKeysPlugin } from "virtual:zudoku-api-keys-plugin";
3
2
  import {
4
3
  configuredApiCatalogPlugins,
@@ -11,6 +10,7 @@ import { configuredNavigation } from "virtual:zudoku-navigation";
11
10
  import { configuredRedirectPlugin } from "virtual:zudoku-redirect-plugin";
12
11
  import { configuredSearchPlugin } from "virtual:zudoku-search-plugin";
13
12
  import { registerShiki } from "virtual:zudoku-shiki-register";
13
+ import type { RouteObject } from "react-router";
14
14
  import "virtual:zudoku-theme.css";
15
15
  import {
16
16
  BuildCheck,
@@ -23,8 +23,8 @@ import {
23
23
  import { Zudoku } from "zudoku/components";
24
24
  import { Outlet } from "zudoku/router";
25
25
  import type { ZudokuConfig } from "../config/config.js";
26
- import type { ZudokuContextOptions } from "../lib/core/ZudokuContext.js";
27
26
  import { isNavigationPlugin } from "../lib/core/plugins.js";
27
+ import type { ZudokuContextOptions } from "../lib/core/ZudokuContext.js";
28
28
  import { highlighter } from "../lib/shiki.js";
29
29
  import { ZuploEnv } from "./env.js";
30
30
  import "./main.css";
@@ -13,7 +13,12 @@ if (!root) {
13
13
  }
14
14
 
15
15
  const apiUrl = root.getAttribute("data-api-url");
16
- const title = document.getElementsByTagName("title")[0]!.innerText;
16
+
17
+ if (!apiUrl) {
18
+ throw new Error("No api url found");
19
+ }
20
+
21
+ const title = document.getElementsByTagName("title")[0]?.innerText;
17
22
  const logoUrl = root.getAttribute("data-logo-url");
18
23
 
19
24
  // IMPORTANT: This component must not contain tailwind classes
@@ -42,7 +47,7 @@ const config = {
42
47
  // Using the plugin directly because there's no config file to load in the virtual plugins
43
48
  openApiPlugin({
44
49
  type: "url",
45
- input: apiUrl!,
50
+ input: apiUrl,
46
51
  path: "/",
47
52
  }),
48
53
  ],
@@ -1,4 +1,4 @@
1
- import { CircleDashed, LucideProps } from "lucide-react";
1
+ import { CircleDashed, type LucideProps } from "lucide-react";
2
2
  import {
3
3
  Tooltip,
4
4
  TooltipContent,
@@ -109,6 +109,7 @@ describe("getIssuer", () => {
109
109
  it("should throw error for unsupported authentication type", async () => {
110
110
  const config = {
111
111
  authentication: {
112
+ // biome-ignore lint/suspicious/noExplicitAny: Allow any type
112
113
  type: "unsupported" as any,
113
114
  },
114
115
  } as ZudokuConfig;
@@ -1,8 +1,8 @@
1
1
  import { LogOutIcon } from "lucide-react";
2
- import {
3
- type CommonPlugin,
4
- type NavigationPlugin,
5
- type ProfileMenuPlugin,
2
+ import type {
3
+ CommonPlugin,
4
+ NavigationPlugin,
5
+ ProfileMenuPlugin,
6
6
  } from "../core/plugins.js";
7
7
  import { SignIn } from "./components/SignIn.js";
8
8
  import { SignOut } from "./components/SignOut.js";
@@ -8,6 +8,6 @@ export interface AuthenticationPlugin {
8
8
  signRequest(request: Request): Promise<Request>;
9
9
  }
10
10
 
11
- export interface AuthenticationProviderInitializer<TConfig> {
12
- (config: TConfig): AuthenticationPlugin;
13
- }
11
+ export type AuthenticationProviderInitializer<TConfig> = (
12
+ config: TConfig,
13
+ ) => AuthenticationPlugin;
@@ -72,7 +72,7 @@ const errorDetailsMap: Record<string, { message: string }> = {
72
72
  },
73
73
  };
74
74
 
75
- export function OAuthErrorPage({ error }: { error: any }) {
75
+ export function OAuthErrorPage({ error }: { error: unknown }) {
76
76
  const { login } = useAuth();
77
77
 
78
78
  if (!(error instanceof OAuthAuthorizationError)) {
@@ -8,7 +8,7 @@ export const SignOut = () => {
8
8
 
9
9
  useEffect(() => {
10
10
  void context.authentication?.signOut().then(() => navigate("/"));
11
- }, []);
11
+ }, [context.authentication, navigate]);
12
12
 
13
13
  return null;
14
14
  };
@@ -1,7 +1,7 @@
1
- import { type Auth0AuthenticationConfig } from "../../../config/config.js";
2
- import {
3
- type AuthenticationPlugin,
4
- type AuthenticationProviderInitializer,
1
+ import type { Auth0AuthenticationConfig } from "../../../config/config.js";
2
+ import type {
3
+ AuthenticationPlugin,
4
+ AuthenticationProviderInitializer,
5
5
  } from "../authentication.js";
6
6
  import { useAuthState } from "../state.js";
7
7
  import { OpenIDAuthenticationProvider } from "./openid.js";
@@ -64,7 +64,7 @@ class Auth0AuthenticationProvider
64
64
 
65
65
  // window.location.href = logoutUrl.toString();
66
66
  } else {
67
- const logoutUrl = new URL(
67
+ const _logoutUrl = new URL(
68
68
  `${this.issuer.replace(/\/$/, "")}/oidc/logout`,
69
69
  );
70
70
  // window.location.href = logoutUrl.toString();
@@ -1,14 +1,14 @@
1
1
  import type { AuthenticationResult, EventMessage } from "@azure/msal-browser";
2
2
  import { EventType, PublicClientApplication } from "@azure/msal-browser";
3
3
  import { ErrorBoundary } from "react-error-boundary";
4
- import { type AzureB2CAuthenticationConfig } from "../../../config/config.js";
4
+ import type { AzureB2CAuthenticationConfig } from "../../../config/config.js";
5
5
  import { ClientOnly } from "../../components/ClientOnly.js";
6
6
  import { joinUrl } from "../../util/joinUrl.js";
7
- import {
8
- type AuthenticationPlugin,
9
- type AuthenticationProviderInitializer,
10
- } from "../authentication.js";
11
7
  import { CoreAuthenticationPlugin } from "../AuthenticationPlugin.js";
8
+ import type {
9
+ AuthenticationPlugin,
10
+ AuthenticationProviderInitializer,
11
+ } from "../authentication.js";
12
12
  import { CallbackHandler } from "../components/CallbackHandler.js";
13
13
  import { OAuthErrorPage } from "../components/OAuthErrorPage.js";
14
14
  import { AuthorizationError } from "../errors.js";
@@ -1,10 +1,10 @@
1
1
  import type { Clerk } from "@clerk/clerk-js";
2
2
  import { LogOutIcon } from "lucide-react";
3
- import { type ZudokuPlugin } from "zudoku/plugins";
4
- import { type ClerkAuthenticationConfig } from "../../../config/config.js";
5
- import {
6
- type AuthenticationPlugin,
7
- type AuthenticationProviderInitializer,
3
+ import type { ZudokuPlugin } from "zudoku/plugins";
4
+ import type { ClerkAuthenticationConfig } from "../../../config/config.js";
5
+ import type {
6
+ AuthenticationPlugin,
7
+ AuthenticationProviderInitializer,
8
8
  } from "../authentication.js";
9
9
  import { SignIn } from "../components/SignIn.js";
10
10
  import { SignOut } from "../components/SignOut.js";
@@ -1,18 +1,18 @@
1
1
  import logger from "loglevel";
2
2
  import * as oauth from "oauth4webapi";
3
3
  import { ErrorBoundary } from "react-error-boundary";
4
- import { type OpenIDAuthenticationConfig } from "../../../config/config.js";
4
+ import type { OpenIDAuthenticationConfig } from "../../../config/config.js";
5
5
  import { ClientOnly } from "../../components/ClientOnly.js";
6
6
  import { joinUrl } from "../../util/joinUrl.js";
7
- import {
8
- type AuthenticationPlugin,
9
- type AuthenticationProviderInitializer,
10
- } from "../authentication.js";
11
7
  import { CoreAuthenticationPlugin } from "../AuthenticationPlugin.js";
8
+ import type {
9
+ AuthenticationPlugin,
10
+ AuthenticationProviderInitializer,
11
+ } from "../authentication.js";
12
12
  import { CallbackHandler } from "../components/CallbackHandler.js";
13
13
  import { OAuthErrorPage } from "../components/OAuthErrorPage.js";
14
14
  import { AuthorizationError, OAuthAuthorizationError } from "../errors.js";
15
- import { useAuthState, type UserProfile } from "../state.js";
15
+ import { type UserProfile, useAuthState } from "../state.js";
16
16
 
17
17
  const CODE_VERIFIER_KEY = "code-verifier";
18
18
  const STATE_KEY = "oauth-state";
@@ -4,14 +4,14 @@ import {
4
4
  type Session,
5
5
  type SupabaseClient,
6
6
  } from "@supabase/supabase-js";
7
- import { type SupabaseAuthenticationConfig } from "../../../config/config.js";
8
- import {
9
- type AuthenticationPlugin,
10
- type AuthenticationProviderInitializer,
11
- } from "../authentication.js";
7
+ import type { SupabaseAuthenticationConfig } from "../../../config/config.js";
12
8
  import { CoreAuthenticationPlugin } from "../AuthenticationPlugin.js";
9
+ import type {
10
+ AuthenticationPlugin,
11
+ AuthenticationProviderInitializer,
12
+ } from "../authentication.js";
13
13
  import { AuthorizationError } from "../errors.js";
14
- import { useAuthState, type UserProfile } from "../state.js";
14
+ import { type UserProfile, useAuthState } from "../state.js";
15
15
 
16
16
  class SupabaseAuthenticationProvider
17
17
  extends CoreAuthenticationPlugin
@@ -21,6 +21,7 @@ class SupabaseAuthenticationProvider
21
21
  private readonly provider: Provider;
22
22
  private readonly redirectToAfterSignUp: string;
23
23
  private readonly redirectToAfterSignIn: string;
24
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: Keep around
24
25
  private readonly redirectToAfterSignOut: string;
25
26
 
26
27
  constructor({
@@ -1,6 +1,6 @@
1
1
  // https://github.com/Romainlg29/use-broadcast/
2
2
 
3
- import { StateCreator, StoreMutatorIdentifier } from "zustand";
3
+ import type { StateCreator, StoreMutatorIdentifier } from "zustand";
4
4
 
5
5
  export type SharedOptions = {
6
6
  /**
@@ -71,7 +71,7 @@ const sharedImpl: SharedImpl = (f, options) => (set, get, store) => {
71
71
  self instanceof WorkerGlobalScope
72
72
  )
73
73
  ) {
74
- // eslint-disable-next-line no-console
74
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
75
75
  console.warn(
76
76
  "BroadcastChannel is not supported in this environment. The store will not be shared.",
77
77
  );
@@ -82,7 +82,7 @@ const sharedImpl: SharedImpl = (f, options) => (set, get, store) => {
82
82
  * If BroadcastChannel is not supported, return the basic store
83
83
  */
84
84
  if (typeof BroadcastChannel === "undefined") {
85
- // eslint-disable-next-line no-console
85
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
86
86
  console.warn(
87
87
  "BroadcastChannel is not supported in this browser. The store will not be shared.",
88
88
  );
@@ -220,7 +220,7 @@ const sharedImpl: SharedImpl = (f, options) => (set, get, store) => {
220
220
  /**
221
221
  * Set the new tab / window id
222
222
  */
223
- const new_id = tabs[tabs.length - 1]! + 1;
223
+ const new_id = (tabs[tabs.length - 1] ?? 0) + 1;
224
224
  tabs.push(new_id);
225
225
 
226
226
  options?.onTabsChange?.(tabs);
@@ -93,13 +93,13 @@ export const useBroadcast = <T>(
93
93
  * If BroadcastChannel is not supported, we log an error and return
94
94
  */
95
95
  if (typeof window === "undefined") {
96
- // eslint-disable-next-line no-console
96
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
97
97
  console.error("Window is undefined!");
98
98
  return;
99
99
  }
100
100
 
101
101
  if (!window.BroadcastChannel) {
102
- // eslint-disable-next-line no-console
102
+ // biome-ignore lint/suspicious/noConsole: Logging allowed here
103
103
  console.error("BroadcastChannel is not supported!");
104
104
  return;
105
105
  }
@@ -1,4 +1,4 @@
1
- import { type MouseEvent } from "react";
1
+ import type { MouseEvent } from "react";
2
2
  import { NavLink, type NavLinkProps, useHref, useLocation } from "react-router";
3
3
  import { useScrollToHash } from "../util/useScrollToAnchor.js";
4
4