zudoku 0.47.2 → 0.48.1
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/dist/app/ZuploBuildConfig.d.ts +4 -114
- package/dist/app/ZuploBuildConfig.js +1 -1
- package/dist/app/ZuploBuildConfig.js.map +1 -1
- package/dist/app/demo.js +4 -3
- package/dist/app/demo.js.map +1 -1
- package/dist/app/main.js +5 -5
- package/dist/app/main.js.map +1 -1
- package/dist/app/standalone.js +4 -3
- package/dist/app/standalone.js.map +1 -1
- package/dist/config/loader.js +1 -2
- package/dist/config/loader.js.map +1 -1
- package/dist/config/validators/BuildSchema.d.ts +20 -44
- package/dist/config/validators/BuildSchema.js +3 -14
- package/dist/config/validators/BuildSchema.js.map +1 -1
- package/dist/config/validators/InputNavigationSchema.d.ts +7217 -0
- package/dist/config/validators/InputNavigationSchema.js +74 -0
- package/dist/config/validators/InputNavigationSchema.js.map +1 -0
- package/dist/config/validators/InputNavigationSchema.test-d.d.ts +1 -0
- package/dist/config/validators/InputNavigationSchema.test-d.js +146 -0
- package/dist/config/validators/InputNavigationSchema.test-d.js.map +1 -0
- package/dist/config/validators/NavigationSchema.d.ts +44 -0
- package/dist/config/validators/NavigationSchema.js +95 -0
- package/dist/config/validators/NavigationSchema.js.map +1 -0
- package/dist/config/validators/icon-types.d.ts +2 -1
- package/dist/config/validators/icon-types.js +1775 -1
- package/dist/config/validators/icon-types.js.map +1 -1
- package/dist/config/validators/validate.d.ts +442 -5780
- package/dist/config/validators/validate.js +37 -55
- package/dist/config/validators/validate.js.map +1 -1
- package/dist/config/validators/validate.test.js +0 -2
- package/dist/config/validators/validate.test.js.map +1 -1
- package/dist/flat-config.d.ts +320 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/components/BuildCheck.js +1 -1
- package/dist/lib/components/BuildCheck.js.map +1 -1
- package/dist/lib/components/Header.js +10 -9
- package/dist/lib/components/Header.js.map +1 -1
- package/dist/lib/components/Heading.d.ts +6 -2
- package/dist/lib/components/Heading.js +2 -2
- package/dist/lib/components/Heading.js.map +1 -1
- package/dist/lib/components/Main.js +4 -4
- package/dist/lib/components/Main.js.map +1 -1
- package/dist/lib/components/MobileTopNavigation.js +5 -5
- package/dist/lib/components/MobileTopNavigation.js.map +1 -1
- package/dist/lib/components/PageProgress.d.ts +1 -0
- package/dist/lib/components/PageProgress.js +20 -0
- package/dist/lib/components/PageProgress.js.map +1 -0
- package/dist/lib/components/TopNavigation.d.ts +2 -3
- package/dist/lib/components/TopNavigation.js +45 -44
- package/dist/lib/components/TopNavigation.js.map +1 -1
- package/dist/lib/components/context/ZudokuContext.d.ts +3 -7
- package/dist/lib/components/context/ZudokuContext.js +44 -26
- package/dist/lib/components/context/ZudokuContext.js.map +1 -1
- package/dist/lib/components/navigation/Navigation.d.ts +5 -0
- package/dist/lib/components/navigation/Navigation.js +12 -0
- package/dist/lib/components/navigation/Navigation.js.map +1 -0
- package/dist/lib/components/navigation/{SidebarBadge.d.ts → NavigationBadge.d.ts} +1 -1
- package/dist/lib/components/navigation/{SidebarBadge.js → NavigationBadge.js} +2 -2
- package/dist/lib/components/navigation/NavigationBadge.js.map +1 -0
- package/dist/lib/components/navigation/NavigationCategory.d.ts +5 -0
- package/dist/lib/components/navigation/{SidebarCategory.js → NavigationCategory.js} +14 -12
- package/dist/lib/components/navigation/NavigationCategory.js.map +1 -0
- package/dist/lib/components/navigation/NavigationItem.d.ts +6 -0
- package/dist/lib/components/navigation/NavigationItem.js +47 -0
- package/dist/lib/components/navigation/NavigationItem.js.map +1 -0
- package/dist/lib/components/navigation/{SidebarWrapper.d.ts → NavigationWrapper.d.ts} +1 -1
- package/dist/lib/components/navigation/{SidebarWrapper.js → NavigationWrapper.js} +3 -3
- package/dist/lib/components/navigation/NavigationWrapper.js.map +1 -0
- package/dist/lib/components/navigation/utils.d.ts +7 -9
- package/dist/lib/components/navigation/utils.js +17 -17
- package/dist/lib/components/navigation/utils.js.map +1 -1
- package/dist/lib/core/ZudokuContext.d.ts +6 -8
- package/dist/lib/core/ZudokuContext.js +5 -7
- package/dist/lib/core/ZudokuContext.js.map +1 -1
- package/dist/lib/core/plugins.d.ts +2 -2
- package/dist/lib/hooks/useEvent.test.js +5 -3
- package/dist/lib/hooks/useEvent.test.js.map +1 -1
- package/dist/lib/plugins/api-catalog/Catalog.d.ts +1 -1
- package/dist/lib/plugins/api-catalog/index.d.ts +6 -6
- package/dist/lib/plugins/api-catalog/index.js +10 -10
- package/dist/lib/plugins/api-catalog/index.js.map +1 -1
- package/dist/lib/plugins/api-keys/SettingsApiKeys.js +4 -4
- package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
- package/dist/lib/plugins/custom-pages/index.d.ts +3 -2
- package/dist/lib/plugins/custom-pages/index.js +15 -8
- package/dist/lib/plugins/custom-pages/index.js.map +1 -1
- package/dist/lib/plugins/markdown/MdxPage.js +6 -3
- package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
- package/dist/lib/plugins/markdown/index.d.ts +2 -1
- package/dist/lib/plugins/markdown/index.js +9 -26
- package/dist/lib/plugins/markdown/index.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationList.js +1 -1
- package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.js +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
- package/dist/lib/plugins/openapi/SchemaList.js +1 -1
- package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/graphql.d.ts +3 -3
- package/dist/lib/plugins/openapi/graphql/graphql.js +2 -2
- package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
- package/dist/lib/plugins/openapi/index.d.ts +3 -3
- package/dist/lib/plugins/openapi/index.js +9 -9
- package/dist/lib/plugins/openapi/index.js.map +1 -1
- package/dist/lib/plugins/openapi/interfaces.d.ts +3 -3
- package/dist/lib/plugins/openapi/util/createNavigationCategory.d.ts +9 -0
- package/dist/lib/plugins/openapi/util/{createSidebarCategory.js → createNavigationCategory.js} +5 -4
- package/dist/lib/plugins/openapi/util/createNavigationCategory.js.map +1 -0
- package/dist/lib/plugins/openapi/util/getRoutes.js +2 -2
- package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
- package/dist/lib/plugins/openapi/util/methodColorMap.d.ts +1 -1
- package/dist/lib/util/useScrollToAnchor.js +3 -3
- package/dist/lib/util/useScrollToAnchor.js.map +1 -1
- package/dist/vite/api/SchemaManager.d.ts +4 -4
- package/dist/vite/api/SchemaManager.js +19 -19
- package/dist/vite/api/SchemaManager.js.map +1 -1
- package/dist/vite/api/SchemaManager.test.js +4 -4
- package/dist/vite/api/SchemaManager.test.js.map +1 -1
- package/dist/vite/config.js +1 -0
- package/dist/vite/config.js.map +1 -1
- package/dist/vite/plugin-api.js +8 -8
- package/dist/vite/plugin-api.js.map +1 -1
- package/dist/vite/plugin-config-reload.js +2 -0
- package/dist/vite/plugin-config-reload.js.map +1 -1
- package/dist/vite/plugin-custom-pages.js +2 -2
- package/dist/vite/plugin-custom-pages.js.map +1 -1
- package/dist/vite/plugin-docs.js +61 -59
- package/dist/vite/plugin-docs.js.map +1 -1
- package/dist/vite/{plugin-sidebar.d.ts → plugin-navigation.d.ts} +1 -1
- package/dist/vite/{plugin-sidebar.js → plugin-navigation.js} +20 -19
- package/dist/vite/plugin-navigation.js.map +1 -0
- package/dist/vite/plugin.js +2 -2
- package/dist/vite/plugin.js.map +1 -1
- package/dist/vite/shadcn-registry.d.ts +4 -4
- package/lib/{Markdown-C5j8kKSX.js → Markdown-DCAIYXF5.js} +480 -475
- package/lib/Markdown-DCAIYXF5.js.map +1 -0
- package/lib/{MdxPage-CKTMf1cR.js → MdxPage-Cf9YXWoC.js} +30 -30
- package/lib/MdxPage-Cf9YXWoC.js.map +1 -0
- package/lib/OasProvider-JMVTfG6_.js +35 -0
- package/lib/OasProvider-JMVTfG6_.js.map +1 -0
- package/lib/{OperationList-BJAKaG5p.js → OperationList-m4tFCI4S.js} +8 -8
- package/lib/{OperationList-BJAKaG5p.js.map → OperationList-m4tFCI4S.js.map} +1 -1
- package/lib/{RouteGuard-B7GVW4oL.js → RouteGuard-gV7nvzi7.js} +2 -2
- package/lib/{RouteGuard-B7GVW4oL.js.map → RouteGuard-gV7nvzi7.js.map} +1 -1
- package/lib/{SchemaList-Dgc0A8x5.js → SchemaList-_wRy4aQ0.js} +20 -20
- package/lib/SchemaList-_wRy4aQ0.js.map +1 -0
- package/lib/{SchemaView-DVx-jFN4.js → SchemaView-CRl_cQYH.js} +3 -3
- package/lib/{SchemaView-DVx-jFN4.js.map → SchemaView-CRl_cQYH.js.map} +1 -1
- package/lib/{SignUp-CRIKdWt9.js → SignUp-B6w5AwHM.js} +2 -2
- package/lib/{SignUp-CRIKdWt9.js.map → SignUp-B6w5AwHM.js.map} +1 -1
- package/lib/{Slot-ITby_hMb.js → Slot-BkYrj_uC.js} +4 -4
- package/lib/{Slot-ITby_hMb.js.map → Slot-BkYrj_uC.js.map} +1 -1
- package/lib/{SyntaxHighlight-CqKHkyEy.js → SyntaxHighlight-CH9OUJre.js} +2 -2
- package/lib/{SyntaxHighlight-CqKHkyEy.js.map → SyntaxHighlight-CH9OUJre.js.map} +1 -1
- package/lib/{Toc-Csq3UNtW.js → Toc-DRxqEsFc.js} +2 -2
- package/lib/{Toc-Csq3UNtW.js.map → Toc-DRxqEsFc.js.map} +1 -1
- package/lib/{circular-BP4OrHFK.js → circular-wJaV4vh_.js} +2 -2
- package/lib/{circular-BP4OrHFK.js.map → circular-wJaV4vh_.js.map} +1 -1
- package/lib/{createServer-zu4cDiPe.js → createServer-DN5AJLcN.js} +3 -3
- package/lib/{createServer-zu4cDiPe.js.map → createServer-DN5AJLcN.js.map} +1 -1
- package/lib/{errors-CPPSp5F4.js → errors-D_5vKvUq.js} +3 -3
- package/lib/{errors-CPPSp5F4.js.map → errors-D_5vKvUq.js.map} +1 -1
- package/lib/hook-CHXroBFt.js +1503 -0
- package/lib/hook-CHXroBFt.js.map +1 -0
- package/lib/{index-jWXxqkni.js → index-DJVaRmzI.js} +63 -62
- package/lib/index-DJVaRmzI.js.map +1 -0
- package/lib/{mutation-C1XCQTQL.js → mutation-BpcyTgWI.js} +2 -2
- package/lib/{mutation-C1XCQTQL.js.map → mutation-BpcyTgWI.js.map} +1 -1
- package/lib/ui/SyntaxHighlight.js +2 -2
- package/lib/{useMutation-BKvPttRn.js → useMutation-N4ockVKi.js} +3 -3
- package/lib/{useMutation-BKvPttRn.js.map → useMutation-N4ockVKi.js.map} +1 -1
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-azureb2c.js +2 -2
- package/lib/zudoku.auth-clerk.js +2 -2
- package/lib/zudoku.auth-openid.js +2 -2
- package/lib/zudoku.components.js +2756 -3424
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.hooks.js +2 -2
- package/lib/zudoku.plugin-api-catalog.js +44 -44
- package/lib/zudoku.plugin-api-catalog.js.map +1 -1
- package/lib/zudoku.plugin-api-keys.js +42 -39
- package/lib/zudoku.plugin-api-keys.js.map +1 -1
- package/lib/zudoku.plugin-custom-pages.js +22 -16
- package/lib/zudoku.plugin-custom-pages.js.map +1 -1
- package/lib/zudoku.plugin-markdown.js +20 -69
- package/lib/zudoku.plugin-markdown.js.map +1 -1
- package/lib/zudoku.plugin-openapi.js +5 -5
- package/lib/zudoku.plugin-search-pagefind.js +2 -2
- package/lib/zudoku.plugins.js.map +1 -1
- package/package.json +12 -9
- package/src/app/ZuploBuildConfig.ts +1 -1
- package/src/app/demo.tsx +4 -3
- package/src/app/main.css +5 -0
- package/src/app/main.tsx +6 -5
- package/src/app/standalone.tsx +4 -3
- package/src/lib/components/BuildCheck.tsx +1 -1
- package/src/lib/components/Header.tsx +5 -3
- package/src/lib/components/Heading.tsx +7 -3
- package/src/lib/components/Main.tsx +8 -8
- package/src/lib/components/MobileTopNavigation.tsx +12 -11
- package/src/lib/components/PageProgress.tsx +28 -0
- package/src/lib/components/TopNavigation.tsx +57 -66
- package/src/lib/components/context/ZudokuContext.ts +50 -32
- package/src/lib/components/navigation/{Sidebar.tsx → Navigation.tsx} +18 -16
- package/src/lib/components/navigation/{SidebarBadge.tsx → NavigationBadge.tsx} +1 -1
- package/src/lib/components/navigation/{SidebarCategory.tsx → NavigationCategory.tsx} +16 -14
- package/src/lib/components/navigation/{SidebarItem.tsx → NavigationItem.tsx} +23 -17
- package/src/lib/components/navigation/{SidebarWrapper.tsx → NavigationWrapper.tsx} +2 -2
- package/src/lib/components/navigation/utils.ts +27 -28
- package/src/lib/core/ZudokuContext.ts +9 -15
- package/src/lib/core/plugins.ts +2 -2
- package/src/lib/hooks/useEvent.test.tsx +7 -5
- package/src/lib/plugins/api-catalog/Catalog.tsx +1 -1
- package/src/lib/plugins/api-catalog/index.tsx +19 -19
- package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +6 -5
- package/src/lib/plugins/custom-pages/index.tsx +20 -11
- package/src/lib/plugins/markdown/MdxPage.tsx +6 -3
- package/src/lib/plugins/markdown/index.tsx +19 -40
- package/src/lib/plugins/openapi/OperationList.tsx +1 -1
- package/src/lib/plugins/openapi/OperationListItem.tsx +1 -1
- package/src/lib/plugins/openapi/SchemaList.tsx +2 -2
- package/src/lib/plugins/openapi/graphql/gql.ts +5 -5
- package/src/lib/plugins/openapi/graphql/graphql.ts +6 -6
- package/src/lib/plugins/openapi/index.tsx +11 -11
- package/src/lib/plugins/openapi/interfaces.ts +3 -3
- package/src/lib/plugins/openapi/util/{createSidebarCategory.tsx → createNavigationCategory.tsx} +6 -5
- package/src/lib/plugins/openapi/util/getRoutes.tsx +2 -2
- package/src/lib/plugins/openapi/util/methodColorMap.tsx +1 -1
- package/src/lib/util/useScrollToAnchor.ts +3 -3
- package/dist/config/validators/InputSidebarSchema.d.ts +0 -220
- package/dist/config/validators/InputSidebarSchema.js +0 -63
- package/dist/config/validators/InputSidebarSchema.js.map +0 -1
- package/dist/config/validators/SidebarSchema.d.ts +0 -46
- package/dist/config/validators/SidebarSchema.js +0 -118
- package/dist/config/validators/SidebarSchema.js.map +0 -1
- package/dist/lib/components/navigation/Sidebar.d.ts +0 -5
- package/dist/lib/components/navigation/Sidebar.js +0 -10
- package/dist/lib/components/navigation/Sidebar.js.map +0 -1
- package/dist/lib/components/navigation/SidebarBadge.js.map +0 -1
- package/dist/lib/components/navigation/SidebarCategory.d.ts +0 -5
- package/dist/lib/components/navigation/SidebarCategory.js.map +0 -1
- package/dist/lib/components/navigation/SidebarItem.d.ts +0 -6
- package/dist/lib/components/navigation/SidebarItem.js +0 -44
- package/dist/lib/components/navigation/SidebarItem.js.map +0 -1
- package/dist/lib/components/navigation/SidebarWrapper.js.map +0 -1
- package/dist/lib/plugins/markdown/resolver.d.ts +0 -32
- package/dist/lib/plugins/markdown/resolver.js +0 -46
- package/dist/lib/plugins/markdown/resolver.js.map +0 -1
- package/dist/lib/plugins/openapi/util/createSidebarCategory.d.ts +0 -9
- package/dist/lib/plugins/openapi/util/createSidebarCategory.js.map +0 -1
- package/dist/vite/plugin-sidebar.js.map +0 -1
- package/lib/Markdown-C5j8kKSX.js.map +0 -1
- package/lib/MdxPage-CKTMf1cR.js.map +0 -1
- package/lib/OasProvider-_GzmsbMg.js +0 -33
- package/lib/OasProvider-_GzmsbMg.js.map +0 -1
- package/lib/SchemaList-Dgc0A8x5.js.map +0 -1
- package/lib/hook-7wZANGJP.js +0 -1483
- package/lib/hook-7wZANGJP.js.map +0 -1
- package/lib/index-jWXxqkni.js.map +0 -1
- package/lib/joinPath-B7kNnUX4.js +0 -8
- package/lib/joinPath-B7kNnUX4.js.map +0 -1
- package/src/lib/plugins/markdown/resolver.ts +0 -59
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
EyeIcon,
|
|
11
11
|
EyeOffIcon,
|
|
12
12
|
PencilLineIcon,
|
|
13
|
-
|
|
13
|
+
RefreshCwIcon,
|
|
14
14
|
TrashIcon,
|
|
15
15
|
XIcon,
|
|
16
16
|
} from "lucide-react";
|
|
@@ -278,18 +278,19 @@ export const SettingsApiKeys = ({ service }: { service: ApiKeyService }) => {
|
|
|
278
278
|
<div className="flex justify-end">
|
|
279
279
|
{service.updateConsumer && (
|
|
280
280
|
<Button
|
|
281
|
-
size="icon"
|
|
282
281
|
variant="ghost"
|
|
283
282
|
onClick={() =>
|
|
284
283
|
handleStartEdit(consumers.id, consumers.label)
|
|
285
284
|
}
|
|
286
285
|
className={cn(
|
|
286
|
+
"flex gap-2",
|
|
287
287
|
editingConsumerId === consumers.id &&
|
|
288
288
|
"opacity-0! pointer-events-none",
|
|
289
289
|
)}
|
|
290
290
|
disabled={editingConsumerId === consumers.id}
|
|
291
291
|
>
|
|
292
292
|
<PencilLineIcon size={16} />
|
|
293
|
+
Edit label
|
|
293
294
|
</Button>
|
|
294
295
|
)}
|
|
295
296
|
{service.rollKey && (
|
|
@@ -299,9 +300,9 @@ export const SettingsApiKeys = ({ service }: { service: ApiKeyService }) => {
|
|
|
299
300
|
title="Roll this key"
|
|
300
301
|
variant="ghost"
|
|
301
302
|
disabled={rollKeyMutation.isPending}
|
|
302
|
-
className="flex items-center gap-
|
|
303
|
+
className="flex items-center gap-2"
|
|
303
304
|
>
|
|
304
|
-
<
|
|
305
|
+
<RefreshCwIcon
|
|
305
306
|
size={16}
|
|
306
307
|
className={
|
|
307
308
|
rollKeyMutation.isPending
|
|
@@ -309,7 +310,7 @@ export const SettingsApiKeys = ({ service }: { service: ApiKeyService }) => {
|
|
|
309
310
|
: undefined
|
|
310
311
|
}
|
|
311
312
|
/>
|
|
312
|
-
Roll
|
|
313
|
+
Roll key
|
|
313
314
|
</Button>
|
|
314
315
|
</DialogTrigger>
|
|
315
316
|
<DialogContent>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type ComponentType, type ReactNode } from "react";
|
|
2
2
|
import type { RouteObject } from "react-router";
|
|
3
|
-
import type {
|
|
3
|
+
import type { NavigationItem } from "../../../config/validators/NavigationSchema.js";
|
|
4
|
+
import { traverseNavigation } from "../../components/navigation/utils.js";
|
|
5
|
+
import type { NavigationPlugin } from "../../core/plugins.js";
|
|
4
6
|
import type { ExposedComponentProps } from "../../util/useExposedProps.js";
|
|
5
7
|
import { CustomPage } from "./CustomPage.js";
|
|
6
8
|
|
|
@@ -12,13 +14,20 @@ export type CustomPageConfig = {
|
|
|
12
14
|
};
|
|
13
15
|
|
|
14
16
|
export const customPagesPlugin = (
|
|
15
|
-
|
|
16
|
-
):
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
17
|
+
navigation: NavigationItem[] = [],
|
|
18
|
+
): NavigationPlugin => ({
|
|
19
|
+
getRoutes: (): RouteObject[] => {
|
|
20
|
+
const customPages: RouteObject[] = [];
|
|
21
|
+
|
|
22
|
+
traverseNavigation(navigation, (item) => {
|
|
23
|
+
if (item.type === "custom-page") {
|
|
24
|
+
customPages.push({
|
|
25
|
+
path: item.path,
|
|
26
|
+
element: <CustomPage {...item} />,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
return customPages;
|
|
32
|
+
},
|
|
33
|
+
});
|
|
@@ -25,12 +25,12 @@ declare global {
|
|
|
25
25
|
|
|
26
26
|
const MarkdownHeadings = {
|
|
27
27
|
h2: ({ children, id }) => (
|
|
28
|
-
<Heading level={2} id={id}
|
|
28
|
+
<Heading level={2} id={id} registerNavigationAnchor>
|
|
29
29
|
{children}
|
|
30
30
|
</Heading>
|
|
31
31
|
),
|
|
32
32
|
h3: ({ children, id }) => (
|
|
33
|
-
<Heading level={3} id={id}
|
|
33
|
+
<Heading level={3} id={id} registerNavigationAnchor>
|
|
34
34
|
{children}
|
|
35
35
|
</Heading>
|
|
36
36
|
),
|
|
@@ -58,7 +58,10 @@ export const MdxPage = ({
|
|
|
58
58
|
const pageTitle =
|
|
59
59
|
tableOfContents.find((item) => item.depth === 1)?.value ?? title;
|
|
60
60
|
const hidePager =
|
|
61
|
-
frontmatter.
|
|
61
|
+
frontmatter.disable_pager ??
|
|
62
|
+
frontmatter.disablePager ??
|
|
63
|
+
defaultOptions?.disablePager ??
|
|
64
|
+
false;
|
|
62
65
|
|
|
63
66
|
const tocEntries =
|
|
64
67
|
tableOfContents.find((item) => item.depth === 1)?.children ??
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { Toc } from "@stefanprobst/rehype-extract-toc";
|
|
2
2
|
import type { MDXProps } from "mdx/types.js";
|
|
3
3
|
import { type JSX } from "react";
|
|
4
|
-
import type { RouteObject } from "react-router";
|
|
5
4
|
import type { ZudokuDocsConfig } from "../../../config/validators/validate.js";
|
|
6
5
|
import type { ZudokuPlugin } from "../../core/plugins.js";
|
|
7
|
-
import { DocResolver } from "./resolver.js";
|
|
8
6
|
|
|
9
7
|
export interface MarkdownPluginOptions extends ZudokuDocsConfig {
|
|
10
8
|
fileImports: Record<string, () => Promise<MDXImport>>;
|
|
@@ -20,6 +18,7 @@ export type Frontmatter = {
|
|
|
20
18
|
category?: string;
|
|
21
19
|
toc?: boolean;
|
|
22
20
|
disablePager?: boolean;
|
|
21
|
+
disable_pager?: boolean;
|
|
23
22
|
};
|
|
24
23
|
|
|
25
24
|
export type MDXImport = {
|
|
@@ -30,47 +29,27 @@ export type MDXImport = {
|
|
|
30
29
|
};
|
|
31
30
|
|
|
32
31
|
export const markdownPlugin = (
|
|
33
|
-
options: MarkdownPluginOptions
|
|
32
|
+
options: MarkdownPluginOptions,
|
|
34
33
|
): ZudokuPlugin => ({
|
|
35
34
|
getRoutes: () => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const route: RouteObject = {
|
|
55
|
-
path: routePath,
|
|
56
|
-
lazy: async () => {
|
|
57
|
-
const { MdxPage } = await import("./MdxPage.js");
|
|
58
|
-
const { default: Component, ...props } = await importPromise();
|
|
59
|
-
return {
|
|
60
|
-
element: (
|
|
61
|
-
<MdxPage
|
|
62
|
-
file={file}
|
|
63
|
-
mdxComponent={Component}
|
|
64
|
-
{...props}
|
|
65
|
-
defaultOptions={defaultOptions}
|
|
66
|
-
/>
|
|
67
|
-
),
|
|
68
|
-
};
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
routeMap.set(routePath, route);
|
|
35
|
+
return Object.entries(options.fileImports).map(
|
|
36
|
+
([routePath, importPromise]) => ({
|
|
37
|
+
path: routePath,
|
|
38
|
+
lazy: async () => {
|
|
39
|
+
const { MdxPage } = await import("./MdxPage.js");
|
|
40
|
+
const { default: Component, ...props } = await importPromise();
|
|
41
|
+
return {
|
|
42
|
+
element: (
|
|
43
|
+
<MdxPage
|
|
44
|
+
file={routePath}
|
|
45
|
+
mdxComponent={Component}
|
|
46
|
+
{...props}
|
|
47
|
+
defaultOptions={options.defaultOptions}
|
|
48
|
+
/>
|
|
49
|
+
),
|
|
50
|
+
};
|
|
51
|
+
},
|
|
72
52
|
}),
|
|
73
53
|
);
|
|
74
|
-
return [...routeMap.values()];
|
|
75
54
|
},
|
|
76
55
|
});
|
|
@@ -83,7 +83,7 @@ export function SchemaList() {
|
|
|
83
83
|
<Heading
|
|
84
84
|
level={1}
|
|
85
85
|
id="schemas"
|
|
86
|
-
|
|
86
|
+
registerNavigationAnchor
|
|
87
87
|
className="mb-0"
|
|
88
88
|
>
|
|
89
89
|
Schemas
|
|
@@ -129,7 +129,7 @@ export function SchemaList() {
|
|
|
129
129
|
{schemas.map((schema) => (
|
|
130
130
|
<Collapsible key={schema.name} className="group" defaultOpen>
|
|
131
131
|
<Heading
|
|
132
|
-
|
|
132
|
+
registerNavigationAnchor
|
|
133
133
|
level={2}
|
|
134
134
|
className="flex items-center gap-1 justify-between w-fit"
|
|
135
135
|
id={slugify(schema.name)}
|
|
@@ -19,7 +19,7 @@ type Documents = {
|
|
|
19
19
|
"\n query OperationsForTag(\n $input: JSON!\n $type: SchemaType!\n $tag: String\n $untagged: Boolean\n ) {\n schema(input: $input, type: $type) {\n servers {\n url\n }\n description\n summary\n title\n url\n version\n tag(slug: $tag, untagged: $untagged) {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n next {\n name\n slug\n }\n prev {\n name\n slug\n }\n }\n }\n }\n": typeof types.OperationsForTagDocument;
|
|
20
20
|
"\n query GetSchemas($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n title\n description\n summary\n components {\n schemas {\n name\n schema\n extensions\n }\n }\n }\n }\n": typeof types.GetSchemasDocument;
|
|
21
21
|
"\n query getServerQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n }\n": typeof types.GetServerQueryDocument;
|
|
22
|
-
"\n query
|
|
22
|
+
"\n query GetNavigationOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n tags {\n slug\n name\n extensions\n operations {\n summary\n slug\n method\n operationId\n path\n }\n }\n components {\n schemas {\n __typename\n }\n }\n }\n }\n": typeof types.GetNavigationOperationsDocument;
|
|
23
23
|
};
|
|
24
24
|
const documents: Documents = {
|
|
25
25
|
"\n query ServersQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n }\n":
|
|
@@ -34,8 +34,8 @@ const documents: Documents = {
|
|
|
34
34
|
types.GetSchemasDocument,
|
|
35
35
|
"\n query getServerQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n }\n":
|
|
36
36
|
types.GetServerQueryDocument,
|
|
37
|
-
"\n query
|
|
38
|
-
types.
|
|
37
|
+
"\n query GetNavigationOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n tags {\n slug\n name\n extensions\n operations {\n summary\n slug\n method\n operationId\n path\n }\n }\n components {\n schemas {\n __typename\n }\n }\n }\n }\n":
|
|
38
|
+
types.GetNavigationOperationsDocument,
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
/**
|
|
@@ -78,8 +78,8 @@ export function graphql(
|
|
|
78
78
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
79
79
|
*/
|
|
80
80
|
export function graphql(
|
|
81
|
-
source: "\n query
|
|
82
|
-
): typeof import("./graphql.js").
|
|
81
|
+
source: "\n query GetNavigationOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n tags {\n slug\n name\n extensions\n operations {\n summary\n slug\n method\n operationId\n path\n }\n }\n components {\n schemas {\n __typename\n }\n }\n }\n }\n",
|
|
82
|
+
): typeof import("./graphql.js").GetNavigationOperationsDocument;
|
|
83
83
|
|
|
84
84
|
export function graphql(source: string) {
|
|
85
85
|
return (documents as any)[source] ?? {};
|
|
@@ -374,12 +374,12 @@ export type GetServerQueryQuery = {
|
|
|
374
374
|
};
|
|
375
375
|
};
|
|
376
376
|
|
|
377
|
-
export type
|
|
377
|
+
export type GetNavigationOperationsQueryVariables = Exact<{
|
|
378
378
|
input: Scalars["JSON"]["input"];
|
|
379
379
|
type: SchemaType;
|
|
380
380
|
}>;
|
|
381
381
|
|
|
382
|
-
export type
|
|
382
|
+
export type GetNavigationOperationsQuery = {
|
|
383
383
|
__typename?: "Query";
|
|
384
384
|
schema: {
|
|
385
385
|
__typename?: "Schema";
|
|
@@ -642,8 +642,8 @@ export const GetServerQueryDocument = new TypedDocumentString(`
|
|
|
642
642
|
GetServerQueryQuery,
|
|
643
643
|
GetServerQueryQueryVariables
|
|
644
644
|
>;
|
|
645
|
-
export const
|
|
646
|
-
query
|
|
645
|
+
export const GetNavigationOperationsDocument = new TypedDocumentString(`
|
|
646
|
+
query GetNavigationOperations($input: JSON!, $type: SchemaType!) {
|
|
647
647
|
schema(input: $input, type: $type) {
|
|
648
648
|
tags {
|
|
649
649
|
slug
|
|
@@ -665,6 +665,6 @@ export const GetSidebarOperationsDocument = new TypedDocumentString(`
|
|
|
665
665
|
}
|
|
666
666
|
}
|
|
667
667
|
`) as unknown as TypedDocumentString<
|
|
668
|
-
|
|
669
|
-
|
|
668
|
+
GetNavigationOperationsQuery,
|
|
669
|
+
GetNavigationOperationsQueryVariables
|
|
670
670
|
>;
|
|
@@ -7,16 +7,16 @@ import { Button } from "../../ui/Button.js";
|
|
|
7
7
|
import { joinUrl } from "../../util/joinUrl.js";
|
|
8
8
|
import { GraphQLClient } from "./client/GraphQLClient.js";
|
|
9
9
|
import { createQuery } from "./client/useCreateQuery.js";
|
|
10
|
-
import type {
|
|
10
|
+
import type { GetNavigationOperationsQuery as GetNavigationOperationsQueryResult } from "./graphql/graphql.js";
|
|
11
11
|
import { graphql } from "./graphql/index.js";
|
|
12
12
|
import { type OasPluginConfig } from "./interfaces.js";
|
|
13
13
|
import type { PlaygroundContentProps } from "./playground/Playground.js";
|
|
14
14
|
import { PlaygroundDialog } from "./playground/PlaygroundDialog.js";
|
|
15
|
-
import {
|
|
15
|
+
import { createNavigationCategory } from "./util/createNavigationCategory.js";
|
|
16
16
|
import { getRoutes, getVersions } from "./util/getRoutes.js";
|
|
17
17
|
|
|
18
|
-
export const
|
|
19
|
-
query
|
|
18
|
+
export const GetNavigationOperationsQuery = graphql(`
|
|
19
|
+
query GetNavigationOperations($input: JSON!, $type: SchemaType!) {
|
|
20
20
|
schema(input: $input, type: $type) {
|
|
21
21
|
tags {
|
|
22
22
|
slug
|
|
@@ -40,14 +40,14 @@ export const GetSidebarOperationsQuery = graphql(`
|
|
|
40
40
|
`);
|
|
41
41
|
|
|
42
42
|
export type OperationResult =
|
|
43
|
-
|
|
43
|
+
GetNavigationOperationsQueryResult["schema"]["tags"][number]["operations"][number];
|
|
44
44
|
|
|
45
45
|
export type OpenApiPluginOptions = OasPluginConfig;
|
|
46
46
|
|
|
47
47
|
export const UNTAGGED_PATH = "~endpoints";
|
|
48
48
|
|
|
49
49
|
export const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {
|
|
50
|
-
const basePath = joinUrl(config.
|
|
50
|
+
const basePath = joinUrl(config.path);
|
|
51
51
|
const client = new GraphQLClient(config);
|
|
52
52
|
|
|
53
53
|
return {
|
|
@@ -117,7 +117,7 @@ export const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {
|
|
|
117
117
|
);
|
|
118
118
|
},
|
|
119
119
|
}),
|
|
120
|
-
|
|
120
|
+
getNavigation: async (path, context) => {
|
|
121
121
|
if (!matchPath({ path: basePath, end: false }, path)) {
|
|
122
122
|
return [];
|
|
123
123
|
}
|
|
@@ -133,7 +133,7 @@ export const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {
|
|
|
133
133
|
const { type } = config;
|
|
134
134
|
const input = type === "file" ? config.input[version!] : config.input;
|
|
135
135
|
|
|
136
|
-
const query = createQuery(client,
|
|
136
|
+
const query = createQuery(client, GetNavigationOperationsQuery, {
|
|
137
137
|
type,
|
|
138
138
|
input,
|
|
139
139
|
});
|
|
@@ -150,7 +150,7 @@ export const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {
|
|
|
150
150
|
const isCollapsible =
|
|
151
151
|
tag.extensions?.["x-zudoku-collapsible"] ?? true;
|
|
152
152
|
|
|
153
|
-
return
|
|
153
|
+
return createNavigationCategory({
|
|
154
154
|
label: tag.name,
|
|
155
155
|
path: categoryPath,
|
|
156
156
|
operations: tag.operations,
|
|
@@ -165,7 +165,7 @@ export const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {
|
|
|
165
165
|
|
|
166
166
|
if (untaggedOperations) {
|
|
167
167
|
categories.push(
|
|
168
|
-
|
|
168
|
+
createNavigationCategory({
|
|
169
169
|
label: "Other endpoints",
|
|
170
170
|
path: joinUrl(basePath, versionParam, UNTAGGED_PATH),
|
|
171
171
|
operations: untaggedOperations,
|
|
@@ -178,7 +178,7 @@ export const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {
|
|
|
178
178
|
categories.push({
|
|
179
179
|
type: "link" as const,
|
|
180
180
|
label: "Schemas",
|
|
181
|
-
|
|
181
|
+
to: joinUrl(basePath, versionParam, "~schemas"),
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
|
|
@@ -32,7 +32,7 @@ type Content = {
|
|
|
32
32
|
examples?: Array<Example> | null;
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
export type
|
|
35
|
+
export type TransformExamplesFn = (options: {
|
|
36
36
|
content: Content[];
|
|
37
37
|
context: ZudokuContext;
|
|
38
38
|
auth: AuthState;
|
|
@@ -42,7 +42,7 @@ export type transformExamples = (options: {
|
|
|
42
42
|
|
|
43
43
|
type BaseOasConfig = {
|
|
44
44
|
server?: string;
|
|
45
|
-
|
|
45
|
+
path?: string;
|
|
46
46
|
skipPreload?: boolean;
|
|
47
47
|
tagPages?: Array<string>;
|
|
48
48
|
schemaImports?: SchemaImports;
|
|
@@ -52,7 +52,7 @@ type BaseOasConfig = {
|
|
|
52
52
|
disableSidecar?: boolean;
|
|
53
53
|
showVersionSelect?: "always" | "if-available" | "hide";
|
|
54
54
|
expandAllTags?: boolean;
|
|
55
|
-
transformExamples?:
|
|
55
|
+
transformExamples?: TransformExamplesFn;
|
|
56
56
|
};
|
|
57
57
|
};
|
|
58
58
|
|
package/src/lib/plugins/openapi/util/{createSidebarCategory.tsx → createNavigationCategory.tsx}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { NavigationItem } from "../../../../config/validators/NavigationSchema.js";
|
|
2
2
|
import type { OperationResult } from "../index.js";
|
|
3
3
|
import { MethodColorMap } from "./methodColorMap.js";
|
|
4
4
|
|
|
5
|
-
export const
|
|
5
|
+
export const createNavigationCategory = ({
|
|
6
6
|
label,
|
|
7
7
|
path,
|
|
8
8
|
operations,
|
|
@@ -14,12 +14,13 @@ export const createSidebarCategory = ({
|
|
|
14
14
|
operations: OperationResult[];
|
|
15
15
|
collapsible?: boolean;
|
|
16
16
|
collapsed?: boolean;
|
|
17
|
-
}):
|
|
17
|
+
}): NavigationItem => ({
|
|
18
18
|
type: "category",
|
|
19
19
|
label,
|
|
20
20
|
link: {
|
|
21
21
|
type: "doc" as const,
|
|
22
|
-
|
|
22
|
+
path,
|
|
23
|
+
file: path,
|
|
23
24
|
label,
|
|
24
25
|
},
|
|
25
26
|
collapsible,
|
|
@@ -27,7 +28,7 @@ export const createSidebarCategory = ({
|
|
|
27
28
|
items: operations.map((operation) => ({
|
|
28
29
|
type: "link" as const,
|
|
29
30
|
label: operation.summary ?? operation.path,
|
|
30
|
-
|
|
31
|
+
to: `${path}#${operation.slug}`,
|
|
31
32
|
badge: {
|
|
32
33
|
label: operation.method,
|
|
33
34
|
color: MethodColorMap[operation.method.toLowerCase()]!,
|
|
@@ -12,7 +12,7 @@ import type { GraphQLClient } from "../client/GraphQLClient.js";
|
|
|
12
12
|
import { useCreateQuery } from "../client/useCreateQuery.js";
|
|
13
13
|
import { useOasConfig } from "../context.js";
|
|
14
14
|
import {
|
|
15
|
-
|
|
15
|
+
GetNavigationOperationsQuery,
|
|
16
16
|
type OpenApiPluginOptions,
|
|
17
17
|
UNTAGGED_PATH,
|
|
18
18
|
} from "../index.js";
|
|
@@ -71,7 +71,7 @@ const NonTagPagesOperationList = ({
|
|
|
71
71
|
const { type, input } = useOasConfig();
|
|
72
72
|
const { tag: currentTag } = useParams();
|
|
73
73
|
const location = useLocation();
|
|
74
|
-
const query = useCreateQuery(
|
|
74
|
+
const query = useCreateQuery(GetNavigationOperationsQuery, { type, input });
|
|
75
75
|
const {
|
|
76
76
|
data: { schema },
|
|
77
77
|
} = useSuspenseQuery(query);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef } from "react";
|
|
2
2
|
import { useLocation } from "react-router";
|
|
3
3
|
import { useViewportAnchor } from "../components/context/ViewportAnchorContext.js";
|
|
4
|
-
import { DATA_ANCHOR_ATTR } from "../components/navigation/
|
|
4
|
+
import { DATA_ANCHOR_ATTR } from "../components/navigation/NavigationItem.js";
|
|
5
5
|
import { scrollIntoViewIfNeeded } from "./scrollIntoViewIfNeeded.js";
|
|
6
6
|
|
|
7
7
|
export const useScrollToHash = () => {
|
|
@@ -11,8 +11,8 @@ export const useScrollToHash = () => {
|
|
|
11
11
|
(hash: string) => {
|
|
12
12
|
const cleanHash = hash.replace(/^#/, "");
|
|
13
13
|
|
|
14
|
-
// Operation list items might have subdivisions that the
|
|
15
|
-
// The subdivisions are separated by a slash so we need to remove everything before the slash to get the
|
|
14
|
+
// Operation list items might have subdivisions that the navigation doesn't show.
|
|
15
|
+
// The subdivisions are separated by a slash so we need to remove everything before the slash to get the navigation correct item.
|
|
16
16
|
const linkHash = cleanHash.split("/").at(0)!;
|
|
17
17
|
const element = document.getElementById(decodeURIComponent(cleanHash));
|
|
18
18
|
|