zudoku 0.45.0 → 0.46.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 (533) hide show
  1. package/cli.js +8 -2
  2. package/dist/app/main.js +4 -23
  3. package/dist/app/main.js.map +1 -1
  4. package/dist/config/config.d.ts +2 -2
  5. package/dist/config/file-exists.d.ts +1 -0
  6. package/dist/config/file-exists.js +5 -0
  7. package/dist/config/file-exists.js.map +1 -0
  8. package/dist/config/loader.d.ts +19 -4
  9. package/dist/config/loader.js +94 -14
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/validators/validate.d.ts +3536 -743
  12. package/dist/config/validators/validate.js +396 -11
  13. package/dist/config/validators/validate.js.map +1 -1
  14. package/dist/index.d.ts +4 -2
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/lib/authentication/AuthenticationPlugin.d.ts +7 -2
  18. package/dist/lib/authentication/AuthenticationPlugin.js +13 -1
  19. package/dist/lib/authentication/AuthenticationPlugin.js.map +1 -1
  20. package/dist/lib/authentication/authentication.d.ts +2 -4
  21. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  22. package/dist/lib/authentication/providers/clerk.js +62 -43
  23. package/dist/lib/authentication/providers/clerk.js.map +1 -1
  24. package/dist/lib/authentication/providers/openid.d.ts +7 -12
  25. package/dist/lib/authentication/providers/openid.js +11 -22
  26. package/dist/lib/authentication/providers/openid.js.map +1 -1
  27. package/dist/lib/authentication/providers/supabase.js +3 -5
  28. package/dist/lib/authentication/providers/supabase.js.map +1 -1
  29. package/dist/lib/components/Autocomplete.js +1 -1
  30. package/dist/lib/components/Banner.js +1 -1
  31. package/dist/lib/components/Banner.js.map +1 -1
  32. package/dist/lib/components/ErrorPage.js +1 -1
  33. package/dist/lib/components/Footer.js +5 -5
  34. package/dist/lib/components/Footer.js.map +1 -1
  35. package/dist/lib/components/Header.js +16 -8
  36. package/dist/lib/components/Header.js.map +1 -1
  37. package/dist/lib/components/Heading.js +6 -1
  38. package/dist/lib/components/Heading.js.map +1 -1
  39. package/dist/lib/components/InlineCode.js +1 -1
  40. package/dist/lib/components/InlineCode.js.map +1 -1
  41. package/dist/lib/components/Layout.js +2 -2
  42. package/dist/lib/components/Layout.js.map +1 -1
  43. package/dist/lib/components/Main.js +2 -2
  44. package/dist/lib/components/Main.js.map +1 -1
  45. package/dist/lib/components/Markdown.js +8 -3
  46. package/dist/lib/components/Markdown.js.map +1 -1
  47. package/dist/lib/components/MobileTopNavigation.js +3 -2
  48. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  49. package/dist/lib/components/NotFoundPage.js +1 -1
  50. package/dist/lib/components/Pagination.js +1 -1
  51. package/dist/lib/components/Pagination.js.map +1 -1
  52. package/dist/lib/components/Search.js +1 -1
  53. package/dist/lib/components/Search.js.map +1 -1
  54. package/dist/lib/components/Slot.d.ts +17 -0
  55. package/dist/lib/components/Slot.js +24 -0
  56. package/dist/lib/components/Slot.js.map +1 -0
  57. package/dist/lib/components/Slot.test.js +168 -0
  58. package/dist/lib/components/Slot.test.js.map +1 -0
  59. package/dist/lib/components/TopNavigation.d.ts +1 -4
  60. package/dist/lib/components/TopNavigation.js +3 -11
  61. package/dist/lib/components/TopNavigation.js.map +1 -1
  62. package/dist/lib/components/Zudoku.js +2 -2
  63. package/dist/lib/components/Zudoku.js.map +1 -1
  64. package/dist/lib/components/context/SlotProvider.d.ts +26 -0
  65. package/dist/lib/components/context/SlotProvider.js +83 -0
  66. package/dist/lib/components/context/SlotProvider.js.map +1 -0
  67. package/dist/lib/components/context/ZudokuContext.d.ts +1 -1
  68. package/dist/lib/components/context/ZudokuProvider.js +2 -1
  69. package/dist/lib/components/context/ZudokuProvider.js.map +1 -1
  70. package/dist/lib/components/index.d.ts +29 -23
  71. package/dist/lib/components/index.js +13 -7
  72. package/dist/lib/components/index.js.map +1 -1
  73. package/dist/lib/components/navigation/PoweredByZudoku.js +1 -1
  74. package/dist/lib/components/navigation/Sidebar.js +3 -3
  75. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  76. package/dist/lib/components/navigation/SidebarBadge.js +1 -1
  77. package/dist/lib/components/navigation/SidebarBadge.js.map +1 -1
  78. package/dist/lib/components/navigation/SidebarCategory.js +3 -3
  79. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  80. package/dist/lib/components/navigation/SidebarItem.d.ts +0 -5
  81. package/dist/lib/components/navigation/SidebarItem.js +19 -23
  82. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  83. package/dist/lib/components/navigation/SidebarWrapper.js +1 -1
  84. package/dist/lib/components/navigation/Toc.js +1 -1
  85. package/dist/lib/components/navigation/Toc.js.map +1 -1
  86. package/dist/lib/components/navigation/utils.d.ts +8 -0
  87. package/dist/lib/components/navigation/utils.js +34 -6
  88. package/dist/lib/components/navigation/utils.js.map +1 -1
  89. package/dist/lib/core/ZudokuContext.d.ts +12 -8
  90. package/dist/lib/core/ZudokuContext.js +6 -5
  91. package/dist/lib/core/ZudokuContext.js.map +1 -1
  92. package/dist/lib/core/plugins.d.ts +5 -2
  93. package/dist/lib/core/plugins.js +1 -0
  94. package/dist/lib/core/plugins.js.map +1 -1
  95. package/dist/lib/errors/ErrorAlert.js +1 -1
  96. package/dist/lib/hooks/index.d.ts +19 -0
  97. package/dist/lib/hooks/index.js +11 -0
  98. package/dist/lib/hooks/index.js.map +1 -1
  99. package/dist/lib/plugins/api-catalog/Catalog.js +1 -1
  100. package/dist/lib/plugins/api-keys/CreateApiKey.d.ts +3 -2
  101. package/dist/lib/plugins/api-keys/CreateApiKey.js +8 -4
  102. package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -1
  103. package/dist/lib/plugins/api-keys/SettingsApiKeys.d.ts +1 -1
  104. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +54 -23
  105. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  106. package/dist/lib/plugins/api-keys/index.d.ts +18 -9
  107. package/dist/lib/plugins/api-keys/index.js +49 -34
  108. package/dist/lib/plugins/api-keys/index.js.map +1 -1
  109. package/dist/lib/plugins/custom-pages/index.d.ts +1 -1
  110. package/dist/lib/plugins/markdown/MdxPage.js +1 -1
  111. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  112. package/dist/lib/plugins/markdown/index.d.ts +1 -1
  113. package/dist/lib/plugins/markdown/resolver.d.ts +1 -1
  114. package/dist/lib/plugins/markdown/resolver.js.map +1 -1
  115. package/dist/lib/plugins/openapi/CollapsibleCode.js +1 -1
  116. package/dist/lib/plugins/openapi/ColorizedParam.js +1 -1
  117. package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
  118. package/dist/lib/plugins/openapi/OperationList.js +1 -1
  119. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  120. package/dist/lib/plugins/openapi/OperationListItem.js +2 -3
  121. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  122. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +5 -1
  123. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  124. package/dist/lib/plugins/openapi/ResponsesSidecarBox.d.ts +2 -4
  125. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +1 -4
  126. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  127. package/dist/lib/plugins/openapi/SchemaList.js +6 -5
  128. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  129. package/dist/lib/plugins/openapi/Sidecar.js +1 -1
  130. package/dist/lib/plugins/openapi/SidecarExamples.js +8 -0
  131. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  132. package/dist/lib/plugins/openapi/components/EnumValues.js +1 -1
  133. package/dist/lib/plugins/openapi/components/EnumValues.js.map +1 -1
  134. package/dist/lib/plugins/openapi/components/ResponseContent.d.ts +12 -0
  135. package/dist/lib/plugins/openapi/components/ResponseContent.js +21 -0
  136. package/dist/lib/plugins/openapi/components/ResponseContent.js.map +1 -0
  137. package/dist/lib/plugins/openapi/playground/Playground.js +2 -0
  138. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  139. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +1 -1
  140. package/dist/lib/plugins/openapi/playground/SubmitButton.js +7 -10
  141. package/dist/lib/plugins/openapi/playground/SubmitButton.js.map +1 -1
  142. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +2 -2
  143. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  144. package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +2 -1
  145. package/dist/lib/plugins/openapi/schema/SchemaView.js +3 -3
  146. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  147. package/dist/lib/plugins/redirect/index.d.ts +1 -1
  148. package/dist/lib/ui/Badge.d.ts +2 -2
  149. package/dist/lib/ui/Badge.js +1 -1
  150. package/dist/lib/ui/Badge.js.map +1 -1
  151. package/dist/lib/ui/Button.d.ts +2 -2
  152. package/dist/lib/ui/Button.js +8 -6
  153. package/dist/lib/ui/Button.js.map +1 -1
  154. package/dist/lib/ui/Callout.js +1 -1
  155. package/dist/lib/ui/Callout.js.map +1 -1
  156. package/dist/lib/ui/Card.js +1 -1
  157. package/dist/lib/ui/Checkbox.js +1 -1
  158. package/dist/lib/ui/Checkbox.js.map +1 -1
  159. package/dist/lib/ui/Command.d.ts +2 -2
  160. package/dist/lib/ui/Command.js +3 -3
  161. package/dist/lib/ui/Command.js.map +1 -1
  162. package/dist/lib/ui/Dialog.js +1 -1
  163. package/dist/lib/ui/Dialog.js.map +1 -1
  164. package/dist/lib/ui/DropdownMenu.js +4 -4
  165. package/dist/lib/ui/DropdownMenu.js.map +1 -1
  166. package/dist/lib/ui/HoverCard.js +1 -1
  167. package/dist/lib/ui/HoverCard.js.map +1 -1
  168. package/dist/lib/ui/Input.js +1 -1
  169. package/dist/lib/ui/Input.js.map +1 -1
  170. package/dist/lib/ui/Popover.js +1 -1
  171. package/dist/lib/ui/Popover.js.map +1 -1
  172. package/dist/lib/ui/RadioGroup.js +1 -1
  173. package/dist/lib/ui/RadioGroup.js.map +1 -1
  174. package/dist/lib/ui/Select.js +2 -2
  175. package/dist/lib/ui/Select.js.map +1 -1
  176. package/dist/lib/ui/Slider.js +1 -1
  177. package/dist/lib/ui/Slider.js.map +1 -1
  178. package/dist/lib/ui/Switch.js +1 -1
  179. package/dist/lib/ui/Switch.js.map +1 -1
  180. package/dist/lib/ui/Tabs.js +2 -2
  181. package/dist/lib/ui/Tabs.js.map +1 -1
  182. package/dist/lib/ui/Textarea.js +1 -1
  183. package/dist/lib/ui/Textarea.js.map +1 -1
  184. package/dist/lib/ui/Toggle.js +1 -1
  185. package/dist/lib/ui/Toggle.js.map +1 -1
  186. package/dist/lib/ui/Tooltip.d.ts +2 -1
  187. package/dist/lib/ui/Tooltip.js +2 -1
  188. package/dist/lib/ui/Tooltip.js.map +1 -1
  189. package/dist/lib/util/useExposedProps.d.ts +8 -1
  190. package/dist/lib/util/useExposedProps.js.map +1 -1
  191. package/dist/vite/api/SchemaManager.js +16 -1
  192. package/dist/vite/api/SchemaManager.js.map +1 -1
  193. package/dist/vite/build.js +44 -6
  194. package/dist/vite/build.js.map +1 -1
  195. package/dist/vite/config.d.ts +2 -9
  196. package/dist/vite/config.js +6 -95
  197. package/dist/vite/config.js.map +1 -1
  198. package/dist/vite/config.test.js +1 -1
  199. package/dist/vite/config.test.js.map +1 -1
  200. package/dist/vite/css/plugin.d.ts +1 -2
  201. package/dist/vite/css/plugin.js +3 -2
  202. package/dist/vite/css/plugin.js.map +1 -1
  203. package/dist/vite/dev-server.d.ts +0 -1
  204. package/dist/vite/dev-server.js +10 -12
  205. package/dist/vite/dev-server.js.map +1 -1
  206. package/dist/vite/html.d.ts +2 -2
  207. package/dist/vite/html.js +5 -2
  208. package/dist/vite/html.js.map +1 -1
  209. package/dist/vite/plugin-api-keys.d.ts +1 -2
  210. package/dist/vite/plugin-api-keys.js +9 -3
  211. package/dist/vite/plugin-api-keys.js.map +1 -1
  212. package/dist/vite/plugin-api.d.ts +1 -2
  213. package/dist/vite/plugin-api.js +5 -4
  214. package/dist/vite/plugin-api.js.map +1 -1
  215. package/dist/vite/plugin-auth.d.ts +1 -2
  216. package/dist/vite/plugin-auth.js +3 -2
  217. package/dist/vite/plugin-auth.js.map +1 -1
  218. package/dist/vite/plugin-component.d.ts +1 -2
  219. package/dist/vite/plugin-component.js +3 -2
  220. package/dist/vite/plugin-component.js.map +1 -1
  221. package/dist/vite/plugin-config-reload.d.ts +1 -2
  222. package/dist/vite/plugin-config-reload.js +21 -22
  223. package/dist/vite/plugin-config-reload.js.map +1 -1
  224. package/dist/vite/plugin-config.d.ts +1 -2
  225. package/dist/vite/plugin-config.js +4 -3
  226. package/dist/vite/plugin-config.js.map +1 -1
  227. package/dist/vite/plugin-configure-tailwind.d.ts +2 -0
  228. package/dist/vite/plugin-configure-tailwind.js +38 -0
  229. package/dist/vite/plugin-configure-tailwind.js.map +1 -0
  230. package/dist/vite/plugin-custom-pages.d.ts +1 -2
  231. package/dist/vite/plugin-custom-pages.js +3 -2
  232. package/dist/vite/plugin-custom-pages.js.map +1 -1
  233. package/dist/vite/plugin-docs.d.ts +1 -2
  234. package/dist/vite/plugin-docs.js +4 -3
  235. package/dist/vite/plugin-docs.js.map +1 -1
  236. package/dist/vite/plugin-frontmatter.d.ts +1 -2
  237. package/dist/vite/plugin-frontmatter.js +3 -2
  238. package/dist/vite/plugin-frontmatter.js.map +1 -1
  239. package/dist/vite/plugin-mdx.d.ts +1 -2
  240. package/dist/vite/plugin-mdx.js +3 -2
  241. package/dist/vite/plugin-mdx.js.map +1 -1
  242. package/dist/vite/plugin-redirect.d.ts +1 -2
  243. package/dist/vite/plugin-redirect.js +3 -2
  244. package/dist/vite/plugin-redirect.js.map +1 -1
  245. package/dist/vite/plugin-search.d.ts +1 -2
  246. package/dist/vite/plugin-search.js +3 -2
  247. package/dist/vite/plugin-search.js.map +1 -1
  248. package/dist/vite/plugin-shiki-register.d.ts +1 -2
  249. package/dist/vite/plugin-shiki-register.js +2 -1
  250. package/dist/vite/plugin-shiki-register.js.map +1 -1
  251. package/dist/vite/plugin-sidebar.d.ts +1 -2
  252. package/dist/vite/plugin-sidebar.js +3 -2
  253. package/dist/vite/plugin-sidebar.js.map +1 -1
  254. package/dist/vite/plugin-theme-css.d.ts +1 -2
  255. package/dist/vite/plugin-theme-css.js +20 -60
  256. package/dist/vite/plugin-theme-css.js.map +1 -1
  257. package/dist/vite/plugin.d.ts +1 -2
  258. package/dist/vite/plugin.js +22 -21
  259. package/dist/vite/plugin.js.map +1 -1
  260. package/dist/vite/sitemap.d.ts +1 -1
  261. package/dist/zuplo/with-zuplo.d.ts +2 -2
  262. package/dist/zuplo/with-zuplo.js.map +1 -1
  263. package/lib/Button-BE9IVkWV.js +51 -0
  264. package/lib/Button-BE9IVkWV.js.map +1 -0
  265. package/lib/{Callout-XadUe37J.js → Callout-BkgOUkoZ.js} +9 -8
  266. package/lib/Callout-BkgOUkoZ.js.map +1 -0
  267. package/lib/{Card-BlCYNw5W.js → Card-DPhGbYUM.js} +3 -3
  268. package/lib/{Card-BlCYNw5W.js.map → Card-DPhGbYUM.js.map} +1 -1
  269. package/lib/{CategoryHeading-DZi-Szor.js → CategoryHeading-Cu2RwgjC.js} +2 -2
  270. package/lib/{CategoryHeading-DZi-Szor.js.map → CategoryHeading-Cu2RwgjC.js.map} +1 -1
  271. package/lib/{Dialog-CNf2oWXG.js → Dialog-Du6WMcIA.js} +8 -7
  272. package/lib/Dialog-Du6WMcIA.js.map +1 -0
  273. package/lib/{Drawer-BPBxzel2.js → Drawer-BzkOKwgC.js} +2 -2
  274. package/lib/{Drawer-BPBxzel2.js.map → Drawer-BzkOKwgC.js.map} +1 -1
  275. package/lib/Markdown-BRAyzyUJ.js +15348 -0
  276. package/lib/Markdown-BRAyzyUJ.js.map +1 -0
  277. package/lib/{MdxPage-Sjv6y3cA.js → MdxPage-B3v1BSKr.js} +11 -11
  278. package/lib/MdxPage-B3v1BSKr.js.map +1 -0
  279. package/lib/{OasProvider-CzRXrs_-.js → OasProvider-5jrFuhVk.js} +3 -3
  280. package/lib/{OasProvider-CzRXrs_-.js.map → OasProvider-5jrFuhVk.js.map} +1 -1
  281. package/lib/{OperationList-DefCF3ZI.js → OperationList-BmoMLQPO.js} +1039 -1005
  282. package/lib/OperationList-BmoMLQPO.js.map +1 -0
  283. package/lib/Pagination-Cr0fWZS3.js +36 -0
  284. package/lib/Pagination-Cr0fWZS3.js.map +1 -0
  285. package/lib/RouteGuard-PrSVLbSr.js +55 -0
  286. package/lib/RouteGuard-PrSVLbSr.js.map +1 -0
  287. package/lib/{SchemaList-zHQ2Ekyw.js → SchemaList-B4riYLoP.js} +61 -47
  288. package/lib/SchemaList-B4riYLoP.js.map +1 -0
  289. package/lib/{SchemaView-CqF4oMU-.js → SchemaView-CPZ6RgsF.js} +100 -95
  290. package/lib/SchemaView-CPZ6RgsF.js.map +1 -0
  291. package/lib/{AuthenticationPlugin-UNaAuxNo.js → SignUp-CWaiH0tY.js} +23 -50
  292. package/lib/SignUp-CWaiH0tY.js.map +1 -0
  293. package/lib/Slot-Bo6K4tnb.js +160 -0
  294. package/lib/Slot-Bo6K4tnb.js.map +1 -0
  295. package/lib/{SyntaxHighlight-UxOF1xNb.js → SyntaxHighlight-DedRjJNr.js} +233 -212
  296. package/lib/{SyntaxHighlight-UxOF1xNb.js.map → SyntaxHighlight-DedRjJNr.js.map} +1 -1
  297. package/lib/{Toc-Ax54Pw8S.js → Toc-lL3fzNkl.js} +5 -5
  298. package/lib/Toc-lL3fzNkl.js.map +1 -0
  299. package/lib/{circular-B_TODp4H.js → circular-oB4auIIg.js} +2 -2
  300. package/lib/{circular-B_TODp4H.js.map → circular-oB4auIIg.js.map} +1 -1
  301. package/lib/clsx-OuTLNxxd.js +17 -0
  302. package/lib/clsx-OuTLNxxd.js.map +1 -0
  303. package/lib/{cn-CwJPJKOE.js → cn-wvCW-ho6.js} +1015 -562
  304. package/lib/cn-wvCW-ho6.js.map +1 -0
  305. package/lib/{createServer-CXd8q7nF.js → createServer-DCB82j2t.js} +81 -81
  306. package/lib/{createServer-CXd8q7nF.js.map → createServer-DCB82j2t.js.map} +1 -1
  307. package/lib/{hook-BwOB_iZo.js → hook-DawSLaZr.js} +323 -300
  308. package/lib/hook-DawSLaZr.js.map +1 -0
  309. package/lib/{index-BY8J3gEh.js → index-BXYvD5-7.js} +868 -758
  310. package/lib/index-BXYvD5-7.js.map +1 -0
  311. package/lib/{index-Z13x6tPX.js → index-DI5SPFK9.js} +2 -2
  312. package/lib/{index-Z13x6tPX.js.map → index-DI5SPFK9.js.map} +1 -1
  313. package/lib/index-QzXzw_ra.js +24 -0
  314. package/lib/index-QzXzw_ra.js.map +1 -0
  315. package/lib/{RouteGuard-lkdEJoDV.js → index.esm-BFcSKCe-.js} +232 -281
  316. package/lib/index.esm-BFcSKCe-.js.map +1 -0
  317. package/lib/{index.esm-D2ZUREQN.js → index.esm-DSfX_eMP.js} +3 -3
  318. package/lib/{index.esm-D2ZUREQN.js.map → index.esm-DSfX_eMP.js.map} +1 -1
  319. package/lib/joinPath-B7kNnUX4.js +8 -0
  320. package/lib/joinPath-B7kNnUX4.js.map +1 -0
  321. package/lib/{mutation-CL2MCRQL.js → mutation-oxMvODNQ.js} +2 -2
  322. package/lib/{mutation-CL2MCRQL.js.map → mutation-oxMvODNQ.js.map} +1 -1
  323. package/lib/ui/Accordion.js +1 -1
  324. package/lib/ui/ActionButton.js +2 -2
  325. package/lib/ui/Alert.js +2 -2
  326. package/lib/ui/AlertDialog.js +1 -1
  327. package/lib/ui/Badge.js +3 -3
  328. package/lib/ui/Badge.js.map +1 -1
  329. package/lib/ui/Breadcrumb.js +1 -1
  330. package/lib/ui/Button.js +20 -18
  331. package/lib/ui/Button.js.map +1 -1
  332. package/lib/ui/Callout.js +6 -5
  333. package/lib/ui/Callout.js.map +1 -1
  334. package/lib/ui/Card.js +8 -8
  335. package/lib/ui/Card.js.map +1 -1
  336. package/lib/ui/Carousel.js +1 -1
  337. package/lib/ui/Checkbox.js +7 -7
  338. package/lib/ui/Checkbox.js.map +1 -1
  339. package/lib/ui/CodeBlock.js +1 -1
  340. package/lib/ui/Command.js +43 -43
  341. package/lib/ui/Command.js.map +1 -1
  342. package/lib/ui/Dialog.js +2 -2
  343. package/lib/ui/Dialog.js.map +1 -1
  344. package/lib/ui/Drawer.js +2 -2
  345. package/lib/ui/DropdownMenu.js +34 -34
  346. package/lib/ui/DropdownMenu.js.map +1 -1
  347. package/lib/ui/Form.js +2 -2
  348. package/lib/ui/HoverCard.js +5 -5
  349. package/lib/ui/HoverCard.js.map +1 -1
  350. package/lib/ui/Input.js +2 -2
  351. package/lib/ui/Input.js.map +1 -1
  352. package/lib/ui/Label.js +2 -2
  353. package/lib/ui/Pagination.js +1 -1
  354. package/lib/ui/Popover.js +2 -2
  355. package/lib/ui/Popover.js.map +1 -1
  356. package/lib/ui/Progress.js +1 -1
  357. package/lib/ui/RadioGroup.js +10 -10
  358. package/lib/ui/RadioGroup.js.map +1 -1
  359. package/lib/ui/ScrollArea.js +1 -1
  360. package/lib/ui/Select.js +31 -31
  361. package/lib/ui/Select.js.map +1 -1
  362. package/lib/ui/Skeleton.js +1 -1
  363. package/lib/ui/Slider.js +5 -5
  364. package/lib/ui/Slider.js.map +1 -1
  365. package/lib/ui/Switch.js +5 -5
  366. package/lib/ui/Switch.js.map +1 -1
  367. package/lib/ui/SyntaxHighlight.js +2 -2
  368. package/lib/ui/Tabs.js +16 -16
  369. package/lib/ui/Tabs.js.map +1 -1
  370. package/lib/ui/Textarea.js +5 -5
  371. package/lib/ui/Textarea.js.map +1 -1
  372. package/lib/ui/Toggle.js +7 -7
  373. package/lib/ui/Toggle.js.map +1 -1
  374. package/lib/ui/ToggleGroup.js +1 -1
  375. package/lib/ui/Tooltip.js +15 -8
  376. package/lib/ui/Tooltip.js.map +1 -1
  377. package/lib/ui/util.js +1 -1
  378. package/lib/useExposedProps-DG8J6ewJ.js.map +1 -1
  379. package/lib/useMutation-C_j3dA_L.js +97 -0
  380. package/lib/useMutation-C_j3dA_L.js.map +1 -0
  381. package/lib/zudoku.auth-auth0.js +1 -1
  382. package/lib/zudoku.auth-auth0.js.map +1 -1
  383. package/lib/zudoku.auth-clerk.js +99 -82
  384. package/lib/zudoku.auth-clerk.js.map +1 -1
  385. package/lib/zudoku.auth-openid.js +246 -216
  386. package/lib/zudoku.auth-openid.js.map +1 -1
  387. package/lib/zudoku.components.js +4957 -33
  388. package/lib/zudoku.components.js.map +1 -1
  389. package/lib/zudoku.hooks.js +21 -12
  390. package/lib/zudoku.hooks.js.map +1 -1
  391. package/lib/zudoku.plugin-api-catalog.js +8 -8
  392. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  393. package/lib/zudoku.plugin-api-keys.js +5022 -214
  394. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  395. package/lib/zudoku.plugin-custom-pages.js +2 -2
  396. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  397. package/lib/zudoku.plugin-markdown.js +1 -1
  398. package/lib/zudoku.plugin-markdown.js.map +1 -1
  399. package/lib/zudoku.plugin-openapi.js +3 -3
  400. package/lib/zudoku.plugin-redirect.js.map +1 -1
  401. package/lib/zudoku.plugin-search-pagefind.js +5 -5
  402. package/lib/zudoku.plugins.js +7 -6
  403. package/lib/zudoku.plugins.js.map +1 -1
  404. package/package.json +15 -16
  405. package/src/app/defaultTheme.css +54 -0
  406. package/src/app/font.geist.css +73 -0
  407. package/src/app/main.css +113 -156
  408. package/src/app/main.tsx +4 -28
  409. package/src/lib/authentication/AuthenticationPlugin.tsx +18 -4
  410. package/src/lib/authentication/authentication.ts +2 -5
  411. package/src/lib/authentication/providers/auth0.tsx +8 -2
  412. package/src/lib/authentication/providers/clerk.tsx +72 -48
  413. package/src/lib/authentication/providers/openid.tsx +19 -26
  414. package/src/lib/authentication/providers/supabase.tsx +7 -7
  415. package/src/lib/components/Autocomplete.tsx +1 -1
  416. package/src/lib/components/Banner.tsx +1 -1
  417. package/src/lib/components/ErrorPage.tsx +1 -1
  418. package/src/lib/components/Footer.tsx +7 -10
  419. package/src/lib/components/Header.tsx +29 -29
  420. package/src/lib/components/Heading.tsx +9 -5
  421. package/src/lib/components/InlineCode.tsx +1 -1
  422. package/src/lib/components/Layout.tsx +3 -3
  423. package/src/lib/components/Main.tsx +4 -4
  424. package/src/lib/components/Markdown.tsx +14 -4
  425. package/src/lib/components/MobileTopNavigation.tsx +3 -2
  426. package/src/lib/components/NotFoundPage.tsx +1 -1
  427. package/src/lib/components/Pagination.tsx +3 -9
  428. package/src/lib/components/Search.tsx +1 -1
  429. package/src/lib/components/Slot.test.tsx +465 -0
  430. package/src/lib/components/Slot.tsx +64 -0
  431. package/src/lib/components/TopNavigation.tsx +5 -17
  432. package/src/lib/components/Zudoku.tsx +9 -9
  433. package/src/lib/components/context/SlotProvider.tsx +149 -0
  434. package/src/lib/components/context/ZudokuProvider.tsx +2 -1
  435. package/src/lib/components/index.ts +14 -10
  436. package/src/lib/components/navigation/PoweredByZudoku.tsx +1 -1
  437. package/src/lib/components/navigation/Sidebar.tsx +3 -3
  438. package/src/lib/components/navigation/SidebarBadge.tsx +1 -1
  439. package/src/lib/components/navigation/SidebarCategory.tsx +3 -3
  440. package/src/lib/components/navigation/SidebarItem.tsx +57 -30
  441. package/src/lib/components/navigation/SidebarWrapper.tsx +2 -2
  442. package/src/lib/components/navigation/Toc.tsx +2 -2
  443. package/src/lib/components/navigation/utils.ts +42 -6
  444. package/src/lib/core/ZudokuContext.ts +24 -12
  445. package/src/lib/core/plugins.ts +10 -2
  446. package/src/lib/errors/ErrorAlert.tsx +1 -1
  447. package/src/lib/hooks/index.ts +11 -0
  448. package/src/lib/plugins/api-catalog/Catalog.tsx +1 -1
  449. package/src/lib/plugins/api-keys/CreateApiKey.tsx +54 -42
  450. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +292 -112
  451. package/src/lib/plugins/api-keys/index.tsx +101 -55
  452. package/src/lib/plugins/custom-pages/index.tsx +1 -1
  453. package/src/lib/plugins/markdown/MdxPage.tsx +2 -2
  454. package/src/lib/plugins/markdown/index.tsx +2 -2
  455. package/src/lib/plugins/markdown/resolver.ts +4 -2
  456. package/src/lib/plugins/openapi/CollapsibleCode.tsx +1 -1
  457. package/src/lib/plugins/openapi/ColorizedParam.tsx +2 -2
  458. package/src/lib/plugins/openapi/OperationList.tsx +2 -2
  459. package/src/lib/plugins/openapi/OperationListItem.tsx +6 -34
  460. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +7 -1
  461. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +5 -16
  462. package/src/lib/plugins/openapi/SchemaList.tsx +20 -8
  463. package/src/lib/plugins/openapi/Sidecar.tsx +1 -1
  464. package/src/lib/plugins/openapi/SidecarExamples.tsx +6 -0
  465. package/src/lib/plugins/openapi/components/EnumValues.tsx +1 -1
  466. package/src/lib/plugins/openapi/components/ResponseContent.tsx +104 -0
  467. package/src/lib/plugins/openapi/playground/Playground.tsx +7 -1
  468. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +1 -1
  469. package/src/lib/plugins/openapi/playground/SubmitButton.tsx +24 -29
  470. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +2 -2
  471. package/src/lib/plugins/openapi/schema/SchemaView.tsx +7 -3
  472. package/src/lib/plugins/redirect/index.tsx +1 -1
  473. package/src/lib/ui/Badge.tsx +2 -2
  474. package/src/lib/ui/Button.tsx +9 -6
  475. package/src/lib/ui/Callout.tsx +1 -0
  476. package/src/lib/ui/Card.tsx +1 -1
  477. package/src/lib/ui/Checkbox.tsx +1 -1
  478. package/src/lib/ui/Command.tsx +5 -5
  479. package/src/lib/ui/Dialog.tsx +1 -1
  480. package/src/lib/ui/DropdownMenu.tsx +4 -4
  481. package/src/lib/ui/HoverCard.tsx +1 -1
  482. package/src/lib/ui/Input.tsx +1 -1
  483. package/src/lib/ui/Popover.tsx +1 -1
  484. package/src/lib/ui/RadioGroup.tsx +1 -1
  485. package/src/lib/ui/Select.tsx +3 -3
  486. package/src/lib/ui/Slider.tsx +1 -1
  487. package/src/lib/ui/Switch.tsx +1 -1
  488. package/src/lib/ui/Tabs.tsx +2 -2
  489. package/src/lib/ui/Textarea.tsx +1 -1
  490. package/src/lib/ui/Toggle.tsx +1 -1
  491. package/src/lib/ui/Tooltip.tsx +16 -1
  492. package/src/lib/util/useExposedProps.tsx +12 -1
  493. package/dist/app/tailwind.d.ts +0 -4
  494. package/dist/app/tailwind.js +0 -97
  495. package/dist/app/tailwind.js.map +0 -1
  496. package/dist/config/common.d.ts +0 -10
  497. package/dist/config/common.js +0 -2
  498. package/dist/config/common.js.map +0 -1
  499. package/dist/config/validators/common.d.ts +0 -8001
  500. package/dist/config/validators/common.js +0 -414
  501. package/dist/config/validators/common.js.map +0 -1
  502. package/dist/lib/components/SlotletProvider.d.ts +0 -17
  503. package/dist/lib/components/SlotletProvider.js +0 -18
  504. package/dist/lib/components/SlotletProvider.js.map +0 -1
  505. package/dist/vite/plugin-docs.test.js +0 -22
  506. package/dist/vite/plugin-docs.test.js.map +0 -1
  507. package/lib/AuthenticationPlugin-UNaAuxNo.js.map +0 -1
  508. package/lib/Button-Bdk_Ij3U.js +0 -49
  509. package/lib/Button-Bdk_Ij3U.js.map +0 -1
  510. package/lib/Callout-XadUe37J.js.map +0 -1
  511. package/lib/Dialog-CNf2oWXG.js.map +0 -1
  512. package/lib/Markdown-D96AphCL.js +0 -7691
  513. package/lib/Markdown-D96AphCL.js.map +0 -1
  514. package/lib/MdxPage-Sjv6y3cA.js.map +0 -1
  515. package/lib/OperationList-DefCF3ZI.js.map +0 -1
  516. package/lib/Pagination-B89j9KJS.js +0 -48
  517. package/lib/Pagination-B89j9KJS.js.map +0 -1
  518. package/lib/RouteGuard-lkdEJoDV.js.map +0 -1
  519. package/lib/SchemaList-zHQ2Ekyw.js.map +0 -1
  520. package/lib/SchemaView-CqF4oMU-.js.map +0 -1
  521. package/lib/Select-HTio1oSE.js +0 -211
  522. package/lib/Select-HTio1oSE.js.map +0 -1
  523. package/lib/SlotletProvider-CTgIBRWg.js +0 -257
  524. package/lib/SlotletProvider-CTgIBRWg.js.map +0 -1
  525. package/lib/Toc-Ax54Pw8S.js.map +0 -1
  526. package/lib/cn-CwJPJKOE.js.map +0 -1
  527. package/lib/hook-BwOB_iZo.js.map +0 -1
  528. package/lib/index-BY8J3gEh.js.map +0 -1
  529. package/lib/index-CT2PstvH.js +0 -4982
  530. package/lib/index-CT2PstvH.js.map +0 -1
  531. package/src/app/tailwind.ts +0 -103
  532. package/src/lib/components/SlotletProvider.tsx +0 -55
  533. /package/dist/{vite/plugin-docs.test.d.ts → lib/components/Slot.test.d.ts} +0 -0
