@lukoweb/apitogo 0.1.24 → 0.1.38

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 (477) hide show
  1. package/README.md +92 -0
  2. package/cli.js +13 -13
  3. package/client.d.ts +8 -8
  4. package/dist/cli/cli.js +1117 -624
  5. package/dist/declarations/config/config.d.ts +4 -0
  6. package/dist/declarations/config/loader.d.ts +2 -0
  7. package/dist/declarations/config/resolve-modules.d.ts +34 -0
  8. package/dist/declarations/config/validators/InputNavigationSchema.d.ts +7 -7
  9. package/dist/declarations/config/validators/ModulesSchema.d.ts +417 -0
  10. package/dist/declarations/config/validators/ZudokuConfig.d.ts +123 -4
  11. package/dist/declarations/index.d.ts +3 -1
  12. package/dist/declarations/lib/authentication/components/ProductionUnlockPage.d.ts +1 -0
  13. package/dist/declarations/lib/authentication/hook.d.ts +3 -19
  14. package/dist/declarations/lib/authentication/providers/dev-portal-constants.d.ts +16 -0
  15. package/dist/declarations/lib/authentication/providers/dev-portal-utils.d.ts +9 -0
  16. package/dist/declarations/lib/authentication/providers/dev-portal.d.ts +39 -0
  17. package/dist/declarations/lib/authentication/state.d.ts +12 -26
  18. package/dist/declarations/lib/components/LandingLayout.d.ts +4 -0
  19. package/dist/declarations/lib/components/index.d.ts +2 -0
  20. package/dist/declarations/lib/plugins/api-keys/index.d.ts +2 -1
  21. package/dist/flat-config.d.ts +209 -24
  22. package/docs/components/alert.mdx +130 -0
  23. package/docs/components/badge.mdx +70 -0
  24. package/docs/components/button.mdx +132 -0
  25. package/docs/components/callout.mdx +112 -0
  26. package/docs/components/card.mdx +104 -0
  27. package/docs/components/checkbox.mdx +72 -0
  28. package/docs/components/client-only.mdx +79 -0
  29. package/docs/components/code-tabs.mdx +179 -0
  30. package/docs/components/dialog.mdx +167 -0
  31. package/docs/components/head.mdx +200 -0
  32. package/docs/components/icons.mdx +27 -0
  33. package/docs/components/input.mdx +96 -0
  34. package/docs/components/label.mdx +86 -0
  35. package/docs/components/link.mdx +242 -0
  36. package/docs/components/markdown.mdx +151 -0
  37. package/docs/components/mermaid.mdx +81 -0
  38. package/docs/components/playground.mdx +87 -0
  39. package/docs/components/secret.mdx +79 -0
  40. package/docs/components/select.mdx +176 -0
  41. package/docs/components/shadcn.mdx +73 -0
  42. package/docs/components/slider.mdx +108 -0
  43. package/docs/components/slot.mdx +119 -0
  44. package/docs/components/stepper.mdx +138 -0
  45. package/docs/components/switch.mdx +96 -0
  46. package/docs/components/syntax-highlight.mdx +602 -0
  47. package/docs/components/textarea.mdx +78 -0
  48. package/docs/components/tooltip.mdx +195 -0
  49. package/docs/components/typography.mdx +61 -0
  50. package/docs/concepts/auth-provider-api-identities.md +109 -0
  51. package/docs/configuration/ai-assistants.md +65 -0
  52. package/docs/configuration/api-catalog.md +109 -0
  53. package/docs/configuration/api-reference.md +397 -0
  54. package/docs/configuration/authentication-auth0.md +174 -0
  55. package/docs/configuration/authentication-azure-ad.md +238 -0
  56. package/docs/configuration/authentication-clerk.md +110 -0
  57. package/docs/configuration/authentication-firebase.md +62 -0
  58. package/docs/configuration/authentication-pingfederate.md +136 -0
  59. package/docs/configuration/authentication-supabase.md +226 -0
  60. package/docs/configuration/authentication.md +231 -0
  61. package/docs/configuration/build-configuration.mdx +147 -0
  62. package/docs/configuration/docs.md +282 -0
  63. package/docs/configuration/footer.mdx +214 -0
  64. package/docs/configuration/llms.md +90 -0
  65. package/docs/configuration/make-config.mdx +90 -0
  66. package/docs/configuration/navigation.mdx +422 -0
  67. package/docs/configuration/overview.md +380 -0
  68. package/docs/configuration/protected-routes.md +150 -0
  69. package/docs/configuration/search.md +163 -0
  70. package/docs/configuration/sentry.mdx +44 -0
  71. package/docs/configuration/site.md +124 -0
  72. package/docs/configuration/slots.mdx +125 -0
  73. package/docs/configuration/vite-config.md +18 -0
  74. package/docs/custom-plugins.md +285 -0
  75. package/docs/customization/colors-theme.mdx +276 -0
  76. package/docs/customization/fonts.md +110 -0
  77. package/docs/deploy/apache-nginx.md +41 -0
  78. package/docs/deploy/apitogo.md +139 -0
  79. package/docs/deploy/cloudflare-pages.md +75 -0
  80. package/docs/deploy/direct-upload.md +18 -0
  81. package/docs/deploy/github-pages.md +50 -0
  82. package/docs/deploy/vercel.md +103 -0
  83. package/docs/deployment.md +21 -0
  84. package/docs/extending/events.md +124 -0
  85. package/docs/guides/custom-pages.md +106 -0
  86. package/docs/guides/environment-variables.md +99 -0
  87. package/docs/guides/managing-api-keys-and-identities.md +172 -0
  88. package/docs/guides/mermaid.mdx +70 -0
  89. package/docs/guides/navigation-migration.md +87 -0
  90. package/docs/guides/navigation-rules.mdx +203 -0
  91. package/docs/guides/processors.mdx +234 -0
  92. package/docs/guides/static-files.md +55 -0
  93. package/docs/guides/transforming-examples.md +156 -0
  94. package/docs/guides/using-multiple-apis.md +87 -0
  95. package/docs/markdown/admonitions.md +128 -0
  96. package/docs/markdown/code-blocks.md +196 -0
  97. package/docs/markdown/frontmatter.md +173 -0
  98. package/docs/markdown/mdx.md +68 -0
  99. package/docs/markdown/overview.md +275 -0
  100. package/docs/plugins.md +5 -0
  101. package/docs/quickstart.md +87 -0
  102. package/docs/writing.mdx +72 -0
  103. package/package.json +170 -116
  104. package/src/app/ZuploBuildConfig.ts +36 -36
  105. package/src/app/defaultTheme.css +77 -77
  106. package/src/app/demo-cdn.html +37 -37
  107. package/src/app/demo.html +21 -21
  108. package/src/app/demo.tsx +77 -77
  109. package/src/app/entry.client.tsx +118 -118
  110. package/src/app/entry.server.tsx +160 -160
  111. package/src/app/env.ts +40 -40
  112. package/src/app/font.geist.css +73 -73
  113. package/src/app/main.css +390 -390
  114. package/src/app/main.tsx +8 -1
  115. package/src/app/polyfills.ts +47 -47
  116. package/src/app/processRoutes.tsx +51 -25
  117. package/src/app/sentry.ts +24 -24
  118. package/src/app/standalone.html +23 -23
  119. package/src/app/standalone.tsx +60 -60
  120. package/src/app/utils/createRedirectRoutes.ts +11 -11
  121. package/src/config/config.ts +32 -0
  122. package/src/config/create-plugin.ts +71 -71
  123. package/src/config/file-exists.ts +6 -6
  124. package/src/config/loader.ts +11 -1
  125. package/src/config/resolve-modules.ts +260 -0
  126. package/src/config/validators/BuildSchema.ts +95 -95
  127. package/src/config/validators/HeaderNavigationSchema.ts +41 -41
  128. package/src/config/validators/InputNavigationSchema.test-d.ts +178 -178
  129. package/src/config/validators/InputNavigationSchema.ts +206 -206
  130. package/src/config/validators/ModulesSchema.ts +312 -0
  131. package/src/config/validators/ProtectedRoutesSchema.ts +35 -35
  132. package/src/config/validators/ZudokuConfig.ts +766 -729
  133. package/src/config/validators/auth.ts +3 -3
  134. package/src/config/validators/reason-codes.ts +7 -7
  135. package/src/env.d.ts +11 -11
  136. package/src/index.ts +31 -0
  137. package/src/lib/MissingIcon.tsx +22 -22
  138. package/src/lib/assets/language-icons/bun.tsx +50 -50
  139. package/src/lib/assets/language-icons/c.tsx +31 -31
  140. package/src/lib/assets/language-icons/commonlisp.tsx +22 -22
  141. package/src/lib/assets/language-icons/cpp.tsx +35 -35
  142. package/src/lib/assets/language-icons/csharp.tsx +35 -35
  143. package/src/lib/assets/language-icons/css.tsx +36 -36
  144. package/src/lib/assets/language-icons/dart.tsx +39 -39
  145. package/src/lib/assets/language-icons/elixir.tsx +19 -19
  146. package/src/lib/assets/language-icons/go.tsx +19 -19
  147. package/src/lib/assets/language-icons/graphql.tsx +19 -19
  148. package/src/lib/assets/language-icons/html.tsx +24 -24
  149. package/src/lib/assets/language-icons/java.tsx +35 -35
  150. package/src/lib/assets/language-icons/javascript.tsx +11 -11
  151. package/src/lib/assets/language-icons/json.tsx +19 -19
  152. package/src/lib/assets/language-icons/kotlin.tsx +30 -30
  153. package/src/lib/assets/language-icons/markdown.tsx +19 -19
  154. package/src/lib/assets/language-icons/mdx.tsx +23 -23
  155. package/src/lib/assets/language-icons/npm.tsx +15 -15
  156. package/src/lib/assets/language-icons/objectivec.tsx +23 -23
  157. package/src/lib/assets/language-icons/ocaml.tsx +34 -34
  158. package/src/lib/assets/language-icons/php.tsx +19 -19
  159. package/src/lib/assets/language-icons/pnpm.tsx +32 -32
  160. package/src/lib/assets/language-icons/powershell.tsx +27 -27
  161. package/src/lib/assets/language-icons/python.tsx +23 -23
  162. package/src/lib/assets/language-icons/react.tsx +21 -21
  163. package/src/lib/assets/language-icons/ruby.tsx +19 -19
  164. package/src/lib/assets/language-icons/rust.tsx +19 -19
  165. package/src/lib/assets/language-icons/scala.tsx +19 -19
  166. package/src/lib/assets/language-icons/shell.tsx +19 -19
  167. package/src/lib/assets/language-icons/swift.tsx +19 -19
  168. package/src/lib/assets/language-icons/toml.tsx +23 -23
  169. package/src/lib/assets/language-icons/typescript.tsx +23 -23
  170. package/src/lib/assets/language-icons/xml.tsx +19 -19
  171. package/src/lib/assets/language-icons/yaml.tsx +23 -23
  172. package/src/lib/assets/language-icons/yarn.tsx +17 -17
  173. package/src/lib/assets/language-icons/zig.tsx +32 -32
  174. package/src/lib/auth/issuer.ts +34 -31
  175. package/src/lib/authentication/AuthenticationPlugin.tsx +33 -33
  176. package/src/lib/authentication/authentication.ts +48 -48
  177. package/src/lib/authentication/components/OAuthErrorPage.tsx +197 -197
  178. package/src/lib/authentication/components/ProductionUnlockPage.tsx +27 -0
  179. package/src/lib/authentication/components/SignOut.tsx +15 -15
  180. package/src/lib/authentication/constants.ts +1 -1
  181. package/src/lib/authentication/errors.ts +34 -34
  182. package/src/lib/authentication/hook.ts +141 -139
  183. package/src/lib/authentication/providers/auth0.tsx +91 -91
  184. package/src/lib/authentication/providers/azureb2c.tsx +223 -223
  185. package/src/lib/authentication/providers/dev-portal-constants.ts +21 -0
  186. package/src/lib/authentication/providers/dev-portal-utils.ts +107 -0
  187. package/src/lib/authentication/providers/dev-portal.tsx +270 -0
  188. package/src/lib/authentication/providers/firebase.tsx +486 -486
  189. package/src/lib/authentication/providers/openid.tsx +516 -516
  190. package/src/lib/authentication/providers/supabase.tsx +412 -412
  191. package/src/lib/authentication/providers/util.ts +26 -26
  192. package/src/lib/authentication/state.ts +179 -91
  193. package/src/lib/authentication/ui/icons/Apple.tsx +10 -10
  194. package/src/lib/authentication/ui/icons/Facebook.tsx +15 -15
  195. package/src/lib/authentication/ui/icons/Github.tsx +16 -16
  196. package/src/lib/authentication/ui/icons/Google.tsx +16 -16
  197. package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -12
  198. package/src/lib/authentication/ui/icons/X.tsx +10 -10
  199. package/src/lib/authentication/utils/relativeRedirectUrl.ts +16 -16
  200. package/src/lib/components/AnchorLink.tsx +24 -24
  201. package/src/lib/components/Banner.tsx +52 -52
  202. package/src/lib/components/Bootstrap.tsx +77 -77
  203. package/src/lib/components/BuildCheck.tsx +87 -87
  204. package/src/lib/components/CategoryHeading.tsx +19 -19
  205. package/src/lib/components/ClientOnly.tsx +19 -19
  206. package/src/lib/components/ErrorPage.tsx +26 -26
  207. package/src/lib/components/Footer.tsx +140 -140
  208. package/src/lib/components/Framed.tsx +51 -51
  209. package/src/lib/components/Header.tsx +11 -3
  210. package/src/lib/components/HeaderNavigation.tsx +148 -148
  211. package/src/lib/components/Heading.tsx +84 -84
  212. package/src/lib/components/InlineCode.tsx +15 -15
  213. package/src/lib/components/LandingLayout.tsx +21 -0
  214. package/src/lib/components/LanguageIcon.tsx +199 -199
  215. package/src/lib/components/Markdown.tsx +55 -55
  216. package/src/lib/components/Meta.tsx +46 -46
  217. package/src/lib/components/MobileTopNavigation.tsx +11 -3
  218. package/src/lib/components/NotFoundPage.tsx +37 -37
  219. package/src/lib/components/PageProgress.tsx +28 -28
  220. package/src/lib/components/PagefindSearchMeta.tsx +14 -14
  221. package/src/lib/components/Pagination.tsx +44 -44
  222. package/src/lib/components/PathRenderer.tsx +61 -61
  223. package/src/lib/components/PluginHeads.tsx +17 -17
  224. package/src/lib/components/Search.tsx +70 -70
  225. package/src/lib/components/Slot.tsx +64 -64
  226. package/src/lib/components/Spinner.tsx +5 -5
  227. package/src/lib/components/StatusPage.tsx +96 -96
  228. package/src/lib/components/ThemeSwitch.tsx +49 -49
  229. package/src/lib/components/Typography.tsx +12 -12
  230. package/src/lib/components/Zudoku.tsx +106 -106
  231. package/src/lib/components/cache.ts +27 -27
  232. package/src/lib/components/context/RenderContext.ts +11 -11
  233. package/src/lib/components/context/RouterEventsEmitter.tsx +19 -19
  234. package/src/lib/components/context/SlotProvider.tsx +149 -149
  235. package/src/lib/components/context/ViewportAnchorContext.tsx +137 -137
  236. package/src/lib/components/context/ZudokuContext.ts +140 -140
  237. package/src/lib/components/context/ZudokuProvider.tsx +22 -22
  238. package/src/lib/components/context/ZudokuReactContext.tsx +17 -17
  239. package/src/lib/components/index.ts +2 -0
  240. package/src/lib/components/navigation/Navigation.tsx +51 -51
  241. package/src/lib/components/navigation/NavigationBadge.tsx +48 -48
  242. package/src/lib/components/navigation/NavigationFilterContext.tsx +28 -28
  243. package/src/lib/components/navigation/NavigationWrapper.tsx +49 -49
  244. package/src/lib/components/navigation/Toc.tsx +137 -137
  245. package/src/lib/components/navigation/ZudokuLogo.tsx +25 -25
  246. package/src/lib/components/navigation/ZuploLogo.tsx +14 -14
  247. package/src/lib/components/navigation/utils.ts +234 -234
  248. package/src/lib/core/RouteGuard.tsx +11 -1
  249. package/src/lib/core/ZudokuContext.ts +271 -271
  250. package/src/lib/core/plugins.ts +138 -138
  251. package/src/lib/core/react-query.ts +1 -1
  252. package/src/lib/core/router.ts +1 -1
  253. package/src/lib/core/transform-config.ts +67 -67
  254. package/src/lib/demo/DemoAnnouncement.tsx +17 -17
  255. package/src/lib/errors/ErrorAlert.tsx +28 -28
  256. package/src/lib/errors/RouterError.tsx +18 -18
  257. package/src/lib/errors/ServerError.tsx +5 -5
  258. package/src/lib/errors/TopLevelError.tsx +6 -6
  259. package/src/lib/hooks/index.ts +13 -13
  260. package/src/lib/hooks/useEvent.ts +41 -41
  261. package/src/lib/hooks/useHighlighter.ts +15 -15
  262. package/src/lib/hooks/useHotkey.ts +70 -70
  263. package/src/lib/icons.ts +2 -2
  264. package/src/lib/navigation/applyRules.ts +127 -127
  265. package/src/lib/navigation/pathMatcher.ts +81 -81
  266. package/src/lib/oas/graphql/circular.ts +69 -69
  267. package/src/lib/oas/graphql/constants.ts +2 -2
  268. package/src/lib/oas/graphql/index.ts +791 -791
  269. package/src/lib/oas/parser/dereference/index.ts +84 -84
  270. package/src/lib/oas/parser/dereference/resolveRef.ts +32 -32
  271. package/src/lib/oas/parser/index.ts +129 -129
  272. package/src/lib/oas/parser/schemas/v3.0.json +1489 -1489
  273. package/src/lib/oas/parser/schemas/v3.1.json +1298 -1298
  274. package/src/lib/oas/parser/upgrade/index.ts +174 -174
  275. package/src/lib/plugins/api-catalog/index.tsx +119 -119
  276. package/src/lib/plugins/api-keys/ProtectedRoute.tsx +33 -33
  277. package/src/lib/plugins/api-keys/index.tsx +274 -272
  278. package/src/lib/plugins/api-keys/settings/ApiKeyList.tsx +67 -67
  279. package/src/lib/plugins/custom-pages/index.tsx +32 -32
  280. package/src/lib/plugins/markdown/assets/ChatGPTLogo.tsx +11 -11
  281. package/src/lib/plugins/markdown/assets/ClaudeLogo.tsx +19 -19
  282. package/src/lib/plugins/markdown/index.tsx +62 -62
  283. package/src/lib/plugins/openapi/ColorizedParam.tsx +115 -115
  284. package/src/lib/plugins/openapi/Endpoint.tsx +85 -85
  285. package/src/lib/plugins/openapi/MCPEndpoint.tsx +273 -273
  286. package/src/lib/plugins/openapi/OasProvider.tsx +74 -74
  287. package/src/lib/plugins/openapi/OperationList.tsx +275 -275
  288. package/src/lib/plugins/openapi/ParamInfos.tsx +96 -96
  289. package/src/lib/plugins/openapi/ParameterList.tsx +53 -53
  290. package/src/lib/plugins/openapi/ParameterListItem.tsx +161 -161
  291. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +67 -67
  292. package/src/lib/plugins/openapi/SidecarBox.tsx +57 -57
  293. package/src/lib/plugins/openapi/SimpleSelect.tsx +46 -46
  294. package/src/lib/plugins/openapi/client/GraphQLClient.tsx +73 -73
  295. package/src/lib/plugins/openapi/client/GraphQLContext.tsx +16 -16
  296. package/src/lib/plugins/openapi/client/createServer.ts +35 -35
  297. package/src/lib/plugins/openapi/client/useCreateQuery.ts +44 -44
  298. package/src/lib/plugins/openapi/components/ConstValue.tsx +24 -24
  299. package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -22
  300. package/src/lib/plugins/openapi/components/SelectOnClick.tsx +29 -29
  301. package/src/lib/plugins/openapi/context.tsx +16 -16
  302. package/src/lib/plugins/openapi/graphql/fragment-masking.ts +104 -104
  303. package/src/lib/plugins/openapi/graphql/gql.ts +95 -95
  304. package/src/lib/plugins/openapi/graphql/graphql.ts +835 -835
  305. package/src/lib/plugins/openapi/graphql/index.ts +2 -2
  306. package/src/lib/plugins/openapi/index.tsx +221 -221
  307. package/src/lib/plugins/openapi/interfaces.ts +100 -100
  308. package/src/lib/plugins/openapi/playground/Headers.tsx +6 -6
  309. package/src/lib/plugins/openapi/playground/PathParams.tsx +53 -53
  310. package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -87
  311. package/src/lib/plugins/openapi/playground/createUrl.ts +25 -25
  312. package/src/lib/plugins/openapi/playground/fileUtils.ts +36 -36
  313. package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -26
  314. package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -31
  315. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +29 -29
  316. package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +340 -340
  317. package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +117 -117
  318. package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts +36 -36
  319. package/src/lib/plugins/openapi/playground/serializeQueryParams.ts +125 -125
  320. package/src/lib/plugins/openapi/playground/useRememberSkipLoginDialog.tsx +23 -23
  321. package/src/lib/plugins/openapi/processors/removeExtensions.ts +29 -29
  322. package/src/lib/plugins/openapi/processors/removeParameters.ts +103 -103
  323. package/src/lib/plugins/openapi/processors/removePaths.ts +57 -57
  324. package/src/lib/plugins/openapi/processors/traverse.ts +1 -1
  325. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +39 -39
  326. package/src/lib/plugins/openapi/schema/UnionView.tsx +132 -132
  327. package/src/lib/plugins/openapi/schema/union-helpers.ts +123 -123
  328. package/src/lib/plugins/openapi/schema/utils.ts +49 -49
  329. package/src/lib/plugins/openapi/state.ts +36 -36
  330. package/src/lib/plugins/openapi/util/buildTagCategories.ts +54 -54
  331. package/src/lib/plugins/openapi/util/createHttpSnippet.ts +135 -135
  332. package/src/lib/plugins/openapi/util/createNavigationCategory.tsx +39 -39
  333. package/src/lib/plugins/openapi/util/generateSchemaExample.ts +191 -191
  334. package/src/lib/plugins/openapi/util/getRoutes.tsx +265 -265
  335. package/src/lib/plugins/openapi/util/methodColorMap.tsx +11 -11
  336. package/src/lib/plugins/openapi/util/methodToColor.ts +27 -27
  337. package/src/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.tsx +32 -32
  338. package/src/lib/plugins/openapi/util/useWarmupSchema.ts +23 -23
  339. package/src/lib/plugins/search-inkeep/index.tsx +108 -108
  340. package/src/lib/plugins/search-inkeep/inkeep.ts +24 -24
  341. package/src/lib/plugins/search-pagefind/get-results.tsx +74 -74
  342. package/src/lib/plugins/search-pagefind/index.tsx +21 -21
  343. package/src/lib/plugins/search-pagefind/types.ts +118 -118
  344. package/src/lib/shiki-constants.ts +24 -24
  345. package/src/lib/testing/index.tsx +146 -146
  346. package/src/lib/ui/Accordion.tsx +55 -55
  347. package/src/lib/ui/Alert.tsx +84 -84
  348. package/src/lib/ui/AlertDialog.tsx +195 -195
  349. package/src/lib/ui/AspectRatio.tsx +5 -5
  350. package/src/lib/ui/Badge.tsx +48 -48
  351. package/src/lib/ui/Breadcrumb.tsx +115 -115
  352. package/src/lib/ui/Button.tsx +65 -65
  353. package/src/lib/ui/ButtonGroup.tsx +80 -80
  354. package/src/lib/ui/Callout.tsx +113 -113
  355. package/src/lib/ui/Card.tsx +95 -95
  356. package/src/lib/ui/Carousel.tsx +259 -259
  357. package/src/lib/ui/Checkbox.tsx +28 -28
  358. package/src/lib/ui/CodeBlock.tsx +92 -92
  359. package/src/lib/ui/CodeTabPanel.tsx +13 -13
  360. package/src/lib/ui/CodeTabs.tsx +161 -161
  361. package/src/lib/ui/Collapsible.tsx +31 -31
  362. package/src/lib/ui/Dialog.tsx +138 -138
  363. package/src/lib/ui/DismissibleAlert.tsx +74 -74
  364. package/src/lib/ui/Drawer.tsx +121 -121
  365. package/src/lib/ui/DropdownMenu.tsx +254 -254
  366. package/src/lib/ui/EmbeddedCodeBlock.tsx +99 -99
  367. package/src/lib/ui/Form.tsx +176 -176
  368. package/src/lib/ui/Frame.tsx +81 -81
  369. package/src/lib/ui/HoverCard.tsx +26 -26
  370. package/src/lib/ui/Input.tsx +23 -23
  371. package/src/lib/ui/InputGroup.tsx +168 -168
  372. package/src/lib/ui/Item.tsx +213 -213
  373. package/src/lib/ui/Kbd.tsx +28 -28
  374. package/src/lib/ui/Label.tsx +23 -23
  375. package/src/lib/ui/NativeSelect.tsx +48 -48
  376. package/src/lib/ui/NavigationMenu.tsx +169 -169
  377. package/src/lib/ui/Pagination.tsx +115 -115
  378. package/src/lib/ui/Popover.tsx +28 -28
  379. package/src/lib/ui/Progress.tsx +25 -25
  380. package/src/lib/ui/RadioGroup.tsx +41 -41
  381. package/src/lib/ui/ReactComponentDoc.tsx +68 -68
  382. package/src/lib/ui/ScrollArea.tsx +45 -45
  383. package/src/lib/ui/Secret.tsx +133 -133
  384. package/src/lib/ui/Select.tsx +184 -184
  385. package/src/lib/ui/Separator.tsx +25 -25
  386. package/src/lib/ui/Skeleton.tsx +15 -15
  387. package/src/lib/ui/Slider.tsx +25 -25
  388. package/src/lib/ui/Stepper.tsx +8 -8
  389. package/src/lib/ui/Switch.tsx +26 -26
  390. package/src/lib/ui/SyntaxHighlight.tsx +54 -54
  391. package/src/lib/ui/Tabs.tsx +52 -52
  392. package/src/lib/ui/Textarea.tsx +22 -22
  393. package/src/lib/ui/Toggle.tsx +42 -42
  394. package/src/lib/ui/ToggleGroup.tsx +58 -58
  395. package/src/lib/ui/Tooltip.tsx +65 -65
  396. package/src/lib/ui/Value.tsx +42 -42
  397. package/src/lib/ui/util.tsx +8 -8
  398. package/src/lib/util/cn.ts +6 -6
  399. package/src/lib/util/createVariantComponent.tsx +61 -61
  400. package/src/lib/util/ensureArray.ts +3 -3
  401. package/src/lib/util/flattenAllOf.ts +72 -72
  402. package/src/lib/util/flattenAllOfProcessor.ts +74 -74
  403. package/src/lib/util/hastToJsx.tsx +67 -67
  404. package/src/lib/util/humanFileSize.ts +15 -15
  405. package/src/lib/util/invariant.ts +52 -52
  406. package/src/lib/util/joinUrl.ts +60 -60
  407. package/src/lib/util/logInit.ts +9 -9
  408. package/src/lib/util/objectEntries.ts +5 -5
  409. package/src/lib/util/os.ts +18 -18
  410. package/src/lib/util/pastellize.ts +25 -25
  411. package/src/lib/util/problemJson.ts +63 -63
  412. package/src/lib/util/readFrontmatter.ts +14 -14
  413. package/src/lib/util/renderIf.ts +4 -4
  414. package/src/lib/util/scrollIntoViewIfNeeded.ts +18 -18
  415. package/src/lib/util/slugify.ts +21 -21
  416. package/src/lib/util/syncZustandState.ts +22 -22
  417. package/src/lib/util/traverse.ts +70 -70
  418. package/src/lib/util/types.ts +7 -7
  419. package/src/lib/util/url.ts +18 -18
  420. package/src/lib/util/useCopyToClipboard.ts +17 -17
  421. package/src/lib/util/useExposedProps.tsx +27 -27
  422. package/src/lib/util/useIsomorphicLayoutEffect.ts +6 -6
  423. package/src/lib/util/useLatest.ts +18 -18
  424. package/src/lib/util/useOnScreen.ts +34 -34
  425. package/src/lib/util/useScrollToAnchor.ts +70 -70
  426. package/src/lib/util/useScrollToTop.ts +18 -18
  427. package/src/types.d.ts +57 -53
  428. package/src/vite/api/SchemaManager.ts +371 -371
  429. package/src/vite/api/schema-codegen.ts +163 -163
  430. package/src/vite/config.ts +5 -1
  431. package/src/vite/css/collect.ts +42 -42
  432. package/src/vite/css/plugin.ts +105 -105
  433. package/src/vite/debug.ts +18 -18
  434. package/src/vite/dev-portal-env.ts +93 -0
  435. package/src/vite/html.ts +54 -54
  436. package/src/vite/index.ts +2 -2
  437. package/src/vite/mdx/rehype-extract-toc-with-jsx-export.ts +19 -19
  438. package/src/vite/mdx/rehype-extract-toc-with-jsx.ts +70 -70
  439. package/src/vite/mdx/remark-code-tabs.ts +47 -47
  440. package/src/vite/mdx/remark-inject-filepath.ts +13 -13
  441. package/src/vite/mdx/remark-last-modified.ts +103 -103
  442. package/src/vite/mdx/remark-link-rewrite.ts +23 -23
  443. package/src/vite/mdx/remark-normalize-image-url.ts +15 -15
  444. package/src/vite/mdx/remark-static-generation.ts +149 -149
  445. package/src/vite/mdx/utils.ts +32 -32
  446. package/src/vite/output.ts +261 -261
  447. package/src/vite/package-root.ts +12 -12
  448. package/src/vite/pagefind-dev-index.ts +100 -100
  449. package/src/vite/plugin-api-keys.ts +6 -1
  450. package/src/vite/plugin-api.ts +4 -1
  451. package/src/vite/plugin-auth.ts +5 -1
  452. package/src/vite/plugin-component.ts +1 -1
  453. package/src/vite/plugin-config-reload.ts +49 -49
  454. package/src/vite/plugin-doc-metadata.ts +45 -45
  455. package/src/vite/plugin-docs.ts +4 -1
  456. package/src/vite/plugin-metadata.ts +30 -30
  457. package/src/vite/plugin-modules.ts +144 -0
  458. package/src/vite/plugin-shiki-register.ts +97 -97
  459. package/src/vite/plugin-theme.ts +399 -399
  460. package/src/vite/plugin.ts +2 -0
  461. package/src/vite/prerender/utils.ts +76 -76
  462. package/src/vite/prerender/worker.ts +118 -118
  463. package/src/vite/reporter.ts +34 -34
  464. package/src/vite/shadcn-registry.ts +48 -48
  465. package/src/vite/sitemap.ts +78 -78
  466. package/src/vite/ssr-templates/cloudflare.ts +19 -19
  467. package/src/vite/ssr-templates/node.ts +25 -25
  468. package/src/vite/ssr-templates/vercel.ts +22 -22
  469. package/src/vite/zuplo.ts +30 -30
  470. package/src/vite-env.d.ts +6 -6
  471. package/src/zuplo/enrich-with-zuplo-mcp.ts +168 -168
  472. package/src/zuplo/enrich-with-zuplo.ts +256 -256
  473. package/src/zuplo/policy-types.ts +46 -46
  474. package/src/zuplo/with-zuplo-processors.ts +36 -36
  475. package/src/zuplo/with-zuplo.ts +14 -14
  476. package/LICENSE.md +0 -18
  477. package/dist/declarations/lib/components/navigation/ZudokuLogo.d.ts +0 -6
