zudoku 0.51.0 → 0.52.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 (312) hide show
  1. package/dist/config/validators/InputNavigationSchema.d.ts +152 -0
  2. package/dist/config/validators/icon-types.d.ts +1 -1
  3. package/dist/config/validators/icon-types.js +38 -0
  4. package/dist/config/validators/icon-types.js.map +1 -1
  5. package/dist/config/validators/validate.d.ts +10 -0
  6. package/dist/config/validators/validate.js +7 -0
  7. package/dist/config/validators/validate.js.map +1 -1
  8. package/dist/flat-config.d.ts +6 -1
  9. package/dist/lib/components/Autocomplete.js +1 -1
  10. package/dist/lib/components/Autocomplete.js.map +1 -1
  11. package/dist/lib/components/ErrorPage.js +2 -2
  12. package/dist/lib/components/ErrorPage.js.map +1 -1
  13. package/dist/lib/components/Markdown.d.ts +0 -1
  14. package/dist/lib/components/Markdown.js +2 -3
  15. package/dist/lib/components/Markdown.js.map +1 -1
  16. package/dist/lib/components/NotFoundPage.js +2 -2
  17. package/dist/lib/components/NotFoundPage.js.map +1 -1
  18. package/dist/lib/components/Pagination.js +1 -1
  19. package/dist/lib/components/Pagination.js.map +1 -1
  20. package/dist/lib/components/Typography.d.ts +5 -0
  21. package/dist/lib/components/Typography.js +8 -0
  22. package/dist/lib/components/Typography.js.map +1 -0
  23. package/dist/lib/components/index.d.ts +4 -0
  24. package/dist/lib/components/index.js +2 -0
  25. package/dist/lib/components/index.js.map +1 -1
  26. package/dist/lib/errors/ErrorAlert.js +2 -3
  27. package/dist/lib/errors/ErrorAlert.js.map +1 -1
  28. package/dist/lib/hooks/useHotkey.d.ts +4 -0
  29. package/dist/lib/hooks/useHotkey.js +58 -0
  30. package/dist/lib/hooks/useHotkey.js.map +1 -0
  31. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +4 -8
  32. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  33. package/dist/lib/plugins/custom-pages/index.d.ts +1 -4
  34. package/dist/lib/plugins/custom-pages/index.js +1 -3
  35. package/dist/lib/plugins/custom-pages/index.js.map +1 -1
  36. package/dist/lib/plugins/markdown/MdxPage.d.ts +1 -2
  37. package/dist/lib/plugins/markdown/MdxPage.js +22 -6
  38. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  39. package/dist/lib/plugins/markdown/index.d.ts +8 -1
  40. package/dist/lib/plugins/markdown/index.js +1 -1
  41. package/dist/lib/plugins/markdown/index.js.map +1 -1
  42. package/dist/lib/plugins/openapi/OperationList.js +2 -3
  43. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  44. package/dist/lib/plugins/openapi/OperationListItem.js +2 -2
  45. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  46. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  47. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  48. package/dist/lib/plugins/openapi/SchemaList.js +2 -3
  49. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  50. package/dist/lib/plugins/openapi/playground/BodyPanel.js +14 -11
  51. package/dist/lib/plugins/openapi/playground/BodyPanel.js.map +1 -1
  52. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.d.ts +8 -0
  53. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js +11 -0
  54. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js.map +1 -0
  55. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +2 -2
  56. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
  57. package/dist/lib/plugins/openapi/playground/Headers.d.ts +3 -2
  58. package/dist/lib/plugins/openapi/playground/Headers.js +52 -30
  59. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  60. package/dist/lib/plugins/openapi/playground/IdentityDialog.js +2 -1
  61. package/dist/lib/plugins/openapi/playground/IdentityDialog.js.map +1 -1
  62. package/dist/lib/plugins/openapi/playground/IdentitySelector.js +1 -2
  63. package/dist/lib/plugins/openapi/playground/IdentitySelector.js.map +1 -1
  64. package/dist/lib/plugins/openapi/playground/InlineInput.js +1 -1
  65. package/dist/lib/plugins/openapi/playground/InlineInput.js.map +1 -1
  66. package/dist/lib/plugins/openapi/playground/ParamsGrid.js +2 -2
  67. package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -1
  68. package/dist/lib/plugins/openapi/playground/PathParams.js +1 -2
  69. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  70. package/dist/lib/plugins/openapi/playground/Playground.js +52 -34
  71. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  72. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +1 -1
  73. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  74. package/dist/lib/plugins/openapi/playground/QueryParams.d.ts +2 -2
  75. package/dist/lib/plugins/openapi/playground/QueryParams.js +38 -23
  76. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  77. package/dist/lib/plugins/openapi/playground/Spinner.d.ts +2 -0
  78. package/dist/lib/plugins/openapi/playground/Spinner.js +63 -0
  79. package/dist/lib/plugins/openapi/playground/Spinner.js.map +1 -0
  80. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.d.ts +3 -0
  81. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.js +13 -0
  82. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.js.map +1 -0
  83. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.d.ts +1 -0
  84. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js +12 -0
  85. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js.map +1 -0
  86. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.d.ts +12 -0
  87. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.js +11 -0
  88. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.js.map +1 -0
  89. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.d.ts +6 -0
  90. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js +66 -0
  91. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js.map +1 -0
  92. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.d.ts +7 -4
  93. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +23 -32
  94. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  95. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +2 -2
  96. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +8 -10
  97. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -1
  98. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +3 -3
  99. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  100. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +2 -3
  101. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  102. package/dist/lib/plugins/openapi/schema/SchemaView.js +4 -4
  103. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  104. package/dist/lib/plugins/openapi/schema/utils.js +3 -2
  105. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  106. package/dist/lib/ui/CodeBlock.js +5 -6
  107. package/dist/lib/ui/CodeBlock.js.map +1 -1
  108. package/dist/lib/ui/Dialog.js +1 -1
  109. package/dist/lib/ui/Dialog.js.map +1 -1
  110. package/dist/lib/ui/Select.js +1 -1
  111. package/dist/lib/util/os.d.ts +2 -0
  112. package/dist/lib/util/os.js +21 -0
  113. package/dist/lib/util/os.js.map +1 -0
  114. package/dist/lib/util/useCopyToClipboard.d.ts +1 -0
  115. package/dist/lib/util/useCopyToClipboard.js +11 -0
  116. package/dist/lib/util/useCopyToClipboard.js.map +1 -0
  117. package/dist/vite/api/SchemaManager.js +6 -2
  118. package/dist/vite/api/SchemaManager.js.map +1 -1
  119. package/dist/vite/api/schema-codegen.js +42 -11
  120. package/dist/vite/api/schema-codegen.js.map +1 -1
  121. package/dist/vite/api/schema-codegen.test.js +82 -0
  122. package/dist/vite/api/schema-codegen.test.js.map +1 -1
  123. package/dist/vite/mdx/remark-last-modified.d.ts +3 -0
  124. package/dist/vite/mdx/remark-last-modified.js +56 -0
  125. package/dist/vite/mdx/remark-last-modified.js.map +1 -0
  126. package/dist/vite/mdx/utils.d.ts +2 -0
  127. package/dist/vite/mdx/utils.js +31 -0
  128. package/dist/vite/mdx/utils.js.map +1 -0
  129. package/dist/vite/plugin-frontmatter.js +4 -2
  130. package/dist/vite/plugin-frontmatter.js.map +1 -1
  131. package/dist/vite/plugin-mdx.js +11 -33
  132. package/dist/vite/plugin-mdx.js.map +1 -1
  133. package/dist/vite/plugin-theme.js +21 -9
  134. package/dist/vite/plugin-theme.js.map +1 -1
  135. package/dist/vite/plugin-theme.test.js +22 -1
  136. package/dist/vite/plugin-theme.test.js.map +1 -1
  137. package/lib/Alert-CT_ViLrJ.js +161 -0
  138. package/lib/Alert-CT_ViLrJ.js.map +1 -0
  139. package/lib/CodeBlock-DAKxs_Tu.js +85 -0
  140. package/lib/CodeBlock-DAKxs_Tu.js.map +1 -0
  141. package/lib/Command-CPtGTZAL.js +140 -0
  142. package/lib/Command-CPtGTZAL.js.map +1 -0
  143. package/lib/{Dialog-BxpuVLh9.js → Dialog-DGlrUTCS.js} +4 -4
  144. package/lib/Dialog-DGlrUTCS.js.map +1 -0
  145. package/lib/MdxPage-D-QSUlMf.js +110 -0
  146. package/lib/MdxPage-D-QSUlMf.js.map +1 -0
  147. package/lib/{OasProvider-BC0q5m3u.js → OasProvider-DS23Ds76.js} +3 -3
  148. package/lib/{OasProvider-BC0q5m3u.js.map → OasProvider-DS23Ds76.js.map} +1 -1
  149. package/lib/{OperationList-Dpip6ozi.js → OperationList-CLidyzBx.js} +578 -567
  150. package/lib/OperationList-CLidyzBx.js.map +1 -0
  151. package/lib/Pagination-ClHXydm9.js +36 -0
  152. package/lib/Pagination-ClHXydm9.js.map +1 -0
  153. package/lib/RouteGuard-Bd-ppFbi.js +737 -0
  154. package/lib/RouteGuard-Bd-ppFbi.js.map +1 -0
  155. package/lib/{SchemaList-t4BIfh6Z.js → SchemaList-AJ8eFhvU.js} +26 -37
  156. package/lib/SchemaList-AJ8eFhvU.js.map +1 -0
  157. package/lib/{SchemaView-CLxthVcA.js → SchemaView-B9MTum2V.js} +94 -103
  158. package/lib/SchemaView-B9MTum2V.js.map +1 -0
  159. package/lib/{SignUp-B6w5AwHM.js → SignUp-CfojO4Pb.js} +13 -13
  160. package/lib/{SignUp-B6w5AwHM.js.map → SignUp-CfojO4Pb.js.map} +1 -1
  161. package/lib/{Markdown-BQ8YqLsz.js → Slot-DwZlQ-vX.js} +3347 -3001
  162. package/lib/Slot-DwZlQ-vX.js.map +1 -0
  163. package/lib/{SyntaxHighlight-C5ja40ix.js → SyntaxHighlight-CrjhGEwT.js} +3 -3
  164. package/lib/{SyntaxHighlight-C5ja40ix.js.map → SyntaxHighlight-CrjhGEwT.js.map} +1 -1
  165. package/lib/{Toc-BS0f4GTe.js → Toc-WCmwFkX-.js} +2 -2
  166. package/lib/{Toc-BS0f4GTe.js.map → Toc-WCmwFkX-.js.map} +1 -1
  167. package/lib/{chunk-DQRVZFIR-BblmKnHy.js → chunk-DQRVZFIR-DHK7_Ilc.js} +7 -7
  168. package/lib/{chunk-DQRVZFIR-BblmKnHy.js.map → chunk-DQRVZFIR-DHK7_Ilc.js.map} +1 -1
  169. package/lib/{circular-DfOaDE_x.js → circular-0wOQ8KUO.js} +2 -2
  170. package/lib/{circular-DfOaDE_x.js.map → circular-0wOQ8KUO.js.map} +1 -1
  171. package/lib/clerk-BDZ31hjU.js +25190 -0
  172. package/lib/clerk-BDZ31hjU.js.map +1 -0
  173. package/lib/{createServer-DjOMygls.js → createServer-Brtv5_hp.js} +4 -4
  174. package/lib/{createServer-DjOMygls.js.map → createServer-Brtv5_hp.js.map} +1 -1
  175. package/lib/{errors-D_5vKvUq.js → errors-BsabiSKg.js} +5 -5
  176. package/lib/{errors-D_5vKvUq.js.map → errors-BsabiSKg.js.map} +1 -1
  177. package/lib/{hook-CHXroBFt.js → hook-Bd0yS8M0.js} +36 -36
  178. package/lib/{hook-CHXroBFt.js.map → hook-Bd0yS8M0.js.map} +1 -1
  179. package/lib/index-BIbCx5Fh.js +3919 -0
  180. package/lib/index-BIbCx5Fh.js.map +1 -0
  181. package/lib/index-BoBGmARR.js +3458 -0
  182. package/lib/index-BoBGmARR.js.map +1 -0
  183. package/lib/{index-BvvmIczU.js → index-CcV90rin.js} +2 -2
  184. package/lib/{index-BvvmIczU.js.map → index-CcV90rin.js.map} +1 -1
  185. package/lib/index-ClhS5TxS.js +107 -0
  186. package/lib/index-ClhS5TxS.js.map +1 -0
  187. package/lib/ui/CodeBlock.js +6 -73
  188. package/lib/ui/CodeBlock.js.map +1 -1
  189. package/lib/ui/Command.js +1 -1
  190. package/lib/ui/Dialog.js +1 -1
  191. package/lib/ui/Dialog.js.map +1 -1
  192. package/lib/ui/Select.js +1 -1
  193. package/lib/ui/Select.js.map +1 -1
  194. package/lib/ui/SyntaxHighlight.js +3 -3
  195. package/lib/{useExposedProps-BZQkZneR.js → useExposedProps-BIYjecPD.js} +2 -2
  196. package/lib/{useExposedProps-BZQkZneR.js.map → useExposedProps-BIYjecPD.js.map} +1 -1
  197. package/lib/zudoku.auth-auth0.js +1 -1
  198. package/lib/zudoku.auth-azureb2c.js +2 -2
  199. package/lib/zudoku.auth-clerk.js +3 -3
  200. package/lib/zudoku.auth-openid.js +2 -2
  201. package/lib/zudoku.components.js +33 -3534
  202. package/lib/zudoku.components.js.map +1 -1
  203. package/lib/zudoku.hooks.js +10 -11
  204. package/lib/zudoku.hooks.js.map +1 -1
  205. package/lib/zudoku.plugin-api-catalog.js +6 -6
  206. package/lib/zudoku.plugin-api-keys.js +268 -321
  207. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  208. package/lib/zudoku.plugin-custom-pages.js +8 -20
  209. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  210. package/lib/zudoku.plugin-markdown.js +4 -5
  211. package/lib/zudoku.plugin-markdown.js.map +1 -1
  212. package/lib/zudoku.plugin-openapi.js +3 -3
  213. package/lib/zudoku.plugin-redirect.js +1 -1
  214. package/lib/zudoku.plugin-search-pagefind.js +201 -111
  215. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  216. package/package.json +5 -4
  217. package/src/lib/components/Autocomplete.tsx +1 -0
  218. package/src/lib/components/ErrorPage.tsx +3 -3
  219. package/src/lib/components/Markdown.tsx +3 -5
  220. package/src/lib/components/NotFoundPage.tsx +3 -3
  221. package/src/lib/components/Pagination.tsx +4 -4
  222. package/src/lib/components/Typography.tsx +14 -0
  223. package/src/lib/components/index.ts +2 -0
  224. package/src/lib/errors/ErrorAlert.tsx +3 -9
  225. package/src/lib/hooks/useHotkey.ts +70 -0
  226. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +5 -9
  227. package/src/lib/plugins/custom-pages/index.tsx +2 -6
  228. package/src/lib/plugins/markdown/MdxPage.tsx +66 -15
  229. package/src/lib/plugins/markdown/index.tsx +10 -2
  230. package/src/lib/plugins/openapi/OperationList.tsx +7 -17
  231. package/src/lib/plugins/openapi/OperationListItem.tsx +2 -2
  232. package/src/lib/plugins/openapi/ParameterListItem.tsx +6 -0
  233. package/src/lib/plugins/openapi/SchemaList.tsx +3 -9
  234. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +36 -28
  235. package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +47 -0
  236. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +7 -3
  237. package/src/lib/plugins/openapi/playground/Headers.tsx +187 -89
  238. package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +3 -2
  239. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +7 -12
  240. package/src/lib/plugins/openapi/playground/InlineInput.tsx +1 -1
  241. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +2 -2
  242. package/src/lib/plugins/openapi/playground/PathParams.tsx +3 -4
  243. package/src/lib/plugins/openapi/playground/Playground.tsx +196 -136
  244. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +1 -1
  245. package/src/lib/plugins/openapi/playground/QueryParams.tsx +102 -58
  246. package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -0
  247. package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -0
  248. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +25 -0
  249. package/src/lib/plugins/openapi/playground/result-panel/Highlight.tsx +26 -0
  250. package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +104 -0
  251. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +98 -97
  252. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +62 -92
  253. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +3 -3
  254. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +2 -3
  255. package/src/lib/plugins/openapi/schema/SchemaView.tsx +5 -10
  256. package/src/lib/plugins/openapi/schema/utils.ts +3 -2
  257. package/src/lib/ui/CodeBlock.tsx +5 -6
  258. package/src/lib/ui/Dialog.tsx +1 -1
  259. package/src/lib/ui/Select.tsx +1 -1
  260. package/src/lib/util/os.ts +18 -0
  261. package/src/lib/util/useCopyToClipboard.ts +17 -0
  262. package/dist/lib/plugins/custom-pages/CustomPage.d.ts +0 -2
  263. package/dist/lib/plugins/custom-pages/CustomPage.js +0 -11
  264. package/dist/lib/plugins/custom-pages/CustomPage.js.map +0 -1
  265. package/dist/lib/plugins/openapi/playground/UrlDisplay.d.ts +0 -4
  266. package/dist/lib/plugins/openapi/playground/UrlDisplay.js +0 -22
  267. package/dist/lib/plugins/openapi/playground/UrlDisplay.js.map +0 -1
  268. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.d.ts +0 -7
  269. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js +0 -11
  270. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js.map +0 -1
  271. package/lib/Callout-CoVxYafP.js +0 -231
  272. package/lib/Callout-CoVxYafP.js.map +0 -1
  273. package/lib/CategoryHeading-Cu2RwgjC.js +0 -10
  274. package/lib/CategoryHeading-Cu2RwgjC.js.map +0 -1
  275. package/lib/Dialog-BxpuVLh9.js.map +0 -1
  276. package/lib/Markdown-BQ8YqLsz.js.map +0 -1
  277. package/lib/MdxPage-DJvKmI-r.js +0 -84
  278. package/lib/MdxPage-DJvKmI-r.js.map +0 -1
  279. package/lib/OperationList-Dpip6ozi.js.map +0 -1
  280. package/lib/Pagination-CCxhL836.js +0 -36
  281. package/lib/Pagination-CCxhL836.js.map +0 -1
  282. package/lib/RouteGuard-gV7nvzi7.js +0 -55
  283. package/lib/RouteGuard-gV7nvzi7.js.map +0 -1
  284. package/lib/SchemaList-t4BIfh6Z.js.map +0 -1
  285. package/lib/SchemaView-CLxthVcA.js.map +0 -1
  286. package/lib/Slot-CSEIvwwO.js +0 -161
  287. package/lib/Slot-CSEIvwwO.js.map +0 -1
  288. package/lib/clerk-yAKDC3Qz.js +0 -24812
  289. package/lib/clerk-yAKDC3Qz.js.map +0 -1
  290. package/lib/index--oeBayMa.js +0 -86
  291. package/lib/index--oeBayMa.js.map +0 -1
  292. package/lib/index-Bn6Lc9tq.js +0 -9
  293. package/lib/index-Bn6Lc9tq.js.map +0 -1
  294. package/lib/index-DW2qmCJa.js +0 -3227
  295. package/lib/index-DW2qmCJa.js.map +0 -1
  296. package/lib/index-QzXzw_ra.js +0 -24
  297. package/lib/index-QzXzw_ra.js.map +0 -1
  298. package/lib/index.esm-BFcSKCe-.js +0 -683
  299. package/lib/index.esm-BFcSKCe-.js.map +0 -1
  300. package/lib/mutation-BpcyTgWI.js +0 -196
  301. package/lib/mutation-BpcyTgWI.js.map +0 -1
  302. package/lib/objectEntries-yMIkr2mI.js +0 -5
  303. package/lib/objectEntries-yMIkr2mI.js.map +0 -1
  304. package/lib/react-nprogress.esm-C2MPXjiJ.js +0 -389
  305. package/lib/react-nprogress.esm-C2MPXjiJ.js.map +0 -1
  306. package/lib/useLatest-hmRS46UF.js +0 -11
  307. package/lib/useLatest-hmRS46UF.js.map +0 -1
  308. package/lib/useMutation-N4ockVKi.js +0 -97
  309. package/lib/useMutation-N4ockVKi.js.map +0 -1
  310. package/src/lib/plugins/custom-pages/CustomPage.tsx +0 -18
  311. package/src/lib/plugins/openapi/playground/UrlDisplay.tsx +0 -32
  312. package/src/lib/plugins/openapi/playground/result-panel/RequestTab.tsx +0 -73
