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
@@ -4,10 +4,10 @@ import { type OpenIDAuthenticationConfig } from "../../../config/config.js";
4
4
  import { ClientOnly } from "../../components/ClientOnly.js";
5
5
  import { joinUrl } from "../../util/joinUrl.js";
6
6
  import {
7
- type AuthenticationProvider,
7
+ type AuthenticationPlugin,
8
8
  type AuthenticationProviderInitializer,
9
9
  } from "../authentication.js";
10
- import { AuthenticationPlugin } from "../AuthenticationPlugin.js";
10
+ import { CoreAuthenticationPlugin } from "../AuthenticationPlugin.js";
11
11
  import { CallbackHandler } from "../components/CallbackHandler.js";
12
12
  import { AuthorizationError, OAuthAuthorizationError } from "../errors.js";
13
13
  import { useAuthState, type UserProfile } from "../state.js";
@@ -25,26 +25,10 @@ export interface OpenIdProviderData {
25
25
 
26
26
  export const OPENID_CALLBACK_PATH = "/oauth/callback";
27
27
 
28
- class OpenIdAuthPlugin extends AuthenticationPlugin {
29
- constructor(private handleCallback: () => Promise<string>) {
30
- super();
31
- }
32
- getRoutes() {
33
- return [
34
- ...super.getRoutes(),
35
- {
36
- path: OPENID_CALLBACK_PATH,
37
- element: (
38
- <ClientOnly>
39
- <CallbackHandler handleCallback={this.handleCallback} />
40
- </ClientOnly>
41
- ),
42
- },
43
- ];
44
- }
45
- }
46
-
47
- export class OpenIDAuthenticationProvider implements AuthenticationProvider {
28
+ export class OpenIDAuthenticationProvider
29
+ extends CoreAuthenticationPlugin
30
+ implements AuthenticationPlugin
31
+ {
48
32
  protected client: oauth.Client;
49
33
  protected issuer: string;
50
34
  protected authorizationServer: oauth.AuthorizationServer | undefined;
@@ -72,6 +56,7 @@ export class OpenIDAuthenticationProvider implements AuthenticationProvider {
72
56
  basePath,
73
57
  scopes,
74
58
  }: OpenIDAuthenticationConfig) {
59
+ super();
75
60
  this.client = {
76
61
  client_id: clientId,
77
62
  token_endpoint_auth_method: "none",
@@ -378,10 +363,18 @@ export class OpenIDAuthenticationProvider implements AuthenticationProvider {
378
363
  return redirectTo;
379
364
  };
380
365
 
381
- getAuthenticationPlugin() {
382
- // TODO: This API is a bit messy, we need to refactor auth plugins/providers
383
- // to remove the extra layers of abstraction.
384
- return new OpenIdAuthPlugin(this.handleCallback);
366
+ getRoutes() {
367
+ return [
368
+ ...super.getRoutes(),
369
+ {
370
+ path: OPENID_CALLBACK_PATH,
371
+ element: (
372
+ <ClientOnly>
373
+ <CallbackHandler handleCallback={this.handleCallback} />
374
+ </ClientOnly>
375
+ ),
376
+ },
377
+ ];
385
378
  }
386
379
  }
387
380
 
@@ -6,16 +6,17 @@ import {
6
6
  } from "@supabase/supabase-js";
7
7
  import { type SupabaseAuthenticationConfig } from "../../../config/config.js";
8
8
  import {
9
- type AuthenticationProvider,
9
+ type AuthenticationPlugin,
10
10
  type AuthenticationProviderInitializer,
11
11
  } from "../authentication.js";
12
- import { AuthenticationPlugin } from "../AuthenticationPlugin.js";
12
+ import { CoreAuthenticationPlugin } from "../AuthenticationPlugin.js";
13
13
  import { AuthorizationError } from "../errors.js";
14
14
  import { useAuthState, type UserProfile } from "../state.js";
15
15
 
16
- class SupabaseAuthPlugin extends AuthenticationPlugin {}
17
-
18
- class SupabaseAuthenticationProvider implements AuthenticationProvider {
16
+ class SupabaseAuthenticationProvider
17
+ extends CoreAuthenticationPlugin
18
+ implements AuthenticationPlugin
19
+ {
19
20
  private readonly client: SupabaseClient;
20
21
  private readonly provider: Provider;
21
22
  private readonly redirectToAfterSignUp: string;
@@ -31,6 +32,7 @@ class SupabaseAuthenticationProvider implements AuthenticationProvider {
31
32
  redirectToAfterSignOut,
32
33
  basePath,
33
34
  }: SupabaseAuthenticationConfig) {
35
+ super();
34
36
  this.provider = provider;
35
37
  this.client = createClient(supabaseUrl, supabaseKey, {
36
38
  auth: {
@@ -139,8 +141,6 @@ class SupabaseAuthenticationProvider implements AuthenticationProvider {
139
141
  });
140
142
  };
141
143
 
142
- getAuthenticationPlugin = () => new SupabaseAuthPlugin();
143
-
144
144
  onPageLoad = async () => {
145
145
  const { data, error } = await this.client.auth.getSession();
146
146
 
@@ -71,7 +71,7 @@ const AutocompletePopover = ({
71
71
  onMouseEnter={() => setDontClose(true)}
72
72
  onMouseLeave={() => setDontClose(false)}
73
73
  onOpenAutoFocus={(e) => e.preventDefault()}
74
- className={cn("p-0 w-[--radix-popover-trigger-width]", {
74
+ className={cn("p-0 w-(--radix-popover-trigger-width)", {
75
75
  "border-0": count === 0,
76
76
  })}
77
77
  align="start"
@@ -31,7 +31,7 @@ export const Banner = () => {
31
31
  return (
32
32
  <div
33
33
  className={cn(
34
- "relative text-primary-foreground text-sm font-medium px-4 py-2 flex gap-2 items-center",
34
+ "relative text-primary-foreground text-sm font-medium px-4 py-2 flex gap-2 items-center lg:h-(--banner-height)",
35
35
  mappedColor,
36
36
  )}
37
37
  data-pagefind-ignore="all"
@@ -13,7 +13,7 @@ export const ErrorPage = ({
13
13
  category?: ReactNode;
14
14
  }) => {
15
15
  return (
16
- <div className={ProseClasses + " h-full pt-[--padding-content-top]"}>
16
+ <div className={ProseClasses + " h-full pt-(--padding-content-top)"}>
17
17
  {category && <CategoryHeading>{category}</CategoryHeading>}
18
18
  {title && (
19
19
  <Heading level={1} className="flex gap-3.5 items-center">
@@ -1,10 +1,10 @@
1
1
  import { ExternalLink as ExternalLinkIcon } from "lucide-react";
2
2
  import type { CSSProperties, ReactNode } from "react";
3
- import type { FooterSocialIcons } from "../../config/validators/common.js";
3
+ import type { FooterSocialIcons } from "../../config/validators/validate.js";
4
4
  import { cn } from "../util/cn.js";
5
5
  import { AnchorLink } from "./AnchorLink.js";
6
6
  import { useZudoku } from "./index.js";
7
- import { Slotlet } from "./SlotletProvider.js";
7
+ import { Slot } from "./Slot.js";
8
8
 
9
9
  const SocialIcon = ({
10
10
  icon,
@@ -41,7 +41,7 @@ export const Footer = () => {
41
41
  "justify-end": footer.position === "end",
42
42
  })}
43
43
  >
44
- <Slotlet name="footer-before" />
44
+ <Slot.Target name="footer-before" />
45
45
  {footer.columns && (
46
46
  <div
47
47
  className="w-full md:max-w-screen-md grid grid-cols-[1fr_1fr] gap-8 md:grid-cols-[repeat(var(--columns),minmax(0,1fr))]"
@@ -59,12 +59,12 @@ export const Footer = () => {
59
59
  >
60
60
  <span className="text-sm font-semibold">{column.title}</span>
61
61
  <ul className="mt-4 space-y-2">
62
- {column.links.map((link, i) => {
62
+ {column.links.map((link) => {
63
63
  const className =
64
64
  "flex flex-row gap-1 items-center text-sm text-muted-foreground hover:text-accent-foreground";
65
65
 
66
66
  return (
67
- <li key={link.href + i}>
67
+ <li key={link.href + link.label}>
68
68
  {isExternalUrl(link.href) ? (
69
69
  <a
70
70
  href={link.href}
@@ -76,10 +76,7 @@ export const Footer = () => {
76
76
  <ExternalLinkIcon size={12} />
77
77
  </a>
78
78
  ) : (
79
- <AnchorLink
80
- to={link.href + i}
81
- className={className}
82
- >
79
+ <AnchorLink to={link.href} className={className}>
83
80
  <span>{link.label}</span>
84
81
  </AnchorLink>
85
82
  )}
@@ -91,7 +88,7 @@ export const Footer = () => {
91
88
  ))}
92
89
  </div>
93
90
  )}
94
- <Slotlet name="footer-after" />
91
+ <Slot.Target name="footer-after" />
95
92
  </div>
96
93
  <div
97
94
  className={cn(
@@ -19,13 +19,14 @@ import {
19
19
  DropdownMenuSubTrigger,
20
20
  DropdownMenuTrigger,
21
21
  } from "../ui/DropdownMenu.js";
22
+ import { cn } from "../util/cn.js";
22
23
  import { joinUrl } from "../util/joinUrl.js";
23
24
  import { Banner } from "./Banner.js";
24
25
  import { ClientOnly } from "./ClientOnly.js";
25
26
  import { useZudoku } from "./context/ZudokuContext.js";
26
27
  import { MobileTopNavigation } from "./MobileTopNavigation.js";
27
28
  import { Search } from "./Search.js";
28
- import { Slotlet } from "./SlotletProvider.js";
29
+ import { Slot } from "./Slot.js";
29
30
  import { ThemeSwitch } from "./ThemeSwitch.js";
30
31
  import { TopNavigation } from "./TopNavigation.js";
31
32
 
@@ -58,49 +59,48 @@ export const Header = memo(function HeaderInner() {
58
59
  const auth = useAuth();
59
60
  const { isAuthenticated, profile, isAuthEnabled } = useAuth();
60
61
  const context = useZudoku();
61
- const { page, plugins } = context;
62
+ const { page, plugins, options } = context;
62
63
 
63
64
  const accountItems = plugins
64
65
  .filter((p) => isProfileMenuPlugin(p))
65
66
  .flatMap((p) => p.getProfileMenuItems(context))
66
67
  .sort((i) => i.weight ?? 0);
67
68
 
69
+ const logoLightSrc = page?.logo
70
+ ? /https?:\/\//.test(page.logo.src.light)
71
+ ? page.logo.src.light
72
+ : joinUrl(options.basePath, page.logo.src.light)
73
+ : undefined;
74
+ const logoDarkSrc = page?.logo
75
+ ? /https?:\/\//.test(page.logo.src.dark)
76
+ ? page.logo.src.dark
77
+ : joinUrl(options.basePath, page.logo.src.dark)
78
+ : undefined;
79
+
80
+ const borderBottom = "inset-shadow-[0_-1px_0_0_var(--border)]";
81
+
68
82
  return (
69
83
  <header className="sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full">
70
84
  <Banner />
71
- <div className="border-b">
72
- <div className="max-w-screen-2xl mx-auto flex relative items-center justify-between px-4 lg:px-8 h-[--top-header-height] border-transparent">
85
+ <div className={borderBottom}>
86
+ <div className="max-w-screen-2xl mx-auto flex relative items-center justify-between h-(--top-header-height) px-4 lg:px-8 border-transparent">
73
87
  <div className="flex">
74
88
  <Link to="/">
75
89
  <div className="flex items-center gap-3.5">
76
90
  {page?.logo && (
77
91
  <>
78
92
  <img
79
- src={
80
- /https?:\/\//.test(page.logo.src.light)
81
- ? page.logo.src.light
82
- : joinUrl(
83
- import.meta.env.BASE_URL,
84
- page.logo.src.light,
85
- )
86
- }
93
+ src={logoLightSrc}
87
94
  alt={page.logo.alt ?? page.pageTitle}
88
95
  style={{ width: page.logo.width }}
89
- className="h-10 dark:hidden"
96
+ className="max-h-(--top-header-height) dark:hidden"
90
97
  loading="lazy"
91
98
  />
92
99
  <img
93
- src={
94
- /https?:\/\//.test(page.logo.src.dark)
95
- ? page.logo.src.dark
96
- : joinUrl(
97
- import.meta.env.BASE_URL,
98
- page.logo.src.dark,
99
- )
100
- }
100
+ src={logoDarkSrc}
101
101
  alt={page.logo.alt ?? page.pageTitle}
102
102
  style={{ width: page.logo.width }}
103
- className="h-10 hidden dark:block"
103
+ className="max-h-(--top-header-height) hidden dark:block"
104
104
  loading="lazy"
105
105
  />
106
106
  </>
@@ -119,10 +119,10 @@ export const Header = memo(function HeaderInner() {
119
119
  <div className="flex items-center gap-8">
120
120
  <MobileTopNavigation />
121
121
  <div className="hidden lg:flex items-center justify-self-end text-sm gap-2">
122
- <Slotlet name="head-navigation-start" />
122
+ <Slot.Target name="head-navigation-start" />
123
123
  {isAuthEnabled && (
124
124
  <ClientOnly
125
- fallback={<Skeleton className="rounded h-5 w-24 mr-4" />}
125
+ fallback={<Skeleton className="rounded-sm h-5 w-24 mr-4" />}
126
126
  >
127
127
  {!isAuthenticated ? (
128
128
  <Button variant="ghost" onClick={() => auth.login()}>
@@ -133,7 +133,7 @@ export const Header = memo(function HeaderInner() {
133
133
  <DropdownMenu modal={false}>
134
134
  <DropdownMenuTrigger asChild>
135
135
  <Button variant="ghost">
136
- {profile?.name ? `${profile.name}` : "My Account"}
136
+ {profile?.name ?? "My Account"}
137
137
  </Button>
138
138
  </DropdownMenuTrigger>
139
139
  <DropdownMenuContent className="w-56">
@@ -175,17 +175,17 @@ export const Header = memo(function HeaderInner() {
175
175
  )}
176
176
  </ClientOnly>
177
177
  )}
178
- <Slotlet name="head-navigation-end" />
178
+ <Slot.Target name="head-navigation-end" />
179
179
  <ThemeSwitch />
180
180
  </div>
181
181
  </div>
182
182
  </div>
183
183
  </div>
184
- <div className="border-b hidden lg:block">
184
+ <div className={cn("hidden lg:block", borderBottom)}>
185
185
  <div className="max-w-screen-2xl mx-auto border-transparent">
186
- <Slotlet name="top-navigation-before" />
186
+ <Slot.Target name="top-navigation-before" />
187
187
  <TopNavigation />
188
- <Slotlet name="top-navigation-after" />
188
+ <Slot.Target name="top-navigation-after" />
189
189
  </div>
190
190
  </div>
191
191
  </header>
@@ -2,6 +2,8 @@ import type { HTMLAttributes, ReactNode } from "react";
2
2
  import { useRegisterAnchorElement } from "./context/ViewportAnchorContext.js";
3
3
 
4
4
  import { cva, type VariantProps } from "class-variance-authority";
5
+ import { LinkIcon } from "lucide-react";
6
+ import { cn } from "../util/cn.js";
5
7
 
6
8
  const heading = cva("group relative", {
7
9
  variants: {
@@ -59,21 +61,23 @@ export const Heading = ({
59
61
 
60
62
  return (
61
63
  <Component
62
- className={heading({ className, level })}
64
+ className={heading({
65
+ className: cn(className, "flex items-center gap-[0.33em]"),
66
+ level,
67
+ })}
63
68
  ref={registerSidebarAnchor ? ref : undefined}
64
69
  id={id}
65
70
  >
71
+ {children}
66
72
  {id && (
67
73
  <a
68
74
  href={`#${id}`}
69
- className="before:content-['#'] no-underline absolute text-primary -start-[0.8em] pe-2.5 opacity-0 group-hover:opacity-50 hover:!opacity-100 transition-opacity duration-200"
75
+ className="rounded text-[0.8em] text-muted-foreground p-0.5 -m-0.5 opacity-0 group-hover:opacity-50 hover:text-primary hover:!opacity-100 transition-opacity duration-200"
70
76
  aria-label={`Link to ${id}`}
71
77
  >
72
- {/* Zero width space */}
73
- &#8203;
78
+ <LinkIcon className="size-[0.75em] min-w-4 min-h-4" />
74
79
  </a>
75
80
  )}
76
- {children}
77
81
  </Component>
78
82
  );
79
83
  };
@@ -16,7 +16,7 @@ export const InlineCode = ({
16
16
  <SelectOnClick asChild enabled={selectOnClick} onClick={onClick}>
17
17
  <code
18
18
  className={cn(
19
- "font-mono border p-1 py-0.5 rounded bg-border/50 dark:bg-border/70 [overflow-wrap:anywhere]",
19
+ "font-mono border p-1 py-0.5 rounded-sm bg-border/50 dark:bg-border/70 [overflow-wrap:anywhere]",
20
20
  className,
21
21
  )}
22
22
  >
@@ -9,7 +9,7 @@ import { useZudoku } from "./context/ZudokuContext.js";
9
9
  import { Footer } from "./Footer.js";
10
10
  import { Header } from "./Header.js";
11
11
  import { Main } from "./Main.js";
12
- import { Slotlet } from "./SlotletProvider.js";
12
+ import { Slot } from "./Slot.js";
13
13
  import { Spinner } from "./Spinner.js";
14
14
 
15
15
  const LoadingFallback = () => (
@@ -48,9 +48,9 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
48
48
  )}
49
49
  {meta?.favicon && <link rel="icon" href={meta.favicon} />}
50
50
  </Helmet>
51
- <Slotlet name="layout-before-head" />
51
+ <Slot.Target name="layout-before-head" />
52
52
  <Header />
53
- <Slotlet name="layout-after-head" />
53
+ <Slot.Target name="layout-after-head" />
54
54
 
55
55
  <div
56
56
  className={cn(
@@ -5,7 +5,7 @@ import { Drawer, DrawerTrigger } from "zudoku/ui/Drawer.js";
5
5
  import { cn } from "../util/cn.js";
6
6
  import { useCurrentNavigation, useZudoku } from "./context/ZudokuContext.js";
7
7
  import { Sidebar } from "./navigation/Sidebar.js";
8
- import { Slotlet } from "./SlotletProvider.js";
8
+ import { Slot } from "./Slot.js";
9
9
 
10
10
  export const Main = ({ children }: PropsWithChildren) => {
11
11
  const [isDrawerOpen, setDrawerOpen] = useState(false);
@@ -27,7 +27,7 @@ export const Main = ({ children }: PropsWithChildren) => {
27
27
  />
28
28
  )}
29
29
  {hasSidebar && (
30
- <div className="lg:hidden -mx-4 px-4 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 start-0 end-0 border-b">
30
+ <div className="lg:hidden -mx-4 px-4 py-2 sticky bg-background/80 backdrop-blur-xs z-10 top-0 start-0 end-0 border-b">
31
31
  <DrawerTrigger className="flex items-center gap-2 px-4">
32
32
  <PanelLeftIcon size={16} strokeWidth={1.5} />
33
33
  <span className="text-sm">Menu</span>
@@ -42,9 +42,9 @@ export const Main = ({ children }: PropsWithChildren) => {
42
42
  isNavigating && "animate-pulse",
43
43
  )}
44
44
  >
45
- <Slotlet name="zudoku-before-content" />
45
+ <Slot.Target name="content-before" />
46
46
  {children}
47
- <Slotlet name="zudoku-after-content" />
47
+ <Slot.Target name="content-after" />
48
48
  </main>
49
49
  </Drawer>
50
50
  );
@@ -1,5 +1,6 @@
1
- import { memo } from "react";
1
+ import { memo, useMemo } from "react";
2
2
  import { MarkdownHooks, type Components } from "react-markdown";
3
+ import rehypeRaw from "rehype-raw";
3
4
  import remarkGfm from "remark-gfm";
4
5
  import { createConfiguredShikiRehypePlugins } from "../shiki.js";
5
6
  import { MdxComponents } from "../util/MdxComponents.js";
@@ -21,8 +22,17 @@ export const Markdown = memo(
21
22
  components?: Components;
22
23
  }) => {
23
24
  const { syntaxHighlighting } = useZudoku().options;
24
- const rehypePlugins = createConfiguredShikiRehypePlugins(
25
- syntaxHighlighting?.themes,
25
+ const rehypePlugins = useMemo(
26
+ () => [
27
+ rehypeRaw,
28
+ ...createConfiguredShikiRehypePlugins(syntaxHighlighting?.themes),
29
+ ],
30
+ [syntaxHighlighting?.themes],
31
+ );
32
+
33
+ const mdComponents = useMemo(
34
+ () => ({ ...MdxComponents, ...components }),
35
+ [components],
26
36
  );
27
37
 
28
38
  return (
@@ -30,7 +40,7 @@ export const Markdown = memo(
30
40
  <MarkdownHooks
31
41
  remarkPlugins={remarkPlugins}
32
42
  rehypePlugins={rehypePlugins}
33
- components={{ ...MdxComponents, ...components }}
43
+ components={mdComponents}
34
44
  >
35
45
  {content}
36
46
  </MarkdownHooks>
@@ -10,9 +10,10 @@ import {
10
10
  } from "../ui/Drawer.js";
11
11
  import { useZudoku } from "./context/ZudokuContext.js";
12
12
  import { PoweredByZudoku } from "./navigation/PoweredByZudoku.js";
13
+ import { isHiddenItem } from "./navigation/utils.js";
13
14
  import { Search } from "./Search.js";
14
15
  import { ThemeSwitch } from "./ThemeSwitch.js";
15
- import { isHiddenItem, PageProgress, TopNavItem } from "./TopNavigation.js";
16
+ import { PageProgress, TopNavItem } from "./TopNavigation.js";
16
17
 
17
18
  export const MobileTopNavigation = () => {
18
19
  const { topNavigation, options } = useZudoku();
@@ -57,7 +58,7 @@ export const MobileTopNavigation = () => {
57
58
  </ul>
58
59
  </div>
59
60
  {options.page?.showPoweredBy !== false && (
60
- <PoweredByZudoku className="flex-grow-0 justify-center gap-1" />
61
+ <PoweredByZudoku className="grow-0 justify-center gap-1" />
61
62
  )}
62
63
  </div>
63
64
  </DrawerContent>
@@ -9,7 +9,7 @@ export const NotFoundPage = () => {
9
9
  const params = useParams();
10
10
 
11
11
  return (
12
- <div className={ProseClasses + " h-full pt-[--padding-content-top]"}>
12
+ <div className={ProseClasses + " h-full pt-(--padding-content-top)"}>
13
13
  <CategoryHeading>404</CategoryHeading>
14
14
  <Heading level={1} className="flex gap-3.5 items-center">
15
15
  Page not found
@@ -26,10 +26,7 @@ export const Pagination = ({
26
26
  {prev && (
27
27
  <Button variant="ghost" asChild>
28
28
  <Link to={prev.to} relative="path" className={linkClass}>
29
- <ArrowLeftIcon
30
- className="ltr:group-hover:motion-safe:animate-bounce-x-start rtl:rotate-180"
31
- size={12}
32
- />
29
+ <ArrowLeftIcon size={12} />
33
30
  <span className="truncate">{prev.label}</span>
34
31
  </Link>
35
32
  </Button>
@@ -37,11 +34,8 @@ export const Pagination = ({
37
34
  {next && (
38
35
  <Button variant="ghost" asChild>
39
36
  <Link to={next.to} relative="path" className={linkClass}>
40
- <span className="truncate ">{next.label}</span>
41
- <ArrowRightIcon
42
- className="ltr:group-hover:motion-safe:animate-bounce-x-end rtl:rotate-180"
43
- size={12}
44
- />
37
+ <span className="truncate">{next.label}</span>
38
+ <ArrowRightIcon size={12} />
45
39
  </Link>
46
40
  </Button>
47
41
  )}
@@ -43,7 +43,7 @@ export const Search = ({ className }: { className?: string }) => {
43
43
  onClick={() => setIsOpen(true)}
44
44
  className="flex items-center border border-input hover:bg-accent hover:text-accent-foreground p-4 relative h-8 justify-start rounded-lg bg-background text-sm text-muted-foreground shadow-none w-full sm:w-72"
45
45
  >
46
- <div className="flex items-center gap-2 flex-grow">
46
+ <div className="flex items-center gap-2 grow">
47
47
  <SearchIcon size={14} />
48
48
  Search
49
49
  </div>