@@ -0,0 +1,149 @@
1
+ import {
2
+ createContext,
3
+ Fragment,
4
+ use,
5
+ useMemo,
6
+ useRef,
7
+ type ComponentType,
8
+ type PropsWithChildren,
9
+ type ReactNode,
10
+ } from "react";
11
+ import { createStore, useStore } from "zustand";
12
+ import {
13
+ useExposedProps,
14
+ type ExposedComponentProps,
15
+ } from "../../util/useExposedProps.js";
16
+
17
+ export type SlotType = ReactNode | ComponentType<ExposedComponentProps>;
18
+
19
+ type SlotItem = {
20
+ id: string;
21
+ content: SlotType;
22
+ type: "prepend" | "replace" | "append";
23
+ sequence: number;
24
+ };
25
+
26
+ type SlotStoreState = {
27
+ items: Map<string, SlotItem[]>;
28
+ // to guarantee the order of the items when appending/prepending
29
+ sequences: Map<string, number>;
30
+ getItems: (name: string) => SlotItem[];
31
+ setSlot: (
32
+ id: string,
33
+ name: string,
34
+ content: SlotType,
35
+ type: "prepend" | "replace" | "append",
36
+ ) => void;
37
+ clearSlot: (id: string, name: string) => void;
38
+ };
39
+
40
+ export type SlotStore = ReturnType<typeof createSlotStore>;
41
+
42
+ const createSlotStore = ({
43
+ slots = {},
44
+ }: {
45
+ slots?: Record<string, SlotType>;
46
+ } = {}) => {
47
+ const initialItems = new Map(
48
+ Object.entries(slots).map(([id, content]) => [
49
+ id,
50
+ [{ id, content, type: "replace", sequence: 0 } satisfies SlotItem],
51
+ ]),
52
+ );
53
+ const EMPTY_ITEMS: SlotItem[] = [];
54
+
55
+ return createStore<SlotStoreState>()((set, get) => ({
56
+ items: initialItems,
57
+ sequences: new Map(),
58
+ getItems: (name) => get().items.get(name) ?? EMPTY_ITEMS,
59
+ setSlot: (id, name, content, type) =>
60
+ set((state) => {
61
+ if (content == null) return state;
62
+
63
+ const items = new Map(state.items);
64
+ const sequences = new Map(state.sequences);
65
+ const existing = items.get(name) ?? [];
66
+ const filtered = existing.filter((item) => item.id !== id);
67
+
68
+ const currentSequence = sequences.get(name) ?? 0;
69
+ const newSequence = currentSequence + 1;
70
+ sequences.set(name, newSequence);
71
+
72
+ const newItem = {
73
+ id,
74
+ content,
75
+ type,
76
+ // Use negative sequence values for "prepend" to ensure they are sorted before positive values for "append".
77
+ sequence: type === "prepend" ? -newSequence : newSequence,
78
+ } satisfies SlotItem;
79
+
80
+ if (type === "replace") {
81
+ const nonReplaceItems = filtered.filter(
82
+ (item) => item.type !== "replace",
83
+ );
84
+ items.set(name, [...nonReplaceItems, newItem]);
85
+ } else {
86
+ items.set(name, [...filtered, newItem]);
87
+ }
88
+
89
+ return { items, sequences };
90
+ }),
91
+ clearSlot: (id, name) =>
92
+ set((state) => {
93
+ const items = new Map(state.items);
94
+ const sequences = new Map(state.sequences);
95
+ const existing = items.get(name) ?? [];
96
+ const filtered = existing.filter((item) => item.id !== id);
97
+
98
+ if (filtered.length === 0) {
99
+ items.delete(name);
100
+ sequences.delete(name);
101
+ } else {
102
+ items.set(name, filtered);
103
+ }
104
+ return { items, sequences };
105
+ }),
106
+ }));
107
+ };
108
+
109
+ const SlotContext = createContext(createSlotStore());
110
+
111
+ export const SlotProvider = ({
112
+ children,
113
+ slots,
114
+ }: PropsWithChildren<{
115
+ slots?: Record<string, SlotType>;
116
+ }>) => {
117
+ const store = useRef<SlotStore>(createSlotStore({ slots })).current;
118
+ return <SlotContext value={store}>{children}</SlotContext>;
119
+ };
120
+
121
+ export function useSlotContext<T>(selector: (state: SlotStoreState) => T): T {
122
+ const store = use(SlotContext);
123
+ return useStore(store, selector);
124
+ }
125
+
126
+ const ORDER = ["prepend", "replace", "append"] as const;
127
+
128
+ export const useRenderSlot = (name: string) => {
129
+ const exposedProps = useExposedProps();
130
+ const items = useSlotContext((s) => s.getItems(name));
131
+
132
+ return useMemo(() => {
133
+ if (items.length === 0) return [];
134
+
135
+ return items
136
+ .toSorted((a, b) => {
137
+ const typeOrder = ORDER.indexOf(a.type) - ORDER.indexOf(b.type);
138
+ if (typeOrder !== 0) return typeOrder;
139
+ return a.sequence - b.sequence;
140
+ })
141
+ .map((item) =>
142
+ typeof item.content === "function" ? (
143
+ <item.content key={item.id} {...exposedProps} />
144
+ ) : (
145
+ <Fragment key={item.id}>{item.content}</Fragment>
146
+ ),
147
+ );
148
+ }, [items, exposedProps]);
149
+ };
@@ -1,6 +1,7 @@
1
1
  import { useSuspenseQuery } from "@tanstack/react-query";
