zudoku 0.47.1 → 0.48.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 (325) hide show
  1. package/dist/app/ZuploBuildConfig.d.ts +11 -121
  2. package/dist/app/ZuploBuildConfig.js +8 -8
  3. package/dist/app/ZuploBuildConfig.js.map +1 -1
  4. package/dist/app/demo.js +4 -3
  5. package/dist/app/demo.js.map +1 -1
  6. package/dist/app/entry.client.d.ts +0 -2
  7. package/dist/app/entry.client.js +0 -2
  8. package/dist/app/entry.client.js.map +1 -1
  9. package/dist/app/entry.server.d.ts +0 -2
  10. package/dist/app/entry.server.js +0 -2
  11. package/dist/app/entry.server.js.map +1 -1
  12. package/dist/app/env.d.ts +7 -7
  13. package/dist/app/env.js +8 -0
  14. package/dist/app/env.js.map +1 -1
  15. package/dist/app/main.d.ts +1 -0
  16. package/dist/app/main.js +6 -5
  17. package/dist/app/main.js.map +1 -1
  18. package/dist/app/standalone.js +4 -3
  19. package/dist/app/standalone.js.map +1 -1
  20. package/dist/config/loader.js +1 -2
  21. package/dist/config/loader.js.map +1 -1
  22. package/dist/config/validators/BuildSchema.d.ts +20 -44
  23. package/dist/config/validators/BuildSchema.js +3 -14
  24. package/dist/config/validators/BuildSchema.js.map +1 -1
  25. package/dist/config/validators/InputNavigationSchema.d.ts +7217 -0
  26. package/dist/config/validators/InputNavigationSchema.js +74 -0
  27. package/dist/config/validators/InputNavigationSchema.js.map +1 -0
  28. package/dist/config/validators/InputNavigationSchema.test-d.d.ts +1 -0
  29. package/dist/config/validators/InputNavigationSchema.test-d.js +146 -0
  30. package/dist/config/validators/InputNavigationSchema.test-d.js.map +1 -0
  31. package/dist/config/validators/NavigationSchema.d.ts +44 -0
  32. package/dist/config/validators/NavigationSchema.js +95 -0
  33. package/dist/config/validators/NavigationSchema.js.map +1 -0
  34. package/dist/config/validators/icon-types.d.ts +2 -1
  35. package/dist/config/validators/icon-types.js +1775 -1
  36. package/dist/config/validators/icon-types.js.map +1 -1
  37. package/dist/config/validators/validate.d.ts +451 -5666
  38. package/dist/config/validators/validate.js +59 -66
  39. package/dist/config/validators/validate.js.map +1 -1
  40. package/dist/config/validators/validate.test.js +0 -2
  41. package/dist/config/validators/validate.test.js.map +1 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/lib/auth/issuer.js +1 -1
  45. package/dist/lib/auth/issuer.js.map +1 -1
  46. package/dist/lib/auth/issuer.test.js +1 -1
  47. package/dist/lib/auth/issuer.test.js.map +1 -1
  48. package/dist/lib/authentication/components/CallbackHandler.js +1 -1
  49. package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
  50. package/dist/lib/components/BuildCheck.js +1 -1
  51. package/dist/lib/components/BuildCheck.js.map +1 -1
  52. package/dist/lib/components/Framed.d.ts +7 -0
  53. package/dist/lib/components/Framed.js +26 -0
  54. package/dist/lib/components/Framed.js.map +1 -0
  55. package/dist/lib/components/Header.js +10 -9
  56. package/dist/lib/components/Header.js.map +1 -1
  57. package/dist/lib/components/Heading.d.ts +6 -2
  58. package/dist/lib/components/Heading.js +2 -2
  59. package/dist/lib/components/Heading.js.map +1 -1
  60. package/dist/lib/components/Main.js +4 -4
  61. package/dist/lib/components/Main.js.map +1 -1
  62. package/dist/lib/components/MobileTopNavigation.js +6 -5
  63. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  64. package/dist/lib/components/PageProgress.d.ts +1 -0
  65. package/dist/lib/components/PageProgress.js +20 -0
  66. package/dist/lib/components/PageProgress.js.map +1 -0
  67. package/dist/lib/components/TopNavigation.d.ts +2 -3
  68. package/dist/lib/components/TopNavigation.js +45 -44
  69. package/dist/lib/components/TopNavigation.js.map +1 -1
  70. package/dist/lib/components/context/ZudokuContext.d.ts +3 -7
  71. package/dist/lib/components/context/ZudokuContext.js +44 -26
  72. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  73. package/dist/lib/components/navigation/Navigation.d.ts +5 -0
  74. package/dist/lib/components/navigation/Navigation.js +12 -0
  75. package/dist/lib/components/navigation/Navigation.js.map +1 -0
  76. package/dist/lib/components/navigation/{SidebarBadge.d.ts → NavigationBadge.d.ts} +1 -1
  77. package/dist/lib/components/navigation/{SidebarBadge.js → NavigationBadge.js} +2 -2
  78. package/dist/lib/components/navigation/NavigationBadge.js.map +1 -0
  79. package/dist/lib/components/navigation/NavigationCategory.d.ts +5 -0
  80. package/dist/lib/components/navigation/{SidebarCategory.js → NavigationCategory.js} +14 -12
  81. package/dist/lib/components/navigation/NavigationCategory.js.map +1 -0
  82. package/dist/lib/components/navigation/NavigationItem.d.ts +6 -0
  83. package/dist/lib/components/navigation/NavigationItem.js +47 -0
  84. package/dist/lib/components/navigation/NavigationItem.js.map +1 -0
  85. package/dist/lib/components/navigation/{SidebarWrapper.d.ts → NavigationWrapper.d.ts} +1 -1
  86. package/dist/lib/components/navigation/{SidebarWrapper.js → NavigationWrapper.js} +3 -3
  87. package/dist/lib/components/navigation/NavigationWrapper.js.map +1 -0
  88. package/dist/lib/components/navigation/utils.d.ts +7 -9
  89. package/dist/lib/components/navigation/utils.js +17 -17
  90. package/dist/lib/components/navigation/utils.js.map +1 -1
  91. package/dist/lib/core/ZudokuContext.d.ts +6 -8
  92. package/dist/lib/core/ZudokuContext.js +5 -7
  93. package/dist/lib/core/ZudokuContext.js.map +1 -1
  94. package/dist/lib/core/plugins.d.ts +2 -2
  95. package/dist/lib/hooks/useEvent.test.js +5 -3
  96. package/dist/lib/hooks/useEvent.test.js.map +1 -1
  97. package/dist/lib/plugins/api-catalog/Catalog.d.ts +1 -1
  98. package/dist/lib/plugins/api-catalog/index.d.ts +6 -6
  99. package/dist/lib/plugins/api-catalog/index.js +10 -10
  100. package/dist/lib/plugins/api-catalog/index.js.map +1 -1
  101. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +6 -6
  102. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  103. package/dist/lib/plugins/custom-pages/index.d.ts +3 -2
  104. package/dist/lib/plugins/custom-pages/index.js +15 -8
  105. package/dist/lib/plugins/custom-pages/index.js.map +1 -1
  106. package/dist/lib/plugins/markdown/MdxPage.js +6 -3
  107. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  108. package/dist/lib/plugins/markdown/index.d.ts +2 -1
  109. package/dist/lib/plugins/markdown/index.js +9 -26
  110. package/dist/lib/plugins/markdown/index.js.map +1 -1
  111. package/dist/lib/plugins/openapi/OperationList.js +1 -1
  112. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  113. package/dist/lib/plugins/openapi/OperationListItem.js +1 -1
  114. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  115. package/dist/lib/plugins/openapi/SchemaList.js +1 -1
  116. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  117. package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
  118. package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
  119. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  120. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +3 -3
  121. package/dist/lib/plugins/openapi/graphql/graphql.js +2 -2
  122. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  123. package/dist/lib/plugins/openapi/index.d.ts +3 -3
  124. package/dist/lib/plugins/openapi/index.js +9 -9
  125. package/dist/lib/plugins/openapi/index.js.map +1 -1
  126. package/dist/lib/plugins/openapi/interfaces.d.ts +3 -3
  127. package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
  128. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  129. package/dist/lib/plugins/openapi/util/createNavigationCategory.d.ts +9 -0
  130. package/dist/lib/plugins/openapi/util/{createSidebarCategory.js → createNavigationCategory.js} +5 -4
  131. package/dist/lib/plugins/openapi/util/createNavigationCategory.js.map +1 -0
  132. package/dist/lib/plugins/openapi/util/getRoutes.js +2 -2
  133. package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
  134. package/dist/lib/plugins/openapi/util/methodColorMap.d.ts +1 -1
  135. package/dist/lib/ui/CodeBlock.js +1 -1
  136. package/dist/lib/ui/CodeBlock.js.map +1 -1
  137. package/dist/lib/util/MdxComponents.d.ts +6 -0
  138. package/dist/lib/util/MdxComponents.js +4 -2
  139. package/dist/lib/util/MdxComponents.js.map +1 -1
  140. package/dist/lib/util/useScrollToAnchor.js +3 -3
  141. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  142. package/dist/vite/api/SchemaManager.d.ts +4 -4
  143. package/dist/vite/api/SchemaManager.js +19 -19
  144. package/dist/vite/api/SchemaManager.js.map +1 -1
  145. package/dist/vite/api/SchemaManager.test.js +4 -4
  146. package/dist/vite/api/SchemaManager.test.js.map +1 -1
  147. package/dist/vite/config.js +1 -0
  148. package/dist/vite/config.js.map +1 -1
  149. package/dist/vite/css/plugin.js +11 -0
  150. package/dist/vite/css/plugin.js.map +1 -1
  151. package/dist/vite/plugin-api.js +8 -8
  152. package/dist/vite/plugin-api.js.map +1 -1
  153. package/dist/vite/plugin-config-reload.js +2 -0
  154. package/dist/vite/plugin-config-reload.js.map +1 -1
  155. package/dist/vite/plugin-custom-pages.js +2 -2
  156. package/dist/vite/plugin-custom-pages.js.map +1 -1
  157. package/dist/vite/plugin-docs.js +61 -59
  158. package/dist/vite/plugin-docs.js.map +1 -1
  159. package/dist/vite/plugin-mdx.js +4 -2
  160. package/dist/vite/plugin-mdx.js.map +1 -1
  161. package/dist/vite/{plugin-sidebar.d.ts → plugin-navigation.d.ts} +1 -1
  162. package/dist/vite/{plugin-sidebar.js → plugin-navigation.js} +20 -19
  163. package/dist/vite/plugin-navigation.js.map +1 -0
  164. package/dist/vite/plugin-theme.d.ts +8 -0
  165. package/dist/vite/plugin-theme.js +223 -0
  166. package/dist/vite/plugin-theme.js.map +1 -0
  167. package/dist/vite/plugin-theme.test.d.ts +1 -0
  168. package/dist/vite/plugin-theme.test.js +270 -0
  169. package/dist/vite/plugin-theme.test.js.map +1 -0
  170. package/dist/vite/plugin.js +4 -6
  171. package/dist/vite/plugin.js.map +1 -1
  172. package/dist/vite/shadcn-registry.d.ts +45 -0
  173. package/dist/vite/shadcn-registry.js +29 -0
  174. package/dist/vite/shadcn-registry.js.map +1 -0
  175. package/lib/Drawer-BzkOKwgC.js.map +1 -1
  176. package/lib/{Markdown-r4buN85T.js → Markdown-DCAIYXF5.js} +885 -840
  177. package/lib/Markdown-DCAIYXF5.js.map +1 -0
  178. package/lib/{MdxPage-DYKsTerz.js → MdxPage-Cf9YXWoC.js} +30 -30
  179. package/lib/MdxPage-Cf9YXWoC.js.map +1 -0
  180. package/lib/OasProvider-JMVTfG6_.js +35 -0
  181. package/lib/OasProvider-JMVTfG6_.js.map +1 -0
  182. package/lib/{OperationList-BCVHtZNK.js → OperationList-m4tFCI4S.js} +8 -8
  183. package/lib/{OperationList-BCVHtZNK.js.map → OperationList-m4tFCI4S.js.map} +1 -1
  184. package/lib/{RouteGuard-B7GVW4oL.js → RouteGuard-gV7nvzi7.js} +2 -2
  185. package/lib/{RouteGuard-B7GVW4oL.js.map → RouteGuard-gV7nvzi7.js.map} +1 -1
  186. package/lib/{SchemaList-1oJKvBxh.js → SchemaList-_wRy4aQ0.js} +20 -20
  187. package/lib/SchemaList-_wRy4aQ0.js.map +1 -0
  188. package/lib/{SchemaView-CTqaB-79.js → SchemaView-CRl_cQYH.js} +13 -13
  189. package/lib/{SchemaView-CTqaB-79.js.map → SchemaView-CRl_cQYH.js.map} +1 -1
  190. package/lib/{SignUp-CRIKdWt9.js → SignUp-B6w5AwHM.js} +2 -2
  191. package/lib/{SignUp-CRIKdWt9.js.map → SignUp-B6w5AwHM.js.map} +1 -1
  192. package/lib/{Slot-B5qSAnwR.js → Slot-BkYrj_uC.js} +4 -4
  193. package/lib/{Slot-B5qSAnwR.js.map → Slot-BkYrj_uC.js.map} +1 -1
  194. package/lib/{SyntaxHighlight-CqKHkyEy.js → SyntaxHighlight-CH9OUJre.js} +2 -2
  195. package/lib/{SyntaxHighlight-CqKHkyEy.js.map → SyntaxHighlight-CH9OUJre.js.map} +1 -1
  196. package/lib/{Toc-lxYQEOzX.js → Toc-DRxqEsFc.js} +2 -2
  197. package/lib/{Toc-lxYQEOzX.js.map → Toc-DRxqEsFc.js.map} +1 -1
  198. package/lib/{circular-ZGGPtwMq.js → circular-wJaV4vh_.js} +2 -2
  199. package/lib/{circular-ZGGPtwMq.js.map → circular-wJaV4vh_.js.map} +1 -1
  200. package/lib/clerk-yAKDC3Qz.js.map +1 -1
  201. package/lib/{createServer-DUBpXfvA.js → createServer-DN5AJLcN.js} +3 -3
  202. package/lib/{createServer-DUBpXfvA.js.map → createServer-DN5AJLcN.js.map} +1 -1
  203. package/lib/{errors-D27ZTQgx.js → errors-D_5vKvUq.js} +10 -10
  204. package/lib/{errors-D27ZTQgx.js.map → errors-D_5vKvUq.js.map} +1 -1
  205. package/lib/hook-CHXroBFt.js +1503 -0
  206. package/lib/hook-CHXroBFt.js.map +1 -0
  207. package/lib/index-CrcNWbel.js.map +1 -1
  208. package/lib/{index-Cucjfk3D.js → index-DJVaRmzI.js} +63 -62
  209. package/lib/index-DJVaRmzI.js.map +1 -0
  210. package/lib/index-QzXzw_ra.js.map +1 -1
  211. package/lib/{mutation-C1XCQTQL.js → mutation-BpcyTgWI.js} +2 -2
  212. package/lib/{mutation-C1XCQTQL.js.map → mutation-BpcyTgWI.js.map} +1 -1
  213. package/lib/ui/CodeBlock.js +7 -7
  214. package/lib/ui/CodeBlock.js.map +1 -1
  215. package/lib/ui/SyntaxHighlight.js +2 -2
  216. package/lib/{useMutation-BKvPttRn.js → useMutation-N4ockVKi.js} +3 -3
  217. package/lib/{useMutation-BKvPttRn.js.map → useMutation-N4ockVKi.js.map} +1 -1
  218. package/lib/zudoku.auth-auth0.js +1 -1
  219. package/lib/zudoku.auth-azureb2c.js +2 -2
  220. package/lib/zudoku.auth-clerk.js +2 -2
  221. package/lib/zudoku.auth-openid.js +2 -2
  222. package/lib/zudoku.components.js +2756 -3423
  223. package/lib/zudoku.components.js.map +1 -1
  224. package/lib/zudoku.hooks.js +2 -2
  225. package/lib/zudoku.plugin-api-catalog.js +44 -44
  226. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  227. package/lib/zudoku.plugin-api-keys.js +84 -73
  228. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  229. package/lib/zudoku.plugin-custom-pages.js +22 -16
  230. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  231. package/lib/zudoku.plugin-markdown.js +20 -69
  232. package/lib/zudoku.plugin-markdown.js.map +1 -1
  233. package/lib/zudoku.plugin-openapi.js +5 -5
  234. package/lib/zudoku.plugin-search-pagefind.js +2 -2
  235. package/lib/zudoku.plugins.js.map +1 -1
  236. package/package.json +16 -13
  237. package/src/app/ZuploBuildConfig.ts +8 -8
  238. package/src/app/defaultTheme.css +68 -49
  239. package/src/app/demo.tsx +4 -3
  240. package/src/app/entry.client.tsx +0 -2
  241. package/src/app/entry.server.tsx +0 -2
  242. package/src/app/env.ts +8 -0
  243. package/src/app/main.css +6 -52
  244. package/src/app/main.tsx +7 -5
  245. package/src/app/standalone.tsx +4 -3
  246. package/src/lib/auth/issuer.test.ts +1 -1
  247. package/src/lib/auth/issuer.ts +1 -1
  248. package/src/lib/authentication/components/CallbackHandler.tsx +1 -1
  249. package/src/lib/components/BuildCheck.tsx +1 -1
  250. package/src/lib/components/Framed.tsx +51 -0
  251. package/src/lib/components/Header.tsx +5 -3
  252. package/src/lib/components/Heading.tsx +7 -3
  253. package/src/lib/components/Main.tsx +8 -8
  254. package/src/lib/components/MobileTopNavigation.tsx +16 -11
  255. package/src/lib/components/PageProgress.tsx +28 -0
  256. package/src/lib/components/TopNavigation.tsx +57 -66
  257. package/src/lib/components/context/ZudokuContext.ts +50 -32
  258. package/src/lib/components/navigation/{Sidebar.tsx → Navigation.tsx} +18 -16
  259. package/src/lib/components/navigation/{SidebarBadge.tsx → NavigationBadge.tsx} +1 -1
  260. package/src/lib/components/navigation/{SidebarCategory.tsx → NavigationCategory.tsx} +16 -14
  261. package/src/lib/components/navigation/{SidebarItem.tsx → NavigationItem.tsx} +23 -17
  262. package/src/lib/components/navigation/{SidebarWrapper.tsx → NavigationWrapper.tsx} +2 -2
  263. package/src/lib/components/navigation/utils.ts +27 -28
  264. package/src/lib/core/ZudokuContext.ts +9 -15
  265. package/src/lib/core/plugins.ts +2 -2
  266. package/src/lib/hooks/useEvent.test.tsx +7 -5
  267. package/src/lib/plugins/api-catalog/Catalog.tsx +1 -1
  268. package/src/lib/plugins/api-catalog/index.tsx +19 -19
  269. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +14 -10
  270. package/src/lib/plugins/custom-pages/index.tsx +20 -11
  271. package/src/lib/plugins/markdown/MdxPage.tsx +6 -3
  272. package/src/lib/plugins/markdown/index.tsx +19 -40
  273. package/src/lib/plugins/openapi/OperationList.tsx +1 -1
  274. package/src/lib/plugins/openapi/OperationListItem.tsx +1 -1
  275. package/src/lib/plugins/openapi/SchemaList.tsx +2 -2
  276. package/src/lib/plugins/openapi/graphql/gql.ts +5 -5
  277. package/src/lib/plugins/openapi/graphql/graphql.ts +6 -6
  278. package/src/lib/plugins/openapi/index.tsx +11 -11
  279. package/src/lib/plugins/openapi/interfaces.ts +3 -3
  280. package/src/lib/plugins/openapi/schema/SchemaView.tsx +1 -1
  281. package/src/lib/plugins/openapi/util/{createSidebarCategory.tsx → createNavigationCategory.tsx} +6 -5
  282. package/src/lib/plugins/openapi/util/getRoutes.tsx +2 -2
  283. package/src/lib/plugins/openapi/util/methodColorMap.tsx +1 -1
  284. package/src/lib/ui/CodeBlock.tsx +1 -1
  285. package/src/lib/util/MdxComponents.tsx +13 -2
  286. package/src/lib/util/useScrollToAnchor.ts +3 -3
  287. package/dist/config/validators/InputSidebarSchema.d.ts +0 -220
  288. package/dist/config/validators/InputSidebarSchema.js +0 -63
  289. package/dist/config/validators/InputSidebarSchema.js.map +0 -1
  290. package/dist/config/validators/SidebarSchema.d.ts +0 -46
  291. package/dist/config/validators/SidebarSchema.js +0 -118
  292. package/dist/config/validators/SidebarSchema.js.map +0 -1
  293. package/dist/lib/components/navigation/Sidebar.d.ts +0 -5
  294. package/dist/lib/components/navigation/Sidebar.js +0 -10
  295. package/dist/lib/components/navigation/Sidebar.js.map +0 -1
  296. package/dist/lib/components/navigation/SidebarBadge.js.map +0 -1
  297. package/dist/lib/components/navigation/SidebarCategory.d.ts +0 -5
  298. package/dist/lib/components/navigation/SidebarCategory.js.map +0 -1
  299. package/dist/lib/components/navigation/SidebarItem.d.ts +0 -6
  300. package/dist/lib/components/navigation/SidebarItem.js +0 -44
  301. package/dist/lib/components/navigation/SidebarItem.js.map +0 -1
  302. package/dist/lib/components/navigation/SidebarWrapper.js.map +0 -1
  303. package/dist/lib/plugins/markdown/resolver.d.ts +0 -32
  304. package/dist/lib/plugins/markdown/resolver.js +0 -46
  305. package/dist/lib/plugins/markdown/resolver.js.map +0 -1
  306. package/dist/lib/plugins/openapi/util/createSidebarCategory.d.ts +0 -9
  307. package/dist/lib/plugins/openapi/util/createSidebarCategory.js.map +0 -1
  308. package/dist/vite/plugin-configure-tailwind.d.ts +0 -2
  309. package/dist/vite/plugin-configure-tailwind.js +0 -38
  310. package/dist/vite/plugin-configure-tailwind.js.map +0 -1
  311. package/dist/vite/plugin-sidebar.js.map +0 -1
  312. package/dist/vite/plugin-theme-css.d.ts +0 -5
  313. package/dist/vite/plugin-theme-css.js +0 -77
  314. package/dist/vite/plugin-theme-css.js.map +0 -1
  315. package/lib/Markdown-r4buN85T.js.map +0 -1
  316. package/lib/MdxPage-DYKsTerz.js.map +0 -1
  317. package/lib/OasProvider-8vNiLpIG.js +0 -33
  318. package/lib/OasProvider-8vNiLpIG.js.map +0 -1
  319. package/lib/SchemaList-1oJKvBxh.js.map +0 -1
  320. package/lib/hook-7wZANGJP.js +0 -1483
  321. package/lib/hook-7wZANGJP.js.map +0 -1
  322. package/lib/index-Cucjfk3D.js.map +0 -1
  323. package/lib/joinPath-B7kNnUX4.js +0 -8
  324. package/lib/joinPath-B7kNnUX4.js.map +0 -1
  325. package/src/lib/plugins/markdown/resolver.ts +0 -59
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.47.1",
3
+ "version": "0.48.0",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -174,7 +174,7 @@
174
174
  "@tailwindcss/vite": "4.1.7",
