zudoku 0.3.0-dev.24 → 0.3.0-dev.27

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 (88) hide show
  1. package/dist/app/demo.d.ts +2 -0
  2. package/dist/app/demo.js +23 -0
  3. package/dist/app/demo.js.map +1 -0
  4. package/dist/app/main.d.ts +2 -1
  5. package/dist/app/main.js +29 -10
  6. package/dist/app/main.js.map +1 -1
  7. package/dist/app/standalone.d.ts +2 -0
  8. package/dist/app/standalone.js +28 -0
  9. package/dist/app/standalone.js.map +1 -0
  10. package/dist/config/config.d.ts +1 -0
  11. package/dist/lib/components/Error.d.ts +1 -0
  12. package/dist/lib/components/Error.js +10 -0
  13. package/dist/lib/components/Error.js.map +1 -0
  14. package/dist/lib/components/Layout.js +1 -1
  15. package/dist/lib/components/Layout.js.map +1 -1
  16. package/dist/lib/components/Router.js +2 -1
  17. package/dist/lib/components/Router.js.map +1 -1
  18. package/dist/lib/components/TopNavigation.d.ts +1 -1
  19. package/dist/lib/components/TopNavigation.js +4 -0
  20. package/dist/lib/components/TopNavigation.js.map +1 -1
  21. package/dist/lib/plugins/openapi/worker/createSharedWorkerClient.js +3 -0
  22. package/dist/lib/plugins/openapi/worker/createSharedWorkerClient.js.map +1 -1
  23. package/dist/lib/util/logInit.d.ts +1 -0
  24. package/dist/lib/util/logInit.js +9 -0
  25. package/dist/lib/util/logInit.js.map +1 -0
  26. package/dist/vite/config.d.ts +5 -1
  27. package/dist/vite/config.js +16 -9
  28. package/dist/vite/config.js.map +1 -1
  29. package/dist/vite/plugin-api-keys.js +2 -2
  30. package/dist/vite/plugin-api-keys.js.map +1 -1
  31. package/dist/vite/plugin-api.js +1 -1
  32. package/dist/vite/plugin-api.js.map +1 -1
  33. package/dist/vite/plugin-auth.js +2 -2
  34. package/dist/vite/plugin-auth.js.map +1 -1
  35. package/dist/vite/plugin-component.js +1 -1
  36. package/dist/vite/plugin-component.js.map +1 -1
  37. package/dist/vite/plugin-docs.js +7 -6
  38. package/dist/vite/plugin-docs.js.map +1 -1
  39. package/dist/vite/plugin-html.js +1 -9
  40. package/dist/vite/plugin-html.js.map +1 -1
  41. package/dist/vite/plugin-mdx.d.ts +3 -1
  42. package/dist/vite/plugin-mdx.js +4 -4
  43. package/dist/vite/plugin-mdx.js.map +1 -1
  44. package/dist/vite/plugin-openapi-worker.js +1 -1
  45. package/dist/vite/plugin-openapi-worker.js.map +1 -1
  46. package/dist/vite/plugin-redirect.js +4 -1
  47. package/dist/vite/plugin-redirect.js.map +1 -1
  48. package/dist/vite/plugin.js +1 -1
  49. package/dist/vite/plugin.js.map +1 -1
  50. package/lib/{AnchorLink-BzDjVML_.js → AnchorLink-BtVKbEwm.js} +2 -2
  51. package/lib/{DevPortalProvider-DssVwuLz.js → DevPortalProvider--xZTs0RJ.js} +1 -1
  52. package/lib/{Markdown-BX9FqDM4.js → Markdown-oJFqm0uk.js} +2 -2
  53. package/lib/{MdxComponents-DiOAVA3z.js → MdxComponents-CsU8yR42.js} +1 -1
  54. package/lib/{MdxPage-C9wmWulr.js → MdxPage-BV_9ncEk.js} +6 -6
  55. package/lib/{OperationList-CmWB9QNy.js → OperationList-C9t7wPj8.js} +8 -8
  56. package/lib/{Route-QN8KKlcN.js → Route-CHqr53jb.js} +1 -1
  57. package/lib/{Select-BK8C7kpB.js → Select-CNmXi4JU.js} +3 -3
  58. package/lib/{Spinner-CQiMiphN.js → Spinner-By5opWs5.js} +2 -2
  59. package/lib/{hook-Rc146Fwy.js → hook-kVJ4gpk5.js} +1 -1
  60. package/lib/{index-Bf5lvKIp.js → index-CUIxJAeE.js} +1 -1
  61. package/lib/{index-DbU_G5RQ.js → index-Cr3hgaqt.js} +1 -1
  62. package/lib/{index-B5n-zpzS.js → index-CySUl0uj.js} +2 -2
  63. package/lib/{index-B7upi2sn.js → index-fXFJf9Ua.js} +2 -2
  64. package/lib/zudoku.auth-openid.js +1 -1
  65. package/lib/zudoku.components.js +105 -102
  66. package/lib/zudoku.openapi-worker.js +3 -1
  67. package/lib/zudoku.plugin-api-keys.js +5 -5
  68. package/lib/zudoku.plugin-markdown.js +3 -3
  69. package/lib/zudoku.plugin-openapi.js +1 -1
  70. package/lib/zudoku.plugin-redirect.js +1 -1
  71. package/package.json +3 -1
  72. package/src/app/demo-cdn.html +14 -0
  73. package/src/app/demo.html +14 -0
  74. package/src/app/demo.tsx +35 -0
  75. package/src/app/main.css +74 -0
  76. package/src/app/main.tsx +40 -9
  77. package/src/app/standalone.html +16 -0
  78. package/src/app/standalone.tsx +42 -0
  79. package/src/lib/components/Error.tsx +15 -0
  80. package/src/lib/components/Layout.tsx +0 -1
  81. package/src/lib/components/Router.tsx +2 -7
  82. package/src/lib/components/TopNavigation.tsx +5 -0
  83. package/src/lib/plugins/openapi/worker/createSharedWorkerClient.ts +4 -0
  84. package/src/lib/util/logInit.ts +9 -0
  85. package/dist/app/App.d.ts +0 -2
  86. package/dist/app/App.js +0 -32
  87. package/dist/app/App.js.map +0 -1
  88. package/src/app/App.tsx +0 -44