2
2
  import type { PropsWithChildren } from "react";
3
3
  import { ZudokuContext } from "../../core/ZudokuContext.js";
4
+ import { NO_DEHYDRATE } from "../cache.js";
4
5
  import { ZudokuReactContext } from "./ZudokuContext.js";
5
6
 
6
7
  export const ZudokuProvider = ({
@@ -12,7 +13,7 @@ export const ZudokuProvider = ({
12
13
  await context.initialize();
13
14
  return true;
14
15
  },
15
- queryKey: ["zudoku-initialize"],
16
+ queryKey: ["zudoku-initialize", NO_DEHYDRATE],
16
17
  });
17
18
 
18
19
  return (
@@ -25,22 +25,13 @@ import { Spinner as SpinnerImport } from "./Spinner.js";
25
25
  import { StatusPage as StatusPageImport } from "./StatusPage.js";
26
26
  import { Zudoku as ZudokuImport } from "./Zudoku.js";
27
27
 
28
- export const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;
29
28
  export const Layout = /*@__PURE__*/ LayoutImport;
30
29
  export const RouterError = /*@__PURE__*/ RouterErrorImport;
31
30
  export const ServerError = /*@__PURE__*/ ServerErrorImport;
32
31
  export const Bootstrap = /*@__PURE__*/ BootstrapImport;
33
32
  export const BootstrapStatic = /*@__PURE__*/ BootstrapStaticImport;
34
33
  export const RouteGuard = /*@__PURE__*/ RouteGuardImport;
35
-
36
34
  export const Head = /*@__PURE__*/ Helmet;
37
-
38
- export const useZudoku = /*@__PURE__*/ useZudokuImport;
39
- export const useAuth = /*@__PURE__*/ useAuthImport;
40
- export const useCache = /*@__PURE__*/ useCacheImport;
41
- export const CACHE_KEYS = /*@__PURE__*/ CACHE_KEYS_IMPORT;
42
- export const Zudoku = /*@__PURE__*/ ZudokuImport;
43
-
44
35
  export const StatusPage = /*@__PURE__*/ StatusPageImport;
45
36
  export const Callout = /*@__PURE__*/ CalloutImport;
46
37
  export const Markdown = /*@__PURE__*/ MarkdownImport;
@@ -48,5 +39,18 @@ export const Spinner = /*@__PURE__*/ SpinnerImport;
48
39
  export const ClientOnly = /*@__PURE__*/ ClientOnlyImport;
49
40
  export const Button = /*@__PURE__*/ ButtonImport;
50
41
  export const Link = /*@__PURE__*/ LinkImport;
51
- export const useTheme = /*@__PURE__*/ useThemeImport;
52
42
  export const BuildCheck = /*@__PURE__*/ BuildCheckImport;
43
+ export const Zudoku = /*@__PURE__*/ ZudokuImport;
44
+
45
+ /** @deprecated Import from `zudoku/hooks` instead */
46
+ export const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;
47
+ /** @deprecated Import from `zudoku/hooks` instead */
48
+ export const useZudoku = /*@__PURE__*/ useZudokuImport;
49
+ /** @deprecated Import from `zudoku/hooks` instead */
50
+ export const useAuth = /*@__PURE__*/ useAuthImport;
51
+ /** @deprecated Import from `zudoku/hooks` instead */
52
+ export const useCache = /*@__PURE__*/ useCacheImport;
53
+ /** @deprecated Import from `zudoku/hooks` instead */
54
+ export const CACHE_KEYS = /*@__PURE__*/ CACHE_KEYS_IMPORT;
55
+ /** @deprecated Import from `zudoku/hooks` instead */
56
+ export const useTheme = /*@__PURE__*/ useThemeImport;
@@ -9,7 +9,7 @@ export const PoweredByZudoku = ({ className }: { className?: string }) => (
9
9
  target="_blank"
10
10
  rel="noopener noreferrer"
11
11
  className={cn(
12
- "flex justify-between items-center w-full border border-transparent hover:border-border rounded-full hover:shadow-sm h-7 px-3 text-nowrap hover:bg-muted/80 transition-all",
12
+ "flex justify-between items-center w-full border border-transparent hover:border-border rounded-full hover:shadow-xs h-7 px-3 text-nowrap hover:bg-muted/80 transition-all",
13
13
  className,
14
14
  )}
15
15
  >
@@ -1,7 +1,7 @@
1
1
  import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
2
2
  import type { SidebarItem as SidebarItemType } from "../../../config/validators/SidebarSchema.js";
3
3
  import { DrawerContent, DrawerTitle } from "../../ui/Drawer.js";
4
- import { Slotlet } from "../SlotletProvider.js";
4
+ import { Slot } from "../Slot.js";
5
5
  import { SidebarItem } from "./SidebarItem.js";
6
6
  import { SidebarWrapper } from "./SidebarWrapper.js";
7
7
 
@@ -14,7 +14,7 @@ export const Sidebar = ({
14
14
  }) => (
15
15
  <>
16
16
  <SidebarWrapper>
17
- <Slotlet name="zudoku-before-navigation" />
17
+ <Slot.Target name="navigation-before" />
18
18
  {sidebar.map((item) => (
19
19
  <SidebarItem
20
20
  key={
@@ -25,7 +25,7 @@ export const Sidebar = ({
25
25
  item={item}
26
26
  />
27
27
  ))}
28
- <Slotlet name="zudoku-after-navigation" />
28
+ <Slot.Target name="navigation-after" />
29
29
  </SidebarWrapper>
30
30
  <DrawerContent
31
31
  className="lg:hidden h-[100dvh] start-0 w-[320px] rounded-none"
@@ -36,7 +36,7 @@ export const SidebarBadge = ({
36
36
  return (
37
37
  <span
38
38
  className={cn(
39
- "flex items-center duration-200 transition-opacity text-center uppercase text-[0.65rem] font-bold rounded text-background dark:text-zinc-50 h-full",
39
+ "flex items-center duration-200 transition-opacity text-center uppercase text-[0.65rem] leading-5 font-bold rounded-sm text-background dark:text-zinc-50 h-full",
40
40
  color === "outline" ? "px-3" : "mt-0.5 px-1",
41
41
  invert ? ColorMapInvert[color] : ColorMap[color],
42
42
  className,
@@ -7,8 +7,8 @@ import { Button } from "zudoku/ui/Button.js";
7
7
  import type { SidebarItemCategory } from "../../../config/validators/SidebarSchema.js";
8
8
  import { cn } from "../../util/cn.js";
9
9
  import { joinUrl } from "../../util/joinUrl.js";
10
- import { navigationListItem, SidebarItem } from "./SidebarItem.js";
11
- import { useIsCategoryOpen } from "./utils.js";
10
+ import { SidebarItem } from "./SidebarItem.js";
11
+ import { navigationListItem, useIsCategoryOpen } from "./utils.js";
12
12
 
13
13
  const SidebarCategoryInner = ({
14
14
  category,
@@ -121,7 +121,7 @@ const SidebarCategoryInner = ({
121
121
  "ms-6 my-1",
122
122
  )}
123
123
  >
124
- <ul className="relative after:absolute after:-start-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border">
124
+ <ul className="relative after:absolute after:-start-(--padding-nav-item) after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border">
125
125
  {category.items.map((item) => (
126
126
  <SidebarItem
127
127
  key={
@@ -1,36 +1,67 @@
1
- import { cva } from "class-variance-authority";
2
1
  import { ExternalLinkIcon } from "lucide-react";
2
+ import { useEffect, useRef, useState } from "react";
3
3
  import { NavLink, useLocation } from "react-router";
4
-
4
+ import {
5
+ Tooltip,
6
+ TooltipArrow,
7
+ TooltipContent,
8
+ TooltipProvider,
9
+ TooltipTrigger,
10
+ } from "zudoku/ui/Tooltip.js";
5
11
  import type { SidebarItem as SidebarItemType } from "../../../config/validators/SidebarSchema.js";
12
+ import { cn } from "../../util/cn.js";
6
13
  import { joinUrl } from "../../util/joinUrl.js";
7
14
  import { AnchorLink } from "../AnchorLink.js";
8
15
  import { useViewportAnchor } from "../context/ViewportAnchorContext.js";
9
16
  import { SidebarBadge } from "./SidebarBadge.js";
10
17
  import { SidebarCategory } from "./SidebarCategory.js";
18
+ import { navigationListItem } from "./utils.js";
19
+
20
+ const TruncatedLabel = ({
21
+ label,
22
+ className,
23
+ }: {
24
+ label: string;
25
+ className?: string;
26
+ }) => {
27
+ const ref = useRef<HTMLSpanElement>(null);
28
+ const [isTruncated, setIsTruncated] = useState(false);
11
29
 
12
- export const navigationListItem = cva(
13
- "flex items-center gap-2 px-[--padding-nav-item] my-0.5 py-1.5 rounded-lg hover:bg-accent tabular-nums",
14
- {
15
- variants: {
16
- isActive: {
17
- true: "bg-accent font-medium",
18
- false: "text-foreground/80",
19
- },
20
- isMuted: {
21
- true: "text-foreground/30",
22
- false: "",
23
- },
24
- isPending: {
25
- true: "bg-accent animate-pulse",
26
- false: "",
27
- },
28
- },
29
- defaultVariants: {
30
- isActive: false,
31
- },
32
- },
33
- );
30
+ useEffect(() => {
31
+ if (!ref.current) return;
32
+
33
+ if (ref.current.offsetWidth < ref.current.scrollWidth) {
34
+ setIsTruncated(true);
35
+ }
36
+ }, []);
37
+
38
+ return (
39
+ <>
40
+ <span
41
+ className={cn("truncate flex-1", className)}
42
+ title={label}
43
+ ref={ref}
44
+ >
45
+ {label}
46
+ </span>
47
+ {isTruncated && (
48
+ <TooltipProvider delayDuration={500}>
49
+ <Tooltip disableHoverableContent>
50
+ <TooltipTrigger className="absolute inset-0 z-10" />
51
+ <TooltipContent
52
+ className="max-w-64 rounded-lg"
53
+ side="bottom"
54
+ align="center"
55
+ >
56
+ <TooltipArrow />
57
+ {label}
58
+ </TooltipContent>
59
+ </Tooltip>
60
+ </TooltipProvider>
61
+ )}
62
+ </>
63
+ );
64
+ };
34
65
 
35
66
  export const DATA_ANCHOR_ATTR = "data-anchor";
36
67
 
@@ -62,9 +93,7 @@ export const SidebarItem = ({
62
93
  {item.icon && <item.icon size={16} className="align-[-0.125em]" />}
63
94
  {item.badge ? (
64
95
  <>
65
- <span className="truncate flex-1" title={item.label}>
66
- {item.label}
67
- </span>
96
+ <TruncatedLabel label={item.label} className="flex-1" />
68
97
  <SidebarBadge {...item.badge} />
69
98
  </>
70
99
  ) : (
@@ -89,9 +118,7 @@ export const SidebarItem = ({
89
118
  >
90
119
  {item.badge ? (
91
120
  <>
92
- <span className="truncate" title={item.label}>
93
- {item.label}
94
- </span>
121
+ <TruncatedLabel label={item.label} />
95
122
  <SidebarBadge {...item.badge} />
96
123
  </>
97
124
  ) : (
@@ -19,12 +19,12 @@ export const SidebarWrapper = ({
19
19
  }, []);
20
20
 
21
21
  return (
22
- <div className="grid sticky top-[--header-height] lg:h-[calc(100vh-var(--header-height))] grid-rows-[1fr_min-content] border-r">
22
+ <div className="grid sticky top-(--header-height) lg:h-[calc(100vh-var(--header-height))] grid-rows-[1fr_min-content] border-r">
23
23
  <nav
24
24
  ref={navRef}
25
25
  className={cn(
26
26
  "hidden max-w-[calc(var(--side-nav-width)+var(--padding-nav-item))] lg:flex scrollbar flex-col overflow-y-auto shrink-0 text-sm pe-3 ps-4 lg:ps-8",
27
- "-mx-[--padding-nav-item] pb-[8vh] pt-[--padding-content-top] scroll-pt-2 gap-1",
27
+ "-mx-(--padding-nav-item) pb-[8vh] pt-(--padding-content-top) scroll-pt-2 gap-1",
28
28
  // Revert the padding/margin on the first child
29
29
  "-mt-2.5",
30
30
  className,
@@ -80,7 +80,7 @@ export const Toc = ({ entries }: { entries: TocEntry[] }) => {
80
80
  }, [activeAnchor]);
81
81
 
82
82
  return (
83
- <aside className="sticky scrollbar top-8 lg:top-[--header-height] h-[calc(100vh-var(--header-height))] pt-[--padding-content-top] pb-[--padding-content-bottom] overflow-y-auto ps-1 text-sm">
83
+ <aside className="sticky scrollbar top-8 lg:top-(--header-height) h-[calc(100vh-var(--header-height))] pt-(--padding-content-top) pb-(--padding-content-bottom) overflow-y-auto ps-1 text-sm">
84
84
  <div className="flex items-center gap-2 font-medium mb-2">
85
85
  <ListTreeIcon size={16} />
86
86
  On this page
@@ -89,7 +89,7 @@ export const Toc = ({ entries }: { entries: TocEntry[] }) => {
89
89
  <div className="absolute inset-0 end-auto bg-border w-[2px]" />
90
90
  <div
91
91
  className={cn(
92
- "absolute -start-px -translate-y-1 h-6 w-[4px] rounded bg-primary",
92
+ "absolute -start-px -translate-y-1 h-6 w-[4px] rounded-sm bg-primary",
93
93
  paintedOnce.current &&
94
94
  "ease-out [transition:top_150ms,opacity_325ms]",
95
95
  )}
@@ -1,9 +1,10 @@
1
+ import { cva } from "class-variance-authority";
1
2
  import { useLocation } from "react-router";
2
3
  import type {
3
4
  SidebarItem,
4
5
  SidebarItemCategory,
5
6
  } from "../../../config/validators/SidebarSchema.js";
6
- import { joinPath } from "../../util/joinPath.js";
7
+ import { joinUrl } from "../../util/joinUrl.js";
7
8
  import { useCurrentNavigation } from "../context/ZudokuContext.js";
8
9
 
9
10
  export type TraverseCallback<T> = (
@@ -47,7 +48,7 @@ export const useCurrentItem = () => {
47
48
  const currentSidebar = nav.sidebar;
48
49
 
49
50
  return traverseSidebar(currentSidebar, (item) => {
50
- if (item.type === "doc" && joinPath(item.id) === location.pathname) {
51
+ if (item.type === "doc" && joinUrl(item.id) === location.pathname) {
51
52
  return item;
52
53
  }
53
54
  });
@@ -58,14 +59,14 @@ export const useIsCategoryOpen = (category: SidebarItemCategory) => {
58
59
 
59
60
  return traverseSidebarItem(category, (item) => {
60
61
  if (item.type === "category" && item.link) {
61
- const categoryLinkPath = joinPath(item.link.id);
62
+ const categoryLinkPath = joinUrl(item.link.id);
62
63
  if (categoryLinkPath === location.pathname) {
63
64
  return true;
64
65
  }
65
66
  }
66
67
 
67
68
  if (item.type === "doc") {
68
- const docPath = joinPath(item.id);
69
+ const docPath = joinUrl(item.id);
69
70
  if (docPath === location.pathname) {
70
71
  return true;
71
72
  }
@@ -89,9 +90,9 @@ export const usePrevNext = (): {
89
90
  traverseSidebar(currentSidebar, (item) => {
90
91
  const itemId =
91
92
  item.type === "doc"
92
- ? joinPath(item.id)
93
+ ? joinUrl(item.id)
93
94
  : item.type === "category" && item.link
94
- ? joinPath(item.link.id)
95
+ ? joinUrl(item.link.id)
95
96
  : undefined;
96
97
 
97
98
  if (!itemId) return;
@@ -110,3 +111,38 @@ export const usePrevNext = (): {
110
111
 
111
112
  return { prev, next };
112
113
  };
114
+
115
+ export const navigationListItem = cva(
116
+ "relative flex items-center gap-2 px-(--padding-nav-item) my-0.5 py-1.5 rounded-lg hover:bg-accent tabular-nums",
117
+ {
118
+ variants: {
119
+ isActive: {
120
+ true: "bg-accent font-medium",
121
+ false: "text-foreground/80",
122
+ },
123
+ isMuted: {
124
+ true: "text-foreground/30",
125
+ false: "",
126
+ },
127
+ isPending: {
128
+ true: "bg-accent animate-pulse",
129
+ false: "",
130
+ },
131
+ },
132
+ defaultVariants: {
133
+ isActive: false,
134
+ },
135
+ },
136
+ );
137
+
138
+ export const isHiddenItem =
139
+ (isAuthenticated?: boolean) =>
140
+ (item: { display?: "auth" | "anon" | "always" | "hide" }): boolean => {
141
+ if (item.display === "hide") return false;
142
+ return (
143
+ (item.display === "auth" && isAuthenticated) ||
144
+ (item.display === "anon" && !isAuthenticated) ||
145
+ !item.display ||
146
+ item.display === "always"
147
+ );
148
+ };
@@ -4,20 +4,21 @@ import type { ReactNode } from "react";
4
4
  import type { Location } from "react-router";
5
5
  import type { BundledTheme, HighlighterCore } from "shiki";
6
6
  import type { z } from "zod";
7
+ import type { SidebarConfig } from "../../config/validators/SidebarSchema.js";
7
8
  import type {
8
9
  FooterSchema,
9
10
  TopNavigationItem,
10
- } from "../../config/validators/common.js";
11
- import type { SidebarConfig } from "../../config/validators/SidebarSchema.js";
12
- import type { AuthenticationProvider } from "../authentication/authentication.js";
11
+ } from "../../config/validators/validate.js";
12
+ import type { AuthenticationPlugin } from "../authentication/authentication.js";
13
13
  import { type AuthState, useAuthState } from "../authentication/state.js";
14
14
  import type { ComponentsContextType } from "../components/context/ComponentsContext.js";
15
- import type { Slotlets } from "../components/SlotletProvider.js";
15
+ import type { SlotType } from "../components/context/SlotProvider.js";
16
16
  import { joinPath } from "../util/joinPath.js";
17
17
  import type { MdxComponentsType } from "../util/MdxComponents.js";
18
18
  import { objectEntries } from "../util/objectEntries.js";
19
19
  import {
20
20
  isApiIdentityPlugin,
21
+ isAuthenticationPlugin,
21
22
  isEventConsumerPlugin,
22
23
  isNavigationPlugin,
23
24
  type NavigationPlugin,
@@ -81,11 +82,15 @@ export type ZudokuContextOptions = {
81
82
  canonicalUrlOrigin?: string;
82
83
  metadata?: Metadata;
83
84
  page?: Page;
84
- authentication?: AuthenticationProvider;
85
+ authentication?: AuthenticationPlugin;
85
86
  topNavigation?: TopNavigationItem[];
86
87
  sidebars?: SidebarConfig;
87
88
  plugins?: ZudokuPlugin[];
88
- slotlets?: Slotlets;
89
+ slots?: Record<string, SlotType>;
90
+ /**
91
+ * @deprecated Use `slots` instead
92
+ */
93
+ UNSAFE_slotlets?: Record<string, SlotType>;
89
94
  mdx?: {
90
95
  components?: MdxComponentsType;
91
96
  };
@@ -103,19 +108,26 @@ export class ZudokuContext {
103
108
  public topNavigation: NonNullable<ZudokuContextOptions["topNavigation"]>;
104
109
  public meta: ZudokuContextOptions["metadata"];
105
110
  public page: ZudokuContextOptions["page"];
106
- public authentication?: ZudokuContextOptions["authentication"];
111
+ public readonly authentication?: ZudokuContextOptions["authentication"];
112
+ public readonly queryClient: QueryClient;
113
+ public readonly options: ZudokuContextOptions;
107
114
  private readonly navigationPlugins: NavigationPlugin[];
108
115
  private emitter = createNanoEvents<ZudokuEvents>();
109
116
 
110
- constructor(
111
- public readonly options: ZudokuContextOptions,
112
- public readonly queryClient: QueryClient,
113
- ) {
117
+ constructor(options: ZudokuContextOptions, queryClient: QueryClient) {
118
+ const protectedRoutes = (options.protectedRoutes ?? []).concat(
119
+ options.plugins?.flatMap((plugin) =>
120
+ isNavigationPlugin(plugin) ? (plugin.getProtectedRoutes?.() ?? []) : [],
121
+ ) ?? [],
122
+ );
123
+
124
+ this.queryClient = queryClient;
125
+ this.options = { ...options, protectedRoutes };
114
126
  this.plugins = options.plugins ?? [];
115
127
  this.topNavigation = options.topNavigation ?? [];
116
128
  this.sidebars = options.sidebars ?? {};
117
129
  this.navigationPlugins = this.plugins.filter(isNavigationPlugin);
118
- this.authentication = options.authentication;
130
+ this.authentication = this.plugins.find(isAuthenticationPlugin);
119
131
  this.meta = options.metadata;
120
132
  this.page = options.page;
121
133
  this.plugins.forEach((plugin) => {
@@ -2,6 +2,7 @@ import type { LucideIcon } from "lucide-react";
2
2
  import type { ReactElement } from "react";
3
3
  import type { Location, RouteObject } from "react-router";
4
4
  import type { Sidebar } from "../../config/validators/SidebarSchema.js";
5
+ import type { AuthenticationPlugin } from "../authentication/authentication.js";
5
6
  import type { MdxComponentsType } from "../util/MdxComponents.js";
6
7
  import type {
7
8
  ApiIdentity,
@@ -15,13 +16,15 @@ export type ZudokuPlugin =
15
16
  | NavigationPlugin
16
17
  | ApiIdentityPlugin
17
18
  | SearchProviderPlugin
18
- | EventConsumerPlugin;
19
+ | EventConsumerPlugin
20
+ | AuthenticationPlugin;
19
21
 
20
- export type { RouteObject };
22
+ export type { AuthenticationPlugin, RouteObject };
21
23
 
22
24
  export interface NavigationPlugin {
23
25
  getRoutes: () => RouteObject[];
24
26
  getSidebar?: (path: string, context: ZudokuContext) => Promise<Sidebar>;
27
+ getProtectedRoutes?: () => string[];
25
28
  }
26
29
 
27
30
  export const createApiIdentityPlugin = (
@@ -83,6 +86,11 @@ export const isNavigationPlugin = (
83
86
  ): obj is NavigationPlugin =>
84
87
  "getRoutes" in obj && typeof obj.getRoutes === "function";
85
88
 
89
+ export const isAuthenticationPlugin = (
90
+ obj: ZudokuPlugin,
91
+ ): obj is AuthenticationPlugin =>
92
+ "signUp" in obj && typeof obj.signUp === "function";
93
+
86
94
  export const isSearchPlugin = (
87
95
  obj: ZudokuPlugin,
88
96
  ): obj is SearchProviderPlugin =>
@@ -22,7 +22,7 @@ export function ErrorAlert({ error }: { error: unknown }) {
22
22
  <div
23
23
  className={cn(
24
24
  ProseClasses,
25
- "grid grid-cols-1 !max-w-none pt-[--padding-content-top]",
25
+ "grid grid-cols-1 !max-w-none pt-(--padding-content-top)",
26
26
  )}
27
27
  >
28
28
  <Heading level={1}>{title}</Heading>
@@ -1,5 +1,16 @@
1
+ import { useMDXComponents as useMDXComponentsImport } from "@mdx-js/react";
1
2
  import { useTheme as useThemeImport } from "next-themes";
3
+ import { useAuth as useAuthImport } from "../authentication/hook.js";
4
+ import { CACHE_KEYS, useCache as useCacheImport } from "../components/cache.js";
5
+ import { useZudoku as useZudokuImport } from "../components/context/ZudokuContext.js";
6
+ import { useExposedProps as useExposedPropsImport } from "../util/useExposedProps.js";
2
7
  import { useEvent as useEventImport } from "./useEvent.js";
3
8
 
4
9
  export const useEvent = /*@__PURE__*/ useEventImport;
5
10
  export const useTheme = /*@__PURE__*/ useThemeImport;
11
+ export const useExposedProps = /*@__PURE__*/ useExposedPropsImport;
12
+ export const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;
13
+ export const useAuth = /*@__PURE__*/ useAuthImport;
14
+ export const useZudoku = /*@__PURE__*/ useZudokuImport;
15
+ export const useCache = /*@__PURE__*/ useCacheImport;
16
+ export { CACHE_KEYS };
@@ -29,7 +29,7 @@ export const Catalog = ({
29
29
  const dataSet = activeCategory ? { "data-pagefind-ignore": "all" } : {};
30
30
 
31
31
  return (
32
- <section className="pt-[--padding-content-top]" {...dataSet}>
32
+ <section className="pt-(--padding-content-top)" {...dataSet}>
33
33
  <Helmet>
34
34
  <title>
35
35
  {categoryLabel ? `${categoryLabel} - ` : ""}