175
175
  "@tanem/react-nprogress": "5.0.55",
176
176
  "@tanstack/react-query": "5.74.3",
177
- "@types/react": "19.1.1",
177
+ "@types/react": "19.1.8",
178
178
  "@types/react-dom": "19.1.6",
179
179
  "@vitejs/plugin-react": "4.4.1",
180
180
  "@zudoku/httpsnippet": "10.0.9",
@@ -192,6 +192,7 @@
192
192
  "fast-equals": "5.2.2",
193
193
  "framer-motion": "^12.12.2",
194
194
  "glob": "11.0.2",
195
+ "glob-parent": "6.0.2",
195
196
  "graphql": "16.11.0",
196
197
  "graphql-type-json": "0.3.2",
197
198
  "graphql-yoga": "5.13.5",
@@ -200,6 +201,7 @@
200
201
  "hast-util-to-string": "3.0.1",
201
202
  "html-url-attributes": "^3.0.1",
202
203
  "http-terminator": "3.2.0",
204
+ "json-schema-to-typescript-lite": "14.1.0",
203
205
  "loglevel": "1.9.2",
204
206
  "lru-cache": "11.0.2",
205
207
  "lucide-react": "0.488.0",
@@ -211,7 +213,7 @@
211
213
  "openapi-types": "12.1.3",
