zudoku 0.3.0-dev.86 → 0.3.0-dev.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/config/validators/InputSidebarSchema.d.ts +176 -0
  2. package/dist/config/validators/InputSidebarSchema.js +71 -0
  3. package/dist/config/validators/InputSidebarSchema.js.map +1 -0
  4. package/dist/config/validators/SidebarSchema.d.ts +13 -173
  5. package/dist/config/validators/SidebarSchema.js +75 -70
  6. package/dist/config/validators/SidebarSchema.js.map +1 -1
  7. package/dist/config/validators/validate.d.ts +5 -5
  8. package/dist/config/validators/validate.js +4 -3
  9. package/dist/config/validators/validate.js.map +1 -1
  10. package/dist/index.d.ts +1 -1
  11. package/dist/lib/components/context/DevPortalProvider.d.ts +1 -1
  12. package/dist/lib/components/context/DevPortalProvider.js +2 -2
  13. package/dist/lib/components/context/DevPortalProvider.js.map +1 -1
  14. package/dist/lib/components/navigation/SidebarCategory.d.ts +2 -2
  15. package/dist/lib/components/navigation/SidebarItem.d.ts +2 -2
  16. package/dist/lib/components/navigation/SidebarItem.js +1 -1
  17. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  18. package/dist/lib/components/navigation/utils.d.ts +6 -6
  19. package/dist/lib/components/navigation/utils.js.map +1 -1
  20. package/dist/lib/core/DevPortalContext.d.ts +3 -3
  21. package/dist/lib/core/DevPortalContext.js +2 -2
  22. package/dist/lib/core/DevPortalContext.js.map +1 -1
  23. package/dist/lib/core/plugins.d.ts +2 -2
  24. package/dist/lib/plugins/openapi/index.js +1 -1
  25. package/dist/lib/plugins/openapi/index.js.map +1 -1
  26. package/dist/vite/plugin-sidebar.js +1 -1
  27. package/dist/vite/plugin-sidebar.js.map +1 -1
  28. package/lib/{AuthenticationPlugin-DgwV0hVu.js → AuthenticationPlugin-B68Pelzd.js} +2 -2
  29. package/lib/{AuthenticationPlugin-DgwV0hVu.js.map → AuthenticationPlugin-B68Pelzd.js.map} +1 -1
  30. package/lib/{Combination-DkycFHkm.js → Combination-BOiWt0Ng.js} +2 -2
  31. package/lib/{Combination-DkycFHkm.js.map → Combination-BOiWt0Ng.js.map} +1 -1
  32. package/lib/{DevPortalProvider-CTxoCHIT.js → DevPortalProvider-D6Tr_uD_.js} +2 -2
  33. package/lib/{DevPortalProvider-CTxoCHIT.js.map → DevPortalProvider-D6Tr_uD_.js.map} +1 -1
  34. package/lib/{Input-BclXSY0g.js → Input-LkQSHT1l.js} +3 -3
  35. package/lib/{Input-BclXSY0g.js.map → Input-LkQSHT1l.js.map} +1 -1
  36. package/lib/{MdxPage-Crlr0GmN.js → MdxPage-PhgXcrKE.js} +2 -2
  37. package/lib/{MdxPage-Crlr0GmN.js.map → MdxPage-PhgXcrKE.js.map} +1 -1
  38. package/lib/{OperationList-CMH3DPpj.js → OperationList-DDLgAusb.js} +4 -4
  39. package/lib/{OperationList-CMH3DPpj.js.map → OperationList-DDLgAusb.js.map} +1 -1
  40. package/lib/{Route-CwXfyIUw.js → Route-2Br45GpS.js} +2 -2
  41. package/lib/{Route-CwXfyIUw.js.map → Route-2Br45GpS.js.map} +1 -1
  42. package/lib/{Spinner-fF-Xv-gw.js → Spinner-CeuEm0Qc.js} +2 -2
  43. package/lib/{Spinner-fF-Xv-gw.js.map → Spinner-CeuEm0Qc.js.map} +1 -1
  44. package/lib/{index-DUrF63A6.js → index-BuVwhb9F.js} +8 -8
  45. package/lib/{index-DUrF63A6.js.map → index-BuVwhb9F.js.map} +1 -1
  46. package/lib/{index-DkuZvRNP.js → index-DiSzJkoL.js} +3 -3
  47. package/lib/{index-DkuZvRNP.js.map → index-DiSzJkoL.js.map} +1 -1
  48. package/lib/{utils-CzT_9Tsn.js → utils-Ctz-5ywK.js} +2 -2
  49. package/lib/{utils-CzT_9Tsn.js.map → utils-Ctz-5ywK.js.map} +1 -1
  50. package/lib/zudoku.auth-clerk.js +1 -1
  51. package/lib/zudoku.auth-openid.js +1 -1
  52. package/lib/zudoku.components.js +189 -189
  53. package/lib/zudoku.components.js.map +1 -1
  54. package/lib/zudoku.plugin-api-keys.js +3 -3
  55. package/lib/zudoku.plugin-markdown.js +1 -1
  56. package/lib/zudoku.plugin-openapi.js +3 -3
  57. package/package.json +1 -1
  58. package/src/lib/components/context/DevPortalProvider.ts +2 -2
  59. package/src/lib/components/navigation/SidebarCategory.tsx +2 -2
  60. package/src/lib/components/navigation/SidebarItem.tsx +7 -3
  61. package/src/lib/components/navigation/utils.ts +9 -9
  62. package/src/lib/core/DevPortalContext.ts +4 -4
  63. package/src/lib/core/plugins.ts +2 -2
  64. package/src/lib/plugins/openapi/index.tsx +3 -3
  65. package/dist/config/validators/ResolvedSidebarSchema.d.ts +0 -18
  66. package/dist/config/validators/ResolvedSidebarSchema.js +0 -76
  67. package/dist/config/validators/ResolvedSidebarSchema.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { j as e } from "./jsx-runtime-B6kdoens.js";