@@ -0,0 +1,44 @@
1
+ ---
2
+ sidebar_icon: bug
3
+ ---
4
+
5
+ # Sentry
6
+
7
+ Sentry is a popular error tracking tool that helps you monitor and fix crashes in real time. It
8
+ provides you with detailed error reports, so you can quickly identify and resolve issues before they
9
+ affect your users.
10
+
11
+ ## Enable Sentry
12
+
13
+ 1. To enable it you have to first install the optional dependency `@sentry/react`.
14
+
15
+ ```bash
16
+ npm install --save @sentry/react
17
+ ```
18
+
19
+ 2. And then set the `SENTRY_DSN` environment variable in your APIToGo project.
20
+
21
+ ```bash
22
+
23
+ SENTRY_DSN=https://your-sentry-dsn
24
+ ```
25
+
26
+ ## Release management
27
+
28
+ However this does not handle release management for you. For that you can
29
+ [create a custom `vite.config.ts`](./vite-config) and use the `@sentry/vite-plugin` plugin.
30
+
31
+ ```ts
32
+ import { sentryVitePlugin } from "@sentry/vite-plugin";
33
+ import { defineConfig } from "vite";
34
+
35
+ export default defineConfig({
36
+ plugins: [
37
+ sentryVitePlugin({
38
+ authToken: "your-token",
39
+ org: "your-org",
40
+ project: "your-project",
41
+ }),
42
+ ],
43
+ });
44
+ ```
@@ -0,0 +1,124 @@
1
+ ---
2
+ sidebar_label: Branding & Layout
3
+ sidebar_icon: layout-dashboard
4
+ description:
5
+ Customize your APIToGo site's branding, logo, banner, and layout options with detailed
6
+ configuration examples and guidance.
7
+ ---
8
+
9
+ # Branding & Layout
10
+
11
+ We offer you to customize the main aspects of your APIToGo site's appearance and behavior.
12
+
13
+ ## Branding
14
+
15
+ **Title**, **logo** can be configured in under the `site` property:
16
+
17
+ ```tsx title=apitogo.config.tsx
18
+ const config = {
19
+ site: {
20
+ title: "My API Documentation",
21
+ logo: {
22
+ src: {
23
+ light: "/path/to/light-logo.png",
24
+ dark: "/path/to/dark-logo.png",
25
+ },
26
+ alt: "Company Logo",
27
+ href: "/",
28
+ },
29
+ // Other options...
30
+ },
31
+ };
32
+ ```
33
+
34
+ ### Available Options
35
+
36
+ #### Title
37
+
38
+ Set the title of your site next to the logo in the header:
39
+
40
+ ```tsx title=apitogo.config.tsx
41
+ {
42
+ site: {
43
+ title: "My API Documentation",
44
+ }
45
+ }
46
+ ```
47
+
48
+ #### Logo
49
+
50
+ Configure the site's logo with different versions for light and dark themes:
51
+
52
+ ```tsx title=apitogo.config.tsx
53
+ {
54
+ site: {
55
+ logo: {
56
+ src: {
57
+ light: "/light-logo.png",
58
+ dark: "/dark-logo.png"
59
+ },
60
+ alt: "Company Logo",
61
+ width: "120px", // optional width
62
+ href: "/", // optional link target (defaults to "/")
63
+ reloadDocument: true, // optional, defaults to true
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
69
+ The `reloadDocument` option controls whether clicking the logo triggers a full page reload (`true`,
70
+ the default) or uses client-side SPA navigation (`false`). A full reload is useful when your landing
71
+ page is served by a different system (e.g. a CMS) outside of APIToGo.
72
+
73
+ #### Colors & Theme
74
+
75
+ We allow you to fully customize all colors, borders, etc - read more about it in
76
+ [Colors & Themes](/docs/customization/colors-theme)
77
+
78
+ ## Layout
79
+
80
+ ### Banner
81
+
82
+ Add a banner message to the top of the page:
83
+
84
+ ```tsx title=apitogo.config.tsx
85
+ {
86
+ site: {
87
+ banner: {
88
+ message: "Welcome to our beta documentation!",
89
+ color: "info", // "note" | "tip" | "info" | "caution" | "danger" or custom
90
+ dismissible: true
91
+ }
92
+ }
93
+ }
94
+ ```
95
+
96
+ ### Footer
97
+
98
+ The footer configuration has its own dedicated section. See the [Footer Configuration](./footer) for
99
+ details.
100
+
101
+ ## Complete Example
102
+
103
+ Here's a comprehensive example showing all available page configuration options:
104
+
105
+ ```tsx title=apitogo.config.tsx
106
+ {
107
+ site: {
108
+ title: "My API Documentation",
109
+ logo: {
110
+ src: {
111
+ light: "/images/logo-light.svg",
112
+ dark: "/images/logo-dark.svg"
113
+ },
114
+ alt: "Company Logo",
115
+ width: "100px",
116
+ },
117
+ banner: {
118
+ message: "Welcome to our documentation!",
119
+ color: "info",
120
+ dismissible: true
121
+ },
122
+ }
123
+ }
124
+ ```
@@ -0,0 +1,125 @@
1
+ ---
2
+ title: Slots
3
+ sidebar_icon: between-horizontal-start
4
+ description:
5
+ Learn how to use slots to inject custom content into predefined locations throughout your APIToGo
6
+ site.
7
+ ---
8
+
9
+ Slots provide a powerful way to inject custom content into predefined locations throughout APIToGo.
10
+ They allow you to extend the default layout and functionality without modifying the core components.
11
+
12
+ ## Configuration
13
+
14
+ You can define slots in your `apitogo.config.tsx` file using the `slots` property:
15
+
16
+ ```tsx
17
+ import type { ApitogoConfig } from "@lukoweb/apitogo";
18
+ import { Button } from "@lukoweb/apitogo/ui/Button.js";
19
+
20
+ const config: ApitogoConfig = {
21
+ // ... other config
22
+ slots: {
23
+ "head-navigation-end": () => (
24
+ <div className="flex items-center gap-2">
25
+ <Button variant="ghost" size="icon" asChild>
26
+ <a href="https://github.com/your-repo">
27
+ <GithubIcon className="w-4 h-4" />
28
+ </a>
29
+ </Button>
30
+ </div>
31
+ ),
32
+ "footer-before": <div>Custom footer content</div>,
33
+ },
34
+ };
35
+
36
+ export default config;
37
+ ```
38
+
39
+ ## Slot Types
40
+
41
+ Slots accept either:
42
+
43
+ - **React components/elements**: JSX elements
44
+ - **Function components**: Functions that return JSX elements and receive routing props
45
+
46
+ ```tsx
47
+ slots: {
48
+ // JSX element
49
+ "footer-after": <CustomFooter />,
50
+
51
+ // Function with access to routing props
52
+ "head-navigation-end": ({ navigate, location, searchParams }) => (
53
+ <Button
54
+ onClick={() => navigate('/settings')}
55
+ variant={location.pathname === '/settings' ? 'default' : 'ghost'}
56
+ >
57
+ Settings
58
+ </Button>
59
+ ),
60
+ }
61
+ ```
62
+
63
+ Functions receive an object with routing properties:
64
+
65
+ - `location` - Current route location
66
+ - `navigate` - Navigation function
67
+ - `searchParams` - URL search parameters
68
+ - `setSearchParams` - Function to update search parameters
69
+ - `params` - Route parameters
70
+
71
+ ## Type Safety
72
+
73
+ APIToGo provides full TypeScript support for slot names. All predefined slot names will show up with
74
+ autocomplete when you type them in your configuration.
75
+
76
+ ## Advanced Usage
77
+
78
+ For more advanced slot usage, including programmatic slot management, dynamic content, and adding
79
+ custom slot names, see the [Slot Component](/docs/components/slot) documentation.
80
+
81
+ ## Examples
82
+
83
+ ### Adding Social Links to Header
84
+
85
+ ```tsx
86
+ slots: {
87
+ "head-navigation-end": () => (
88
+ <div className="flex items-center gap-2">
89
+ <Button variant="ghost" size="icon" asChild>
90
+ <a href="https://github.com/your-org" target="_blank">
91
+ <GithubIcon className="w-4 h-4" />
92
+ </a>
93
+ </Button>
94
+ <Button variant="ghost" size="icon" asChild>
95
+ <a href="https://discord.gg/your-server" target="_blank">
96
+ <DiscordIcon className="w-4 h-4" />
97
+ </a>
98
+ </Button>
99
+ </div>
100
+ ),
101
+ }
102
+ ```
103
+
104
+ ### Dynamic Content with Routing
105
+
106
+ ```tsx
107
+ slots: {
108
+ "top-navigation-side": ({ location, navigate }) => (
109
+ <div className="flex items-center gap-2">
110
+ <Button
111
+ variant={location.pathname === '/docs' ? 'default' : 'ghost'}
112
+ onClick={() => navigate('/docs')}
113
+ >
114
+ Documentation
115
+ </Button>
116
+ <Button
117
+ variant={location.pathname === '/api' ? 'default' : 'ghost'}
118
+ onClick={() => navigate('/api')}
119
+ >
120
+ API Reference
121
+ </Button>
122
+ </div>
123
+ ),
124
+ }
125
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: Vite Config
3
+ sidebar_icon: server-crash
4
+ ---
5
+
6
+ APIToGo is built on top of [Vite](https://vite.dev/) and can be customized using a
7
+ [Vite configuration file](https://vite.dev/config/) if advanced functionality is required.
8
+
9
+ Not all configurations are supported in APIToGo, but common tasks like adding plugins will generally
10
+ work as expected. Simply create a `vite.config.ts` file in the root of your project and set the
11
+ configuration options as needed.
12
+
13
+ APIToGo will automatically pick up the configuration file and will use it to augment the built-in
14
+ configuration.
15
+
16
+ You can find an
17
+ [example project](https://github.com/lukoweb/apitogo-doc-tool/tree/main/examples/with-vite-config)
18
+ on GitHub that demonstrates how to use a custom Vite configuration with APIToGo.
@@ -0,0 +1,285 @@
1
+ ---
2
+ title: Custom Plugins
3
+ sidebar_icon: list-end
4
+ ---
5
+
6
+ APIToGo is highly extensible. You can create custom plugins to add new functionality to your
7
+ documentation site. This guide will show you how to create and use plugins in your APIToGo
8
+ configuration.
9
+
10
+ ## Plugin Types
11
+
12
+ All plugins in APIToGo must implement the `ApitogoPlugin` type, which is a union of these plugin
13
+ interfaces:
14
+
15
+ - **CommonPlugin**: Basic plugin with initialization, head elements, and MDX component customization
16
+ - **ProfileMenuPlugin**: Add custom items to the profile menu
17
+ - **NavigationPlugin**: Define custom routes and sidebar items
18
+ - **ApiIdentityPlugin**: Provide API identities for testing
19
+ - **SearchProviderPlugin**: Implement custom search functionality
20
+ - **EventConsumerPlugin**: Handle custom events
21
+ - **TransformConfigPlugin**: Modify configuration at build-time
22
+
23
+ ## Defining Plugins
24
+
25
+ You can define plugins in your APIToGo configuration using objects with explicit type declarations:
26
+
27
+ ### Common Plugin Example
28
+
29
+ ```tsx
30
+ import type { ApitogoPlugin } from "@lukoweb/apitogo";
31
+
32
+ const commonPlugin: ApitogoPlugin = {
33
+ initialize: async (context) => {
34
+ // Initialization logic
35
+ },
36
+ getHead: () => <link rel="stylesheet" href="/custom-styles.css" />,
37
+ getMdxComponents: () => ({
38
+ // Custom MDX components
39
+ }),
40
+ };
41
+
42
+ const config: ApitogoConfig = {
43
+ // ... other config
44
+ plugins: [commonPlugin],
45
+ };
46
+ ```
47
+
48
+ ### API Identity Plugin Example
49
+
50
+ ```tsx
51
+ import type { ApitogoPlugin, ApiIdentity } from "@lukoweb/apitogo";
52
+
53
+ const apiIdentityPlugin: ApitogoPlugin = {
54
+ getIdentities: async (context) => {
55
+ return [
56
+ {
57
+ label: "Test User",
58
+ id: "test-user",
59
+ authorizeRequest: (request: Request) => {
60
+ request.headers.set("Authorization", "Bearer test-token");
61
+ return request;
62
+ },
63
+ },
64
+ ] as ApiIdentity[];
65
+ },
66
+ };
67
+
68
+ // In your apitogo.config.tsx
69
+ const config: ApitogoConfig = {
70
+ // ... other config
71
+ plugins: [apiIdentityPlugin],
72
+ };
73
+ ```
74
+
75
+ ## Example Implementations
76
+
77
+ Here are some common plugin implementations:
78
+
79
+ ### Google Tag Manager
80
+
81
+ Below is a sample of adding the necessary scripts for GTM, but this could apply to any tag manager
82
+ or tracking script.
83
+
84
+ ```tsx
85
+ import type { ApitogoPlugin } from "@lukoweb/apitogo";
86
+
87
+ const commonPlugin: ApitogoPlugin = {
88
+ getHead: () => {
89
+ return (
90
+ <script>
91
+ {`
92
+ (function (w, d, s, l, i) {
93
+ w[l] = w[l] || [];
94
+ w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
95
+ var f = d.getElementsByTagName(s)[0],
96
+ j = d.createElement(s),
97
+ dl = l != "dataLayer" ? "&l=" + l : "";
98
+ j.async = true;
99
+ j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
100
+ f.parentNode.insertBefore(j, f);
101
+ })(window, document, "script", "dataLayer", "GTM-<YOUR GTM ID HERE>");`}
102
+ </script>
103
+ );
104
+ },
105
+ };
106
+ ```
107
+
108
+ #### Tracking `page_view` Events
109
+
110
+ APIToGo is a single page application so typical `page_view` events are not captured by most
111
+ analytics scripts or tag managers. Instead, you must listen to the `location`
112
+ [event](./extending/events.md) with a plugin and log navigation changes in code.
113
+
114
+ ```tsx
115
+ import type { ApitogoPlugin } from "@lukoweb/apitogo";
116
+
117
+ const navigationLoggerPlugin: ApitogoPlugin = {
118
+ events: {
119
+ location: ({ from, to }) => {
120
+ if (!from) return;
121
+ window.dataLayer.push({
122
+ event: "page_view",
123
+ page_path: to.pathname,
124
+ page_title: document.title,
125
+ page_location: window.location.href,
126
+ });
127
+ },
128
+ },
129
+ };
130
+ ```
131
+
132
+ If you are using TypeScript, you will also need to add the following type declaration to the file
133
+ this plugin is declared
134
+
135
+ ```ts
136
+ declare global {
137
+ interface Window {
138
+ dataLayer: Record<string, any>[];
139
+ }
140
+ }
141
+ ```
142
+
143
+ ### Navigation Plugin
144
+
145
+ ```tsx
146
+ import type { ApitogoPlugin, RouteObject } from "@lukoweb/apitogo";
147
+
148
+ const navigationPlugin: ApitogoPlugin = {
149
+ getRoutes: (): RouteObject[] => {
150
+ return [
151
+ {
152
+ path: "/custom",
153
+ element: <CustomPage />,
154
+ },
155
+ ];
156
+ },
157
+ getSidebar: async (path: string) => {
158
+ // Return custom sidebar items
159
+ return {
160
+ items: [{ id: "custom", label: "Custom Page" }],
161
+ };
162
+ },
163
+ };
164
+ ```
165
+
166
+ ### Wrapping Routes with Context or Layout
167
+
168
+ You can wrap your plugin's routes with a context provider or custom layout using React Router's
169
+ nested route pattern. The parent route renders an `<Outlet />` where child routes will appear.
170
+
171
+ ```tsx
172
+ import { createContext, useContext } from "react";
173
+ import type { ApitogoPlugin, RouteObject } from "@lukoweb/apitogo";
174
+ import { Outlet } from "@lukoweb/apitogo/router";
175
+
176
+ const MyContext = createContext("value");
177
+
178
+ const pluginWithContext: ApitogoPlugin = {
179
+ getRoutes: () => [
180
+ {
181
+ element: (
182
+ <MyContext.Provider value="hello">
183
+ <Outlet />
184
+ </MyContext.Provider>
185
+ ),
186
+ children: [
187
+ { path: "/custom", element: <CustomPage /> },
188
+ { path: "/custom/nested", element: <NestedPage /> },
189
+ ],
190
+ },
191
+ ],
192
+ };
193
+ ```
194
+
195
+ All child routes will have access to `MyContext`. This pattern works for any wrapper including
196
+ layouts, error boundaries, or data providers.
197
+
198
+ ### Dropdown Navigation Plugin
199
+
200
+ ```tsx
201
+ import type { ApitogoPlugin, RouteObject } from "@lukoweb/apitogo";
202
+ import { UserIcon } from "@lukoweb/apitogo/icons";
203
+
204
+ const AccountPageNavItemPlugin: ApitogoPlugin = {
205
+ getRoutes: (): RouteObject[] => {
206
+ return [
207
+ {
208
+ path: "/account",
209
+ element: <Account />, // This is a custom page
210
+ },
211
+ ];
212
+ },
213
+ getProfileMenuItems: () => {
214
+ return [
215
+ {
216
+ label: "Account",
217
+ path: "/account",
218
+ category: "middle",
219
+ icon: UserIcon,
220
+ },
221
+ ];
222
+ },
223
+ };
224
+ ```
225
+
226
+ ### Event Consumer Plugin
227
+
228
+ ```tsx
229
+ import type { ApitogoPlugin } from "@lukoweb/apitogo";
230
+
231
+ const eventConsumerPlugin: ApitogoPlugin = {
232
+ events: {
233
+ location: ({ from, to }) => {
234
+ if (!from) {
235
+ console.log(`Initial navigation to: ${to.pathname}`);
236
+ } else {
237
+ console.log(`Navigation from ${from.pathname} to ${to.pathname}`);
238
+ }
239
+ },
240
+ },
241
+ };
242
+ ```
243
+
244
+ ### Transform Config Plugin
245
+
246
+ The `transformConfig` hook allows plugins to modify the APIToGo configuration at build-time. This is
247
+ useful for dynamically adding navigation items, modifying theme settings, or adjusting any other
248
+ configuration based on external data or conditions.
249
+
250
+ ```tsx
251
+ import type { ApitogoPlugin } from "@lukoweb/apitogo";
252
+
253
+ const transformConfigPlugin: ApitogoPlugin = {
254
+ transformConfig: ({ config, merge }) => {
255
+ // Option 1: Use merge helper for deep merging
256
+ return merge({
257
+ slots: {
258
+ "head-navigation-start": () => <a href="/pricing">Pricing</a>,
259
+ },
260
+ });
261
+
262
+ // Option 2: Manual spread for full control
263
+ return {
264
+ ...config,
265
+ navigation: [
266
+ ...(config.navigation ?? []),
267
+ {
268
+ type: "link",
269
+ label: "System Status",
270
+ to: "https://status.example.com",
271
+ icon: "activity",
272
+ },
273
+ ],
274
+ };
275
+ },
276
+ };
277
+ ```
278
+
279
+ The `transformConfig` function receives an object with:
280
+
281
+ - **config**: The current APIToGo configuration object
282
+ - **merge**: A helper function that deep merges a partial config with the current config
283
+
284
+ The function must return a full configuration object (either via `merge()` or manual spreading), or
285
+ `void` to make no changes. The hook can also be async.