@lukoweb/apitogo 0.1.24 → 0.1.37
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.
- package/README.md +92 -0
- package/cli.js +13 -13
- package/client.d.ts +8 -8
- package/dist/cli/cli.js +1117 -624
- package/dist/declarations/config/config.d.ts +4 -0
- package/dist/declarations/config/loader.d.ts +2 -0
- package/dist/declarations/config/resolve-modules.d.ts +34 -0
- package/dist/declarations/config/validators/InputNavigationSchema.d.ts +7 -7
- package/dist/declarations/config/validators/ModulesSchema.d.ts +417 -0
- package/dist/declarations/config/validators/ZudokuConfig.d.ts +123 -4
- package/dist/declarations/index.d.ts +3 -1
- package/dist/declarations/lib/authentication/components/ProductionUnlockPage.d.ts +1 -0
- package/dist/declarations/lib/authentication/hook.d.ts +3 -19
- package/dist/declarations/lib/authentication/providers/dev-portal-constants.d.ts +16 -0
- package/dist/declarations/lib/authentication/providers/dev-portal-utils.d.ts +9 -0
- package/dist/declarations/lib/authentication/providers/dev-portal.d.ts +39 -0
- package/dist/declarations/lib/authentication/state.d.ts +12 -26
- package/dist/declarations/lib/components/LandingLayout.d.ts +4 -0
- package/dist/declarations/lib/components/index.d.ts +2 -0
- package/dist/declarations/lib/plugins/api-keys/index.d.ts +2 -1
- package/dist/flat-config.d.ts +209 -24
- package/docs/components/alert.mdx +130 -0
- package/docs/components/badge.mdx +70 -0
- package/docs/components/button.mdx +132 -0
- package/docs/components/callout.mdx +112 -0
- package/docs/components/card.mdx +104 -0
- package/docs/components/checkbox.mdx +72 -0
- package/docs/components/client-only.mdx +79 -0
- package/docs/components/code-tabs.mdx +179 -0
- package/docs/components/dialog.mdx +167 -0
- package/docs/components/head.mdx +200 -0
- package/docs/components/icons.mdx +27 -0
- package/docs/components/input.mdx +96 -0
- package/docs/components/label.mdx +86 -0
- package/docs/components/link.mdx +242 -0
- package/docs/components/markdown.mdx +151 -0
- package/docs/components/mermaid.mdx +81 -0
- package/docs/components/playground.mdx +87 -0
- package/docs/components/secret.mdx +79 -0
- package/docs/components/select.mdx +176 -0
- package/docs/components/shadcn.mdx +73 -0
- package/docs/components/slider.mdx +108 -0
- package/docs/components/slot.mdx +119 -0
- package/docs/components/stepper.mdx +138 -0
- package/docs/components/switch.mdx +96 -0
- package/docs/components/syntax-highlight.mdx +602 -0
- package/docs/components/textarea.mdx +78 -0
- package/docs/components/tooltip.mdx +195 -0
- package/docs/components/typography.mdx +61 -0
- package/docs/concepts/auth-provider-api-identities.md +109 -0
- package/docs/configuration/ai-assistants.md +65 -0
- package/docs/configuration/api-catalog.md +109 -0
- package/docs/configuration/api-reference.md +397 -0
- package/docs/configuration/authentication-auth0.md +174 -0
- package/docs/configuration/authentication-azure-ad.md +238 -0
- package/docs/configuration/authentication-clerk.md +110 -0
- package/docs/configuration/authentication-firebase.md +62 -0
- package/docs/configuration/authentication-pingfederate.md +136 -0
- package/docs/configuration/authentication-supabase.md +226 -0
- package/docs/configuration/authentication.md +231 -0
- package/docs/configuration/build-configuration.mdx +147 -0
- package/docs/configuration/docs.md +282 -0
- package/docs/configuration/footer.mdx +214 -0
- package/docs/configuration/llms.md +90 -0
- package/docs/configuration/make-config.mdx +90 -0
- package/docs/configuration/navigation.mdx +422 -0
- package/docs/configuration/overview.md +380 -0
- package/docs/configuration/protected-routes.md +150 -0
- package/docs/configuration/search.md +163 -0
- package/docs/configuration/sentry.mdx +44 -0
- package/docs/configuration/site.md +124 -0
- package/docs/configuration/slots.mdx +125 -0
- package/docs/configuration/vite-config.md +18 -0
- package/docs/custom-plugins.md +285 -0
- package/docs/customization/colors-theme.mdx +276 -0
- package/docs/customization/fonts.md +110 -0
- package/docs/deploy/apache-nginx.md +41 -0
- package/docs/deploy/apitogo.md +139 -0
- package/docs/deploy/cloudflare-pages.md +75 -0
- package/docs/deploy/direct-upload.md +18 -0
- package/docs/deploy/github-pages.md +50 -0
- package/docs/deploy/vercel.md +103 -0
- package/docs/deployment.md +21 -0
- package/docs/extending/events.md +124 -0
- package/docs/guides/custom-pages.md +106 -0
- package/docs/guides/environment-variables.md +99 -0
- package/docs/guides/managing-api-keys-and-identities.md +172 -0
- package/docs/guides/mermaid.mdx +70 -0
- package/docs/guides/navigation-migration.md +87 -0
- package/docs/guides/navigation-rules.mdx +203 -0
- package/docs/guides/processors.mdx +234 -0
- package/docs/guides/static-files.md +55 -0
- package/docs/guides/transforming-examples.md +156 -0
- package/docs/guides/using-multiple-apis.md +87 -0
- package/docs/markdown/admonitions.md +128 -0
- package/docs/markdown/code-blocks.md +196 -0
- package/docs/markdown/frontmatter.md +173 -0
- package/docs/markdown/mdx.md +68 -0
- package/docs/markdown/overview.md +275 -0
- package/docs/plugins.md +5 -0
- package/docs/quickstart.md +87 -0
- package/docs/writing.mdx +72 -0
- package/package.json +170 -116
- package/src/app/ZuploBuildConfig.ts +36 -36
- package/src/app/defaultTheme.css +77 -77
- package/src/app/demo-cdn.html +37 -37
- package/src/app/demo.html +21 -21
- package/src/app/demo.tsx +77 -77
- package/src/app/entry.client.tsx +118 -118
- package/src/app/entry.server.tsx +160 -160
- package/src/app/env.ts +40 -40
- package/src/app/font.geist.css +73 -73
- package/src/app/main.css +390 -390
- package/src/app/main.tsx +8 -1
- package/src/app/polyfills.ts +47 -47
- package/src/app/processRoutes.tsx +51 -25
- package/src/app/sentry.ts +24 -24
- package/src/app/standalone.html +23 -23
- package/src/app/standalone.tsx +60 -60
- package/src/app/utils/createRedirectRoutes.ts +11 -11
- package/src/config/config.ts +32 -0
- package/src/config/create-plugin.ts +71 -71
- package/src/config/file-exists.ts +6 -6
- package/src/config/loader.ts +11 -1
- package/src/config/resolve-modules.ts +260 -0
- package/src/config/validators/BuildSchema.ts +95 -95
- package/src/config/validators/HeaderNavigationSchema.ts +41 -41
- package/src/config/validators/InputNavigationSchema.test-d.ts +178 -178
- package/src/config/validators/InputNavigationSchema.ts +206 -206
- package/src/config/validators/ModulesSchema.ts +312 -0
- package/src/config/validators/ProtectedRoutesSchema.ts +35 -35
- package/src/config/validators/ZudokuConfig.ts +766 -729
- package/src/config/validators/auth.ts +3 -3
- package/src/config/validators/reason-codes.ts +7 -7
- package/src/env.d.ts +11 -11
- package/src/index.ts +31 -0
- package/src/lib/MissingIcon.tsx +22 -22
- package/src/lib/assets/language-icons/bun.tsx +50 -50
- package/src/lib/assets/language-icons/c.tsx +31 -31
- package/src/lib/assets/language-icons/commonlisp.tsx +22 -22
- package/src/lib/assets/language-icons/cpp.tsx +35 -35
- package/src/lib/assets/language-icons/csharp.tsx +35 -35
- package/src/lib/assets/language-icons/css.tsx +36 -36
- package/src/lib/assets/language-icons/dart.tsx +39 -39
- package/src/lib/assets/language-icons/elixir.tsx +19 -19
- package/src/lib/assets/language-icons/go.tsx +19 -19
- package/src/lib/assets/language-icons/graphql.tsx +19 -19
- package/src/lib/assets/language-icons/html.tsx +24 -24
- package/src/lib/assets/language-icons/java.tsx +35 -35
- package/src/lib/assets/language-icons/javascript.tsx +11 -11
- package/src/lib/assets/language-icons/json.tsx +19 -19
- package/src/lib/assets/language-icons/kotlin.tsx +30 -30
- package/src/lib/assets/language-icons/markdown.tsx +19 -19
- package/src/lib/assets/language-icons/mdx.tsx +23 -23
- package/src/lib/assets/language-icons/npm.tsx +15 -15
- package/src/lib/assets/language-icons/objectivec.tsx +23 -23
- package/src/lib/assets/language-icons/ocaml.tsx +34 -34
- package/src/lib/assets/language-icons/php.tsx +19 -19
- package/src/lib/assets/language-icons/pnpm.tsx +32 -32
- package/src/lib/assets/language-icons/powershell.tsx +27 -27
- package/src/lib/assets/language-icons/python.tsx +23 -23
- package/src/lib/assets/language-icons/react.tsx +21 -21
- package/src/lib/assets/language-icons/ruby.tsx +19 -19
- package/src/lib/assets/language-icons/rust.tsx +19 -19
- package/src/lib/assets/language-icons/scala.tsx +19 -19
- package/src/lib/assets/language-icons/shell.tsx +19 -19
- package/src/lib/assets/language-icons/swift.tsx +19 -19
- package/src/lib/assets/language-icons/toml.tsx +23 -23
- package/src/lib/assets/language-icons/typescript.tsx +23 -23
- package/src/lib/assets/language-icons/xml.tsx +19 -19
- package/src/lib/assets/language-icons/yaml.tsx +23 -23
- package/src/lib/assets/language-icons/yarn.tsx +17 -17
- package/src/lib/assets/language-icons/zig.tsx +32 -32
- package/src/lib/auth/issuer.ts +34 -31
- package/src/lib/authentication/AuthenticationPlugin.tsx +33 -33
- package/src/lib/authentication/authentication.ts +48 -48
- package/src/lib/authentication/components/OAuthErrorPage.tsx +197 -197
- package/src/lib/authentication/components/ProductionUnlockPage.tsx +27 -0
- package/src/lib/authentication/components/SignOut.tsx +15 -15
- package/src/lib/authentication/constants.ts +1 -1
- package/src/lib/authentication/errors.ts +34 -34
- package/src/lib/authentication/hook.ts +141 -139
- package/src/lib/authentication/providers/auth0.tsx +91 -91
- package/src/lib/authentication/providers/azureb2c.tsx +223 -223
- package/src/lib/authentication/providers/dev-portal-constants.ts +21 -0
- package/src/lib/authentication/providers/dev-portal-utils.ts +107 -0
- package/src/lib/authentication/providers/dev-portal.tsx +270 -0
- package/src/lib/authentication/providers/firebase.tsx +486 -486
- package/src/lib/authentication/providers/openid.tsx +516 -516
- package/src/lib/authentication/providers/supabase.tsx +412 -412
- package/src/lib/authentication/providers/util.ts +26 -26
- package/src/lib/authentication/state.ts +179 -91
- package/src/lib/authentication/ui/icons/Apple.tsx +10 -10
- package/src/lib/authentication/ui/icons/Facebook.tsx +15 -15
- package/src/lib/authentication/ui/icons/Github.tsx +16 -16
- package/src/lib/authentication/ui/icons/Google.tsx +16 -16
- package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -12
- package/src/lib/authentication/ui/icons/X.tsx +10 -10
- package/src/lib/authentication/utils/relativeRedirectUrl.ts +16 -16
- package/src/lib/components/AnchorLink.tsx +24 -24
- package/src/lib/components/Banner.tsx +52 -52
- package/src/lib/components/Bootstrap.tsx +77 -77
- package/src/lib/components/BuildCheck.tsx +87 -87
- package/src/lib/components/CategoryHeading.tsx +19 -19
- package/src/lib/components/ClientOnly.tsx +19 -19
- package/src/lib/components/ErrorPage.tsx +26 -26
- package/src/lib/components/Footer.tsx +140 -140
- package/src/lib/components/Framed.tsx +51 -51
- package/src/lib/components/Header.tsx +11 -3
- package/src/lib/components/HeaderNavigation.tsx +148 -148
- package/src/lib/components/Heading.tsx +84 -84
- package/src/lib/components/InlineCode.tsx +15 -15
- package/src/lib/components/LandingLayout.tsx +21 -0
- package/src/lib/components/LanguageIcon.tsx +199 -199
- package/src/lib/components/Markdown.tsx +55 -55
- package/src/lib/components/Meta.tsx +46 -46
- package/src/lib/components/MobileTopNavigation.tsx +11 -3
- package/src/lib/components/NotFoundPage.tsx +37 -37
- package/src/lib/components/PageProgress.tsx +28 -28
- package/src/lib/components/PagefindSearchMeta.tsx +14 -14
- package/src/lib/components/Pagination.tsx +44 -44
- package/src/lib/components/PathRenderer.tsx +61 -61
- package/src/lib/components/PluginHeads.tsx +17 -17
- package/src/lib/components/Search.tsx +70 -70
- package/src/lib/components/Slot.tsx +64 -64
- package/src/lib/components/Spinner.tsx +5 -5
- package/src/lib/components/StatusPage.tsx +96 -96
- package/src/lib/components/ThemeSwitch.tsx +49 -49
- package/src/lib/components/Typography.tsx +12 -12
- package/src/lib/components/Zudoku.tsx +106 -106
- package/src/lib/components/cache.ts +27 -27
- package/src/lib/components/context/RenderContext.ts +11 -11
- package/src/lib/components/context/RouterEventsEmitter.tsx +19 -19
- package/src/lib/components/context/SlotProvider.tsx +149 -149
- package/src/lib/components/context/ViewportAnchorContext.tsx +137 -137
- package/src/lib/components/context/ZudokuContext.ts +140 -140
- package/src/lib/components/context/ZudokuProvider.tsx +22 -22
- package/src/lib/components/context/ZudokuReactContext.tsx +17 -17
- package/src/lib/components/index.ts +2 -0
- package/src/lib/components/navigation/Navigation.tsx +51 -51
- package/src/lib/components/navigation/NavigationBadge.tsx +48 -48
- package/src/lib/components/navigation/NavigationFilterContext.tsx +28 -28
- package/src/lib/components/navigation/NavigationWrapper.tsx +49 -49
- package/src/lib/components/navigation/Toc.tsx +137 -137
- package/src/lib/components/navigation/ZudokuLogo.tsx +25 -25
- package/src/lib/components/navigation/ZuploLogo.tsx +14 -14
- package/src/lib/components/navigation/utils.ts +234 -234
- package/src/lib/core/RouteGuard.tsx +11 -1
- package/src/lib/core/ZudokuContext.ts +271 -271
- package/src/lib/core/plugins.ts +138 -138
- package/src/lib/core/react-query.ts +1 -1
- package/src/lib/core/router.ts +1 -1
- package/src/lib/core/transform-config.ts +67 -67
- package/src/lib/demo/DemoAnnouncement.tsx +17 -17
- package/src/lib/errors/ErrorAlert.tsx +28 -28
- package/src/lib/errors/RouterError.tsx +18 -18
- package/src/lib/errors/ServerError.tsx +5 -5
- package/src/lib/errors/TopLevelError.tsx +6 -6
- package/src/lib/hooks/index.ts +13 -13
- package/src/lib/hooks/useEvent.ts +41 -41
- package/src/lib/hooks/useHighlighter.ts +15 -15
- package/src/lib/hooks/useHotkey.ts +70 -70
- package/src/lib/icons.ts +2 -2
- package/src/lib/navigation/applyRules.ts +127 -127
- package/src/lib/navigation/pathMatcher.ts +81 -81
- package/src/lib/oas/graphql/circular.ts +69 -69
- package/src/lib/oas/graphql/constants.ts +2 -2
- package/src/lib/oas/graphql/index.ts +791 -791
- package/src/lib/oas/parser/dereference/index.ts +84 -84
- package/src/lib/oas/parser/dereference/resolveRef.ts +32 -32
- package/src/lib/oas/parser/index.ts +129 -129
- package/src/lib/oas/parser/schemas/v3.0.json +1489 -1489
- package/src/lib/oas/parser/schemas/v3.1.json +1298 -1298
- package/src/lib/oas/parser/upgrade/index.ts +174 -174
- package/src/lib/plugins/api-catalog/index.tsx +119 -119
- package/src/lib/plugins/api-keys/ProtectedRoute.tsx +33 -33
- package/src/lib/plugins/api-keys/index.tsx +274 -272
- package/src/lib/plugins/api-keys/settings/ApiKeyList.tsx +67 -67
- package/src/lib/plugins/custom-pages/index.tsx +32 -32
- package/src/lib/plugins/markdown/assets/ChatGPTLogo.tsx +11 -11
- package/src/lib/plugins/markdown/assets/ClaudeLogo.tsx +19 -19
- package/src/lib/plugins/markdown/index.tsx +62 -62
- package/src/lib/plugins/openapi/ColorizedParam.tsx +115 -115
- package/src/lib/plugins/openapi/Endpoint.tsx +85 -85
- package/src/lib/plugins/openapi/MCPEndpoint.tsx +273 -273
- package/src/lib/plugins/openapi/OasProvider.tsx +74 -74
- package/src/lib/plugins/openapi/OperationList.tsx +275 -275
- package/src/lib/plugins/openapi/ParamInfos.tsx +96 -96
- package/src/lib/plugins/openapi/ParameterList.tsx +53 -53
- package/src/lib/plugins/openapi/ParameterListItem.tsx +161 -161
- package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +67 -67
- package/src/lib/plugins/openapi/SidecarBox.tsx +57 -57
- package/src/lib/plugins/openapi/SimpleSelect.tsx +46 -46
- package/src/lib/plugins/openapi/client/GraphQLClient.tsx +73 -73
- package/src/lib/plugins/openapi/client/GraphQLContext.tsx +16 -16
- package/src/lib/plugins/openapi/client/createServer.ts +35 -35
- package/src/lib/plugins/openapi/client/useCreateQuery.ts +44 -44
- package/src/lib/plugins/openapi/components/ConstValue.tsx +24 -24
- package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -22
- package/src/lib/plugins/openapi/components/SelectOnClick.tsx +29 -29
- package/src/lib/plugins/openapi/context.tsx +16 -16
- package/src/lib/plugins/openapi/graphql/fragment-masking.ts +104 -104
- package/src/lib/plugins/openapi/graphql/gql.ts +95 -95
- package/src/lib/plugins/openapi/graphql/graphql.ts +835 -835
- package/src/lib/plugins/openapi/graphql/index.ts +2 -2
- package/src/lib/plugins/openapi/index.tsx +221 -221
- package/src/lib/plugins/openapi/interfaces.ts +100 -100
- package/src/lib/plugins/openapi/playground/Headers.tsx +6 -6
- package/src/lib/plugins/openapi/playground/PathParams.tsx +53 -53
- package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -87
- package/src/lib/plugins/openapi/playground/createUrl.ts +25 -25
- package/src/lib/plugins/openapi/playground/fileUtils.ts +36 -36
- package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -26
- package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -31
- package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +29 -29
- package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +340 -340
- package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +117 -117
- package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts +36 -36
- package/src/lib/plugins/openapi/playground/serializeQueryParams.ts +125 -125
- package/src/lib/plugins/openapi/playground/useRememberSkipLoginDialog.tsx +23 -23
- package/src/lib/plugins/openapi/processors/removeExtensions.ts +29 -29
- package/src/lib/plugins/openapi/processors/removeParameters.ts +103 -103
- package/src/lib/plugins/openapi/processors/removePaths.ts +57 -57
- package/src/lib/plugins/openapi/processors/traverse.ts +1 -1
- package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +39 -39
- package/src/lib/plugins/openapi/schema/UnionView.tsx +132 -132
- package/src/lib/plugins/openapi/schema/union-helpers.ts +123 -123
- package/src/lib/plugins/openapi/schema/utils.ts +49 -49
- package/src/lib/plugins/openapi/state.ts +36 -36
- package/src/lib/plugins/openapi/util/buildTagCategories.ts +54 -54
- package/src/lib/plugins/openapi/util/createHttpSnippet.ts +135 -135
- package/src/lib/plugins/openapi/util/createNavigationCategory.tsx +39 -39
- package/src/lib/plugins/openapi/util/generateSchemaExample.ts +191 -191
- package/src/lib/plugins/openapi/util/getRoutes.tsx +265 -265
- package/src/lib/plugins/openapi/util/methodColorMap.tsx +11 -11
- package/src/lib/plugins/openapi/util/methodToColor.ts +27 -27
- package/src/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.tsx +32 -32
- package/src/lib/plugins/openapi/util/useWarmupSchema.ts +23 -23
- package/src/lib/plugins/search-inkeep/index.tsx +108 -108
- package/src/lib/plugins/search-inkeep/inkeep.ts +24 -24
- package/src/lib/plugins/search-pagefind/get-results.tsx +74 -74
- package/src/lib/plugins/search-pagefind/index.tsx +21 -21
- package/src/lib/plugins/search-pagefind/types.ts +118 -118
- package/src/lib/shiki-constants.ts +24 -24
- package/src/lib/testing/index.tsx +146 -146
- package/src/lib/ui/Accordion.tsx +55 -55
- package/src/lib/ui/Alert.tsx +84 -84
- package/src/lib/ui/AlertDialog.tsx +195 -195
- package/src/lib/ui/AspectRatio.tsx +5 -5
- package/src/lib/ui/Badge.tsx +48 -48
- package/src/lib/ui/Breadcrumb.tsx +115 -115
- package/src/lib/ui/Button.tsx +65 -65
- package/src/lib/ui/ButtonGroup.tsx +80 -80
- package/src/lib/ui/Callout.tsx +113 -113
- package/src/lib/ui/Card.tsx +95 -95
- package/src/lib/ui/Carousel.tsx +259 -259
- package/src/lib/ui/Checkbox.tsx +28 -28
- package/src/lib/ui/CodeBlock.tsx +92 -92
- package/src/lib/ui/CodeTabPanel.tsx +13 -13
- package/src/lib/ui/CodeTabs.tsx +161 -161
- package/src/lib/ui/Collapsible.tsx +31 -31
- package/src/lib/ui/Dialog.tsx +138 -138
- package/src/lib/ui/DismissibleAlert.tsx +74 -74
- package/src/lib/ui/Drawer.tsx +121 -121
- package/src/lib/ui/DropdownMenu.tsx +254 -254
- package/src/lib/ui/EmbeddedCodeBlock.tsx +99 -99
- package/src/lib/ui/Form.tsx +176 -176
- package/src/lib/ui/Frame.tsx +81 -81
- package/src/lib/ui/HoverCard.tsx +26 -26
- package/src/lib/ui/Input.tsx +23 -23
- package/src/lib/ui/InputGroup.tsx +168 -168
- package/src/lib/ui/Item.tsx +213 -213
- package/src/lib/ui/Kbd.tsx +28 -28
- package/src/lib/ui/Label.tsx +23 -23
- package/src/lib/ui/NativeSelect.tsx +48 -48
- package/src/lib/ui/NavigationMenu.tsx +169 -169
- package/src/lib/ui/Pagination.tsx +115 -115
- package/src/lib/ui/Popover.tsx +28 -28
- package/src/lib/ui/Progress.tsx +25 -25
- package/src/lib/ui/RadioGroup.tsx +41 -41
- package/src/lib/ui/ReactComponentDoc.tsx +68 -68
- package/src/lib/ui/ScrollArea.tsx +45 -45
- package/src/lib/ui/Secret.tsx +133 -133
- package/src/lib/ui/Select.tsx +184 -184
- package/src/lib/ui/Separator.tsx +25 -25
- package/src/lib/ui/Skeleton.tsx +15 -15
- package/src/lib/ui/Slider.tsx +25 -25
- package/src/lib/ui/Stepper.tsx +8 -8
- package/src/lib/ui/Switch.tsx +26 -26
- package/src/lib/ui/SyntaxHighlight.tsx +54 -54
- package/src/lib/ui/Tabs.tsx +52 -52
- package/src/lib/ui/Textarea.tsx +22 -22
- package/src/lib/ui/Toggle.tsx +42 -42
- package/src/lib/ui/ToggleGroup.tsx +58 -58
- package/src/lib/ui/Tooltip.tsx +65 -65
- package/src/lib/ui/Value.tsx +42 -42
- package/src/lib/ui/util.tsx +8 -8
- package/src/lib/util/cn.ts +6 -6
- package/src/lib/util/createVariantComponent.tsx +61 -61
- package/src/lib/util/ensureArray.ts +3 -3
- package/src/lib/util/flattenAllOf.ts +72 -72
- package/src/lib/util/flattenAllOfProcessor.ts +74 -74
- package/src/lib/util/hastToJsx.tsx +67 -67
- package/src/lib/util/humanFileSize.ts +15 -15
- package/src/lib/util/invariant.ts +52 -52
- package/src/lib/util/joinUrl.ts +60 -60
- package/src/lib/util/logInit.ts +9 -9
- package/src/lib/util/objectEntries.ts +5 -5
- package/src/lib/util/os.ts +18 -18
- package/src/lib/util/pastellize.ts +25 -25
- package/src/lib/util/problemJson.ts +63 -63
- package/src/lib/util/readFrontmatter.ts +14 -14
- package/src/lib/util/renderIf.ts +4 -4
- package/src/lib/util/scrollIntoViewIfNeeded.ts +18 -18
- package/src/lib/util/slugify.ts +21 -21
- package/src/lib/util/syncZustandState.ts +22 -22
- package/src/lib/util/traverse.ts +70 -70
- package/src/lib/util/types.ts +7 -7
- package/src/lib/util/url.ts +18 -18
- package/src/lib/util/useCopyToClipboard.ts +17 -17
- package/src/lib/util/useExposedProps.tsx +27 -27
- package/src/lib/util/useIsomorphicLayoutEffect.ts +6 -6
- package/src/lib/util/useLatest.ts +18 -18
- package/src/lib/util/useOnScreen.ts +34 -34
- package/src/lib/util/useScrollToAnchor.ts +70 -70
- package/src/lib/util/useScrollToTop.ts +18 -18
- package/src/types.d.ts +57 -53
- package/src/vite/api/SchemaManager.ts +371 -371
- package/src/vite/api/schema-codegen.ts +163 -163
- package/src/vite/config.ts +5 -1
- package/src/vite/css/collect.ts +42 -42
- package/src/vite/css/plugin.ts +105 -105
- package/src/vite/debug.ts +18 -18
- package/src/vite/dev-portal-env.ts +93 -0
- package/src/vite/html.ts +54 -54
- package/src/vite/index.ts +2 -2
- package/src/vite/mdx/rehype-extract-toc-with-jsx-export.ts +19 -19
- package/src/vite/mdx/rehype-extract-toc-with-jsx.ts +70 -70
- package/src/vite/mdx/remark-code-tabs.ts +47 -47
- package/src/vite/mdx/remark-inject-filepath.ts +13 -13
- package/src/vite/mdx/remark-last-modified.ts +103 -103
- package/src/vite/mdx/remark-link-rewrite.ts +23 -23
- package/src/vite/mdx/remark-normalize-image-url.ts +15 -15
- package/src/vite/mdx/remark-static-generation.ts +149 -149
- package/src/vite/mdx/utils.ts +32 -32
- package/src/vite/output.ts +261 -261
- package/src/vite/package-root.ts +12 -12
- package/src/vite/pagefind-dev-index.ts +100 -100
- package/src/vite/plugin-api-keys.ts +6 -1
- package/src/vite/plugin-api.ts +4 -1
- package/src/vite/plugin-auth.ts +5 -1
- package/src/vite/plugin-component.ts +1 -1
- package/src/vite/plugin-config-reload.ts +49 -49
- package/src/vite/plugin-doc-metadata.ts +45 -45
- package/src/vite/plugin-docs.ts +4 -1
- package/src/vite/plugin-metadata.ts +30 -30
- package/src/vite/plugin-modules.ts +144 -0
- package/src/vite/plugin-shiki-register.ts +97 -97
- package/src/vite/plugin-theme.ts +399 -399
- package/src/vite/plugin.ts +2 -0
- package/src/vite/prerender/utils.ts +76 -76
- package/src/vite/prerender/worker.ts +118 -118
- package/src/vite/reporter.ts +34 -34
- package/src/vite/shadcn-registry.ts +48 -48
- package/src/vite/sitemap.ts +78 -78
- package/src/vite/ssr-templates/cloudflare.ts +19 -19
- package/src/vite/ssr-templates/node.ts +25 -25
- package/src/vite/ssr-templates/vercel.ts +22 -22
- package/src/vite/zuplo.ts +30 -30
- package/src/vite-env.d.ts +6 -6
- package/src/zuplo/enrich-with-zuplo-mcp.ts +168 -168
- package/src/zuplo/enrich-with-zuplo.ts +256 -256
- package/src/zuplo/policy-types.ts +46 -46
- package/src/zuplo/with-zuplo-processors.ts +36 -36
- package/src/zuplo/with-zuplo.ts +14 -14
- package/LICENSE.md +0 -18
- 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.
|