2
2
  import { a as p, R as f } from "./SlotletProvider-CzMAO73_.js";
3
- import { u as g, a as u, I as j, S as v, b as k, c as w, d as b, e as K, f as y } from "./Input-BclXSY0g.js";
3
+ import { u as g, a as u, I as j, S as v, b as k, c as w, d as b, e as K, f as y } from "./Input-LkQSHT1l.js";
4
4
  import { b as N, L as x, O as E } from "./index-7kcHaXD6.js";
5
- import { u as h, q as A, t as S } from "./DevPortalProvider-CTxoCHIT.js";
6
- import { B as l, p as I } from "./Combination-DkycFHkm.js";
5
+ import { u as h, q as A, t as S } from "./DevPortalProvider-D6Tr_uD_.js";
6
+ import { B as l, p as I } from "./Combination-BOiWt0Ng.js";
7
7
  import { D as P } from "./DeveloperHint-BQSFXH01.js";
8
8
  import { useState as D } from "react";
9
9
  import { c as d, a as q } from "./Markdown-B_Gax7at.js";
@@ -6,7 +6,7 @@ const u = (t, e) => Object.entries(t).flatMap(([a, r]) => {
6
6
  return {
7
7
  path: s.at(-1) === "index" ? s.slice(0, -1).join("/") : o,
8
8
  lazy: async () => {
9
- const { MdxPage: i } = await import("./MdxPage-Crlr0GmN.js"), { default: p, ...c } = await r();
9
+ const { MdxPage: i } = await import("./MdxPage-PhgXcrKE.js"), { default: p, ...c } = await r();
10
10
  return {
11
11
  element: /* @__PURE__ */ m.jsx(
12
12
  i,
@@ -1,9 +1,9 @@
1
1
  import "./jsx-runtime-B6kdoens.js";
2
- import { o as l } from "./index-DUrF63A6.js";
2
+ import { o as l } from "./index-BuVwhb9F.js";
3
3
  import "./urql-DrBfkb92.js";
4
- import "./DevPortalProvider-CTxoCHIT.js";
4
+ import "./DevPortalProvider-D6Tr_uD_.js";
5
5
  import "zudoku/openapi-worker";
6
- import "./Combination-DkycFHkm.js";
6
+ import "./Combination-BOiWt0Ng.js";
7
7
  import "./Markdown-B_Gax7at.js";
8
8
  import "./joinPath-VeNuJa7y.js";
9
9
  import "./router-BiRCp01d.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.3.0-dev.86",
3
+ "version": "0.3.0-dev.87",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -38,14 +38,14 @@ export const useTopNavigationItem = () => {
38
38
  };
39
39
 
40
40
  export const useNavigation = () => {
41
- const { getPluginNavigation, sidebars } = useDevPortal();
41
+ const { getPluginSidebar, sidebars } = useDevPortal();
42
42
  const navItem = useTopNavigationItem();
43
43
  const path = navItem?.id;
44
44
  const currentSidebar = path ? sidebars[path] ?? [] : [];
45
45
 
46
46
  return useSuspenseQuery({
47
47
  queryFn: async () => {
48
- const pluginSidebar = path ? await getPluginNavigation(path) : [];
48
+ const pluginSidebar = path ? await getPluginSidebar(path) : [];
49
49
 
50
50
  return {
51
51
  items: [...currentSidebar, ...pluginSidebar],
@@ -2,7 +2,7 @@ import * as Collapsible from "@radix-ui/react-collapsible";
2
2
  import { ChevronRightIcon } from "lucide-react";
3
3
  import { useEffect, useState } from "react";
4
4
  import { NavLink } from "react-router-dom";
5
- import type { ResolvedSidebarItemCategory } from "../../../config/validators/ResolvedSidebarSchema.js";
5
+ import type { SidebarItemCategory } from "../../../config/validators/SidebarSchema.js";
6
6
  import { cn } from "../../util/cn.js";
7
7
  import { joinPath } from "../../util/joinPath.js";
8
8
  import { useTopNavigationItem } from "../context/DevPortalProvider.js";
@@ -13,7 +13,7 @@ export const SidebarCategory = ({
13
13
  category,
14
14
  level,
15
15
  }: {
16
- category: ResolvedSidebarItemCategory;
16
+ category: SidebarItemCategory;
17
17
  level: number;
18
18
  }) => {
19
19
  const topNavItem = useTopNavigationItem();
@@ -2,7 +2,7 @@ import { cva } from "class-variance-authority";
2
2
  import { ExternalLinkIcon } from "lucide-react";
3
3
  import { NavLink } from "react-router-dom";
4
4
 
5
- import type { ResolvedSidebarItem } from "../../../config/validators/ResolvedSidebarSchema.js";
5
+ import type { SidebarItem as SidebarItemType } from "../../../config/validators/SidebarSchema.js";
6
6
  import { cn } from "../../util/cn.js";
7
7
  import { joinPath } from "../../util/joinPath.js";
8
8
  import { AnchorLink } from "../AnchorLink.js";
@@ -36,7 +36,7 @@ export const SidebarItem = ({
36
36
  item,
37
37
  level = 0,
38
38
  }: {
39
- item: ResolvedSidebarItem;
39
+ item: SidebarItemType;
40
40
  basePath?: string;
41
41
  level?: number;
42
42
  }) => {
@@ -74,7 +74,7 @@ export const SidebarItem = ({
74
74
  {item.label}
75
75
  {item.badge && <SidebarBadge {...item.badge} />}
76
76
  </AnchorLink>
77
- ) : (
77
+ ) : item.href.startsWith("http") ? (
78
78
  <a
79
79
  className={cn(
80
80
  navigationListItem({ isTopLevel: level === 0 }),
@@ -91,6 +91,10 @@ export const SidebarItem = ({
91
91
  <ExternalLinkIcon className="inline ml-1" size={12} />
92
92
  </span>
93
93
  </a>
94
+ ) : (
95
+ <NavLink className={cn(navigationListItem({}), "block")} to={item.href}>
96
+ {item.label}
97
+ </NavLink>
94
98
  );
95
99
  }
96
100
  };
@@ -1,8 +1,8 @@
1
1
  import { useLocation } from "react-router-dom";
2
2
  import type {
3
- ResolvedSidebarItem,
4
- ResolvedSidebarItemCategory,
5
- } from "../../../config/validators/ResolvedSidebarSchema.js";
3
+ SidebarItem,
4
+ SidebarItemCategory,
5
+ } from "../../../config/validators/SidebarSchema.js";
6
6
  import { joinPath } from "../../util/joinPath.js";
7
7
  import {
8
8
  useDevPortal,
@@ -10,12 +10,12 @@ import {
10
10
  } from "../context/DevPortalProvider.js";
11
11
 
12
12
  export type TraverseCallback<T> = (
13
- item: ResolvedSidebarItem,
14
- parentCategories: ResolvedSidebarItem[],
13
+ item: SidebarItem,
14
+ parentCategories: SidebarItem[],
15
15
  ) => T | void;
16
16
 
17
17
  export const traverseSidebar = <T>(
18
- sidebar: ResolvedSidebarItem[],
18
+ sidebar: SidebarItem[],
19
19
  callback: TraverseCallback<T>,
20
20
  ): T | undefined => {
21
21
  for (const item of sidebar) {
@@ -25,9 +25,9 @@ export const traverseSidebar = <T>(
25
25
  };
26
26
 
27
27
  export const traverseSidebarItem = <T>(
28
- item: ResolvedSidebarItem,
28
+ item: SidebarItem,
29
29
  callback: TraverseCallback<T>,
30
- parentCategories: ResolvedSidebarItem[] = [],
30
+ parentCategories: SidebarItem[] = [],
31
31
  ): T | undefined => {
32
32
  const result = callback(item, parentCategories);
33
33
  if (result !== undefined) return result;
@@ -59,7 +59,7 @@ export const useCurrentItem = () => {
59
59
  });
60
60
  };
61
61
 
62
- export const useIsCategoryOpen = (category: ResolvedSidebarItemCategory) => {
62
+ export const useIsCategoryOpen = (category: SidebarItemCategory) => {
63
63
  const location = useLocation();
64
64
  const topNavItem = useTopNavigationItem();
65
65
 
@@ -1,6 +1,6 @@
1
1
  import { QueryClient } from "@tanstack/react-query";
2
2
  import { NavigateFunction } from "react-router-dom";
3
- import type { ResolvedSidebarConfig } from "../../config/validators/ResolvedSidebarSchema.js";
3
+ import type { SidebarConfig } from "../../config/validators/SidebarSchema.js";
4
4
  import { type AuthenticationProvider } from "../authentication/authentication.js";
5
5
  import type { ComponentsContextType } from "../components/context/ComponentsContext.js";
6
6
  import { Slotlets } from "../components/SlotletProvider.js";
@@ -56,7 +56,7 @@ export type ZudokuContextOptions = {
56
56
  page?: Page;
57
57
  authentication?: AuthenticationProvider;
58
58
  topNavigation?: Array<{ id: string; label: string }>;
59
- sidebars?: ResolvedSidebarConfig;
59
+ sidebars?: SidebarConfig;
60
60
  plugins?: DevPortalPlugin[];
61
61
  slotlets?: Slotlets;
62
62
  mdx?: {
@@ -110,10 +110,10 @@ export class DevPortalContext {
110
110
  return keys.flat();
111
111
  };
112
112
 
113
- getPluginNavigation = async (path: string) => {
113
+ getPluginSidebar = async (path: string) => {
114
114
  const navigations = await Promise.all(
115
115
  this.navigationPlugins.map((plugin) =>
116
- plugin.getNavigation?.(joinPath(path)),
116
+ plugin.getSidebar?.(joinPath(path)),
117
117
  ),
118
118
  );
119
119
 
@@ -1,6 +1,6 @@
1
1
  import { type ReactElement } from "react";
2
2
  import { NavigateFunction, type RouteObject } from "react-router-dom";
3
- import type { ResolvedSidebar } from "../../config/validators/ResolvedSidebarSchema.js";
3
+ import type { Sidebar } from "../../config/validators/SidebarSchema.js";
4
4
  import { MdxComponentsType } from "../util/MdxComponents.js";
5
5
  import { DevPortalContext, type ApiIdentity } from "./DevPortalContext.js";
6
6
 
@@ -12,7 +12,7 @@ export type DevPortalPlugin =
12
12
 
13
13
  export interface NavigationPlugin {
14
14
  getRoutes: () => RouteObject[];
15
- getNavigation?: (path: string) => Promise<ResolvedSidebar>;
15
+ getSidebar?: (path: string) => Promise<Sidebar>;
16
16
  }
17
17
 
18
18
  export interface ApiIdentityPlugin {
@@ -10,7 +10,7 @@ import {
10
10
  import { useQuery } from "@tanstack/react-query";
11
11
  import { CirclePlayIcon, LogInIcon } from "lucide-react";
12
12
  import { createClient } from "zudoku/openapi-worker";
13
- import type { ResolvedSidebarItem } from "../../../config/validators/ResolvedSidebarSchema.js";
13
+ import type { SidebarItem } from "../../../config/validators/SidebarSchema.js";
14
14
  import { useAuth } from "../../authentication/hook.js";
15
15
  import { ErrorPage } from "../../components/ErrorPage.js";
16
16
  import { SyntaxHighlight } from "../../components/SyntaxHighlight.js";
@@ -136,7 +136,7 @@ export const openApiPlugin = (
136
136
  );
137
137
  },
138
138
  }),
139
- getNavigation: async (path: string) => {
139
+ getSidebar: async (path: string) => {
140
140
  if (!matchPath({ path: basePath, end: false }, path)) {
141
141
  return [];
142
142
  }
@@ -150,7 +150,7 @@ export const openApiPlugin = (
150
150
 
151
151
  const categories = data.schema.tags
152
152
  .filter((tag) => tag.operations.length > 0)
153
- .map<ResolvedSidebarItem>((tag) => ({
153
+ .map<SidebarItem>((tag) => ({
154
154
  type: "category",
155
155
  label: tag.name ?? "",
156
156
  collapsible: false,
@@ -1,18 +0,0 @@
1
- import type { BaseSidebarItemCategoryLinkDoc, BaseSidebarItemDoc, SidebarItem, SidebarItemCategory, SidebarItemLink } from "./SidebarSchema.js";
2
- export type ResolvedSidebarItemDoc = BaseSidebarItemDoc & {
3
- label: string;
4
- categoryLabel?: string;
5
- };
6
- type ResolvedSidebarItemLink = SidebarItemLink;
7
- type ResolvedSidebarItemCategoryLinkDoc = BaseSidebarItemCategoryLinkDoc & {
8
- label: string;
9
- };
10
- export type ResolvedSidebarItemCategory = Omit<SidebarItemCategory, "items" | "link"> & {
11
- items: ResolvedSidebarItem[];
12
- link?: ResolvedSidebarItemCategoryLinkDoc;
13
- };
14
- export type ResolvedSidebarItem = ResolvedSidebarItemDoc | ResolvedSidebarItemLink | ResolvedSidebarItemCategory;
15
- export declare const resolveSidebar: (rootDir: string, parentId: string, sidebar: SidebarItem[]) => Promise<ResolvedSidebarItem[]>;
16
- export type ResolvedSidebar = ResolvedSidebarItem[];
17
- export type ResolvedSidebarConfig = Record<string, ResolvedSidebar>;
18
- export {};
@@ -1,76 +0,0 @@
1
- import { glob } from "glob";
2
- import matter from "gray-matter";
3
- import fs from "node:fs/promises";
4
- const extractTitleFromContent = (content) => content.match(/^\s*#\s(.*)$/m)?.at(1);
5
- export const resolveSidebar = async (rootDir, parentId, sidebar) => {
6
- const resolveDoc = async (id, categoryLabel) => {
7
- const foundMatches = await glob(`/**/${parentId}/${id}.{md,mdx}`, {
8
- root: rootDir,
9
- });
10
- if (foundMatches.length === 0) {
11
- throw new Error(`No file found for doc ${parentId}/${id}`);
12
- }
13
- if (foundMatches.length > 1) {
14
- throw new Error(`Multiple files found for doc ${parentId}/${id}`);
15
- }
16
- const file = await fs.readFile(foundMatches.at(0));
17
- const { data, content } = matter(file);
18
- const label = data.sidebar_label ?? data.title ?? extractTitleFromContent(content);
19
- if (typeof label !== "string") {
20
- throw new Error(`No title found for doc ${id}`);
21
- }
22
- return {
23
- type: "doc",
24
- id,
25
- label,
26
- categoryLabel,
27
- };
28
- };
29
- const resolveLink = async (id) => {
30
- const doc = await resolveDoc(id);
31
- return {
32
- type: "doc",
33
- id: id,
34
- label: doc.label,
35
- };
36
- };
37
- const resolveSidebarItemCategoryLinkDoc = async (item) => {
38
- if (typeof item === "string") {
39
- return resolveLink(item);
40
- }
41
- const label = item.label ?? (await resolveDoc(item.id)).label;
42
- return { label, ...item };
43
- };
44
- const resolveSidebarItemDoc = async (item, categoryLabel) => {
45
- if (typeof item === "string") {
46
- return resolveDoc(item, categoryLabel);
47
- }
48
- const label = item.label ?? (await resolveDoc(item.id, categoryLabel)).label;
49
- return { ...item, label, categoryLabel };
50
- };
51
- const resolveSidebarItem = async (item, categoryLabel) => {
52
- if (typeof item === "string") {
53
- return resolveDoc(item, categoryLabel);
54
- }
55
- switch (item.type) {
56
- case "doc":
57
- return resolveSidebarItemDoc(item, categoryLabel);
58
- case "link":
59
- return item;
60
- case "category": {
61
- const categoryItem = item;
62
- const items = await Promise.all(categoryItem.items.map((subItem) => resolveSidebarItem(subItem, categoryItem.label)));
63
- const resolvedLink = categoryItem.link
64
- ? await resolveSidebarItemCategoryLinkDoc(categoryItem.link)
65
- : undefined;
66
- return {
67
- ...categoryItem,
68
- items,
69
- link: resolvedLink,
70
- };
71
- }
72
- }
73
- };
74
- return Promise.all(sidebar.map((item) => resolveSidebarItem(item)));
75
- };
76
- //# sourceMappingURL=ResolvedSidebarSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResolvedSidebarSchema.js","sourceRoot":"","sources":["../../../src/config/validators/ResolvedSidebarSchema.ts"],"names":[],"mappings":"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"}