zudoku 0.25.3 → 0.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/dist/cli/dev/handler.js +2 -2
  2. package/dist/cli/dev/handler.js.map +1 -1
  3. package/dist/config/config.d.ts +1 -0
  4. package/dist/config/loader.js +1 -1
  5. package/dist/config/loader.js.map +1 -1
  6. package/dist/config/validators/common.d.ts +39 -28
  7. package/dist/config/validators/common.js +1 -0
  8. package/dist/config/validators/common.js.map +1 -1
  9. package/dist/config/validators/icon-types.d.ts +1 -1
  10. package/dist/config/validators/validate.d.ts +17 -12
  11. package/dist/lib/authentication/providers/auth0.js +1 -1
  12. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  13. package/dist/lib/authentication/providers/openid.d.ts +1 -1
  14. package/dist/lib/authentication/providers/openid.js +10 -6
  15. package/dist/lib/authentication/providers/openid.js.map +1 -1
  16. package/dist/lib/components/Autocomplete.d.ts +12 -0
  17. package/dist/lib/components/Autocomplete.js +47 -0
  18. package/dist/lib/components/Autocomplete.js.map +1 -0
  19. package/dist/lib/components/Header.js +3 -3
  20. package/dist/lib/components/Header.js.map +1 -1
  21. package/dist/lib/components/index.js +2 -2
  22. package/dist/lib/components/index.js.map +1 -1
  23. package/dist/lib/components/navigation/SidebarCategory.js +1 -1
  24. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  25. package/dist/lib/plugins/markdown/MdxPage.js +8 -2
  26. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  27. package/dist/lib/plugins/openapi/OperationList.js +3 -0
  28. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  29. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  30. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  31. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.d.ts +3 -1
  32. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +3 -2
  33. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  34. package/dist/lib/plugins/openapi/RequestBodySidecarBox.d.ts +2 -1
  35. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +2 -2
  36. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  37. package/dist/lib/plugins/openapi/Sidecar.js +9 -6
  38. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  39. package/dist/lib/plugins/openapi/SidecarBox.js +1 -1
  40. package/dist/lib/plugins/openapi/SidecarBox.js.map +1 -1
  41. package/dist/lib/plugins/openapi/SidecarExamples.d.ts +2 -1
  42. package/dist/lib/plugins/openapi/SidecarExamples.js +7 -4
  43. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  44. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.d.ts +6 -0
  45. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +12 -0
  46. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -0
  47. package/dist/lib/plugins/openapi/playground/Headers.js +66 -4
  48. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  49. package/dist/lib/plugins/openapi/playground/Playground.d.ts +5 -1
  50. package/dist/lib/plugins/openapi/playground/Playground.js +36 -11
  51. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  52. package/dist/lib/plugins/openapi/playground/QueryParams.js +20 -30
  53. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  54. package/dist/lib/plugins/openapi/post-processors/removeExtensions.d.ts +2 -1
  55. package/dist/lib/plugins/openapi/post-processors/removeExtensions.js +5 -3
  56. package/dist/lib/plugins/openapi/post-processors/removeExtensions.js.map +1 -1
  57. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js +49 -0
  58. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js.map +1 -1
  59. package/dist/lib/plugins/openapi/post-processors/removeParameters.d.ts +10 -0
  60. package/dist/lib/plugins/openapi/post-processors/removeParameters.js +66 -0
  61. package/dist/lib/plugins/openapi/post-processors/removeParameters.js.map +1 -0
  62. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.d.ts +1 -0
  63. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.js +131 -0
  64. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.js.map +1 -0
  65. package/dist/lib/plugins/openapi/schema/SchemaComponents.js +1 -1
  66. package/dist/lib/plugins/openapi/schema/SchemaComponents.js.map +1 -1
  67. package/dist/lib/ui/Badge.d.ts +1 -1
  68. package/dist/lib/ui/Badge.js +1 -0
  69. package/dist/lib/ui/Badge.js.map +1 -1
  70. package/dist/lib/ui/Command.d.ts +9 -1
  71. package/dist/lib/ui/Command.js +5 -1
  72. package/dist/lib/ui/Command.js.map +1 -1
  73. package/dist/lib/util/joinUrl.d.ts +1 -0
  74. package/dist/lib/util/joinUrl.js +40 -0
  75. package/dist/lib/util/joinUrl.js.map +1 -0
  76. package/dist/vite/build.js +10 -10
  77. package/dist/vite/build.js.map +1 -1
  78. package/dist/vite/config.js +4 -1
  79. package/dist/vite/config.js.map +1 -1
  80. package/dist/vite/config.test.js +5 -1
  81. package/dist/vite/config.test.js.map +1 -1
  82. package/dist/vite/dev-server.js +4 -1
  83. package/dist/vite/dev-server.js.map +1 -1
  84. package/dist/vite/plugin-api.d.ts +1 -1
  85. package/dist/vite/plugin-api.js +23 -5
  86. package/dist/vite/plugin-api.js.map +1 -1
  87. package/dist/vite/plugin-auth.js +4 -1
  88. package/dist/vite/plugin-auth.js.map +1 -1
  89. package/dist/vite/plugin-mdx.js +9 -4
  90. package/dist/vite/plugin-mdx.js.map +1 -1
  91. package/dist/vite/prerender.d.ts +2 -2
  92. package/dist/vite/prerender.js +4 -4
  93. package/dist/vite/prerender.js.map +1 -1
  94. package/dist/zuplo/enrich-with-zuplo.d.ts +5 -0
  95. package/dist/zuplo/enrich-with-zuplo.js +184 -0
  96. package/dist/zuplo/enrich-with-zuplo.js.map +1 -0
  97. package/dist/zuplo/env.d.ts +1 -0
  98. package/dist/zuplo/env.js +3 -0
  99. package/dist/zuplo/env.js.map +1 -1
  100. package/dist/zuplo/policy-types.d.ts +33 -0
  101. package/dist/zuplo/policy-types.js +8 -0
  102. package/dist/zuplo/policy-types.js.map +1 -0
  103. package/dist/zuplo/with-zuplo-processors.d.ts +3 -0
  104. package/dist/zuplo/with-zuplo-processors.js +26 -0
  105. package/dist/zuplo/with-zuplo-processors.js.map +1 -0
  106. package/dist/zuplo/with-zuplo.d.ts +1 -2
  107. package/dist/zuplo/with-zuplo.js +6 -27
  108. package/dist/zuplo/with-zuplo.js.map +1 -1
  109. package/lib/{AnchorLink-DFZZbmvr.js → AnchorLink-bObQitZv.js} +3 -3
  110. package/lib/{AnchorLink-DFZZbmvr.js.map → AnchorLink-bObQitZv.js.map} +1 -1
  111. package/lib/{AuthenticationPlugin-D7G3me8L.js → AuthenticationPlugin-C9SwOxkc.js} +4 -4
  112. package/lib/{AuthenticationPlugin-D7G3me8L.js.map → AuthenticationPlugin-C9SwOxkc.js.map} +1 -1
  113. package/lib/{CategoryHeading-CBconmtI.js → CategoryHeading-MYL1u_6K.js} +3 -3
  114. package/lib/{CategoryHeading-CBconmtI.js.map → CategoryHeading-MYL1u_6K.js.map} +1 -1
  115. package/lib/{Markdown-CZDLNOFc.js → Markdown-DFN6p0J-.js} +1041 -1041
  116. package/lib/{Markdown-CZDLNOFc.js.map → Markdown-DFN6p0J-.js.map} +1 -1
  117. package/lib/{MdxPage-DKMbBROv.js → MdxPage-D9c4z09Q.js} +61 -56
  118. package/lib/MdxPage-D9c4z09Q.js.map +1 -0
  119. package/lib/{OperationList-B8bHMKme.js → OperationList-DGJWDx1G.js} +1264 -1244
  120. package/lib/OperationList-DGJWDx1G.js.map +1 -0
  121. package/lib/{Route-DYwKZ_c_.js → Route-VdmEyOD0.js} +5 -5
  122. package/lib/{Route-DYwKZ_c_.js.map → Route-VdmEyOD0.js.map} +1 -1
  123. package/lib/{Select-B_IxRUUC.js → Select-D3O7wISy.js} +36 -36
  124. package/lib/{Select-B_IxRUUC.js.map → Select-D3O7wISy.js.map} +1 -1
  125. package/lib/{SlotletProvider-pfc9oejW.js → SlotletProvider-_3zzX_g_.js} +53 -53
  126. package/lib/{SlotletProvider-pfc9oejW.js.map → SlotletProvider-_3zzX_g_.js.map} +1 -1
  127. package/lib/{Button-DeAoTouo.js → Spinner-BlzrEEk1.js} +16 -13
  128. package/lib/Spinner-BlzrEEk1.js.map +1 -0
  129. package/lib/{SyntaxHighlight-Bz-lOJtH.js → SyntaxHighlight-CJCSPG1F.js} +297 -301
  130. package/lib/{SyntaxHighlight-Bz-lOJtH.js.map → SyntaxHighlight-CJCSPG1F.js.map} +1 -1
  131. package/lib/{ZudokuContext-hmLMUdf2.js → ZudokuContext-DeQZEp-x.js} +357 -356
  132. package/lib/ZudokuContext-DeQZEp-x.js.map +1 -0
  133. package/lib/{chunk-D52XG6IA-Dl7HLe6j.js → chunk-SYFQ2XB5-BF5IDYrB.js} +410 -412
  134. package/lib/chunk-SYFQ2XB5-BF5IDYrB.js.map +1 -0
  135. package/lib/context-rwLGh-6_.js +22 -0
  136. package/lib/{context-h_UkBLvr.js.map → context-rwLGh-6_.js.map} +1 -1
  137. package/lib/{createServer-BznDkeSA.js → createServer-BcaswoFO.js} +1274 -1286
  138. package/lib/createServer-BcaswoFO.js.map +1 -0
  139. package/lib/{hook-CHq7pFyz.js → hook-BRQEDRbn.js} +17 -17
  140. package/lib/{hook-CHq7pFyz.js.map → hook-BRQEDRbn.js.map} +1 -1
  141. package/lib/index-B7mqiOei.js +509 -0
  142. package/lib/index-B7mqiOei.js.map +1 -0
  143. package/lib/index-CXRrqOIl.js +1750 -0
  144. package/lib/index-CXRrqOIl.js.map +1 -0
  145. package/lib/index-Djenk2Hj.js +36 -0
  146. package/lib/{index-CPNSgwSb.js.map → index-Djenk2Hj.js.map} +1 -1
  147. package/lib/{index-CBXSgjaE.js → index-Dl3Yl0yb.js} +65 -69
  148. package/lib/index-Dl3Yl0yb.js.map +1 -0
  149. package/lib/{index.esm-BSV1C092.js → index.esm-9-TF9KQB.js} +52 -52
  150. package/lib/{index.esm-BSV1C092.js.map → index.esm-9-TF9KQB.js.map} +1 -1
  151. package/lib/index.esm-CrSoEshU.js +1207 -0
  152. package/lib/index.esm-CrSoEshU.js.map +1 -0
  153. package/lib/joinUrl-BTy9bvoK.js +20 -0
  154. package/lib/joinUrl-BTy9bvoK.js.map +1 -0
  155. package/lib/{jsx-runtime-Dx-03ztt.js → jsx-runtime-Bdg6XQ1m.js} +135 -135
  156. package/lib/{jsx-runtime-Dx-03ztt.js.map → jsx-runtime-Bdg6XQ1m.js.map} +1 -1
  157. package/lib/post-processors/removeExtensions.js +7 -7
  158. package/lib/post-processors/removeExtensions.js.map +1 -1
  159. package/lib/post-processors/removeParameters.js +48 -0
  160. package/lib/post-processors/removeParameters.js.map +1 -0
  161. package/lib/{prism-bash.min-DadFsM4Z.js → prism-bash.min-HHIMdNJ_.js} +4 -4
  162. package/lib/{prism-bash.min-DadFsM4Z.js.map → prism-bash.min-HHIMdNJ_.js.map} +1 -1
  163. package/lib/{prism-csharp.min-DUwvItt4.js → prism-csharp.min-bQAo2pmx.js} +33 -33
  164. package/lib/{prism-csharp.min-DUwvItt4.js.map → prism-csharp.min-bQAo2pmx.js.map} +1 -1
  165. package/lib/{prism-java.min-BtgBR4yd.js → prism-java.min-BpvsOuIa.js} +12 -12
  166. package/lib/{prism-java.min-BtgBR4yd.js.map → prism-java.min-BpvsOuIa.js.map} +1 -1
  167. package/lib/{prism-markdown.min-F3U-vPBi.js → prism-markdown.min-C0Qn0m-5.js} +30 -30
  168. package/lib/{prism-markdown.min-F3U-vPBi.js.map → prism-markdown.min-C0Qn0m-5.js.map} +1 -1
  169. package/lib/{prism-ruby.min-DeDXCp1r.js → prism-ruby.min-Dx9KO9ds.js} +16 -16
  170. package/lib/{prism-ruby.min-DeDXCp1r.js.map → prism-ruby.min-Dx9KO9ds.js.map} +1 -1
  171. package/lib/prism-typescript.min-CD7H2IYQ.js.map +1 -1
  172. package/lib/state-mM7uaXTW.js +202 -0
  173. package/lib/state-mM7uaXTW.js.map +1 -0
  174. package/lib/ui/Accordion.js +1 -1
  175. package/lib/ui/ActionButton.js +10 -11
  176. package/lib/ui/ActionButton.js.map +1 -1
  177. package/lib/ui/Alert.js +2 -2
  178. package/lib/ui/AlertDialog.js +1 -1
  179. package/lib/ui/Badge.js +3 -2
  180. package/lib/ui/Badge.js.map +1 -1
  181. package/lib/ui/Breadcrumb.js +1 -1
  182. package/lib/ui/Button.js +2 -2
  183. package/lib/ui/Callout.js +1 -1
  184. package/lib/ui/Card.js +1 -1
  185. package/lib/ui/Carousel.js +3 -3
  186. package/lib/ui/Carousel.js.map +1 -1
  187. package/lib/ui/Checkbox.js +2 -2
  188. package/lib/ui/Command.js +125 -13
  189. package/lib/ui/Command.js.map +1 -1
  190. package/lib/ui/Dialog.js +1 -1
  191. package/lib/ui/Drawer.js +520 -519
  192. package/lib/ui/Drawer.js.map +1 -1
  193. package/lib/ui/DropdownMenu.js +1 -1
  194. package/lib/ui/Form.js +2 -2
  195. package/lib/ui/HoverCard.js +1 -1
  196. package/lib/ui/Input.js +1 -1
  197. package/lib/ui/Label.js +2 -2
  198. package/lib/ui/Pagination.js +7 -7
  199. package/lib/ui/Popover.js +1 -1
  200. package/lib/ui/Progress.js +1 -1
  201. package/lib/ui/RadioGroup.js +1 -1
  202. package/lib/ui/ScrollArea.js +1 -1
  203. package/lib/ui/Select.js +1 -1
  204. package/lib/ui/Skeleton.js +1 -1
  205. package/lib/ui/Slider.js +1 -1
  206. package/lib/ui/Switch.js +1 -1
  207. package/lib/ui/Tabs.js +1 -1
  208. package/lib/ui/Textarea.js +1 -1
  209. package/lib/ui/Toggle.js +2 -2
  210. package/lib/ui/ToggleGroup.js +1 -1
  211. package/lib/ui/Tooltip.js +1 -1
  212. package/lib/{useExposedProps-DE9lR6MF.js → useExposedProps-CetwhZpP.js} +2 -2
  213. package/lib/{useExposedProps-DE9lR6MF.js.map → useExposedProps-CetwhZpP.js.map} +1 -1
  214. package/lib/zudoku.auth-auth0.js +8 -10
  215. package/lib/zudoku.auth-auth0.js.map +1 -1
  216. package/lib/zudoku.auth-clerk.js +18 -18
  217. package/lib/zudoku.auth-openid.js +225 -221
  218. package/lib/zudoku.auth-openid.js.map +1 -1
  219. package/lib/zudoku.components.js +476 -461
  220. package/lib/zudoku.components.js.map +1 -1
  221. package/lib/zudoku.plugin-api-catalog.js +5 -5
  222. package/lib/zudoku.plugin-api-keys.js +7 -7
  223. package/lib/zudoku.plugin-custom-pages.js +3 -3
  224. package/lib/zudoku.plugin-markdown.js +2 -2
  225. package/lib/zudoku.plugin-openapi.js +5 -5
  226. package/lib/zudoku.plugin-redirect.js +1 -1
  227. package/lib/zudoku.plugin-search-inkeep.js +9 -9
  228. package/package.json +48 -48
  229. package/src/app/main.css +50 -50
  230. package/src/lib/authentication/providers/auth0.tsx +1 -4
  231. package/src/lib/authentication/providers/openid.tsx +12 -5
  232. package/src/lib/components/Autocomplete.tsx +111 -0
  233. package/src/lib/components/Header.tsx +3 -3
  234. package/src/lib/components/index.ts +2 -2
  235. package/src/lib/components/navigation/SidebarCategory.tsx +2 -2
  236. package/src/lib/plugins/markdown/MdxPage.tsx +9 -1
  237. package/src/lib/plugins/openapi/OperationList.tsx +4 -0
  238. package/src/lib/plugins/openapi/ParameterListItem.tsx +1 -5
  239. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +5 -0
  240. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +8 -2
  241. package/src/lib/plugins/openapi/Sidecar.tsx +15 -7
  242. package/src/lib/plugins/openapi/SidecarBox.tsx +1 -1
  243. package/src/lib/plugins/openapi/SidecarExamples.tsx +14 -6
  244. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +51 -0
  245. package/src/lib/plugins/openapi/playground/Headers.tsx +138 -41
  246. package/src/lib/plugins/openapi/playground/Playground.tsx +156 -62
  247. package/src/lib/plugins/openapi/playground/QueryParams.tsx +89 -122
  248. package/src/lib/plugins/openapi/post-processors/removeExtensions.test.ts +58 -0
  249. package/src/lib/plugins/openapi/post-processors/removeExtensions.ts +7 -4
  250. package/src/lib/plugins/openapi/post-processors/removeParameters.test.ts +148 -0
  251. package/src/lib/plugins/openapi/post-processors/removeParameters.ts +101 -0
  252. package/src/lib/plugins/openapi/schema/SchemaComponents.tsx +1 -1
  253. package/src/lib/ui/Badge.tsx +1 -0
  254. package/src/lib/ui/Command.tsx +20 -0
  255. package/src/lib/util/joinUrl.ts +57 -0
  256. package/dist/lib/plugins/openapi/playground/EnumSelector.d.ts +0 -8
  257. package/dist/lib/plugins/openapi/playground/EnumSelector.js +0 -21
  258. package/dist/lib/plugins/openapi/playground/EnumSelector.js.map +0 -1
  259. package/lib/Button-DeAoTouo.js.map +0 -1
  260. package/lib/Command-9x_kZHr4.js +0 -611
  261. package/lib/Command-9x_kZHr4.js.map +0 -1
  262. package/lib/MdxPage-DKMbBROv.js.map +0 -1
  263. package/lib/OperationList-B8bHMKme.js.map +0 -1
  264. package/lib/Spinner-DuxJLLNE.js +0 -7
  265. package/lib/Spinner-DuxJLLNE.js.map +0 -1
  266. package/lib/ZudokuContext-hmLMUdf2.js.map +0 -1
  267. package/lib/chunk-D52XG6IA-Dl7HLe6j.js.map +0 -1
  268. package/lib/context-h_UkBLvr.js +0 -22
  269. package/lib/createServer-BznDkeSA.js.map +0 -1
  270. package/lib/index-CBXSgjaE.js.map +0 -1
  271. package/lib/index-CPNSgwSb.js +0 -36
  272. package/lib/index-sD8L1_Dl.js +0 -1292
  273. package/lib/index-sD8L1_Dl.js.map +0 -1
  274. package/lib/index.esm-BnnBRKJX.js +0 -1214
  275. package/lib/index.esm-BnnBRKJX.js.map +0 -1
  276. package/lib/state-CFQsUZUP.js +0 -202
  277. package/lib/state-CFQsUZUP.js.map +0 -1
  278. package/src/lib/plugins/openapi/playground/EnumSelector.tsx +0 -86
