@lukoweb/apitogo 0.1.23 → 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
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
import { type ReactNode, useId, useLayoutEffect } from "react";
|
|
2
|
-
import {
|
|
3
|
-
type SlotType,
|
|
4
|
-
useRenderSlot,
|
|
5
|
-
useSlotContext,
|
|
6
|
-
} from "./context/SlotProvider.js";
|
|
7
|
-
|
|
8
|
-
// This is to augment the type of the Slot component with custom slot names
|
|
9
|
-
// This is useful for plugins to add custom slots to the Zudoku context
|
|
10
|
-
// and for the user to use them in their own components
|
|
11
|
-
export type CustomSlotNames = never;
|
|
12
|
-
|
|
13
|
-
type PredefinedSlotNames =
|
|
14
|
-
| "api-keys-list-page"
|
|
15
|
-
| "api-keys-list-page-before-keys"
|
|
16
|
-
| "footer-after"
|
|
17
|
-
| "footer-before"
|
|
18
|
-
| "head-navigation-end"
|
|
19
|
-
| "head-navigation-start"
|
|
20
|
-
| "layout-after-head"
|
|
21
|
-
| "layout-before-head"
|
|
22
|
-
| "top-navigation-after"
|
|
23
|
-
| "top-navigation-before"
|
|
24
|
-
| "top-navigation-side"
|
|
25
|
-
| "content-before"
|
|
26
|
-
| "content-after"
|
|
27
|
-
| "navigation-after"
|
|
28
|
-
| "navigation-before";
|
|
29
|
-
|
|
30
|
-
export type SlotName = PredefinedSlotNames | CustomSlotNames;
|
|
31
|
-
|
|
32
|
-
export const Slot = {
|
|
33
|
-
Source: ({
|
|
34
|
-
name,
|
|
35
|
-
children,
|
|
36
|
-
type = "replace",
|
|
37
|
-
}: {
|
|
38
|
-
name: SlotName;
|
|
39
|
-
type?: "prepend" | "replace" | "append";
|
|
40
|
-
children: SlotType;
|
|
41
|
-
}) => {
|
|
42
|
-
const id = useId();
|
|
43
|
-
const setSlot = useSlotContext((s) => s.setSlot);
|
|
44
|
-
const clearSlot = useSlotContext((s) => s.clearSlot);
|
|
45
|
-
|
|
46
|
-
if (import.meta.env.SSR) {
|
|
47
|
-
setSlot(id, name, children, type);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
useLayoutEffect(() => {
|
|
51
|
-
setSlot(id, name, children, type);
|
|
52
|
-
return () => clearSlot(id, name);
|
|
53
|
-
}, [id, name, children, type, setSlot, clearSlot]);
|
|
54
|
-
|
|
55
|
-
return null;
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
Target: ({ name, fallback }: { name: string; fallback?: ReactNode }) => {
|
|
59
|
-
const slot = useRenderSlot(name);
|
|
60
|
-
|
|
61
|
-
if (slot.length === 0) return fallback;
|
|
62
|
-
return slot;
|
|
63
|
-
},
|
|
64
|
-
};
|
|
1
|
+
import { type ReactNode, useId, useLayoutEffect } from "react";
|
|
2
|
+
import {
|
|
3
|
+
type SlotType,
|
|
4
|
+
useRenderSlot,
|
|
5
|
+
useSlotContext,
|
|
6
|
+
} from "./context/SlotProvider.js";
|
|
7
|
+
|
|
8
|
+
// This is to augment the type of the Slot component with custom slot names
|
|
9
|
+
// This is useful for plugins to add custom slots to the Zudoku context
|
|
10
|
+
// and for the user to use them in their own components
|
|
11
|
+
export type CustomSlotNames = never;
|
|
12
|
+
|
|
13
|
+
type PredefinedSlotNames =
|
|
14
|
+
| "api-keys-list-page"
|
|
15
|
+
| "api-keys-list-page-before-keys"
|
|
16
|
+
| "footer-after"
|
|
17
|
+
| "footer-before"
|
|
18
|
+
| "head-navigation-end"
|
|
19
|
+
| "head-navigation-start"
|
|
20
|
+
| "layout-after-head"
|
|
21
|
+
| "layout-before-head"
|
|
22
|
+
| "top-navigation-after"
|
|
23
|
+
| "top-navigation-before"
|
|
24
|
+
| "top-navigation-side"
|
|
25
|
+
| "content-before"
|
|
26
|
+
| "content-after"
|
|
27
|
+
| "navigation-after"
|
|
28
|
+
| "navigation-before";
|
|
29
|
+
|
|
30
|
+
export type SlotName = PredefinedSlotNames | CustomSlotNames;
|
|
31
|
+
|
|
32
|
+
export const Slot = {
|
|
33
|
+
Source: ({
|
|
34
|
+
name,
|
|
35
|
+
children,
|
|
36
|
+
type = "replace",
|
|
37
|
+
}: {
|
|
38
|
+
name: SlotName;
|
|
39
|
+
type?: "prepend" | "replace" | "append";
|
|
40
|
+
children: SlotType;
|
|
41
|
+
}) => {
|
|
42
|
+
const id = useId();
|
|
43
|
+
const setSlot = useSlotContext((s) => s.setSlot);
|
|
44
|
+
const clearSlot = useSlotContext((s) => s.clearSlot);
|
|
45
|
+
|
|
46
|
+
if (import.meta.env.SSR) {
|
|
47
|
+
setSlot(id, name, children, type);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
useLayoutEffect(() => {
|
|
51
|
+
setSlot(id, name, children, type);
|
|
52
|
+
return () => clearSlot(id, name);
|
|
53
|
+
}, [id, name, children, type, setSlot, clearSlot]);
|
|
54
|
+
|
|
55
|
+
return null;
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
Target: ({ name, fallback }: { name: string; fallback?: ReactNode }) => {
|
|
59
|
+
const slot = useRenderSlot(name);
|
|
60
|
+
|
|
61
|
+
if (slot.length === 0) return fallback;
|
|
62
|
+
return slot;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LoaderCircle } from "lucide-react";
|
|
2
|
-
|
|
3
|
-
export const Spinner = ({ size = 16 }: { size?: number }) => (
|
|
4
|
-
<LoaderCircle size={size} className="animate-spin" />
|
|
5
|
-
);
|
|
1
|
+
import { LoaderCircle } from "lucide-react";
|
|
2
|
+
|
|
3
|
+
export const Spinner = ({ size = 16 }: { size?: number }) => (
|
|
4
|
+
<LoaderCircle size={size} className="animate-spin" />
|
|
5
|
+
);
|
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
2
|
-
import { ErrorPage } from "./ErrorPage.js";
|
|
3
|
-
import { NotFoundPage } from "./NotFoundPage.js";
|
|
4
|
-
|
|
5
|
-
type StatusPageProps = {
|
|
6
|
-
statusCode: number;
|
|
7
|
-
message?: ReactNode;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
const getDefaultContent = (
|
|
11
|
-
statusCode: number,
|
|
12
|
-
): { title: string; message: string } => {
|
|
13
|
-
switch (statusCode) {
|
|
14
|
-
case 400:
|
|
15
|
-
return {
|
|
16
|
-
title: "Bad Request",
|
|
17
|
-
message:
|
|
18
|
-
"The request could not be understood by the server due to malformed syntax.",
|
|
19
|
-
};
|
|
20
|
-
case 403:
|
|
21
|
-
return {
|
|
22
|
-
title: "Forbidden",
|
|
23
|
-
message: "You don't have permission to access this resource.",
|
|
24
|
-
};
|
|
25
|
-
case 404:
|
|
26
|
-
return {
|
|
27
|
-
title: "Not Found",
|
|
28
|
-
message: "The requested resource could not be found.",
|
|
29
|
-
};
|
|
30
|
-
case 405:
|
|
31
|
-
return {
|
|
32
|
-
title: "Method Not Allowed",
|
|
33
|
-
message:
|
|
34
|
-
"The request method is not supported for the requested resource.",
|
|
35
|
-
};
|
|
36
|
-
case 414:
|
|
37
|
-
return {
|
|
38
|
-
title: "Request URI Too Large",
|
|
39
|
-
message: "The request URI is too large.",
|
|
40
|
-
};
|
|
41
|
-
case 416:
|
|
42
|
-
return {
|
|
43
|
-
title: "Range Not Satisfiable",
|
|
44
|
-
message: "The server cannot satisfy the request range.",
|
|
45
|
-
};
|
|
46
|
-
case 500:
|
|
47
|
-
return {
|
|
48
|
-
title: "Internal Server Error",
|
|
49
|
-
message: "An unexpected error occurred while processing your request.",
|
|
50
|
-
};
|
|
51
|
-
case 501:
|
|
52
|
-
return {
|
|
53
|
-
title: "Not Implemented",
|
|
54
|
-
message:
|
|
55
|
-
"The server does not support the functionality required to fulfill the request.",
|
|
56
|
-
};
|
|
57
|
-
case 502:
|
|
58
|
-
return {
|
|
59
|
-
title: "Bad Gateway",
|
|
60
|
-
message:
|
|
61
|
-
"The server received an invalid response from the upstream server.",
|
|
62
|
-
};
|
|
63
|
-
case 503:
|
|
64
|
-
return {
|
|
65
|
-
title: "Service Unavailable",
|
|
66
|
-
message: "The server is temporarily unable to handle the request.",
|
|
67
|
-
};
|
|
68
|
-
case 504:
|
|
69
|
-
return {
|
|
70
|
-
title: "Gateway Timeout",
|
|
71
|
-
message:
|
|
72
|
-
"The server did not receive a timely response from the upstream server.",
|
|
73
|
-
};
|
|
74
|
-
default:
|
|
75
|
-
return {
|
|
76
|
-
title: "An error occurred",
|
|
77
|
-
message: "Something went wrong while processing your request.",
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
export const StatusPage = ({ statusCode, message }: StatusPageProps) => {
|
|
83
|
-
if (statusCode === 404) {
|
|
84
|
-
return <NotFoundPage />;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const defaultContent = getDefaultContent(statusCode);
|
|
88
|
-
|
|
89
|
-
return (
|
|
90
|
-
<ErrorPage
|
|
91
|
-
title={defaultContent.title}
|
|
92
|
-
message={message ?? defaultContent.message}
|
|
93
|
-
category={statusCode}
|
|
94
|
-
/>
|
|
95
|
-
);
|
|
96
|
-
};
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { ErrorPage } from "./ErrorPage.js";
|
|
3
|
+
import { NotFoundPage } from "./NotFoundPage.js";
|
|
4
|
+
|
|
5
|
+
type StatusPageProps = {
|
|
6
|
+
statusCode: number;
|
|
7
|
+
message?: ReactNode;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const getDefaultContent = (
|
|
11
|
+
statusCode: number,
|
|
12
|
+
): { title: string; message: string } => {
|
|
13
|
+
switch (statusCode) {
|
|
14
|
+
case 400:
|
|
15
|
+
return {
|
|
16
|
+
title: "Bad Request",
|
|
17
|
+
message:
|
|
18
|
+
"The request could not be understood by the server due to malformed syntax.",
|
|
19
|
+
};
|
|
20
|
+
case 403:
|
|
21
|
+
return {
|
|
22
|
+
title: "Forbidden",
|
|
23
|
+
message: "You don't have permission to access this resource.",
|
|
24
|
+
};
|
|
25
|
+
case 404:
|
|
26
|
+
return {
|
|
27
|
+
title: "Not Found",
|
|
28
|
+
message: "The requested resource could not be found.",
|
|
29
|
+
};
|
|
30
|
+
case 405:
|
|
31
|
+
return {
|
|
32
|
+
title: "Method Not Allowed",
|
|
33
|
+
message:
|
|
34
|
+
"The request method is not supported for the requested resource.",
|
|
35
|
+
};
|
|
36
|
+
case 414:
|
|
37
|
+
return {
|
|
38
|
+
title: "Request URI Too Large",
|
|
39
|
+
message: "The request URI is too large.",
|
|
40
|
+
};
|
|
41
|
+
case 416:
|
|
42
|
+
return {
|
|
43
|
+
title: "Range Not Satisfiable",
|
|
44
|
+
message: "The server cannot satisfy the request range.",
|
|
45
|
+
};
|
|
46
|
+
case 500:
|
|
47
|
+
return {
|
|
48
|
+
title: "Internal Server Error",
|
|
49
|
+
message: "An unexpected error occurred while processing your request.",
|
|
50
|
+
};
|
|
51
|
+
case 501:
|
|
52
|
+
return {
|
|
53
|
+
title: "Not Implemented",
|
|
54
|
+
message:
|
|
55
|
+
"The server does not support the functionality required to fulfill the request.",
|
|
56
|
+
};
|
|
57
|
+
case 502:
|
|
58
|
+
return {
|
|
59
|
+
title: "Bad Gateway",
|
|
60
|
+
message:
|
|
61
|
+
"The server received an invalid response from the upstream server.",
|
|
62
|
+
};
|
|
63
|
+
case 503:
|
|
64
|
+
return {
|
|
65
|
+
title: "Service Unavailable",
|
|
66
|
+
message: "The server is temporarily unable to handle the request.",
|
|
67
|
+
};
|
|
68
|
+
case 504:
|
|
69
|
+
return {
|
|
70
|
+
title: "Gateway Timeout",
|
|
71
|
+
message:
|
|
72
|
+
"The server did not receive a timely response from the upstream server.",
|
|
73
|
+
};
|
|
74
|
+
default:
|
|
75
|
+
return {
|
|
76
|
+
title: "An error occurred",
|
|
77
|
+
message: "Something went wrong while processing your request.",
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const StatusPage = ({ statusCode, message }: StatusPageProps) => {
|
|
83
|
+
if (statusCode === 404) {
|
|
84
|
+
return <NotFoundPage />;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const defaultContent = getDefaultContent(statusCode);
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<ErrorPage
|
|
91
|
+
title={defaultContent.title}
|
|
92
|
+
message={message ?? defaultContent.message}
|
|
93
|
+
category={statusCode}
|
|
94
|
+
/>
|
|
95
|
+
);
|
|
96
|
+
};
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import { MoonIcon, SunIcon } from "lucide-react";
|
|
2
|
-
import { useTheme } from "next-themes";
|
|
3
|
-
import { focusRing } from "../ui/util.js";
|
|
4
|
-
import { cn } from "../util/cn.js";
|
|
5
|
-
import { useIsClient } from "./ClientOnly.js";
|
|
6
|
-
|
|
7
|
-
export const ThemeSwitch = () => {
|
|
8
|
-
const { resolvedTheme, setTheme } = useTheme();
|
|
9
|
-
const isClient = useIsClient();
|
|
10
|
-
|
|
11
|
-
const theme = isClient ? resolvedTheme : undefined;
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
<button
|
|
15
|
-
type="button"
|
|
16
|
-
className={cn("flex rounded-full border p-0.5 gap-0.5 group", focusRing)}
|
|
17
|
-
onClick={() => setTheme(resolvedTheme === "dark" ? "light" : "dark")}
|
|
18
|
-
aria-label={
|
|
19
|
-
!isClient
|
|
20
|
-
? "Toggle theme"
|
|
21
|
-
: theme === "dark"
|
|
22
|
-
? "Switch to light mode"
|
|
23
|
-
: "Switch to dark mode"
|
|
24
|
-
}
|
|
25
|
-
>
|
|
26
|
-
<div
|
|
27
|
-
className={cn(
|
|
28
|
-
"rounded-full p-0.5 border border-transparent [&>svg>circle]:transition-colors [&>svg>path]:transition-transform transition-all [&>svg>path]:duration-200 [&>svg>circle]:duration-500 [&>svg>circle]:fill-transparent",
|
|
29
|
-
theme === "light" && "border-border bg-muted",
|
|
30
|
-
theme === "dark" &&
|
|
31
|
-
"group-hover:[&>svg>path]:scale-110 group-hover:[&>svg>path]:-translate-x-px group-hover:[&>svg>path]:-translate-y-px group-hover:rotate-15",
|
|
32
|
-
)}
|
|
33
|
-
>
|
|
34
|
-
<SunIcon size={16} />
|
|
35
|
-
</div>
|
|
36
|
-
<div
|
|
37
|
-
className={cn(
|
|
38
|
-
"rounded-full p-0.5 border border-transparent transition-transform transform-gpu duration-500",
|
|
39
|
-
theme === "dark" &&
|
|
40
|
-
"border-border bg-muted [&>svg>path]:fill-white [&>svg>path]:stroke-transparent",
|
|
41
|
-
theme === "light" &&
|
|
42
|
-
"group-hover:rotate-[-10deg] [&>svg>path]:stroke-currentColor",
|
|
43
|
-
)}
|
|
44
|
-
>
|
|
45
|
-
<MoonIcon size={16} />
|
|
46
|
-
</div>
|
|
47
|
-
</button>
|
|
48
|
-
);
|
|
49
|
-
};
|
|
1
|
+
import { MoonIcon, SunIcon } from "lucide-react";
|
|
2
|
+
import { useTheme } from "next-themes";
|
|
3
|
+
import { focusRing } from "../ui/util.js";
|
|
4
|
+
import { cn } from "../util/cn.js";
|
|
5
|
+
import { useIsClient } from "./ClientOnly.js";
|
|
6
|
+
|
|
7
|
+
export const ThemeSwitch = () => {
|
|
8
|
+
const { resolvedTheme, setTheme } = useTheme();
|
|
9
|
+
const isClient = useIsClient();
|
|
10
|
+
|
|
11
|
+
const theme = isClient ? resolvedTheme : undefined;
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<button
|
|
15
|
+
type="button"
|
|
16
|
+
className={cn("flex rounded-full border p-0.5 gap-0.5 group", focusRing)}
|
|
17
|
+
onClick={() => setTheme(resolvedTheme === "dark" ? "light" : "dark")}
|
|
18
|
+
aria-label={
|
|
19
|
+
!isClient
|
|
20
|
+
? "Toggle theme"
|
|
21
|
+
: theme === "dark"
|
|
22
|
+
? "Switch to light mode"
|
|
23
|
+
: "Switch to dark mode"
|
|
24
|
+
}
|
|
25
|
+
>
|
|
26
|
+
<div
|
|
27
|
+
className={cn(
|
|
28
|
+
"rounded-full p-0.5 border border-transparent [&>svg>circle]:transition-colors [&>svg>path]:transition-transform transition-all [&>svg>path]:duration-200 [&>svg>circle]:duration-500 [&>svg>circle]:fill-transparent",
|
|
29
|
+
theme === "light" && "border-border bg-muted",
|
|
30
|
+
theme === "dark" &&
|
|
31
|
+
"group-hover:[&>svg>path]:scale-110 group-hover:[&>svg>path]:-translate-x-px group-hover:[&>svg>path]:-translate-y-px group-hover:rotate-15",
|
|
32
|
+
)}
|
|
33
|
+
>
|
|
34
|
+
<SunIcon size={16} />
|
|
35
|
+
</div>
|
|
36
|
+
<div
|
|
37
|
+
className={cn(
|
|
38
|
+
"rounded-full p-0.5 border border-transparent transition-transform transform-gpu duration-500",
|
|
39
|
+
theme === "dark" &&
|
|
40
|
+
"border-border bg-muted [&>svg>path]:fill-white [&>svg>path]:stroke-transparent",
|
|
41
|
+
theme === "light" &&
|
|
42
|
+
"group-hover:rotate-[-10deg] [&>svg>path]:stroke-currentColor",
|
|
43
|
+
)}
|
|
44
|
+
>
|
|
45
|
+
<MoonIcon size={16} />
|
|
46
|
+
</div>
|
|
47
|
+
</button>
|
|
48
|
+
);
|
|
49
|
+
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { AllHTMLAttributes } from "react";
|
|
2
|
-
import { cn } from "../util/cn.js";
|
|
3
|
-
|
|
4
|
-
// other styles are defined in main.css .prose
|
|
5
|
-
export const ProseClasses = "prose dark:prose-invert prose-neutral typography";
|
|
6
|
-
|
|
7
|
-
export const Typography = ({
|
|
8
|
-
className,
|
|
9
|
-
...props
|
|
10
|
-
}: AllHTMLAttributes<HTMLDivElement>) => {
|
|
11
|
-
return <div className={cn(ProseClasses, className)} {...props} />;
|
|
12
|
-
};
|
|
1
|
+
import type { AllHTMLAttributes } from "react";
|
|
2
|
+
import { cn } from "../util/cn.js";
|
|
3
|
+
|
|
4
|
+
// other styles are defined in main.css .prose
|
|
5
|
+
export const ProseClasses = "prose dark:prose-invert prose-neutral typography";
|
|
6
|
+
|
|
7
|
+
export const Typography = ({
|
|
8
|
+
className,
|
|
9
|
+
...props
|
|
10
|
+
}: AllHTMLAttributes<HTMLDivElement>) => {
|
|
11
|
+
return <div className={cn(ProseClasses, className)} {...props} />;
|
|
12
|
+
};
|
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
import { MDXProvider } from "@mdx-js/react";
|
|
2
|
-
import { useQueryClient } from "@tanstack/react-query";
|
|
3
|
-
import { ThemeProvider } from "next-themes";
|
|
4
|
-
import {
|
|
5
|
-
memo,
|
|
6
|
-
type PropsWithChildren,
|
|
7
|
-
useEffect,
|
|
8
|
-
useMemo,
|
|
9
|
-
useState,
|
|
10
|
-
} from "react";
|
|
11
|
-
import { ErrorBoundary } from "react-error-boundary";
|
|
12
|
-
import { Outlet, useLocation, useNavigation } from "react-router";
|
|
13
|
-
import { isMdxProviderPlugin } from "../core/plugins.js";
|
|
14
|
-
import {
|
|
15
|
-
ZudokuContext,
|
|
16
|
-
type ZudokuContextOptions,
|
|
17
|
-
} from "../core/ZudokuContext.js";
|
|
18
|
-
import { TopLevelError } from "../errors/TopLevelError.js";
|
|
19
|
-
import { MdxComponents } from "../util/MdxComponents.js";
|
|
20
|
-
import { RouterEventsEmitter } from "./context/RouterEventsEmitter.js";
|
|
21
|
-
import { SlotProvider } from "./context/SlotProvider.js";
|
|
22
|
-
import { ViewportAnchorProvider } from "./context/ViewportAnchorContext.js";
|
|
23
|
-
import { ApitogoProvider } from "./context/ZudokuProvider.js";
|
|
24
|
-
import { PluginHeads } from "./PluginHeads.js";
|
|
25
|
-
|
|
26
|
-
let apitogoContext: ZudokuContext | undefined;
|
|
27
|
-
|
|
28
|
-
const ZudokuInner = memo(
|
|
29
|
-
({
|
|
30
|
-
children,
|
|
31
|
-
env,
|
|
32
|
-
...props
|
|
33
|
-
}: PropsWithChildren<
|
|
34
|
-
ZudokuContextOptions & { env: Record<string, string> }
|
|
35
|
-
>) => {
|
|
36
|
-
const location = useLocation();
|
|
37
|
-
const mdxComponents = useMemo(() => {
|
|
38
|
-
const componentsFromPlugins = (props.plugins ?? [])
|
|
39
|
-
.filter(isMdxProviderPlugin)
|
|
40
|
-
.flatMap((plugin) =>
|
|
41
|
-
plugin.getMdxComponents ? [plugin.getMdxComponents()] : [],
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
...componentsFromPlugins.reduce(
|
|
46
|
-
(acc, curr) => ({ ...acc, ...curr }),
|
|
47
|
-
{},
|
|
48
|
-
),
|
|
49
|
-
...MdxComponents,
|
|
50
|
-
...props.mdx?.components,
|
|
51
|
-
};
|
|
52
|
-
}, [props.mdx?.components, props.plugins]);
|
|
53
|
-
const [didNavigate, setDidNavigate] = useState(false);
|
|
54
|
-
const navigation = useNavigation();
|
|
55
|
-
const queryClient = useQueryClient();
|
|
56
|
-
|
|
57
|
-
useEffect(() => {
|
|
58
|
-
if (didNavigate || !navigation.location) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
setDidNavigate(true);
|
|
62
|
-
}, [didNavigate, navigation.location]);
|
|
63
|
-
|
|
64
|
-
apitogoContext ??= new ZudokuContext(props, queryClient, env);
|
|
65
|
-
|
|
66
|
-
return (
|
|
67
|
-
<>
|
|
68
|
-
<PluginHeads plugins={props.plugins ?? []} location={location} />
|
|
69
|
-
<ApitogoProvider context={apitogoContext}>
|
|
70
|
-
<RouterEventsEmitter />
|
|
71
|
-
<SlotProvider slots={props.slots ?? props.UNSAFE_slotlets}>
|
|
72
|
-
<MDXProvider components={mdxComponents}>
|
|
73
|
-
<ThemeProvider attribute="class" disableTransitionOnChange>
|
|
74
|
-
<ViewportAnchorProvider>
|
|
75
|
-
{children ?? <Outlet />}
|
|
76
|
-
</ViewportAnchorProvider>
|
|
77
|
-
</ThemeProvider>
|
|
78
|
-
</MDXProvider>
|
|
79
|
-
</SlotProvider>
|
|
80
|
-
</ApitogoProvider>
|
|
81
|
-
</>
|
|
82
|
-
);
|
|
83
|
-
},
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
ZudokuInner.displayName = "ZudokuInner";
|
|
87
|
-
|
|
88
|
-
const Apitogo = (
|
|
89
|
-
props: PropsWithChildren<
|
|
90
|
-
ZudokuContextOptions & { env?: Record<string, string> }
|
|
91
|
-
>,
|
|
92
|
-
) => {
|
|
93
|
-
return (
|
|
94
|
-
<ErrorBoundary FallbackComponent={TopLevelError}>
|
|
95
|
-
<ZudokuInner {...props} env={props.env ?? {}} />
|
|
96
|
-
</ErrorBoundary>
|
|
97
|
-
);
|
|
98
|
-
};
|
|
99
|
-
Apitogo.displayName = "Apitogo";
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* @deprecated Use {@link Apitogo} instead.
|
|
103
|
-
*/
|
|
104
|
-
const Zudoku = Apitogo;
|
|
105
|
-
|
|
106
|
-
export { Apitogo, Zudoku };
|
|
1
|
+
import { MDXProvider } from "@mdx-js/react";
|
|
2
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { ThemeProvider } from "next-themes";
|
|
4
|
+
import {
|
|
5
|
+
memo,
|
|
6
|
+
type PropsWithChildren,
|
|
7
|
+
useEffect,
|
|
8
|
+
useMemo,
|
|
9
|
+
useState,
|
|
10
|
+
} from "react";
|
|
11
|
+
import { ErrorBoundary } from "react-error-boundary";
|
|
12
|
+
import { Outlet, useLocation, useNavigation } from "react-router";
|
|
13
|
+
import { isMdxProviderPlugin } from "../core/plugins.js";
|
|
14
|
+
import {
|
|
15
|
+
ZudokuContext,
|
|
16
|
+
type ZudokuContextOptions,
|
|
17
|
+
} from "../core/ZudokuContext.js";
|
|
18
|
+
import { TopLevelError } from "../errors/TopLevelError.js";
|
|
19
|
+
import { MdxComponents } from "../util/MdxComponents.js";
|
|
20
|
+
import { RouterEventsEmitter } from "./context/RouterEventsEmitter.js";
|
|
21
|
+
import { SlotProvider } from "./context/SlotProvider.js";
|
|
22
|
+
import { ViewportAnchorProvider } from "./context/ViewportAnchorContext.js";
|
|
23
|
+
import { ApitogoProvider } from "./context/ZudokuProvider.js";
|
|
24
|
+
import { PluginHeads } from "./PluginHeads.js";
|
|
25
|
+
|
|
26
|
+
let apitogoContext: ZudokuContext | undefined;
|
|
27
|
+
|
|
28
|
+
const ZudokuInner = memo(
|
|
29
|
+
({
|
|
30
|
+
children,
|
|
31
|
+
env,
|
|
32
|
+
...props
|
|
33
|
+
}: PropsWithChildren<
|
|
34
|
+
ZudokuContextOptions & { env: Record<string, string> }
|
|
35
|
+
>) => {
|
|
36
|
+
const location = useLocation();
|
|
37
|
+
const mdxComponents = useMemo(() => {
|
|
38
|
+
const componentsFromPlugins = (props.plugins ?? [])
|
|
39
|
+
.filter(isMdxProviderPlugin)
|
|
40
|
+
.flatMap((plugin) =>
|
|
41
|
+
plugin.getMdxComponents ? [plugin.getMdxComponents()] : [],
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
...componentsFromPlugins.reduce(
|
|
46
|
+
(acc, curr) => ({ ...acc, ...curr }),
|
|
47
|
+
{},
|
|
48
|
+
),
|
|
49
|
+
...MdxComponents,
|
|
50
|
+
...props.mdx?.components,
|
|
51
|
+
};
|
|
52
|
+
}, [props.mdx?.components, props.plugins]);
|
|
53
|
+
const [didNavigate, setDidNavigate] = useState(false);
|
|
54
|
+
const navigation = useNavigation();
|
|
55
|
+
const queryClient = useQueryClient();
|
|
56
|
+
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (didNavigate || !navigation.location) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
setDidNavigate(true);
|
|
62
|
+
}, [didNavigate, navigation.location]);
|
|
63
|
+
|
|
64
|
+
apitogoContext ??= new ZudokuContext(props, queryClient, env);
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<>
|
|
68
|
+
<PluginHeads plugins={props.plugins ?? []} location={location} />
|
|
69
|
+
<ApitogoProvider context={apitogoContext}>
|
|
70
|
+
<RouterEventsEmitter />
|
|
71
|
+
<SlotProvider slots={props.slots ?? props.UNSAFE_slotlets}>
|
|
72
|
+
<MDXProvider components={mdxComponents}>
|
|
73
|
+
<ThemeProvider attribute="class" disableTransitionOnChange>
|
|
74
|
+
<ViewportAnchorProvider>
|
|
75
|
+
{children ?? <Outlet />}
|
|
76
|
+
</ViewportAnchorProvider>
|
|
77
|
+
</ThemeProvider>
|
|
78
|
+
</MDXProvider>
|
|
79
|
+
</SlotProvider>
|
|
80
|
+
</ApitogoProvider>
|
|
81
|
+
</>
|
|
82
|
+
);
|
|
83
|
+
},
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
ZudokuInner.displayName = "ZudokuInner";
|
|
87
|
+
|
|
88
|
+
const Apitogo = (
|
|
89
|
+
props: PropsWithChildren<
|
|
90
|
+
ZudokuContextOptions & { env?: Record<string, string> }
|
|
91
|
+
>,
|
|
92
|
+
) => {
|
|
93
|
+
return (
|
|
94
|
+
<ErrorBoundary FallbackComponent={TopLevelError}>
|
|
95
|
+
<ZudokuInner {...props} env={props.env ?? {}} />
|
|
96
|
+
</ErrorBoundary>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
Apitogo.displayName = "Apitogo";
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @deprecated Use {@link Apitogo} instead.
|
|
103
|
+
*/
|
|
104
|
+
const Zudoku = Apitogo;
|
|
105
|
+
|
|
106
|
+
export { Apitogo, Zudoku };
|