@@ -0,0 +1,14 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Zudoku Demo</title>
8
+ <script type="module" crossorigin src="/latest/demo.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/latest/style.css" />
10
+ </head>
11
+ <body>
12
+ <div id="root"></div>
13
+ </body>
14
+ </html>
@@ -0,0 +1,14 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Zudoku Demo</title>
8
+ <script type="module" crossorigin src="./demo.js"></script>
9
+ <link rel="stylesheet" crossorigin href="./style.css" />
10
+ </head>
11
+ <body>
12
+ <div id="root"></div>
13
+ </body>
14
+ </html>
@@ -0,0 +1,35 @@
1
+ import "./main.css";
2
+
3
+ import "../lib/util/logInit.js";
4
+
5
+ // Base React Component
6
+ import { DevPortal } from "../lib/components/DevPortal.js";
7
+
8
+ import logger from "loglevel";
9
+ import { StrictMode } from "react";
10
+ import { createRoot } from "react-dom/client";
11
+ import type { NavigationItem } from "../lib/core/DevPortalContext.js";
12
+ import { openApiPlugin } from "../lib/plugins/openapi/index.js";
13
+
14
+ const navigation: NavigationItem[] = [
15
+ {
16
+ label: "API Reference",
17
+ path: "/demo",
18
+ categories: [],
19
+ },
20
+ ];
21
+
22
+ const apiUrl = new URL(window.location.href).searchParams.get("api-url");
23
+ logger.info(`API URL: ${apiUrl}`);
24
+ createRoot(document.getElementById("root")!).render(
25
+ <StrictMode>
26
+ <DevPortal
27
+ page={{
28
+ logo: "https://cdn.zuplo.com/www/favicon.png",
29
+ pageTitle: "Developer Portal",
30
+ }}
31
+ navigation={navigation}
32
+ plugins={[openApiPlugin({ type: "url", input: apiUrl!, path: "/demo" })]}
33
+ />
34
+ </StrictMode>,
35
+ );
package/src/app/main.css CHANGED
@@ -2,6 +2,80 @@
2
2
  @tailwind components;