@@ -1,10 +1,10 @@
1
- import { j as e } from "./jsx-runtime-Dx-03ztt.js";
1
+ import { j as e } from "./jsx-runtime-Bdg6XQ1m.js";
2
2
  import { s as j } from "./index-LNp6rxyU.js";
3
- import { u as b } from "./ZudokuContext-hmLMUdf2.js";
4
- import { b as y } from "./chunk-D52XG6IA-Dl7HLe6j.js";
3
+ import { u as b } from "./ZudokuContext-DeQZEp-x.js";
4
+ import { b as y } from "./chunk-SYFQ2XB5-BF5IDYrB.js";
5
5
  import { Head as v, Link as N } from "./zudoku.components.js";
6
- import { u as w } from "./state-CFQsUZUP.js";
7
- import { M as C } from "./Markdown-CZDLNOFc.js";
6
+ import { u as w } from "./state-mM7uaXTW.js";
7
+ import { M as C } from "./Markdown-DFN6p0J-.js";
8
8
  import { c as h } from "./cn-qaFjX9_3.js";
9
9
  const f = (r, n) => j(`${r}-${n}`), k = ({
10
10
  items: r,
@@ -1,14 +1,14 @@
1
- import { j as e } from "./jsx-runtime-Dx-03ztt.js";
1
+ import { j as e } from "./jsx-runtime-Bdg6XQ1m.js";
2
2
  import { RotateCwIcon as g, TrashIcon as f, EyeOffIcon as j, EyeIcon as v, CheckIcon as w, CopyIcon as b, FileKey2Icon as K } from "lucide-react";
3
- import { D as k, S as m, R as N } from "./SlotletProvider-pfc9oejW.js";
3
+ import { D as k, S as m, R as N } from "./SlotletProvider-_3zzX_g_.js";
4
4
  import { i as c } from "./invariant-Caa8-XvF.js";
5
- import { u as d, S as I, a as S, b as A, c as C, d as E, e as x } from "./Select-B_IxRUUC.js";
6
- import { a as P } from "./index.esm-BnnBRKJX.js";
7
- import { a as D, L as u, O as R } from "./chunk-D52XG6IA-Dl7HLe6j.js";
8
- import { a as y, e as q, u as O } from "./ZudokuContext-hmLMUdf2.js";
5
+ import { u as d, S as I, a as S, b as A, c as C, d as E, e as x } from "./Select-D3O7wISy.js";
6
+ import { a as P } from "./index.esm-CrSoEshU.js";
7
+ import { a as D, L as u, O as R } from "./chunk-SYFQ2XB5-BF5IDYrB.js";
8
+ import { a as y, e as q, u as O } from "./ZudokuContext-DeQZEp-x.js";
9
9
  import { Button as l } from "./ui/Button.js";
10
10
  import { Input as z } from "./ui/Input.js";
11
- import { u as F } from "./hook-CHq7pFyz.js";
11
+ import { u as F } from "./hook-BRQEDRbn.js";
12
12
  import { useState as p } from "react";
13
13
  import { c as T } from "./cn-qaFjX9_3.js";
14
14
  const L = ({ service: t }) => {
@@ -1,8 +1,8 @@
1
- import { j as o } from "./jsx-runtime-Dx-03ztt.js";
1
+ import { j as o } from "./jsx-runtime-Bdg6XQ1m.js";
2
2
  import a from "react";
3
- import { P as n } from "./Markdown-CZDLNOFc.js";
3
+ import { P as n } from "./Markdown-DFN6p0J-.js";
4
4
  import { c } from "./cn-qaFjX9_3.js";
5
- import { u as p } from "./useExposedProps-DE9lR6MF.js";
5
+ import { u as p } from "./useExposedProps-CetwhZpP.js";
6
6
  const u = ({
7
7
  element: t,
8
8
  render: s,
@@ -1,7 +1,7 @@
1
1
  var d = Object.defineProperty;
2
2
  var m = (n, t, o) => t in n ? d(n, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : n[t] = o;
3
3
  var f = (n, t, o) => m(n, typeof t != "symbol" ? t + "" : t, o);
4
- import { j as P } from "./jsx-runtime-Dx-03ztt.js";
4
+ import { j as P } from "./jsx-runtime-Bdg6XQ1m.js";
5
5
  import { f as u } from "./__vite-browser-external-BYRIRx8p.js";
6
6
  const x = "/pages/**/*.{md,mdx}", D = [".md", ".mdx"];
7
7
  class c {
@@ -74,7 +74,7 @@ const C = (n) => ({
74
74
  const h = {
75
75
  path: r,
76
76
  lazy: async () => {
77
- const { MdxPage: l } = await import("./MdxPage-DKMbBROv.js"), { default: p, ...g } = await a();
77
+ const { MdxPage: l } = await import("./MdxPage-D9c4z09Q.js"), { default: p, ...g } = await a();
78
78
  return {
79
79
  element: /* @__PURE__ */ P.jsx(
80
80
  l,
@@ -1,9 +1,9 @@
1
- import "./jsx-runtime-Dx-03ztt.js";
2
- import "./chunk-D52XG6IA-Dl7HLe6j.js";
3
- import { o as a } from "./index-sD8L1_Dl.js";
4
- import "./ZudokuContext-hmLMUdf2.js";
1
+ import "./jsx-runtime-Bdg6XQ1m.js";
2
+ import "./chunk-SYFQ2XB5-BF5IDYrB.js";
3
+ import { o as a } from "./index-CXRrqOIl.js";
4
+ import "./ZudokuContext-DeQZEp-x.js";
5
5
  import "lucide-react";
6
- import "./hook-CHq7pFyz.js";
6
+ import "./hook-BRQEDRbn.js";
7
7
  import "./ui/Button.js";
8
8
  export {
9
9
  a as openApiPlugin
@@ -1,4 +1,4 @@
1
- import { r as o } from "./chunk-D52XG6IA-Dl7HLe6j.js";
1
+ import { r as o } from "./chunk-SYFQ2XB5-BF5IDYrB.js";
2
2
  const a = (r) => ({
3
3
  getRoutes: () => r.redirects.map(({ from: e, to: t }) => ({
4
4
  path: e,
@@ -1,5 +1,5 @@
1
- import { j as i } from "./jsx-runtime-Dx-03ztt.js";
2
- import { useRef as l, useState as f, useMemo as m, useEffect as u } from "react";
1
+ import { j as i } from "./jsx-runtime-Bdg6XQ1m.js";
2
+ import { useRef as d, useState as f, useMemo as m, useEffect as c } from "react";
3
3
  import { C as g } from "./ClientOnly-E7hGysn1.js";
4
4
  const h = {
5
5
  theme: {
@@ -25,7 +25,7 @@ const h = {
25
25
  onClose: n,
26
26
  settings: p
27
27
  }) => {
28
- const o = l(null), c = l(null), [s, d] = f(
28
+ const o = d(null), u = d(null), [s, l] = f(
29
29
  typeof Inkeep < "u"
30
30
  ), a = m(
31
31
  () => ({
@@ -44,17 +44,17 @@ const h = {
44
44
  }),
45
45
  [e, n, r, p, o]
46
46
  );
47
- return u(() => {
47
+ return c(() => {
48
48
  if (s) return;
49
49
  const t = setInterval(() => {
50
- typeof Inkeep < "u" && (d(!0), clearInterval(t));
50
+ typeof Inkeep < "u" && (l(!0), clearInterval(t));
51
51
  }, 100);
52
52
  return () => clearInterval(t);
53
- }, [s]), u(() => {
54
- !s || c.current || (c.current = Inkeep().embed(a));
55
- }, [a, s]), u(() => {
53
+ }, [s]), c(() => {
54
+ !s || u.current || (u.current = Inkeep().embed(a));
55
+ }, [a, s]), c(() => {
56
56
  var t;
57
- (t = c.current) == null || t.render({ ...a, isOpen: e });
57
+ (t = u.current) == null || t.render({ ...a, isOpen: e });
58
58
  }, [a, e]), /* @__PURE__ */ i.jsx("div", { ref: o });
59
59
  }, x = (r) => ({
60
60
  getHead: () => /* @__PURE__ */ i.jsx(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.25.3",
3
+ "version": "0.26.1",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -111,42 +111,42 @@
111
111
  }
112
112
  },
113
113
  "dependencies": {
114
- "@envelop/core": "5.0.2",
114
+ "@envelop/core": "5.0.3",
115
115
  "@graphql-typed-document-node/core": "3.2.0",
116
- "@hookform/resolvers": "3.9.1",
117
- "@lekoarts/rehype-meta-as-attributes": "3.0.1",
116
+ "@hookform/resolvers": "3.10.0",
117
+ "@lekoarts/rehype-meta-as-attributes": "3.0.2",
118
118
  "@mdx-js/react": "3.1.0",
119
119
  "@mdx-js/rollup": "3.1.0",
120
120
  "@pothos/core": "3.41.0",
121
121
  "@radix-ui/react-accordion": "1.2.2",
122
122
  "@radix-ui/react-alert-dialog": "1.1.4",
123
123
  "@radix-ui/react-aspect-ratio": "1.1.1",
124
- "@radix-ui/react-checkbox": "1.1.2",
125
- "@radix-ui/react-collapsible": "1.1.1",
126
- "@radix-ui/react-dialog": "1.1.2",
127
- "@radix-ui/react-dropdown-menu": "2.1.2",
128
- "@radix-ui/react-hover-card": "1.1.2",
129
- "@radix-ui/react-label": "2.1.0",
130
- "@radix-ui/react-popover": "1.1.2",
131
- "@radix-ui/react-progress": "1.1.0",
132
- "@radix-ui/react-radio-group": "1.2.1",
133
- "@radix-ui/react-scroll-area": "1.2.1",
134
- "@radix-ui/react-select": "2.1.2",
135
- "@radix-ui/react-slider": "1.2.1",
136
- "@radix-ui/react-slot": "1.1.0",
137
- "@radix-ui/react-switch": "1.1.1",
138
- "@radix-ui/react-tabs": "1.1.1",
139
- "@radix-ui/react-toggle": "1.1.0",
124
+ "@radix-ui/react-checkbox": "1.1.3",
125
+ "@radix-ui/react-collapsible": "1.1.2",
126
+ "@radix-ui/react-dialog": "1.1.4",
127
+ "@radix-ui/react-dropdown-menu": "2.1.4",
128
+ "@radix-ui/react-hover-card": "1.1.4",
129
+ "@radix-ui/react-label": "2.1.1",
130
+ "@radix-ui/react-popover": "1.1.4",
131
+ "@radix-ui/react-progress": "1.1.1",
132
+ "@radix-ui/react-radio-group": "1.2.2",
133
+ "@radix-ui/react-scroll-area": "1.2.2",
134
+ "@radix-ui/react-select": "2.1.4",
135
+ "@radix-ui/react-slider": "1.2.2",
136
+ "@radix-ui/react-slot": "1.1.1",
137
+ "@radix-ui/react-switch": "1.1.2",
138
+ "@radix-ui/react-tabs": "1.1.2",
139
+ "@radix-ui/react-toggle": "1.1.1",
140
140
  "@radix-ui/react-toggle-group": "1.1.1",
141
- "@radix-ui/react-tooltip": "1.1.4",
142
- "@radix-ui/react-visually-hidden": "1",
143
- "@sentry/node": "8.42.0",
141
+ "@radix-ui/react-tooltip": "1.1.6",
142
+ "@radix-ui/react-visually-hidden": "1.1.1",
143
+ "@sentry/node": "8.50.0",
144
144
  "@sindresorhus/slugify": "2.2.1",
145
- "@stefanprobst/rehype-extract-toc": "2.2.0",
145
+ "@stefanprobst/rehype-extract-toc": "2.2.1",
146
146
  "@tailwindcss/typography": "0.5.16",
147
- "@tanstack/react-query": "5.62.3",
148
- "@types/react": "19.0.1",
149
- "@types/react-dom": "19.0.1",
147
+ "@tanstack/react-query": "5.64.2",
148
+ "@types/react": "19.0.7",
149
+ "@types/react-dom": "19.0.3",
150
150
  "@vitejs/plugin-react": "4.3.4",
151
151
  "@zudoku/httpsnippet": "10.0.9",
152
152
  "@zudoku/react-helmet-async": "2.0.5",
@@ -157,13 +157,13 @@
157
157
  "cmdk": "1.0.4",
158
158
  "devlop": "^1.1.0",
159
159
  "dotenv": "16.4.7",
160
- "embla-carousel-react": "8.5.1",
160
+ "embla-carousel-react": "8.5.2",
161
161
  "estree-util-value-to-estree": "3.2.1",
162
162
  "express": "4.21.2",
163
- "glob": "11.0.0",
163
+ "glob": "11.0.1",
164
164
  "graphql": "16.10.0",
165
165
  "graphql-type-json": "0.3.2",
166
- "graphql-yoga": "5.10.4",
166
+ "graphql-yoga": "5.10.10",
167
167
  "gray-matter": "4.0.3",
168
168
  "hast-util-to-jsx-runtime": "^2.3.2",
169
169
  "hast-util-to-string": "3.0.1",
@@ -171,20 +171,20 @@
171
171
  "http-terminator": "3.2.0",
172
172
  "loglevel": "1.9.2",
173
173
  "lru-cache": "11.0.2",
174
- "lucide-react": "0.468.0",
174
+ "lucide-react": "0.473.0",
175
175
  "next-themes": "0.4.4",
176
176
  "oauth4webapi": "2.17.0",
177
177
  "object-hash": "3.0.0",
178
178
  "openapi-types": "12.1.3",
179
179
  "picocolors": "1.1.1",
180
- "postcss": "8.4.49",
181
- "posthog-node": "4.3.1",
182
- "prism-react-renderer": "2.4.0",
180
+ "postcss": "8.5.1",
181
+ "posthog-node": "4.4.1",
182
+ "prism-react-renderer": "2.4.1",
183
183
  "prismjs": "1.29.0",
184
- "react-error-boundary": "4.1.2",
185
- "react-hook-form": "7.54.0",
184
+ "react-error-boundary": "5.0.0",
185
+ "react-hook-form": "7.54.2",
186
186
  "react-is": "19.0.0",
187
- "react-router": "7.0.2",
187
+ "react-router": "7.1.3",
188
188
  "rehype-raw": "7.0.0",
189
189
  "rehype-slug": "6.0.0",
190
190
  "remark-comment": "1.0.0",
@@ -195,26 +195,26 @@
195
195
  "remark-mdx-frontmatter": "5.0.0",
196
196
  "remark-parse": "^11.0.0",
197
197
  "remark-rehype": "^11.1.1",
198
- "rollup": "4.28.1",
198
+ "rollup": "4.31.0",
199
199
  "semver": "7.6.3",
200
200
  "sitemap": "8.0.0",
201
201
  "spin-delay": "2.0.1",
202
202
  "strip-ansi": "7.1.0",
203
203
  "tailwind-merge": "2.6.0",
204
- "tailwindcss": "3.4.16",
204
+ "tailwindcss": "3.4.17",
205
205
  "tsx": "^4.19.2",
206
206
  "ulidx": "2.4.1",
207
207
  "unified": "^11.0.5",
208
208
  "unist-util-visit": "5.0.0",
209
209
  "urql": "4.2.1",
210
- "vaul": "1.1.1",
210
+ "vaul": "1.1.2",
211
211
  "vfile": "6.0.3",
212
- "vite": "6.0.3",
213
- "yaml": "2.6.1",
212
+ "vite": "6.0.11",
213
+ "yaml": "2.7.0",
214
214
  "yargs": "17.7.2",
215
- "zod": "3.23.8",
215
+ "zod": "3.24.1",
216
216
  "zod-validation-error": "3.4.0",
217
- "zustand": "5.0.2"
217
+ "zustand": "5.0.3"
218
218
  },
219
219
  "devDependencies": {
220
220
  "@graphql-codegen/cli": "5.0.3",
@@ -232,13 +232,13 @@
232
232
  "@types/semver": "7.5.8",
233
233
  "@types/unist": "^3.0.3",
234
234
  "@types/yargs": "17.0.33",
235
- "@vitest/coverage-v8": "2.1.8",
235
+ "@vitest/coverage-v8": "3.0.2",
236
236
  "mdast-util-mdx": "3.0.0",
237
237
  "react": "19.0.0",
238
238
  "react-dom": "19.0.0",
239
239
  "rollup-plugin-visualizer": "5.14.0",
240
- "typescript": "5.7.2",
241
- "vitest": "2.1.8"
240
+ "typescript": "5.7.3",
241
+ "vitest": "3.0.2"
242
242
  },
243
243
  "peerDependencies": {
244
244
  "react": ">=19",
@@ -249,7 +249,7 @@
249
249
  "@sentry/react": "^8.50.0"
250
250
  },
251
251
  "scripts": {
252
- "build": "tsc --project tsconfig.json",
252
+ "build": "tsc --project tsconfig.app.json",
253
253
  "build:vite": "vite build",
254
254
  "generate:icon-types": "tsx ./scripts/generate-icon-types.ts",
255
255
  "build:standalone:vite": "vite build --mode standalone --config vite.standalone.config.ts",
package/src/app/main.css CHANGED
@@ -238,57 +238,57 @@
238
238
  }
239
239
 
240
240
  /* Theme */
241
-
242
- @layer base {
243
- :root {
244
- --background: 0 0% 100%;
245
- --foreground: 240 10% 3.9%;
246
- --card: 0 0% 100%;
247
- --card-foreground: 240 10% 3.9%;
248
- --popover: 0 0% 100%;
249
- --popover-foreground: 240 10% 3.9%;
250
- --primary: 240 5.9% 10%;
251
- --primary-foreground: 0 0% 98%;
252
- --secondary: 240 4.8% 95.9%;
253
- --secondary-foreground: 240 5.9% 10%;
254
- --muted: 240 4.8% 95.9%;
255
- --muted-foreground: 240 3.8% 46.1%;
256
- --accent: 240 4.8% 95.9%;
257
- --accent-foreground: 240 5.9% 10%;
258
- --destructive: 0 84.2% 60.2%;
259
- --destructive-foreground: 0 0% 98%;
260
- --border: 240 5.9% 95%;
261
- --input: 240 5.9% 90%;
262
- --ring: 240 5.9% 10%;
263
- --radius: 0.75rem;
264
- --chart-1: 12 76% 61%;
265
- --chart-2: 173 58% 39%;
266
- --chart-3: 197 37% 24%;
267
- --chart-4: 43 74% 66%;
268
- --chart-5: 27 87% 67%;
269
- }
270
241
 
271
- .dark {
272
- --background: 240 10% 3.9%;
273
- --foreground: 0 0% 98%;
274
- --card: 240 10% 3.9%;
275
- --card-foreground: 0 0% 98%;
276
- --popover: 240 10% 3.9%;
277
- --popover-foreground: 0 0% 98%;
278
- --primary: 0 0% 98%;
279
- --primary-foreground: 240 5.9% 10%;
280
- --secondary: 240 3.7% 15.9%;
281
- --secondary-foreground: 0 0% 98%;
282
- --muted: 240 3.7% 15.9%;
283
- --muted-foreground: 240 5% 64.9%;
284
- --accent: 240 3.7% 15.9%;
285
- --accent-foreground: 0 0% 98%;
286
- --destructive: 0 62.8% 30.6%;
287
- --destructive-foreground: 0 0% 98%;
288
- --border: 240 3.7% 15.9%;
289
- --input: 240 3.7% 15.9%;
290
- --ring: 240 4.9% 83.9%;
291
- --chart-1: 220 70% 50%;
242
+ @layer base {
243
+ :root {
244
+ --background: 0 0% 100%;
245
+ --foreground: 240 10% 3.9%;
246
+ --card: 0 0% 100%;
247
+ --card-foreground: 240 10% 3.9%;
248
+ --popover: 0 0% 100%;
249
+ --popover-foreground: 240 10% 3.9%;
250
+ --primary: 240 5.9% 10%;
251
+ --primary-foreground: 0 0% 98%;
252
+ --secondary: 240 4.8% 95.9%;
253
+ --secondary-foreground: 240 5.9% 10%;
254
+ --muted: 240 4.8% 95.9%;
255
+ --muted-foreground: 240 3.8% 46.1%;
256
+ --accent: 240 4.8% 95.9%;
257
+ --accent-foreground: 240 5.9% 10%;
258
+ --destructive: 0 84.2% 60.2%;
259
+ --destructive-foreground: 0 0% 98%;
260
+ --border: 240 5.9% 95%;
261
+ --input: 240 5.9% 90%;
262
+ --ring: 240 5.9% 10%;
263
+ --radius: 0.75rem;
264
+ --chart-1: 12 76% 61%;
265
+ --chart-2: 173 58% 39%;
266
+ --chart-3: 197 37% 24%;
267
+ --chart-4: 43 74% 66%;
268
+ --chart-5: 27 87% 67%;
269
+ }
270
+
271
+ .dark {
272
+ --background: 240 10% 3.9%;
273
+ --foreground: 0 0% 98%;
274
+ --card: 240 10% 3.9%;
275
+ --card-foreground: 0 0% 98%;
276
+ --popover: 240 10% 3.9%;
277
+ --popover-foreground: 0 0% 98%;
278
+ --primary: 0 0% 98%;
279
+ --primary-foreground: 240 5.9% 10%;
280
+ --secondary: 240 3.7% 15.9%;
281
+ --secondary-foreground: 0 0% 98%;
282
+ --muted: 240 3.7% 15.9%;
283
+ --muted-foreground: 240 5% 64.9%;
284
+ --accent: 240 3.7% 15.9%;
285
+ --accent-foreground: 0 0% 98%;
286
+ --destructive: 0 62.8% 30.6%;
287
+ --destructive-foreground: 0 0% 98%;
288
+ --border: 240 3.7% 15.9%;
289
+ --input: 240 3.7% 15.9%;
290
+ --ring: 240 4.9% 83.9%;
291
+ --chart-1: 220 70% 50%;
292
292
  --chart-2: 160 60% 45%;
293
293
  --chart-3: 30 80% 55%;
294
294
  --chart-4: 280 65% 60%;
@@ -35,10 +35,7 @@ class Auth0AuthenticationProvider extends OpenIDAuthenticationProvider {
35
35
  providerData: null,
36
36
  });
37
37
 
38
- const redirectUrl = new URL(
39
- window.location.origin + this.logoutRedirectUrlPath,
40
- );
41
-
38
+ const redirectUrl = new URL(window.location.origin);
42
39
  redirectUrl.pathname = this.logoutRedirectUrlPath;
43
40
 
44
41
  // SEE: https://auth0.com/docs/authenticate/login/logout/log-users-out-of-auth0
@@ -2,6 +2,7 @@ import logger from "loglevel";
2
2
  import * as oauth from "oauth4webapi";
3
3
  import { OpenIDAuthenticationConfig } from "../../../config/config.js";
4
4
  import { ClientOnly } from "../../components/ClientOnly.js";
5
+ import { joinUrl } from "../../util/joinUrl.js";
5
6
  import {
6
7
  AuthenticationProvider,
7
8
  AuthenticationProviderInitializer,
@@ -49,8 +50,8 @@ export class OpenIDAuthenticationProvider implements AuthenticationProvider {
49
50
 
50
51
  protected authorizationServer: oauth.AuthorizationServer | undefined;
51
52
 
52
- protected callbackUrlPath = "/oauth/callback";
53
- protected logoutRedirectUrlPath = "/";
53
+ protected callbackUrlPath: string;
54
+ protected logoutRedirectUrlPath: string;
54
55
  protected onAuthorizationUrl?: (
55
56
  authorizationUrl: URL,
56
57
  options: { isSignIn: boolean; isSignUp: boolean },
@@ -67,6 +68,7 @@ export class OpenIDAuthenticationProvider implements AuthenticationProvider {
67
68
  redirectToAfterSignUp,
68
69
  redirectToAfterSignIn,
69
70
  redirectToAfterSignOut,
71
+ basePath,
70
72
  }: OpenIDAuthenticationConfig) {
71
73
  this.client = {
72
74
  client_id: clientId,
@@ -74,9 +76,14 @@ export class OpenIDAuthenticationProvider implements AuthenticationProvider {
74
76
  };
75
77
  this.audience = audience;
76
78
  this.issuer = issuer;
77
- this.redirectToAfterSignUp = redirectToAfterSignUp ?? "/";
78
- this.redirectToAfterSignIn = redirectToAfterSignIn ?? "/";
79
- this.redirectToAfterSignOut = redirectToAfterSignOut ?? "/";
79
+ this.callbackUrlPath = joinUrl(basePath, "/oauth/callback");
80
+
81
+ const root = joinUrl(basePath, "/");
82
+
83
+ this.logoutRedirectUrlPath = root;
84
+ this.redirectToAfterSignUp = redirectToAfterSignUp ?? root;
85
+ this.redirectToAfterSignIn = redirectToAfterSignIn ?? root;
86
+ this.redirectToAfterSignOut = redirectToAfterSignOut ?? root;
80
87
  }
81
88
 
82
89
  protected async getAuthServer() {
@@ -0,0 +1,111 @@
1
+ import { PopoverAnchor } from "@radix-ui/react-popover";
2
+ import { useCommandState } from "cmdk";
3
+ import { useRef, useState, type Ref } from "react";
4
+ import {
5
+ Command,
6
+ CommandInlineInput,
7
+ CommandItem,
8
+ CommandList,
9
+ } from "zudoku/ui/Command.js";
10
+ import { Popover, PopoverContent } from "zudoku/ui/Popover.js";
11
+ import { cn } from "../util/cn.js";
12
+
13
+ type AutocompleteProps = {
14
+ value: string;
15
+ options: readonly string[];
16
+ onChange: (e: string) => void;
17
+ className?: string;
18
+ placeholder?: string;
19
+ onEnterPress?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
20
+ ref?: Ref<HTMLInputElement>;
21
+ };
22
+
23
+ const AutocompletePopover = ({
24
+ value,
25
+ options,
26
+ onChange,
27
+ className,
28
+ placeholder = "Enter value",
29
+ onEnterPress,
30
+ ref,
31
+ }: AutocompleteProps) => {
32
+ const [open, setOpen] = useState(false);
33
+ const [dontClose, setDontClose] = useState(false);
34
+ const count = useCommandState((state) => state.filtered.count);
35
+ const inputRef = useRef<HTMLInputElement>(null);
36
+ return (
37
+ <Popover open={open}>
38
+ <PopoverAnchor>
39
+ <CommandInlineInput
40
+ ref={(el) => {
41
+ inputRef.current = el;
42
+ if (typeof ref === "function") {
43
+ ref(el);
44
+ } else if (ref) {
45
+ ref.current = el;
46
+ }
47
+ }}
48
+ value={value}
49
+ placeholder={placeholder}
50
+ className={cn("h-9 bg-transparent", className)}
51
+ onFocus={() => setOpen(true)}
52
+ onBlur={() => {
53
+ if (dontClose) {
54
+ return;
55
+ }
56
+ setOpen(false);
57
+ }}
58
+ onKeyDown={(e) => {
59
+ if (e.key === "Enter") {
60
+ setOpen(false);
61
+ inputRef.current?.blur();
62
+ onEnterPress?.(e);
63
+ }
64
+ }}
65
+ onValueChange={(e) => onChange(e)}
66
+ />
67
+ </PopoverAnchor>
68
+ <PopoverContent
69
+ onMouseEnter={() => setDontClose(true)}
70
+ onMouseLeave={() => setDontClose(false)}
71
+ onOpenAutoFocus={(e) => e.preventDefault()}
72
+ className={cn("p-0 w-[--radix-popover-trigger-width]", {
73
+ "border-0": count === 0,
74
+ })}
75
+ align="start"
76
+ side="bottom"
77
+ onWheel={(e) => {
78
+ // See: https://github.com/radix-ui/primitives/issues/1159
79
+ e.stopPropagation();
80
+ }}
81
+ onTouchMove={(e) => {
82
+ e.stopPropagation();
83
+ }}
84
+ >
85
+ <CommandList className="max-h-[140px]">
86
+ {options.map((enumValue) => (
87
+ <CommandItem
88
+ key={enumValue}
89
+ value={enumValue}
90
+ onSelect={(selected) => {
91
+ onChange(selected);
92
+ setOpen(false);
93
+ }}
94
+ className="cursor-pointer"
95
+ >
96
+ {enumValue}
97
+ </CommandItem>
98
+ ))}
99
+ </CommandList>
100
+ </PopoverContent>
101
+ </Popover>
102
+ );
103
+ };
104
+
105
+ export const Autocomplete = (props: AutocompleteProps) => {
106
+ return (
107
+ <Command className="bg-transparent">
108
+ <AutocompletePopover {...props} />
109
+ </Command>
110
+ );
111
+ };
@@ -16,7 +16,7 @@ import {
16
16
  DropdownMenuSubTrigger,
17
17
  DropdownMenuTrigger,
18
18
  } from "../ui/DropdownMenu.js";
19
- import { joinPath } from "../util/joinPath.js";
19
+ import { joinUrl } from "../util/joinUrl.js";
20
20
  import { Banner } from "./Banner.js";
21
21
  import { ClientOnly } from "./ClientOnly.js";
22
22
  import { useZudoku } from "./context/ZudokuContext.js";
@@ -76,7 +76,7 @@ export const Header = memo(function HeaderInner() {
76
76
  src={
77
77
  /https?:\/\//.test(page.logo.src.light)
78
78
  ? page.logo.src.light
79
- : joinPath(
79
+ : joinUrl(
80
80
  import.meta.env.BASE_URL,
81
81
  page.logo.src.light,
82
82
  )
@@ -90,7 +90,7 @@ export const Header = memo(function HeaderInner() {
90
90
  src={
91
91
  /https?:\/\//.test(page.logo.src.dark)
92
92
  ? page.logo.src.dark
93
- : joinPath(
93
+ : joinUrl(
94
94
  import.meta.env.BASE_URL,
95
95
  page.logo.src.dark,
96
96
  )
@@ -6,14 +6,14 @@ import { RouterError as RouterErrorImport } from "../errors/RouterError.js";
6
6
  import { ServerError as ServerErrorImport } from "../errors/ServerError.js";
7
7
  import { Button as ButtonImport } from "../ui/Button.js";
8
8
  import { Callout as CalloutImport } from "../ui/Callout.js";
9
- import { Spinner as SpinnerImport } from "./Spinner.js";
10
- import { Markdown as MarkdownImport } from "./Markdown.js";
11
9
  import {
12
10
  Bootstrap as BootstrapImport,
13
11
  BootstrapStatic as BootstrapStaticImport,
14
12
  } from "./Bootstrap.js";
15
13
  import { ClientOnly as ClientOnlyImport } from "./ClientOnly.js";
16
14
  import { Layout as LayoutImport } from "./Layout.js";
15
+ import { Markdown as MarkdownImport } from "./Markdown.js";
16
+ import { Spinner as SpinnerImport } from "./Spinner.js";
17
17
  import { Zudoku as ZudokuImport } from "./Zudoku.js";
18
18
  import { useZudoku as useZudokuImport } from "./context/ZudokuContext.js";
19
19
  export const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;
@@ -112,10 +112,10 @@ export const SidebarCategory = ({
112
112
  className={cn(
113
113
  // CollapsibleContent class is used to animate and it should only be applied when the user has triggered the toggle
114
114
  hasInteracted && "CollapsibleContent",
115
- "my-1",
115
+ "ms-6 my-1",
116
116
  )}
117
117
  >
118
- <ul className={"relative"}>
118
+ <ul className="relative after:absolute after:-left-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border">
119
119
  {category.items.map((item) => (
120
120
  <SidebarItem
121
121
  key={