212
214
  "pagefind": "1.4.0-alpha.1",
213
215
  "picocolors": "1.1.1",
214
- "piscina": "5.0.0-alpha.2",
216
+ "piscina": "5.0.0",
215
217
  "posthog-node": "4.17.1",
216
218
  "react-error-boundary": "5.0.0",
217
219
  "react-hook-form": "7.57.0",
@@ -245,18 +247,19 @@
245
247
  "vite": "6.3.5",
246
248
  "yaml": "2.8.0",
247
249
  "yargs": "17.7.2",
248
- "zod": "3.25.51",
249
- "zod-validation-error": "3.4.1",
250
+ "zod": "3.25.56",
251
+ "zod-to-ts": "1.2.0",
250
252
  "zustand": "5.0.5"
251
253
  },
252
254
  "devDependencies": {
253
- "@graphql-codegen/cli": "5.0.6",
255
+ "@graphql-codegen/cli": "5.0.7",
254
256
  "@graphql-codegen/client-preset": "4.8.0",
255
257
  "@testing-library/dom": "10.4.0",
256
258
  "@testing-library/jest-dom": "6.6.3",
257
259
  "@testing-library/react": "16.3.0",
258
260
  "@types/estree": "1.0.7",
259
261
  "@types/express": "5.0.2",
262
+ "@types/glob-parent": "5.1.3",
260
263
  "@types/har-format": "1.2.16",
261
264
  "@types/hast": "^3.0.4",
262
265
  "@types/json-schema": "7.0.15",
@@ -275,18 +278,18 @@
275
278
  "react": "19.1.0",
276
279
  "react-dom": "19.1.0",
277
280
  "rollup-plugin-visualizer": "5.14.0",
281
+ "tsx": "4.19.4",
278
282
  "typescript": "5.8.3",
279
- "vitest": "3.1.4"
283
+ "vitest": "3.2.3"
280
284
  },