3
3
  @tailwind utilities;
4
4
 
5
+ @font-face {
6
+ font-family: Geist;
7
+ font-style: normal;
8
+ font-weight: 100;
9
+ font-display: swap;
10
+ src: url("https://cdn.zudoku.dev/geist/Geist-Thin.woff2") format("woff2");
11
+ }
12
+
13
+ @font-face {
14
+ font-family: Geist;
15
+ font-style: normal;
16
+ font-weight: 200;
17
+ font-display: swap;
18
+ src: url("https://cdn.zudoku.dev/geist/Geist-UltraLight.woff2")
19
+ format("woff2");
20
+ }
21
+
22
+ @font-face {
23
+ font-family: Geist;
24
+ font-style: normal;
25
+ font-weight: 300;
26
+ font-display: swap;
27
+ src: url("https://cdn.zudoku.dev/geist/Geist-Light.woff2") format("woff2");
28
+ }
29
+
30
+ @font-face {
31
+ font-family: Geist;
32
+ font-style: normal;
33
+ font-weight: 400;
34
+ font-display: swap;
35
+ src: url("https://cdn.zudoku.dev/geist/Geist-Regular.woff2") format("woff2");
36
+ }
37
+
38
+ @font-face {
39
+ font-family: Geist;
40
+ font-style: normal;
41
+ font-weight: 500;
42
+ font-display: swap;
43
+ src: url("https://cdn.zudoku.dev/geist/Geist-Medium.woff2") format("woff2");
44
+ }
45
+
46
+ @font-face {
47
+ font-family: Geist;
48
+ font-style: normal;
49
+ font-weight: 600;
50
+ font-display: swap;
51
+ src: url("https://cdn.zudoku.dev/geist/Geist-SemiBold.woff2") format("woff2");
52
+ }
53
+
54
+ @font-face {
55
+ font-family: Geist;
56
+ font-style: normal;
57
+ font-weight: 700;
58
+ font-display: swap;
59
+ src: url("https://cdn.zudoku.dev/geist/Geist-Bold.woff2") format("woff2");
60
+ }
61
+
62
+ @font-face {
63
+ font-family: Geist;
64
+ font-style: normal;
65
+ font-weight: 800;
66
+ font-display: swap;
67
+ src: url("https://cdn.zudoku.dev/geist/Geist-Black.woff2") format("woff2");
68
+ }
69
+
70
+ @font-face {
71
+ font-family: Geist;
72
+ font-style: normal;
73
+ font-weight: 900;
74
+ font-display: swap;
75
+ src: url("https://cdn.zudoku.dev/geist/Geist-UltraBlack.woff2")
76
+ format("woff2");
77
+ }
78
+
5
79
  @layer base {
6
80
  :root {
7
81
  --top-header-height: 65px;
package/src/app/main.tsx CHANGED
@@ -1,18 +1,49 @@
1
- import log from "loglevel";
2
1
  import { StrictMode } from "react";
3
2
  import { createRoot } from "react-dom/client";
4
- import App from "./App.js";
5
3
 
6
- log.setDefaultLevel("silent");
4
+ import "./main.css";
7
5
 
8
- if (import.meta.env.DEV) {
9
- log.setLevel("debug");
10
- } else if (localStorage.getItem("ENABLE_DEBUG_LOGS")) {
11
- log.setLevel("debug");
12
- }
6
+ import "../lib/util/logInit.js";
7
+
8
+ // Virtual config
9
+ import config from "virtual:zudoku-config";
10
+
11
+ // Virtual Plugins
12
+ import { configuredApiKeysPlugin } from "virtual:zudoku-api-keys-plugin";
13
+ import { configuredApiPlugins } from "virtual:zudoku-api-plugins";
14
+ import { configuredAuthProvider } from "virtual:zudoku-auth";
15
+ import { configuredDocsPlugins } from "virtual:zudoku-docs-plugins";
16
+ import { configuredRedirectPlugin } from "virtual:zudoku-redirect-plugin";
17
+
18
+ // Base React Component
19
+ import { DevPortal } from "zudoku/components";
20
+
21
+ // IMPORTANT: This component must not contain tailwind classes
22
+ // This directory is not processed by the tailwind plugin
13
23
 
14
24
  createRoot(document.getElementById("root")!).render(
15
25
  <StrictMode>
16
- <App />
26
+ <DevPortal
27
+ page={{
28
+ logo: config.page?.logo ?? "https://cdn.zuplo.com/www/favicon.png",
29
+ pageTitle: "Developer Portal",
30
+ ...config.page,
31
+ }}
32
+ metadata={{
33
+ favicon: "https://cdn.zuplo.com/www/favicon.png",
34
+ title: "%s | Developer Portal",
35
+ ...config.metadata,
36
+ }}
37
+ navigation={config.navigation ?? []}
38
+ authentication={configuredAuthProvider}
39
+ mdxComponents={config.mdx?.components}
40
+ plugins={[
41
+ ...configuredDocsPlugins,
42
+ ...configuredApiPlugins,
43
+ configuredRedirectPlugin,
44
+ ...(configuredApiKeysPlugin ? [configuredApiKeysPlugin] : []),
45
+ ...(configuredAuthProvider ? [configuredAuthProvider] : []),
46
+ ]}
47
+ />
17
48
  </StrictMode>,
18
49
  );
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Dev Portal</title>
8
+ <script type="module" crossorigin src="./main.js"></script>
9
+ <link rel="stylesheet" crossorigin href="./style.css" />
10
+ </head>
11
+ <body>
12
+ <div
13
+ data-api-url="https://blue-sloth-main-afc3428.d2.zuplo.dev/schemas/rewiring-america"
14
+ ></div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,42 @@
1
+ import "./main.css";
2
+
3
+ import "../lib/util/logInit.js";
4
+
5
+ // Base React Component
6
+ import { DevPortal } from "../lib/components/DevPortal.js";
7
+
8
+ import { StrictMode } from "react";
9
+ import { createRoot } from "react-dom/client";
10
+ import type { NavigationItem } from "../lib/core/DevPortalContext.js";
11
+ import { openApiPlugin } from "../lib/plugins/openapi/index.js";
12
+
13
+ const root = document.querySelector("[data-api-url]");
14
+ if (!root || root.tagName !== "DIV") {
15
+ throw new Error("No div found with attribute data-api-url");
16
+ }
17
+
18
+ const apiUrl = root.getAttribute("data-api-url");
19
+ const pageTitle = document.getElementsByTagName("title")[0].innerText;
20
+ const logoUrl = root.getAttribute("data-logo-url");
21
+
22
+ const navigation: NavigationItem[] = [
23
+ {
24
+ label: "API Reference",
25
+ path: "/",
26
+ categories: [],
27
+ },
28
+ ];
29
+
30
+ createRoot(root).render(
31
+ <StrictMode>
32
+ <DevPortal
33
+ page={{
34
+ logo: logoUrl ?? "https://cdn.zuplo.com/www/favicon.png",
35
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
36
+ pageTitle: pageTitle ?? "Developer Portal",
37
+ }}
38
+ navigation={navigation}
39
+ plugins={[openApiPlugin({ type: "url", input: apiUrl!, path: "/" })]}
40
+ />
41
+ </StrictMode>,
42
+ );
@@ -0,0 +1,15 @@
1
+ import { useRouteError } from "react-router-dom";
2
+ import { Layout } from "./Layout.js";
3
+
4
+ export function ErrorBoundary() {
5
+ const error = useRouteError();
6
+ // eslint-disable-next-line no-console
7
+ console.error(error);
8
+ return (
9
+ <Layout>
10
+ <div className="h-[75vh] flex items-center justify-center">
11
+ Error, look at the console
12
+ </div>
13
+ </Layout>
14
+ );
15
+ }
@@ -30,7 +30,6 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
30
30
  return (
31
31
  <>
32
32
  <Helmet titleTemplate={meta?.title}>
33
- <title>Home</title>
34
33
  {meta?.description && (
35
34
  <meta name="description" content={meta.description} />
36
35
  )}
@@ -1,6 +1,7 @@
1
1
  import { useMemo } from "react";
2
2
  import { createBrowserRouter, RouterProvider } from "react-router-dom";
3
3
  import { DevPortalPlugin, isNavigationPlugin } from "../core/plugins.js";
4
+ import { ErrorBoundary } from "./Error.js";
4
5
  import { Layout } from "./Layout.js";
5
6
 
6
7
  export function Router({ plugins }: { plugins?: DevPortalPlugin[] }) {
@@ -13,13 +14,7 @@ export function Router({ plugins }: { plugins?: DevPortalPlugin[] }) {
13
14
  {
14
15
  path: "/",
15
16
  element: <Layout />,
16
- errorElement: (
17
- <Layout>
18
- <div className="h-[75vh] flex items-center justify-center">
19
- Error, look at the console
20
- </div>
21
- </Layout>
22
- ),
17
+ errorElement: <ErrorBoundary />,
23
18
  children: routes,
24
19
  },
25
20
  ]);
@@ -6,6 +6,11 @@ import { useDevPortal } from "./context/DevPortalProvider.js";
6
6
  export const TopNavigation = () => {
7
7
  const { navigation } = useDevPortal();
8
8
 
9
+ // Hide tope nav if there is only one item
10
+ if (navigation.length <= 1) {
11
+ return null;
12
+ }
13
+
9
14
  return (
10
15
  <nav className="border-b border-border text-sm px-12 h-[--top-nav-height]">
11
16
  <ul className="flex flex-row items-center gap-8">
@@ -16,6 +16,10 @@ export const createSharedWorkerClient = () => {
16
16
  type: "module",
17
17
  });
18
18
 
19
+ worker.onerror = (e) => {
20
+ console.error(e);
21
+ };
22
+
19
23
  worker.port.start();
20
24
 
21
25
  const [waitFor, notify] = createWaitForNotify<string>();
@@ -0,0 +1,9 @@
1
+ import log from "loglevel";
2
+
3
+ log.setDefaultLevel("silent");
4
+
5
+ if (import.meta.env.DEV) {
6
+ log.setLevel("debug");
7
+ } else if (localStorage.getItem("ENABLE_DEBUG_LOGS")) {
8
+ log.setLevel("debug");
9
+ }
package/dist/app/App.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import "./main.css";
2
- export default function App(): import("react/jsx-runtime").JSX.Element;
package/dist/app/App.js DELETED
@@ -1,32 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import "./main.css";
3
- // Virtual config
4
- import config from "virtual:zudoku-config";
5
- // Virtual Plugins
6
- import { configuredApiKeysPlugin } from "virtual:zudoku-api-keys-plugin";
7
- import { configuredApiPlugins } from "virtual:zudoku-api-plugins";
8
- import { configuredAuthProvider } from "virtual:zudoku-auth";
9
- import { configuredDocsPlugins } from "virtual:zudoku-docs-plugins";
10
- import { configuredRedirectPlugin } from "virtual:zudoku-redirect-plugin";
11
- // Base React Component
12
- import { DevPortal } from "zudoku/components";
13
- // IMPORTANT: This component must not contain tailwind classes
14
- // This directory is not processed by the tailwind plugin
15
- export default function App() {
16
- return (_jsx(DevPortal, { page: {
17
- logo: config.page?.logo ?? "https://cdn.zuplo.com/www/favicon.png",
18
- pageTitle: "Developer Portal",
19
- ...config.page,
20
- }, metadata: {
21
- favicon: "https://cdn.zuplo.com/www/favicon.png",
22
- title: "%s | Developer Portal",
23
- ...config.metadata,
24
- }, navigation: config.navigation ?? [], authentication: configuredAuthProvider, mdxComponents: config.mdx?.components, plugins: [
25
- ...configuredDocsPlugins,
26
- ...configuredApiPlugins,
27
- configuredRedirectPlugin,
28
- ...(configuredApiKeysPlugin ? [configuredApiKeysPlugin] : []),
29
- ...(configuredAuthProvider ? [configuredAuthProvider] : []),
30
- ] }));
31
- }
32
- //# sourceMappingURL=App.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/app/App.tsx"],"names":[],"mappings":";AAAA,OAAO,YAAY,CAAC;AAEpB,iBAAiB;AACjB,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAE3C,kBAAkB;AAClB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,uBAAuB;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,8DAA8D;AAC9D,yDAAyD;AAEzD,MAAM,CAAC,OAAO,UAAU,GAAG;IACzB,OAAO,CACL,KAAC,SAAS,IACR,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,uCAAuC;YAClE,SAAS,EAAE,kBAAkB;YAC7B,GAAG,MAAM,CAAC,IAAI;SACf,EACD,QAAQ,EAAE;YACR,OAAO,EAAE,uCAAuC;YAChD,KAAK,EAAE,uBAAuB;YAC9B,GAAG,MAAM,CAAC,QAAQ;SACnB,EACD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,EACnC,cAAc,EAAE,sBAAsB,EACtC,aAAa,EAAE,MAAM,CAAC,GAAG,EAAE,UAAU,EACrC,OAAO,EAAE;YACP,GAAG,qBAAqB;YACxB,GAAG,oBAAoB;YACvB,wBAAwB;YACxB,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,GACD,CACH,CAAC;AACJ,CAAC"}
package/src/app/App.tsx DELETED
@@ -1,44 +0,0 @@
1
- import "./main.css";
2
-
3
- // Virtual config
4
- import config from "virtual:zudoku-config";
5
-
6
- // Virtual Plugins
7
- import { configuredApiKeysPlugin } from "virtual:zudoku-api-keys-plugin";
8
- import { configuredApiPlugins } from "virtual:zudoku-api-plugins";
9
- import { configuredAuthProvider } from "virtual:zudoku-auth";
10
- import { configuredDocsPlugins } from "virtual:zudoku-docs-plugins";
11
- import { configuredRedirectPlugin } from "virtual:zudoku-redirect-plugin";
12
-
13
- // Base React Component
14
- import { DevPortal } from "zudoku/components";
15
-
16
- // IMPORTANT: This component must not contain tailwind classes
17
- // This directory is not processed by the tailwind plugin
18
-
19
- export default function App() {
20
- return (
21
- <DevPortal
22
- page={{
23
- logo: config.page?.logo ?? "https://cdn.zuplo.com/www/favicon.png",
24
- pageTitle: "Developer Portal",
25
- ...config.page,
26
- }}
27
- metadata={{
28
- favicon: "https://cdn.zuplo.com/www/favicon.png",
29
- title: "%s | Developer Portal",
30
- ...config.metadata,
31
- }}
32
- navigation={config.navigation ?? []}
33
- authentication={configuredAuthProvider}
34
- mdxComponents={config.mdx?.components}
35
- plugins={[
36
- ...configuredDocsPlugins,
37
- ...configuredApiPlugins,
38
- configuredRedirectPlugin,
39
- ...(configuredApiKeysPlugin ? [configuredApiKeysPlugin] : []),
40
- ...(configuredAuthProvider ? [configuredAuthProvider] : []),
41
- ]}
42
- />
43
- );
44
- }