@@ -1,125 +1,215 @@
1
1
  import { j as e } from "./jsx-runtime-C5mzlN2N.js";
2
- import { C as k } from "./ClientOnly-E7hGysn1.js";
2
+ import { C as w } from "./ClientOnly-E7hGysn1.js";
3
3
  import { VisuallyHidden as v } from "@radix-ui/react-visually-hidden";
4
- import { u as N, k as y, l as j, o as _, j as L } from "./hook-CHXroBFt.js";
5
- import { useRef as S, useLayoutEffect as T, useState as w } from "react";
6
- import { B as E } from "./Button-BE9IVkWV.js";
7
- import { C as R, a as f, b as p, c as F, d as I, e as q, f as P } from "./Callout-CoVxYafP.js";
8
- import { c as $ } from "./Dialog-BxpuVLh9.js";
9
- import { S as A } from "./RouteGuard-gV7nvzi7.js";
10
- import { BracketsIcon as D, FileTextIcon as O } from "lucide-react";
11
- import { a as B, L as g } from "./chunk-DQRVZFIR-BblmKnHy.js";
12
- const U = async ({
13
- search: r,
14
- options: a,
15
- auth: n,
16
- context: i
4
+ import { u as I, d as k, l as j, m as N, j as L } from "./hook-Bd0yS8M0.js";
5
+ import { useRef as C, useLayoutEffect as T, useState as E } from "react";
6
+ import { B as R } from "./Button-BE9IVkWV.js";
7
+ import { ShieldAlertIcon as F, AlertTriangleIcon as q, InfoIcon as b, LightbulbIcon as z, BracketsIcon as A, FileTextIcon as P } from "lucide-react";
8
+ import { c as u } from "./cn-wvCW-ho6.js";
9
+ import { C as $, a as f, b as h, c as D, d as O, e as B } from "./Command-CPtGTZAL.js";
10
+ import { b as U } from "./Dialog-DGlrUTCS.js";
11
+ import { S as G } from "./RouteGuard-Bd-ppFbi.js";
12
+ import { a as H, L as p } from "./chunk-DQRVZFIR-DHK7_Ilc.js";
13
+ const K = {
14
+ note: {
15
+ border: "border-gray-300 dark:border-zinc-800",
16
+ bg: "bg-gray-100 dark:bg-zinc-800/50",
17
+ iconColor: "text-gray-600 dark:text-zinc-300",
18
+ titleColor: "text-gray-600 dark:text-zinc-300",
19
+ textColor: "text-gray-600 dark:text-zinc-300",
20
+ Icon: b
21
+ },
22
+ tip: {
23
+ border: "border-green-500 dark:border-green-800",
24
+ bg: "bg-green-200/25 dark:bg-green-950/70",
25
+ iconColor: "text-green-600 dark:text-green-200",
26
+ titleColor: "text-green-700 dark:text-green-200",
27
+ textColor: "text-green-600 dark:text-green-50",
28
+ Icon: z
29
+ },
30
+ info: {
31
+ border: "border-blue-400 dark:border-blue-900/60",
32
+ bg: "bg-blue-50 dark:bg-blue-950/40",
33
+ iconColor: "text-blue-400 dark:text-blue-200",
34
+ titleColor: "text-blue-700 dark:text-blue-200",
35
+ textColor: "text-blue-600 dark:text-blue-100",
36
+ Icon: b
37
+ },
38
+ caution: {
39
+ border: "border-yellow-400 dark:border-yellow-400/25",
40
+ bg: "bg-yellow-100/60 dark:bg-yellow-400/10",
41
+ iconColor: "text-yellow-500 dark:text-yellow-300",
42
+ titleColor: "text-yellow-600 dark:text-yellow-300",
43
+ textColor: "text-yellow-700 dark:text-yellow-200",
44
+ Icon: q
45
+ },
46
+ danger: {
47
+ border: "border-rose-400 dark:border-rose-800",
48
+ bg: "bg-rose-50 dark:bg-rose-950/40",
49
+ iconColor: "text-rose-400 dark:text-rose-300",
50
+ titleColor: "text-rose-800 dark:text-rose-300",
51
+ textColor: "text-rose-700 dark:text-rose-100",
52
+ Icon: F
53
+ }
54
+ }, M = ({
55
+ type: t,
56
+ children: n,
57
+ title: o,
58
+ className: l,
59
+ icon: a = !0
17
60
  }) => {
18
- const o = a.maxResults ?? 10, s = a.transformResults ?? (() => !0), t = [], c = z({
19
- search: r,
61
+ const { border: s, bg: r, iconColor: i, titleColor: c, textColor: d, Icon: m } = K[t];
62
+ return /* @__PURE__ */ e.jsxs(
63
+ "div",
64
+ {
65
+ className: u(
66
+ "not-prose rounded-md border p-4 text-md my-2",
67
+ a && "grid grid-cols-[min-content_1fr] items-baseline grid-rows-[fit-content_1fr] gap-x-4 gap-y-2",
68
+ !a && o && "flex flex-col gap-2",
69
+ "[&_a]:underline [&_a]:decoration-current [&_a]:decoration-from-font [&_a]:underline-offset-4 hover:[&_a]:decoration-1",
70
+ "[&_.code-block-wrapper]:border",
71
+ "[&_ul]:list-disc [&_ol]:list-decimal [&_ul]:ps-4 [&_ul>li]:ps-1 [&_ul>li]:my-1",
72
+ a && o && "items-center",
73
+ s,
74
+ r,
75
+ l
76
+ ),
77
+ children: [
78
+ a && /* @__PURE__ */ e.jsx(
79
+ m,
80
+ {
81
+ className: u(o ? "align-middle" : "translate-y-1", i),
82
+ size: 20,
83
+ "aria-hidden": "true"
84
+ }
85
+ ),
86
+ o && /* @__PURE__ */ e.jsx("h3", { className: u("font-medium", c), children: o }),
87
+ /* @__PURE__ */ e.jsx(
88
+ "div",
89
+ {
90
+ className: u(
91
+ a && "col-start-2",
92
+ !o && a && "row-start-1",
93
+ d,
94
+ "overflow-x-auto"
95
+ ),
96
+ children: n
97
+ }
98
+ )
99
+ ]
100
+ }
101
+ );
102
+ }, V = async ({
103
+ search: t,
104
+ options: n,
105
+ auth: o,
106
+ context: l
107
+ }) => {
108
+ const a = n.maxResults ?? 10, s = n.transformResults ?? (() => !0), r = [], i = Y({
109
+ search: t,
20
110
  transformFn: s,
21
- auth: n,
22
- context: i
111
+ auth: o,
112
+ context: l
23
113
  });
24
- for await (const l of c)
25
- if (t.push(l), t.length >= o) break;
26
- return t;
114
+ for await (const c of i)
115
+ if (r.push(c), r.length >= a) break;
116
+ return r;
27
117
  };
28
- async function* z({
29
- search: r,
30
- transformFn: a,
31
- auth: n,
32
- context: i
118
+ async function* Y({
119
+ search: t,
120
+ transformFn: n,
121
+ auth: o,
122
+ context: l
33
123
  }) {
34
124
  let s = 0;
35
- for (; s < r.results.length; ) {
36
- const t = r.results.slice(
125
+ for (; s < t.results.length; ) {
126
+ const r = t.results.slice(
37
127
  s,
38
128
  s + 5
39
129
  );
40
- s += t.length;
41
- const c = await Promise.all(t.map((l) => l.data()));
42
- for (const l of c) {
43
- const d = a({ result: l, auth: n, context: i });
44
- d !== !1 && (d === !0 || d == null ? yield l : yield d);
130
+ s += r.length;
131
+ const i = await Promise.all(r.map((c) => c.data()));
132
+ for (const c of i) {
133
+ const d = n({ result: c, auth: o, context: l });
134
+ d !== !1 && (d === !0 || d == null ? yield c : yield d);
45
135
  }
46
136
  }
47
137
  }
48
- const G = (r, a) => {
49
- const n = r.weighted_locations.reduce(
50
- (o, s) => o + s.balanced_score,
138
+ const Q = (t, n) => {
139
+ const o = t.weighted_locations.reduce(
140
+ (a, s) => a + s.balanced_score,
51
141
  0
52
142
  );
53
- return a.weighted_locations.reduce(
54
- (o, s) => o + s.balanced_score,
143
+ return n.weighted_locations.reduce(
144
+ (a, s) => a + s.balanced_score,
55
145
  0
56
- ) - n;
57
- }, x = "cursor-pointer border border-transparent data-[selected=true]:border-border", H = ({
58
- searchResults: r,
59
- searchTerm: a,
60
- onClose: n,
61
- maxSubResults: i = 4
146
+ ) - o;
147
+ }, y = "cursor-pointer border border-transparent data-[selected=true]:border-border", Z = ({
148
+ searchResults: t,
149
+ searchTerm: n,
150
+ onClose: o,
151
+ maxSubResults: l = 4
62
152
  }) => {
63
- const o = B(), s = S(null);
153
+ const a = H(), s = C(null);
64
154
  return T(() => {
65
155
  requestIdleCallback(() => {
66
156
  s.current?.scrollTo({ top: 0 });
67
157
  });
68
- }, [a]), /* @__PURE__ */ e.jsxs(R, { className: "max-h-[450px]", ref: s, children: [
69
- a && r.length > 0 && /* @__PURE__ */ e.jsx(
158
+ }, [n]), /* @__PURE__ */ e.jsxs($, { className: "max-h-[450px]", ref: s, children: [
159
+ n && t.length > 0 && /* @__PURE__ */ e.jsx(
70
160
  f,
71
161
  {
72
162
  className: "text-sm text-muted-foreground",
73
- heading: `${r.length} results for "${a}"`
163
+ heading: `${t.length} results for "${n}"`
74
164
  }
75
165
  ),
76
- a && r.map((t) => /* @__PURE__ */ e.jsxs(
166
+ n && t.map((r) => /* @__PURE__ */ e.jsxs(
77
167
  f,
78
168
  {
79
169
  children: [
80
170
  /* @__PURE__ */ e.jsx(
81
- p,
171
+ h,
82
172
  {
83
173
  asChild: !0,
84
- value: `${t.meta.title}-${t.url}`,
85
- className: x,
174
+ value: `${r.meta.title}-${r.url}`,
175
+ className: y,
86
176
  onSelect: () => {
87
- o(t.url), n();
177
+ a(r.url), o();
88
178
  },
89
- children: /* @__PURE__ */ e.jsxs(g, { to: t.url, children: [
90
- t.meta.section === "openapi" ? /* @__PURE__ */ e.jsx(D, {}) : /* @__PURE__ */ e.jsx(O, {}),
91
- t.meta.title
179
+ children: /* @__PURE__ */ e.jsxs(p, { to: r.url, children: [
180
+ r.meta.section === "openapi" ? /* @__PURE__ */ e.jsx(A, {}) : /* @__PURE__ */ e.jsx(P, {}),
181
+ r.meta.title
92
182
  ] })
93
183
  }
94
184
  ),
95
- t.sub_results.sort(G).slice(0, i).map((c) => /* @__PURE__ */ e.jsx(
96
- p,
185
+ r.sub_results.sort(Q).slice(0, l).map((i) => /* @__PURE__ */ e.jsx(
186
+ h,
97
187
  {
98
188
  asChild: !0,
99
- value: `sub-${t.meta.title}-${c.url}`,
100
- className: x,
189
+ value: `sub-${r.meta.title}-${i.url}`,
190
+ className: y,
101
191
  onSelect: () => {
102
- o(c.url), n();
192
+ a(i.url), o();
103
193
  },
104
- children: /* @__PURE__ */ e.jsx(g, { to: c.url, onClick: n, children: /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col items-start gap-2 ms-2.5 ps-5 border-l border-muted-foreground/50", children: [
105
- /* @__PURE__ */ e.jsx("span", { className: "font-bold", children: c.title }),
194
+ children: /* @__PURE__ */ e.jsx(p, { to: i.url, onClick: o, children: /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col items-start gap-2 ms-2.5 ps-5 border-l border-muted-foreground/50", children: [
195
+ /* @__PURE__ */ e.jsx("span", { className: "font-bold", children: i.title }),
106
196
  /* @__PURE__ */ e.jsx(
107
197
  "span",
108
198
  {
109
199
  className: "text-[13px] [&_mark]:bg-primary [&_mark]:text-primary-foreground",
110
- dangerouslySetInnerHTML: { __html: c.excerpt }
200
+ dangerouslySetInnerHTML: { __html: i.excerpt }
111
201
  }
112
202
  )
113
203
  ] }) })
114
204
  },
115
- `sub-${t.meta.title}-${c.url}`
205
+ `sub-${r.meta.title}-${i.url}`
116
206
  ))
117
207
  ]
118
208
  },
119
- [t.meta.title ?? t.excerpt, t.url].join("-")
209
+ [r.meta.title ?? r.excerpt, r.url].join("-")
120
210
  ))
121
211
  ] });
122
- }, m = {
212
+ }, x = {
123
213
  // Slightly lower than default because API docs tend to have repetitive terms (parameter names, HTTP methods, etc.)
124
214
  termFrequency: 0.8,
125
215
  // Lower than default because API documentation pages tend to be longer due to comprehensive endpoint documentation
@@ -128,76 +218,76 @@ const G = (r, a) => {
128
218
  termSimilarity: 1.2,
129
219
  // Slightly lower than default because API docs might have legitimate repetition of terms
130
220
  termSaturation: 1.2
131
- }, K = (r) => import(
221
+ }, J = (t) => import(
132
222
  /* @vite-ignore */
133
- L(r, "/pagefind/pagefind.js")
134
- ), V = (r) => {
223
+ L(t, "/pagefind/pagefind.js")
224
+ ), W = (t) => {
135
225
  const {
136
- options: { basePath: a }
137
- } = y(), { data: n, ...i } = j({
138
- queryKey: ["pagefind", r.ranking],
226
+ options: { basePath: n }
227
+ } = k(), { data: o, ...l } = j({
228
+ queryKey: ["pagefind", t.ranking],
139
229
  retry: !1,
140
230
  queryFn: async () => {
141
- const o = await K(a);
142
- return await o.init(), await o.options({
231
+ const a = await J(n);
232
+ return await a.init(), await a.options({
143
233
  ranking: {
144
- termFrequency: r.ranking?.termFrequency ?? m.termFrequency,
145
- pageLength: r.ranking?.pageLength ?? m.pageLength,
146
- termSimilarity: r.ranking?.termSimilarity ?? m.termSimilarity,
147
- termSaturation: r.ranking?.termSaturation ?? m.termSaturation
234
+ termFrequency: t.ranking?.termFrequency ?? x.termFrequency,
235
+ pageLength: t.ranking?.pageLength ?? x.pageLength,
236
+ termSimilarity: t.ranking?.termSimilarity ?? x.termSimilarity,
237
+ termSaturation: t.ranking?.termSaturation ?? x.termSaturation
148
238
  }
149
- }), o;
239
+ }), a;
150
240
  },
151
241
  enabled: typeof window < "u"
152
242
  });
153
- return i.isError && i.error.message !== "NOT_BUILT_YET" && console.error(i.error), { ...i, pagefind: n };
154
- }, Y = ({
155
- isOpen: r,
156
- onClose: a,
157
- options: n
243
+ return l.isError && l.error.message !== "NOT_BUILT_YET" && console.error(l.error), { ...l, pagefind: o };
244
+ }, X = ({
245
+ isOpen: t,
246
+ onClose: n,
247
+ options: o
158
248
  }) => {
159
- const { pagefind: i, error: o, isError: s } = V(n), [t, c] = w(""), l = N(), d = y(), u = S(null), { data: b } = j({
160
- queryKey: ["pagefind-search", t, l.isAuthenticated],
249
+ const { pagefind: l, error: a, isError: s } = W(o), [r, i] = E(""), c = I(), d = k(), m = C(null), { data: S } = j({
250
+ queryKey: ["pagefind-search", r, c.isAuthenticated],
161
251
  queryFn: async () => {
162
- const C = l.isAuthenticated ? void 0 : { not: { section: A } }, h = await i?.search(t, { filters: C });
163
- return h ? U({ search: h, options: n, auth: l, context: d }) : [];
252
+ const _ = c.isAuthenticated ? void 0 : { not: { section: G } }, g = await l?.search(r, { filters: _ });
253
+ return g ? V({ search: g, options: o, auth: c, context: d }) : [];
164
254
  },
165
- placeholderData: _,
166
- enabled: !!i && !!t
255
+ placeholderData: N,
256
+ enabled: !!l && !!r
167
257
  });
168
258
  return /* @__PURE__ */ e.jsxs(
169
- F,
259
+ D,
170
260
  {
171
261
  command: { shouldFilter: !1 },
172
262
  content: { className: "max-w-[750px]" },
173
- open: r,
174
- onOpenChange: a,
263
+ open: t,
264
+ onOpenChange: n,
175
265
  children: [
176
- /* @__PURE__ */ e.jsx(v, { children: /* @__PURE__ */ e.jsx($, { children: "Search" }) }),
266
+ /* @__PURE__ */ e.jsx(v, { children: /* @__PURE__ */ e.jsx(U, { children: "Search" }) }),
177
267
  /* @__PURE__ */ e.jsx(
178
- I,
268
+ O,
179
269
  {
180
- ref: u,
270
+ ref: m,
181
271
  placeholder: "Search...",
182
- value: t,
183
- onValueChange: c,
272
+ value: r,
273
+ onValueChange: i,
184
274
  disabled: s
185
275
  }
186
276
  ),
187
- /* @__PURE__ */ e.jsx(q, { children: t ? /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col items-center", children: [
277
+ /* @__PURE__ */ e.jsx(B, { children: r ? /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col items-center", children: [
188
278
  "No results found.",
189
279
  /* @__PURE__ */ e.jsx(
190
- E,
280
+ R,
191
281
  {
192
282
  variant: "link",
193
283
  onClick: () => {
194
- c(""), u.current?.focus();
284
+ i(""), m.current?.focus();
195
285
  },
196
286
  children: "Clear search"
197
287
  }
198
288
  )
199
289
  ] }) : "Start typing to search" }),
200
- s ? /* @__PURE__ */ e.jsx("div", { className: "p-4 text-sm", children: o.message === "NOT_BUILT_YET" ? /* @__PURE__ */ e.jsxs(P, { type: "info", children: [
290
+ s ? /* @__PURE__ */ e.jsx("div", { className: "p-4 text-sm", children: a.message === "NOT_BUILT_YET" ? /* @__PURE__ */ e.jsxs(M, { type: "info", children: [
201
291
  "Search is currently not available in development mode by default.",
202
292
  /* @__PURE__ */ e.jsx("br", {}),
203
293
  "To still use search in development, run ",
@@ -210,21 +300,21 @@ const G = (r, a) => {
210
300
  /* @__PURE__ */ e.jsx("code", { children: "public" }),
211
301
  " directory."
212
302
  ] }) : "An error occurred while loading search." }) : /* @__PURE__ */ e.jsx(
213
- H,
303
+ Z,
214
304
  {
215
- searchResults: b ?? [],
216
- searchTerm: t,
217
- onClose: a,
218
- maxSubResults: n.maxSubResults
305
+ searchResults: S ?? [],
306
+ searchTerm: r,
307
+ onClose: n,
308
+ maxSubResults: o.maxSubResults
219
309
  }
220
310
  )
221
311
  ]
222
312
  }
223
313
  );
224
- }, se = (r) => ({
225
- renderSearch: ({ isOpen: a, onClose: n }) => /* @__PURE__ */ e.jsx(k, { children: /* @__PURE__ */ e.jsx(Y, { isOpen: a, onClose: n, options: r }) })
314
+ }, ue = (t) => ({
315
+ renderSearch: ({ isOpen: n, onClose: o }) => /* @__PURE__ */ e.jsx(w, { children: /* @__PURE__ */ e.jsx(X, { isOpen: n, onClose: o, options: t }) })
226
316
  });
227
317
  export {
228
- se as pagefindSearchPlugin
318
+ ue as pagefindSearchPlugin
229
319
  };
230
320
  //# sourceMappingURL=zudoku.plugin-search-pagefind.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.plugin-search-pagefind.js","sources":["../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 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 {\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 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 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(result.url);\n onClose();\n }}\n >\n <Link to={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(subResult.url);\n onClose();\n }}\n >\n <Link to={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 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":["getResults","search","options","auth","context","maxResults","transformFn","transformedResults","generator","searchResultGenerator","result","processedCount","batch","batchData","transformed","sortSubResults","a","b","aScore","sum","loc","hoverClassname","ResultList","searchResults","searchTerm","onClose","maxSubResults","navigate","useNavigate","commandListRef","useRef","useLayoutEffect","jsxs","CommandList","jsx","CommandGroup","CommandItem","Link","BracketsIcon","FileTextIcon","subResult","DEFAULT_RANKING","importPagefind","basePath","joinUrl","usePagefind","useZudoku","pagefind","useQuery","PagefindSearch","isOpen","error","isError","setSearchTerm","useState","useAuthState","inputRef","filters","SEARCH_PROTECTED_SECTION","keepPreviousData","CommandDialog","VisuallyHidden","DialogTitle","CommandInput","CommandEmpty","Button","Callout","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 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 {\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 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 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(result.url);\n onClose();\n }}\n >\n <Link to={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(subResult.url);\n onClose();\n }}\n >\n <Link to={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 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","searchResults","searchTerm","onClose","maxSubResults","navigate","useNavigate","commandListRef","useRef","useLayoutEffect","CommandList","CommandGroup","CommandItem","Link","BracketsIcon","FileTextIcon","subResult","DEFAULT_RANKING","importPagefind","basePath","joinUrl","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.51.0",
3
+ "version": "0.52.0",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -191,7 +191,7 @@
191
191
  "express": "5.1.0",
192
192
  "fast-equals": "5.2.2",
193
193
  "framer-motion": "^12.12.2",
194
- "glob": "11.0.2",
194
+ "glob": "11.0.3",
195
195
  "glob-parent": "6.0.2",
196
196
  "graphql": "16.11.0",
197
197
  "graphql-type-json": "0.3.2",
@@ -204,8 +204,9 @@
204
204
  "json-schema-to-typescript-lite": "14.1.0",
205
205
  "loglevel": "1.9.2",
206
206
  "lru-cache": "11.0.2",
207
- "lucide-react": "0.488.0",
207
+ "lucide-react": "0.515.0",
208
208
  "minimatch": "10.0.1",
209
+ "motion": "12.0.0-alpha.2",
209
210
  "nanoevents": "^9.1.0",
210
211
  "next-themes": "0.4.4",
211
212
  "oauth4webapi": "2.17.0",
@@ -253,7 +254,7 @@
253
254
  },
254
255
  "devDependencies": {
255
256
  "@graphql-codegen/cli": "5.0.7",
256
- "@graphql-codegen/client-preset": "4.8.0",
257
+ "@graphql-codegen/client-preset": "4.8.2",
257
258
  "@testing-library/dom": "10.4.0",
258
259
  "@testing-library/jest-dom": "6.6.3",
259
260
  "@testing-library/react": "16.3.0",
@@ -39,6 +39,7 @@ const AutocompletePopover = ({
39
39
  <Popover open={open}>
40
40
  <PopoverAnchor>
41
41
  <CommandInlineInput
42
+ autoComplete="off"
42
43
  ref={(el) => {
43
44
  inputRef.current = el;
44
45
  if (typeof ref === "function") {
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { CategoryHeading } from "./CategoryHeading.js";
3
3
  import { Heading } from "./Heading.js";
4
- import { ProseClasses } from "./Markdown.js";
4
+ import { Typography } from "./Typography.js";
5
5
 
6
6
  export const ErrorPage = ({
7
7
  title = "An error occurred",
@@ -13,7 +13,7 @@ export const ErrorPage = ({
13
13
  category?: ReactNode;
14
14
  }) => {
15
15
  return (
16
- <div className={ProseClasses + " h-full pt-(--padding-content-top)"}>
16
+ <Typography className={"h-full pt-(--padding-content-top)"}>
17
17
  {category && <CategoryHeading>{category}</CategoryHeading>}
18
18
  {title && (
19
19
  <Heading level={1} className="flex gap-3.5 items-center">
@@ -21,6 +21,6 @@ export const ErrorPage = ({
21
21
  </Heading>
22
22
  )}
23
23
  <p>{message}</p>
24
- </div>
24
+ </Typography>
25
25
  );
26
26
  };
@@ -5,12 +5,10 @@ import remarkGfm from "remark-gfm";
5
5
  import { createConfiguredShikiRehypePlugins } from "../shiki.js";
6
6
  import { MdxComponents } from "../util/MdxComponents.js";
7
7
  import { useZudoku } from "./context/ZudokuContext.js";
8
+ import { Typography } from "./Typography.js";
8
9
 
9
10
  const remarkPlugins = [remarkGfm];
10
11
 
11
- // other styles are defined in main.css .prose
12
- export const ProseClasses = "prose dark:prose-invert prose-neutral";
13
-
14
12
  export const Markdown = memo(
15
13
  ({
16
14
  content,
@@ -36,7 +34,7 @@ export const Markdown = memo(
36
34
  );
37
35
 
38
36
  return (
39
- <div className={className}>
37
+ <Typography className={className}>
40
38
  <MarkdownHooks
41
39
  remarkPlugins={remarkPlugins}
42
40
  rehypePlugins={rehypePlugins}
@@ -44,7 +42,7 @@ export const Markdown = memo(
44
42
  >
45
43
  {content}
46
44
  </MarkdownHooks>
47
- </div>
45
+ </Typography>
48
46
  );
49
47
  },
50
48
  );