281
285
  "peerDependencies": {
282
- "react": ">=19",
283
- "react-dom": ">=19",
284
286
  "@azure/msal-browser": "^4.13.0",
285
287
  "@clerk/clerk-js": "^5.63.1",
286
288
  "@sentry/react": "^9.12.0",
287
- "@supabase/supabase-js": "^2.49.4"
289
+ "@supabase/supabase-js": "^2.49.4",
290
+ "react": ">=19",
291
+ "react-dom": ">=19"
288
292
  },
289
- "optionalDependencies": {},
290
293
  "peerDependenciesMeta": {
291
294
  "@azure/msal-browser": {
292
295
  "optional": true
@@ -305,12 +308,12 @@
305
308
  "build": "tsc --project tsconfig.app.json",
306
309
  "build:dev": "esbuild './src/**/*.ts' --format=esm --platform=node --target=node22 --outdir=dist --splitting --log-level=warning",
307
310
  "build:vite": "vite build",
308
- "generate:types": "node scripts/generate-types.js",
311
+ "generate:types": "tsx scripts/generate-types.js && tsx scripts/generate-flat-config.js",
309
312
  "build:standalone:vite": "vite build --mode standalone --config vite.standalone.config.ts",
310
313
  "build:standalone:html": "cp ./src/app/standalone.html ./standalone/standalone.html && cp ./src/app/demo.html ./standalone/demo.html && cp ./src/app/demo-cdn.html ./standalone/index.html && cp standalone/zudoku.css standalone/style.css",
311
314
  "clean": "tsc --build --clean",
312
315
  "codegen": "graphql-codegen --config ./src/codegen.ts",
313
- "test": "vitest run"
316
+ "test": "vitest run --typecheck"
314
317
  },
315
318
  "module": "./dist/index.js",
316
319
  "types": "./dist/index.d.ts"
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v4";
2
2
 
3
3
  export const EntitlementsSchema = z.object({
4
4
  devPortalZuploBranding: z.boolean(),
@@ -19,14 +19,14 @@ export const EntitlementsSchema = z.object({
19
19
 
20
20
  export const BuildConfigSchema = z.object({
21
21
  entitlements: EntitlementsSchema,
22
- environmentType: z.string(),
22
+ environmentType: z.string().optional(),
23
23
  deploymentName: z.string(),
24
- deploymentUrl: z.string(),
25
- projectId: z.string(),
26
- projectType: z.string(),
27
- sourceType: z.string(),
28
- accountName: z.string(),
29
- projectName: z.string(),
24
+ deploymentUrl: z.string().optional(),
25
+ projectId: z.string().optional(),
26
+ projectType: z.string().optional(),
27
+ sourceType: z.string().optional(),
28
+ accountName: z.string().optional(),
29
+ projectName: z.string().optional(),
30
30
  });
31
31
 
32
32
  export type BuildConfig = z.infer<typeof BuildConfigSchema>;
@@ -1,54 +1,73 @@
1
+ /**
2
+ * Default theme for Zudoku. Based on shadcn/ui zinc base colors.
3
+ * See: https://ui.shadcn.com/docs/theming#zinc
4
+ */
5
+
1
6
  :root {
2
- --background: oklch(100% 0 none);
3
- --foreground: oklch(14.1% 0.004 286);
4
- --card: oklch(100% 0 none);
5
- --card-foreground: oklch(14.1% 0.004 286);
6
- --popover: oklch(100% 0 none);
7
- --popover-foreground: oklch(14.1% 0.004 286);
8
- --primary: oklch(21% 0.006 286);
9
- --primary-foreground: oklch(98.5% 0 none);
10
- --secondary: oklch(96.8% 0.001 286);
11
- --secondary-foreground: oklch(21% 0.006 286);
12
- --muted: oklch(96.8% 0.001 286);
13
- --muted-foreground: oklch(55.2% 0.014 286);
14
- --accent: oklch(96.8% 0.001 286);
15
- --accent-foreground: oklch(21% 0.006 286);
16
- --destructive: oklch(63.7% 0.208 25.3);
17
- --destructive-foreground: oklch(98.5% 0 none);
18
- --border: oklch(96% 0.002 286);
19
- --input: oklch(92% 0.004 286);
20
- --ring: oklch(21% 0.006 286);
21
- --chart-1: oklch(67.7% 0.157 35.2);
22
- --chart-2: oklch(63.1% 0.101 183);
23
- --chart-3: oklch(37.9% 0.044 226);
24
- --chart-4: oklch(83.4% 0.119 88.1);
25
- --chart-5: oklch(78.3% 0.126 58.7);
26
- --radius: 0.75rem;
7
+ --radius: 0.625rem;
8
+ --background: oklch(1 0 0);
9
+ --foreground: oklch(0.141 0.005 285.823);
10
+ --card: oklch(1 0 0);
11
+ --card-foreground: oklch(0.141 0.005 285.823);
12
+ --popover: oklch(1 0 0);
13
+ --popover-foreground: oklch(0.141 0.005 285.823);
14
+ --primary: oklch(0.21 0.006 285.885);
15
+ --primary-foreground: oklch(0.985 0 0);
16
+ --secondary: oklch(0.967 0.001 286.375);
17
+ --secondary-foreground: oklch(0.21 0.006 285.885);
18
+ --muted: oklch(0.967 0.001 286.375);
19
+ --muted-foreground: oklch(0.552 0.016 285.938);
20
+ --accent: oklch(0.967 0.001 286.375);
21
+ --accent-foreground: oklch(0.21 0.006 285.885);
22
+ --destructive: oklch(0.577 0.245 27.325);
23
+ --border: oklch(0.92 0.004 286.32);
24
+ --input: oklch(0.92 0.004 286.32);
25
+ --ring: oklch(0.705 0.015 286.067);
26
+ --chart-1: oklch(0.646 0.222 41.116);
27
+ --chart-2: oklch(0.6 0.118 184.704);
28
+ --chart-3: oklch(0.398 0.07 227.392);
29
+ --chart-4: oklch(0.828 0.189 84.429);
30
+ --chart-5: oklch(0.769 0.188 70.08);
31
+ --sidebar: oklch(0.985 0 0);
32
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
33
+ --sidebar-primary: oklch(0.21 0.006 285.885);
34
+ --sidebar-primary-foreground: oklch(0.985 0 0);
35
+ --sidebar-accent: oklch(0.967 0.001 286.375);
36
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
37
+ --sidebar-border: oklch(0.92 0.004 286.32);
38
+ --sidebar-ring: oklch(0.705 0.015 286.067);
27
39
  }
28
40
 
29
41
  .dark {
30
- --background: oklch(14.1% 0.004 286);
31
- --foreground: oklch(98.5% 0 none);
32
- --card: oklch(14.1% 0.004 286);
33
- --card-foreground: oklch(98.5% 0 none);
34
- --popover: oklch(14.1% 0.004 286);
35
- --popover-foreground: oklch(98.5% 0 none);
36
- --primary: oklch(98.5% 0 none);
37
- --primary-foreground: oklch(21% 0.006 286);
38
- --secondary: oklch(27.4% 0.005 286);
39
- --secondary-foreground: oklch(98.5% 0 none);
40
- --muted: oklch(27.4% 0.005 286);
41
- --muted-foreground: oklch(71.2% 0.013 286);
42
- --accent: oklch(27.4% 0.005 286);
43
- --accent-foreground: oklch(98.5% 0 none);
44
- --destructive: oklch(39.6% 0.133 25.7);
45
- --destructive-foreground: oklch(98.5% 0 none);
46
- --border: oklch(27.4% 0.005 286);
47
- --input: oklch(27.4% 0.005 286);
48
- --ring: oklch(87.1% 0.005 286);
49
- --chart-1: oklch(52.9% 0.193 262);
50
- --chart-2: oklch(69.8% 0.134 165);
51
- --chart-3: oklch(72.3% 0.15 60.6);
52
- --chart-4: oklch(61.9% 0.204 313);
53
- --chart-5: oklch(61.2% 0.209 6.39);
42
+ --background: oklch(0.141 0.005 285.823);
43
+ --foreground: oklch(0.985 0 0);
44
+ --card: oklch(0.21 0.006 285.885);
45
+ --card-foreground: oklch(0.985 0 0);
46
+ --popover: oklch(0.21 0.006 285.885);
47
+ --popover-foreground: oklch(0.985 0 0);
48
+ --primary: oklch(0.92 0.004 286.32);
49
+ --primary-foreground: oklch(0.21 0.006 285.885);
50
+ --secondary: oklch(0.274 0.006 286.033);
51
+ --secondary-foreground: oklch(0.985 0 0);
52
+ --muted: oklch(0.274 0.006 286.033);
53
+ --muted-foreground: oklch(0.705 0.015 286.067);
54
+ --accent: oklch(0.274 0.006 286.033);
55
+ --accent-foreground: oklch(0.985 0 0);
56
+ --destructive: oklch(0.704 0.191 22.216);
57
+ --border: oklch(1 0 0 / 10%);
58
+ --input: oklch(1 0 0 / 15%);
59
+ --ring: oklch(0.552 0.016 285.938);
60
+ --chart-1: oklch(0.488 0.243 264.376);
61
+ --chart-2: oklch(0.696 0.17 162.48);
62
+ --chart-3: oklch(0.769 0.188 70.08);
63
+ --chart-4: oklch(0.627 0.265 303.9);
64
+ --chart-5: oklch(0.645 0.246 16.439);
65
+ --sidebar: oklch(0.21 0.006 285.885);
66
+ --sidebar-foreground: oklch(0.985 0 0);
67
+ --sidebar-primary: oklch(0.488 0.243 264.376);
68
+ --sidebar-primary-foreground: oklch(0.985 0 0);
69
+ --sidebar-accent: oklch(0.274 0.006 286.033);
70
+ --sidebar-accent-foreground: oklch(0.985 0 0);
71
+ --sidebar-border: oklch(1 0 0 / 10%);
72
+ --sidebar-ring: oklch(0.552 0.016 285.938);
54
73
  }
package/src/app/demo.tsx CHANGED
@@ -36,9 +36,10 @@ const config = {
36
36
  message: <DemoAnnouncement />,
37
37
  },
38
38
  },
39
- topNavigation: [
39
+ navigation: [
40
40
  {
41
- id: "/",
41
+ type: "link",
42
+ to: "/",
42
43
  label: "API Reference",
43
44
  },
44
45
  ],
@@ -47,7 +48,7 @@ const config = {
47
48
  openApiPlugin({
48
49
  type: "url",
49
50
  input: apiUrl,
50
- navigationId: "/",
51
+ path: "/",
51
52
  }),
52
53
  ],
53
54
  } satisfies ZudokuConfig;
@@ -5,10 +5,8 @@ import {
5
5
  type RouteObject,
6
6
  } from "react-router";
7
7
  import config from "virtual:zudoku-config";
8
- import "virtual:zudoku-theme.css";
9
8
  import "vite/modulepreload-polyfill";
10
9
  import { Bootstrap } from "zudoku/components";
11
- import "./main.css";
12
10
  import { getRoutesByConfig } from "./main.js";
13
11
 
14
12
  const routes = getRoutesByConfig(config);
@@ -10,12 +10,10 @@ import {
10
10
  isRouteErrorResponse,
11
11
  type RouteObject,
12
12
  } from "react-router";
13
- import "virtual:zudoku-theme.css";
14
13
  import "vite/modulepreload-polyfill";
15
14
  import { BootstrapStatic, ServerError } from "zudoku/components";
16
15
  import { NO_DEHYDRATE } from "../lib/components/cache.js";
17
16
  import type { PrerenderResponse } from "../vite/prerender/PrerenderResponse.js";
18
- import "./main.css";
19
17
  import { getRoutesByConfig } from "./main.js";
20
18
  export { getRoutesByConfig };
21
19
 
package/src/app/env.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import z from "zod";
1
2
  import { BuildConfigSchema } from "./ZuploBuildConfig.js";
2
3
 
3
4
  const getZuploBuildConfig = () => {
@@ -9,6 +10,13 @@ const getZuploBuildConfig = () => {
9
10
  );
10
11
  return zuploBuildConfig;
11
12
  } catch (error) {
13
+ if (error instanceof z.ZodError) {
14
+ // eslint-disable-next-line no-console
15
+ console.error("ZUPLO_BUILD_CONFIG is invalid.");
16
+ // eslint-disable-next-line no-console
17
+ console.log(error.errors);
18
+ return undefined;
19
+ }
12
20
  // eslint-disable-next-line no-console
13
21
  console.error(
14
22
  "ZUPLO_BUILD_CONFIG is a reserved environment variable and cannot be used for custom configuration. Please remove it from your environment variables.",
package/src/app/main.css CHANGED
@@ -1,5 +1,4 @@
1
- /* @vite-plugin-inject font */
2
- @import "./defaultTheme.css" layer(theme);
1
+ /* @vite-plugin-inject defaultTheme */
3
2
  @import "tailwindcss" source("..");
4
3
 
5
4
  /* @vite-plugin-inject main */
@@ -7,56 +6,6 @@
7
6
  @plugin "@tailwindcss/typography";
8
7
  @custom-variant dark (&:is(.dark *));
9
8
 
10
- @theme inline {
11
- --color-background: var(--background);
12
- --color-foreground: var(--foreground);
13
- --color-card: var(--card);
14
- --color-card-foreground: var(--card-foreground);
15
- --color-popover: var(--popover);
16
- --color-popover-foreground: var(--popover-foreground);
17
- --color-primary: var(--primary);
18
- --color-primary-foreground: var(--primary-foreground);
19
- --color-secondary: var(--secondary);
20
- --color-secondary-foreground: var(--secondary-foreground);
21
- --color-muted: var(--muted);
22
- --color-muted-foreground: var(--muted-foreground);
23
- --color-accent: var(--accent);
24
- --color-accent-foreground: var(--accent-foreground);
25
- --color-destructive: var(--destructive);
26
- --color-destructive-foreground: var(--destructive-foreground);
27
- --color-border: var(--border);
28
- --color-input: var(--input);
29
- --color-ring: var(--ring);
30
- --color-chart-1: var(--chart-1);
31
- --color-chart-2: var(--chart-2);
32
- --color-chart-3: var(--chart-3);
33
- --color-chart-4: var(--chart-4);
34
- --color-chart-5: var(--chart-5);
35
-
36
- --radius-sm: calc(var(--radius) - 4px);
37
- --radius-md: calc(var(--radius) - 2px);
38
- --radius-lg: var(--radius);
39
- --radius-xl: calc(var(--radius) + 4px);
40
-
41
- --shadow-2xs: var(--shadow-2xs);
42
- --shadow-xs: var(--shadow-xs);
43
- --shadow-sm: var(--shadow-sm);
44
- --shadow: var(--shadow);
45
- --shadow-md: var(--shadow-md);
46
- --shadow-lg: var(--shadow-lg);
47
- --shadow-xl: var(--shadow-xl);
48
- --shadow-2xl: var(--shadow-2xl);
49
-
50
- --color-sidebar: var(--sidebar);
51
- --color-sidebar-foreground: var(--sidebar-foreground);
52
- --color-sidebar-primary: var(--sidebar-primary);
53
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
54
- --color-sidebar-accent: var(--sidebar-accent);
55
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
56
- --color-sidebar-border: var(--sidebar-border);
57
- --color-sidebar-ring: var(--sidebar-ring);
58
- }
59
-
60
9
  @utility prose {
61
10
  a {
62
11
  @apply font-normal underline-offset-4 hover:text-primary;
@@ -114,6 +63,11 @@
114
63
  @apply h-full overscroll-none;
115
64
  }
116
65
 
66
+ ::view-transition-old(root),
67
+ ::view-transition-new(root) {
68
+ animation: none;
69
+ }
70
+
117
71
  details summary {
118
72
  @apply cursor-pointer;
119
73
  }
package/src/app/main.tsx CHANGED
@@ -6,11 +6,11 @@ import {
6
6
  } from "virtual:zudoku-api-plugins";
7
7
  import { configuredAuthProvider } from "virtual:zudoku-auth";
8
8
  import { configuredCustomPagesPlugin } from "virtual:zudoku-custom-pages-plugin";
9
- import { configuredDocsPlugins } from "virtual:zudoku-docs-plugins";
9
+ import { configuredDocsPlugin } from "virtual:zudoku-docs-plugin";
10
+ import { configuredNavigation } from "virtual:zudoku-navigation";
10
11
  import { configuredRedirectPlugin } from "virtual:zudoku-redirect-plugin";
11
12
  import { configuredSearchPlugin } from "virtual:zudoku-search-plugin";
12
13
  import { registerShiki } from "virtual:zudoku-shiki-register";
13
- import { configuredSidebar } from "virtual:zudoku-sidebar";
14
14
  import "virtual:zudoku-theme.css";
15
15
  import {
16
16
  BuildCheck,
@@ -25,6 +25,7 @@ import type { ZudokuContextOptions } from "../lib/core/ZudokuContext.js";
25
25
  import { isNavigationPlugin } from "../lib/core/plugins.js";
26
26
  import { highlighter } from "../lib/shiki.js";
27
27
  import { ZuploEnv } from "./env.js";
28
+ import "./main.css";
28
29
 
29
30
  await registerShiki(highlighter);
30
31
 
@@ -48,12 +49,11 @@ export const convertZudokuConfigToOptions = (
48
49
  title: "%s - Zudoku",
49
50
  ...config.metadata,
50
51
  },
51
- sidebars: configuredSidebar,
52
- topNavigation: config.topNavigation,
52
+ navigation: configuredNavigation,
53
53
  mdx: config.mdx,
54
54
  plugins: [
55
55
  ...(configuredAuthProvider ? [configuredAuthProvider] : []),
56
- ...configuredDocsPlugins,
56
+ ...(configuredDocsPlugin ? [configuredDocsPlugin] : []),
57
57
  ...configuredApiPlugins,
58
58
  ...(configuredSearchPlugin ? [configuredSearchPlugin] : []),
59
59
  ...(configuredRedirectPlugin ? [configuredRedirectPlugin] : []),
@@ -99,6 +99,8 @@ export const getRoutesByOptions = (
99
99
  },
100
100
  ]);
101
101
 
102
+ // @TODO Detect conflicts in routes and log warning
103
+
102
104
  return routes;
103
105
  };
104
106
 
@@ -31,10 +31,11 @@ const config = {
31
31
  : undefined,
32
32
  pageTitle,
33
33
  },
34
- topNavigation: [
34
+ navigation: [
35
35
  {
36
- id: "/",
36
+ type: "link",
37
37
  label: "API Reference",
38
+ to: "/",
38
39
  },
39
40
  ],
40
41
  plugins: [
@@ -42,7 +43,7 @@ const config = {
42
43
  openApiPlugin({
43
44
  type: "url",
44
45
  input: apiUrl!,
45
- navigationId: "/",
46
+ path: "/",
46
47
  }),
47
48
  ],
48
49
  } satisfies ZudokuConfig;
@@ -14,7 +14,7 @@ describe("getIssuer", () => {
14
14
  };
15
15
 
16
16
  const result = await getIssuer(config);
17
- expect(result).toBe("tolerant-hornet-46.clerk.accounts.dev");
17
+ expect(result).toBe("https://tolerant-hornet-46.clerk.accounts.dev");
18
18
  });
19
19
 
20
20
  it("should throw error for invalid clerk public key format", async () => {
@@ -17,7 +17,7 @@ export const getIssuer = async (config: ZudokuConfig) => {
17
17
  const frontendApi = frontendApiParts.at(0);
18
18
  invariant(frontendApi, "Clerk public key is invalid");
19
19
 
20
- return frontendApi;
20
+ return `https://${frontendApi}`;
21
21
  }
22
22
  case "auth0": {
23
23
  return `https://${config.authentication.domain}/`;
@@ -34,5 +34,5 @@ export function CallbackHandler({
34
34
  },
35
35
  });
36
36
 
37
- return <Navigate to={executeCallback.data} />;
37
+ return <Navigate to={executeCallback.data} replace />;
38
38
  }
@@ -1,6 +1,6 @@
1
1
  import { useQuery } from "@tanstack/react-query";
2
2
  import { CircleFadingArrowUpIcon, LoaderCircleIcon } from "lucide-react";
3
- import { z } from "zod";
3
+ import { z } from "zod/v4";
4
4
  import { Button } from "../ui/Button.js";
5
5
 
6
6
  const BuildStatusSchema = z.object({
@@ -0,0 +1,51 @@
1
+ import { cva } from "class-variance-authority";
2
+ import type { PropsWithChildren } from "react";
3
+ import { cn } from "../util/cn.js";
4
+
5
+ const frameVariants = cva("", {
6
+ variants: {
7
+ size: {
8
+ sm: "max-w-sm",
9
+ md: "max-w-md",
10
+ lg: "max-w-lg",
11
+ xl: "max-w-xl",
12
+ "2xl": "max-w-2xl",
13
+ full: "max-w-full",
14
+ },
15
+ align: {
16
+ center: "mx-auto",
17
+ start: "me-auto",
18
+ end: "ms-auto",
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ size: "xl",
23
+ align: "center",
24
+ },
25
+ });
26
+
27
+ export const Framed = ({
28
+ caption,
29
+ className,
30
+ size = "xl",
31
+ align = "center",
32
+ children,
33
+ }: PropsWithChildren<{
34
+ caption?: string;
35
+ className?: string;
36
+ size?: "sm" | "md" | "lg" | "xl" | "2xl" | "full";
37
+ align?: "center" | "start" | "end";
38
+ }>) => (
39
+ <figure className={cn(frameVariants({ size, align }), className)}>
40
+ <div className="relative overflow-hidden rounded-lg border border-border bg-muted/50 p-1 shadow-sm">
41
+ <div className="not-prose rounded-md [&_img]:rounded-md! relative overflow-hidden bg-background">
42
+ {children}
43
+ </div>
44
+ </div>
45
+ {caption && (
46
+ <figcaption className="mt-3 text-center text-sm text-muted-foreground">
47
+ {caption}
48
+ </figcaption>
49
+ )}
50
+ </figure>
51
+ );
@@ -25,6 +25,7 @@ import { Banner } from "./Banner.js";
25
25
  import { ClientOnly } from "./ClientOnly.js";
26
26
  import { useZudoku } from "./context/ZudokuContext.js";
27
27
  import { MobileTopNavigation } from "./MobileTopNavigation.js";
28
+ import { PageProgress } from "./PageProgress.js";
28
29
  import { Search } from "./Search.js";
29
30
  import { Slot } from "./Slot.js";
30
31
  import { ThemeSwitch } from "./ThemeSwitch.js";
@@ -82,8 +83,9 @@ export const Header = memo(function HeaderInner() {
82
83
  return (
83
84
  <header className="sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full">
84
85
  <Banner />
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">
86
+ <div className={cn(borderBottom, "relative")}>
87
+ <PageProgress />
88
+ <div className="max-w-screen-2xl mx-auto flex items-center justify-between h-(--top-header-height) px-4 lg:px-8 border-transparent">
87
89
  <div className="flex">
88
90
  <Link to="/">
89
91
  <div className="flex items-center gap-3.5">
@@ -182,7 +184,7 @@ export const Header = memo(function HeaderInner() {
182
184
  </div>
183
185
  </div>
184
186
  <div className={cn("hidden lg:block", borderBottom)}>
185
- <div className="max-w-screen-2xl mx-auto border-transparent">
187
+ <div className="max-w-screen-2xl mx-auto border-transparent relative">
186
188
  <Slot.Target name="top-navigation-before" />
187
189
  <TopNavigation />
188
190
  <Slot.Target name="top-navigation-after" />
@@ -46,7 +46,11 @@ export type HeadingProps = HTMLAttributes<HTMLHeadingElement> &
46
46
  className?: string;
47
47
  id?: string;
48
48
  level?: 1 | 2 | 3 | 4 | 5 | 6;
49
- registerSidebarAnchor?: boolean;
49
+ /**
50
+ * This is to set labels as active when the heading is in the viewport.
51
+ * It's used in the navigation/toc to highlight the current section.
52
+ */
53
+ registerNavigationAnchor?: boolean;
50
54
  };
51
55
 
52
56
  export const Heading = ({
@@ -54,7 +58,7 @@ export const Heading = ({
54
58
  children,
55
59
  id,
56
60
  className,
57
- registerSidebarAnchor,
61
+ registerNavigationAnchor,
58
62
  }: HeadingProps) => {
59
63
  const Component = getComponent(level ?? 1);
60
64
  const { ref } = useRegisterAnchorElement();
@@ -65,7 +69,7 @@ export const Heading = ({
65
69
  className: cn(className, "flex items-center gap-[0.33em]"),
66
70
  level,
67
71
  })}
68
- ref={registerSidebarAnchor ? ref : undefined}
72
+ ref={registerNavigationAnchor ? ref : undefined}
69
73
  id={id}
70
74
  >
71
75
  {children}