zudoku 0.63.0 → 0.63.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.
Files changed (65) hide show
  1. package/dist/app/entry.server.js +14 -1
  2. package/dist/app/entry.server.js.map +1 -1
  3. package/dist/lib/authentication/authentication.d.ts +3 -0
  4. package/dist/lib/core/ZudokuContext.d.ts +1 -0
  5. package/dist/lib/core/ZudokuContext.js +2 -0
  6. package/dist/lib/core/ZudokuContext.js.map +1 -1
  7. package/dist/lib/plugins/markdown/MdxPage.d.ts +2 -1
  8. package/dist/lib/plugins/markdown/MdxPage.js +3 -2
  9. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  10. package/dist/lib/plugins/markdown/index.d.ts +1 -0
  11. package/dist/lib/plugins/markdown/index.js +1 -1
  12. package/dist/lib/plugins/markdown/index.js.map +1 -1
  13. package/dist/lib/plugins/openapi/index.js +4 -9
  14. package/dist/lib/plugins/openapi/index.js.map +1 -1
  15. package/dist/vite/plugin-docs.js +1 -1
  16. package/dist/vite/plugin-docs.js.map +1 -1
  17. package/dist/vite/plugin-markdown-export.js +4 -2
  18. package/dist/vite/plugin-markdown-export.js.map +1 -1
  19. package/lib/{MdxPage-DFRNwSsc.js → MdxPage-1xaNI6q_.js} +81 -80
  20. package/lib/MdxPage-1xaNI6q_.js.map +1 -0
  21. package/lib/{OAuthErrorPage-DJUOdr6Q.js → OAuthErrorPage-Du_4sFER.js} +3 -3
  22. package/lib/{OAuthErrorPage-DJUOdr6Q.js.map → OAuthErrorPage-Du_4sFER.js.map} +1 -1
  23. package/lib/{OasProvider-D2NYAaBN.js → OasProvider-0xiB5cKH.js} +2 -2
  24. package/lib/{OasProvider-D2NYAaBN.js.map → OasProvider-0xiB5cKH.js.map} +1 -1
  25. package/lib/{OperationList-DmXCI4NU.js → OperationList-BzWKTkNq.js} +5 -5
  26. package/lib/{OperationList-DmXCI4NU.js.map → OperationList-BzWKTkNq.js.map} +1 -1
  27. package/lib/{Pagination-CT4VUR6u.js → Pagination-DOcPyfy_.js} +2 -2
  28. package/lib/{Pagination-CT4VUR6u.js.map → Pagination-DOcPyfy_.js.map} +1 -1
  29. package/lib/{SchemaList-uElsscMN.js → SchemaList-Dea2Skqv.js} +3 -3
  30. package/lib/{SchemaList-uElsscMN.js.map → SchemaList-Dea2Skqv.js.map} +1 -1
  31. package/lib/{SchemaView-CNQ3VAbI.js → SchemaView-H9glU5P7.js} +2 -2
  32. package/lib/{SchemaView-CNQ3VAbI.js.map → SchemaView-H9glU5P7.js.map} +1 -1
  33. package/lib/{SignUp-BraHuRN_.js → SignUp-DUZ4yUmQ.js} +2 -2
  34. package/lib/{SignUp-BraHuRN_.js.map → SignUp-DUZ4yUmQ.js.map} +1 -1
  35. package/lib/{circular-BWT7_Ahq.js → circular-OGtD_zFg.js} +2 -2
  36. package/lib/{circular-BWT7_Ahq.js.map → circular-OGtD_zFg.js.map} +1 -1
  37. package/lib/{createServer-zhJZSgor.js → createServer-DyUc5BPr.js} +3 -3
  38. package/lib/{createServer-zhJZSgor.js.map → createServer-DyUc5BPr.js.map} +1 -1
  39. package/lib/{errors-XqO6MsfU.js → errors-7_i0Oyw4.js} +2 -2
  40. package/lib/{errors-XqO6MsfU.js.map → errors-7_i0Oyw4.js.map} +1 -1
  41. package/lib/{index-BPSpOxTK.js → index-CLJGtw_S.js} +147 -146
  42. package/lib/index-CLJGtw_S.js.map +1 -0
  43. package/lib/{index-D8Btv4uT.js → index-PdgTSEkk.js} +385 -399
  44. package/lib/{index-D8Btv4uT.js.map → index-PdgTSEkk.js.map} +1 -1
  45. package/lib/zudoku.__internal.js +1 -1
  46. package/lib/zudoku.auth-azureb2c.js +3 -3
  47. package/lib/zudoku.auth-clerk.js +1 -1
  48. package/lib/zudoku.auth-openid.js +3 -3
  49. package/lib/zudoku.auth-supabase.js +1 -1
  50. package/lib/zudoku.components.js +1 -1
  51. package/lib/zudoku.plugin-api-catalog.js +1 -1
  52. package/lib/zudoku.plugin-markdown.js +10 -9
  53. package/lib/zudoku.plugin-markdown.js.map +1 -1
  54. package/lib/zudoku.plugin-openapi.js +4 -5
  55. package/lib/zudoku.plugin-openapi.js.map +1 -1
  56. package/package.json +4 -4
  57. package/src/app/entry.server.tsx +16 -6
  58. package/src/app/main.css +42 -0
  59. package/src/lib/authentication/authentication.ts +3 -1
  60. package/src/lib/core/ZudokuContext.ts +3 -0
  61. package/src/lib/plugins/markdown/MdxPage.tsx +4 -1
  62. package/src/lib/plugins/markdown/index.tsx +2 -0
  63. package/src/lib/plugins/openapi/index.tsx +9 -29
  64. package/lib/MdxPage-DFRNwSsc.js.map +0 -1
  65. package/lib/index-BPSpOxTK.js.map +0 -1
@@ -6,7 +6,7 @@ import * as D from "react";
6
6
  import { StrictMode as Ye, useEffect as oe, useRef as Xe, useState as Rt, Suspense as Ft } from "react";
7
7
  import { t as Ut, S as qt, c as et, b2 as Mt, O as Qt } from "./chunk-PVWAREVJ-BO6B-RAk.js";
8
8
  import * as Lt from "react-dom";
9
- import { a as Bt, u as Wt, P as Kt, H as Ht } from "./index-BPSpOxTK.js";
9
+ import { a as Bt, u as Wt, P as Kt, H as Ht } from "./index-CLJGtw_S.js";
10
10
  import { B as tt, R as Vt } from "./RouteGuard-Bg0Lu0OU.js";
11
11
  import { CircleFadingArrowUpIcon as Jt, LoaderCircleIcon as Gt, ExternalLink as Yt, PanelLeftIcon as Xt } from "lucide-react";
12
12
  import { Button as en } from "./ui/Button.js";
@@ -1,10 +1,10 @@
1
1
  import { j as o } from "./jsx-runtime-BzflLqGi.js";
2
2
  import { PublicClientApplication as A, EventType as f } from "@azure/msal-browser";
3
- import { E as I } from "./index-BPSpOxTK.js";
3
+ import { E as I } from "./index-CLJGtw_S.js";
4
4
  import { C as T } from "./ClientOnly-E7hGysn1.js";
5
5
  import { j as S, u as h } from "./ZudokuContext-BXTZApgy.js";
6
- import { C, A as c } from "./errors-XqO6MsfU.js";
7
- import { C as k, O as w } from "./OAuthErrorPage-DJUOdr6Q.js";
6
+ import { C, A as c } from "./errors-7_i0Oyw4.js";
7
+ import { C as k, O as w } from "./OAuthErrorPage-Du_4sFER.js";
8
8
  const u = "/oauth/callback";
9
9
  class y extends C {
10
10
  msalInstance;
@@ -1,6 +1,6 @@
1
1
  import { j as l } from "./jsx-runtime-BzflLqGi.js";
2
2
  import { LogOutIcon as f } from "lucide-react";
3
- import { S as w, a as p, b as v } from "./SignUp-BraHuRN_.js";
3
+ import { S as w, a as p, b as v } from "./SignUp-DUZ4yUmQ.js";
4
4
  import { u as n } from "./ZudokuContext-BXTZApgy.js";
5
5
  const b = ({
6
6
  clerkPubKey: d,
@@ -1,10 +1,10 @@
1
1
  import { j as D } from "./jsx-runtime-BzflLqGi.js";
2
2
  import { g as Le } from "./invariant-Bm-FVUQE.js";
3
- import { E as Ue } from "./index-BPSpOxTK.js";
3
+ import { E as Ue } from "./index-CLJGtw_S.js";
4
4
  import { C as xe } from "./ClientOnly-E7hGysn1.js";
5
5
  import { j as Ce, u as S } from "./ZudokuContext-BXTZApgy.js";
6
- import { C as Ie, O as re, A as R } from "./errors-XqO6MsfU.js";
7
- import { C as je, O as Oe } from "./OAuthErrorPage-DJUOdr6Q.js";
6
+ import { C as Ie, O as re, A as R } from "./errors-7_i0Oyw4.js";
7
+ import { C as je, O as Oe } from "./OAuthErrorPage-Du_4sFER.js";
8
8
  var J = { exports: {} }, De = J.exports, oe;
9
9
  function Je() {
10
10
  return oe || (oe = 1, (function(t) {
@@ -1,5 +1,5 @@
1
1
  import { createClient as l } from "@supabase/supabase-js";
2
- import { C as g, A as p } from "./errors-XqO6MsfU.js";
2
+ import { C as g, A as p } from "./errors-7_i0Oyw4.js";
3
3
  import { u as r } from "./ZudokuContext-BXTZApgy.js";
4
4
  class f extends g {
5
5
  client;
@@ -8,7 +8,7 @@ import "./ClientOnly-E7hGysn1.js";
8
8
  import "./ZudokuContext-BXTZApgy.js";
9
9
  import "./ErrorAlert-VBJ8aHH7.js";
10
10
  import "./Spinner-CI6bRyZw.js";
11
- import { B as d, i as h, C as l, d as k, c as S, L as y, M, e as T, S as Z, T as c, Z as f, g, h as A, f as B, j as E, u as H } from "./index-BPSpOxTK.js";
11
+ import { B as d, i as h, C as l, d as k, c as S, L as y, M, e as T, S as Z, T as c, Z as f, g, h as A, f as B, j as E, u as H } from "./index-CLJGtw_S.js";
12
12
  export {
13
13
  d as Button,
14
14
  h as CACHE_KEYS,
@@ -3,7 +3,7 @@ import { s as f } from "./index-C5L4favO.js";
3
3
  import { d as b, m as j } from "./chunk-PVWAREVJ-BO6B-RAk.js";
4
4
  import { u as x, b as v, j as d } from "./ZudokuContext-BXTZApgy.js";
5
5
  import { H as y } from "./index.esm-BnYHxCYC.js";
6
- import { L as N } from "./index-BPSpOxTK.js";
6
+ import { L as N } from "./index-CLJGtw_S.js";
7
7
  import { H as k, M as S } from "./ErrorAlert-VBJ8aHH7.js";
8
8
  const w = ({
9
9
  items: o,
@@ -1,16 +1,17 @@
1
- import { j as s } from "./jsx-runtime-BzflLqGi.js";
2
- const m = (t) => ({
1
+ import { j as r } from "./jsx-runtime-BzflLqGi.js";
2
+ const p = (t) => ({
3
3
  getRoutes: () => Object.entries(t.fileImports).map(
4
- ([e, n]) => ({
4
+ ([e, a]) => ({
5
5
  path: e,
6
6
  lazy: async () => {
7
- const { MdxPage: o } = await import("./MdxPage-DFRNwSsc.js"), { default: a, ...r } = await n();
7
+ const { MdxPage: n } = await import("./MdxPage-1xaNI6q_.js"), { default: o, ...s } = await a();
8
8
  return {
9
- element: /* @__PURE__ */ s.jsx(
10
- o,
9
+ element: /* @__PURE__ */ r.jsx(
10
+ n,
11
11
  {
12
- mdxComponent: a,
13
- ...r,
12
+ basePath: t.basePath,
13
+ mdxComponent: o,
14
+ ...s,
14
15
  defaultOptions: t.defaultOptions
15
16
  }
16
17
  )
@@ -20,6 +21,6 @@ const m = (t) => ({
20
21
  )
21
22
  });
22
23
  export {
23
- m as markdownPlugin
24
+ p as markdownPlugin
24
25
  };
25
26
  //# sourceMappingURL=zudoku.plugin-markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.plugin-markdown.js","sources":["../src/lib/plugins/markdown/index.tsx"],"sourcesContent":["import type { Toc } from \"@stefanprobst/rehype-extract-toc\";\nimport type { MDXProps } from \"mdx/types.js\";\nimport type { JSX } from \"react\";\nimport type { ZudokuDocsConfig } from \"../../../config/validators/validate.js\";\nimport type { ZudokuPlugin } from \"../../core/plugins.js\";\n\nexport interface MarkdownPluginOptions extends ZudokuDocsConfig {\n fileImports: Record<string, () => Promise<MDXImport>>;\n}\nexport type MarkdownPluginDefaultOptions = Pick<\n Frontmatter,\n \"toc\" | \"disablePager\" | \"showLastModified\" | \"suggestEdit\" | \"copyPage\"\n>;\n\nexport type Frontmatter = {\n title?: string;\n description?: string;\n category?: string;\n toc?: boolean;\n disablePager?: boolean;\n disable_pager?: boolean;\n showLastModified?: boolean;\n lastModifiedTime?: number;\n suggestEdit?: { url: string; text?: string } | false;\n copyPage?: boolean;\n};\n\nexport type MDXImport = {\n tableOfContents: Toc;\n frontmatter: Frontmatter;\n excerpt?: string;\n __filepath: string;\n default: (props: MDXProps) => JSX.Element;\n};\n\nexport const markdownPlugin = (\n options: MarkdownPluginOptions,\n): ZudokuPlugin => ({\n getRoutes: () => {\n return Object.entries(options.fileImports).map(\n ([routePath, importPromise]) => ({\n path: routePath,\n lazy: async () => {\n const { MdxPage } = await import(\"./MdxPage.js\");\n const { default: Component, ...props } = await importPromise();\n return {\n element: (\n <MdxPage\n mdxComponent={Component}\n {...props}\n defaultOptions={options.defaultOptions}\n />\n ),\n };\n },\n }),\n );\n },\n});\n"],"names":["markdownPlugin","options","routePath","importPromise","MdxPage","Component","props","jsx"],"mappings":";AAmCO,MAAMA,IAAiB,CAC5BC,OACkB;AAAA,EAClB,WAAW,MACF,OAAO,QAAQA,EAAQ,WAAW,EAAE;AAAA,IACzC,CAAC,CAACC,GAAWC,CAAa,OAAO;AAAA,MAC/B,MAAMD;AAAA,MACN,MAAM,YAAY;AAChB,cAAM,EAAE,SAAAE,EAAA,IAAY,MAAM,OAAO,uBAAc,GACzC,EAAE,SAASC,GAAW,GAAGC,EAAA,IAAU,MAAMH,EAAA;AAC/C,eAAO;AAAA,UACL,SACEI,gBAAAA,EAAAA;AAAAA,YAACH;AAAA,YAAA;AAAA,cACC,cAAcC;AAAA,cACb,GAAGC;AAAA,cACJ,gBAAgBL,EAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QAC1B;AAAA,MAGN;AAAA,IAAA;AAAA,EACF;AAGN;"}
1
+ {"version":3,"file":"zudoku.plugin-markdown.js","sources":["../src/lib/plugins/markdown/index.tsx"],"sourcesContent":["import type { Toc } from \"@stefanprobst/rehype-extract-toc\";\nimport type { MDXProps } from \"mdx/types.js\";\nimport type { JSX } from \"react\";\nimport type { ZudokuDocsConfig } from \"../../../config/validators/validate.js\";\nimport type { ZudokuPlugin } from \"../../core/plugins.js\";\n\nexport interface MarkdownPluginOptions extends ZudokuDocsConfig {\n basePath: string;\n fileImports: Record<string, () => Promise<MDXImport>>;\n}\nexport type MarkdownPluginDefaultOptions = Pick<\n Frontmatter,\n \"toc\" | \"disablePager\" | \"showLastModified\" | \"suggestEdit\" | \"copyPage\"\n>;\n\nexport type Frontmatter = {\n title?: string;\n description?: string;\n category?: string;\n toc?: boolean;\n disablePager?: boolean;\n disable_pager?: boolean;\n showLastModified?: boolean;\n lastModifiedTime?: number;\n suggestEdit?: { url: string; text?: string } | false;\n copyPage?: boolean;\n};\n\nexport type MDXImport = {\n tableOfContents: Toc;\n frontmatter: Frontmatter;\n excerpt?: string;\n __filepath: string;\n default: (props: MDXProps) => JSX.Element;\n};\n\nexport const markdownPlugin = (\n options: MarkdownPluginOptions,\n): ZudokuPlugin => ({\n getRoutes: () => {\n return Object.entries(options.fileImports).map(\n ([routePath, importPromise]) => ({\n path: routePath,\n lazy: async () => {\n const { MdxPage } = await import(\"./MdxPage.js\");\n const { default: Component, ...props } = await importPromise();\n return {\n element: (\n <MdxPage\n basePath={options.basePath}\n mdxComponent={Component}\n {...props}\n defaultOptions={options.defaultOptions}\n />\n ),\n };\n },\n }),\n );\n },\n});\n"],"names":["markdownPlugin","options","routePath","importPromise","MdxPage","Component","props","jsx"],"mappings":";AAoCO,MAAMA,IAAiB,CAC5BC,OACkB;AAAA,EAClB,WAAW,MACF,OAAO,QAAQA,EAAQ,WAAW,EAAE;AAAA,IACzC,CAAC,CAACC,GAAWC,CAAa,OAAO;AAAA,MAC/B,MAAMD;AAAA,MACN,MAAM,YAAY;AAChB,cAAM,EAAE,SAAAE,EAAA,IAAY,MAAM,OAAO,uBAAc,GACzC,EAAE,SAASC,GAAW,GAAGC,EAAA,IAAU,MAAMH,EAAA;AAC/C,eAAO;AAAA,UACL,SACEI,gBAAAA,EAAAA;AAAAA,YAACH;AAAA,YAAA;AAAA,cACC,UAAUH,EAAQ;AAAA,cAClB,cAAcI;AAAA,cACb,GAAGC;AAAA,cACJ,gBAAgBL,EAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QAC1B;AAAA,MAGN;AAAA,IAAA;AAAA,EACF;AAGN;"}
@@ -1,13 +1,12 @@
1
1
  import "./jsx-runtime-BzflLqGi.js";
2
2
  import "lucide-react";
3
3
  import "./chunk-PVWAREVJ-BO6B-RAk.js";
4
- import "./hook-CAebs2rv.js";
5
4
  import "./ui/Button.js";
6
5
  import "./ZudokuContext-BXTZApgy.js";
7
- import { y as n, U as s, z as A } from "./index-D8Btv4uT.js";
6
+ import { y as e, U as n, z as s } from "./index-PdgTSEkk.js";
8
7
  export {
9
- n as GetNavigationOperationsQuery,
10
- s as UNTAGGED_PATH,
11
- A as openApiPlugin
8
+ e as GetNavigationOperationsQuery,
9
+ n as UNTAGGED_PATH,
10
+ s as openApiPlugin
12
11
  };
13
12
  //# sourceMappingURL=zudoku.plugin-openapi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.plugin-openapi.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"zudoku.plugin-openapi.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.63.0",
3
+ "version": "0.63.1",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -178,8 +178,8 @@
178
178
  "@shikijs/transformers": "3.14.0",
179
179
  "@sindresorhus/slugify": "3.0.0",
180
180
  "@stefanprobst/rehype-extract-toc": "3.0.0",
181
- "@tailwindcss/typography": "0.5.16",
182
- "@tailwindcss/vite": "4.1.11",
181
+ "@tailwindcss/typography": "0.5.19",
182
+ "@tailwindcss/vite": "4.1.16",
183
183
  "@tanem/react-nprogress": "5.0.56",
184
184
  "@tanstack/react-query": "5.85.5",
185
185
  "@types/react": "19.2.0",
@@ -238,7 +238,7 @@
238
238
  "sitemap": "8.0.0",
239
239
  "strip-ansi": "7.1.2",
240
240
  "tailwind-merge": "3.3.1",
241
- "tailwindcss": "4.1.11",
241
+ "tailwindcss": "4.1.16",
242
242
  "tw-animate-css": "1.4.0",
243
243
  "unified": "^11.0.5",
244
244
  "unist-util-visit": "5.0.0",
@@ -122,12 +122,22 @@ export const render = async ({
122
122
  !query.queryKey.includes(NO_DEHYDRATE),
123
123
  });
124
124
 
125
- response.end(
126
- htmlEnd?.replace(
127
- "</body>",
128
- `<script>window.DATA=${JSON.stringify(dehydrated)}</script></body>`,
129
- ),
130
- );
125
+ if (!htmlEnd) return response.end();
126
+
127
+ const closingTag = "</body>";
128
+ const idx = htmlEnd.lastIndexOf(closingTag);
129
+
130
+ if (idx === -1) return response.end(htmlEnd);
131
+
132
+ const serialized = JSON.stringify(dehydrated)
133
+ .replace(/</g, "\\u003c")
134
+ .replace(/>/g, "\\u003e");
135
+
136
+ response.write(htmlEnd.slice(0, idx));
137
+ response.write("<script>window.DATA=");
138
+ response.write(serialized);
139
+ response.write("</script>");
140
+ response.end(htmlEnd.slice(idx));
131
141
  });
132
142
 
133
143
  pipe(transformStream);
package/src/app/main.css CHANGED
@@ -7,6 +7,48 @@
7
7
  @plugin "@tailwindcss/typography";
8
8
  @custom-variant dark (&:is(.dark *));
9
9
 
10
+ @theme inline {
11
+ --color-background: var(--background);
12
+ --color-foreground: var(--foreground);
13
+ --color-card: var(--card);
14
+ --color-card-foreground: var(--card-foreground);
15
+ --color-popover: var(--popover);
16
+ --color-popover-foreground: var(--popover-foreground);
17
+ --color-primary: var(--primary);
18
+ --color-primary-foreground: var(--primary-foreground);
19
+ --color-secondary: var(--secondary);
20
+ --color-secondary-foreground: var(--secondary-foreground);
21
+ --color-muted: var(--muted);
22
+ --color-muted-foreground: var(--muted-foreground);
23
+ --color-accent: var(--accent);
24
+ --color-accent-foreground: var(--accent-foreground);
25
+ --color-destructive: var(--destructive);
26
+ --color-destructive-foreground: var(--destructive-foreground);
27
+ --color-border: var(--border);
28
+ --color-input: var(--input);
29
+ --color-ring: var(--ring);
30
+ --color-chart-1: var(--chart-1);
31
+ --color-chart-2: var(--chart-2);
32
+ --color-chart-3: var(--chart-3);
33
+ --color-chart-4: var(--chart-4);
34
+ --color-chart-5: var(--chart-5);
35
+ --color-sidebar: var(--sidebar);
36
+ --color-sidebar-foreground: var(--sidebar-foreground);
37
+ --color-sidebar-primary: var(--sidebar-primary);
38
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
39
+ --color-sidebar-accent: var(--sidebar-accent);
40
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
41
+ --color-sidebar-border: var(--sidebar-border);
42
+ --color-sidebar-ring: var(--sidebar-ring);
43
+ --radius-sm: calc(var(--radius) - 4px);
44
+ --radius-md: calc(var(--radius) - 2px);
45
+ --radius-lg: var(--radius);
46
+ --radius-xl: calc(var(--radius) + 4px);
47
+ --font-sans: var(--font-sans);
48
+ --font-mono: var(--font-mono);
49
+ --font-serif: var(--font-serif);
50
+ }
51
+
10
52
  @utility prose {
11
53
  a {
12
54
  @apply font-normal underline-offset-4 hover:text-primary;
@@ -2,7 +2,9 @@ export interface AuthenticationPlugin {
2
2
  signUp(options?: { redirectTo?: string; replace?: boolean }): Promise<void>;
3
3
  signIn(options?: { redirectTo?: string; replace?: boolean }): Promise<void>;
4
4
  signOut(): Promise<void>;
5
- // @deprecated use signRequest instead
5
+ /**
6
+ * @deprecated use signRequest instead
7
+ */
6
8
  getAccessToken(): Promise<string>;
7
9
  onPageLoad?(): void;
8
10
  signRequest(request: Request): Promise<Request>;
@@ -129,6 +129,7 @@ export class ZudokuContext {
129
129
  public meta: ZudokuContextOptions["metadata"];
130
130
  public site: ZudokuContextOptions["site"];
131
131
  public readonly authentication?: ZudokuContextOptions["authentication"];
132
+ public readonly getAuthState: () => AuthState;
132
133
  public readonly queryClient: QueryClient;
133
134
  public readonly options: ZudokuContextOptions;
134
135
  private readonly navigationPlugins: NavigationPlugin[];
@@ -156,6 +157,8 @@ export class ZudokuContext {
156
157
  this.navigation = options.navigation ?? [];
157
158
  this.navigationPlugins = this.plugins.filter(isNavigationPlugin);
158
159
  this.authentication = this.plugins.find(isAuthenticationPlugin);
160
+ this.getAuthState = useAuthState.getState;
161
+
159
162
  this.meta = options.metadata;
160
163
  this.site = options.site;
161
164
  this.plugins.forEach((plugin) => {
@@ -27,6 +27,7 @@ import {
27
27
  } from "../../components/navigation/utils.js";
28
28
  import { Pagination } from "../../components/Pagination.js";
29
29
  import { Typography } from "../../components/Typography.js";
30
+ import { joinUrl } from "../../util/joinUrl.js";
30
31
  import type { MdxComponentsType } from "../../util/MdxComponents.js";
31
32
  import { ChatGPTLogo } from "./assets/ChatGPTLogo.js";
32
33
  import { ClaudeLogo } from "./assets/ClaudeLogo.js";
@@ -55,6 +56,7 @@ const MarkdownHeadings = {
55
56
 
56
57
  export const MdxPage = ({
57
58
  mdxComponent: MdxComponent,
59
+ basePath,
58
60
  frontmatter = {},
59
61
  defaultOptions,
60
62
  __filepath,
@@ -62,6 +64,7 @@ export const MdxPage = ({
62
64
  excerpt,
63
65
  }: PropsWithChildren<
64
66
  Omit<MDXImport, "default"> & {
67
+ basePath: string;
65
68
  mdxComponent: MDXImport["default"];
66
69
  defaultOptions?: MarkdownPluginDefaultOptions;
67
70
  }
@@ -101,7 +104,7 @@ export const MdxPage = ({
101
104
  const copyMarkdownConfig =
102
105
  frontmatter.copyPage !== false && defaultOptions?.copyPage !== false;
103
106
 
104
- const markdownUrl = `${location.pathname}.md`;
107
+ const markdownUrl = joinUrl(basePath, `${location.pathname}.md`);
105
108
 
106
109
  const handleCopyMarkdown = async () => {
107
110
  const response = await fetch(markdownUrl);
@@ -5,6 +5,7 @@ import type { ZudokuDocsConfig } from "../../../config/validators/validate.js";
5
5
  import type { ZudokuPlugin } from "../../core/plugins.js";
6
6
 
7
7
  export interface MarkdownPluginOptions extends ZudokuDocsConfig {
8
+ basePath: string;
8
9
  fileImports: Record<string, () => Promise<MDXImport>>;
9
10
  }
10
11
  export type MarkdownPluginDefaultOptions = Pick<
@@ -46,6 +47,7 @@ export const markdownPlugin = (
46
47
  return {
47
48
  element: (
48
49
  <MdxPage
50
+ basePath={options.basePath}
49
51
  mdxComponent={Component}
50
52
  {...props}
51
53
  defaultOptions={options.defaultOptions}
@@ -1,8 +1,7 @@
1
- import { CirclePlayIcon, LogInIcon } from "lucide-react";
2
- import type { ReactNode } from "react";
1
+ import { CirclePlayIcon } from "lucide-react";
2
+ import type { PropsWithChildren } from "react";
3
3
  import { matchPath } from "react-router";
4
4
  import type { NavigationItem } from "../../../config/validators/NavigationSchema.js";
5
- import { useAuth } from "../../authentication/hook.js";
6
5
  import type { ZudokuPlugin } from "../../core/plugins.js";
7
6
  import { Button } from "../../ui/Button.js";
8
7
  import { joinUrl } from "../../util/joinUrl.js";
@@ -71,47 +70,28 @@ export const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {
71
70
  },
72
71
  getMdxComponents: () => ({
73
72
  OpenPlaygroundButton: ({
74
- requireAuth,
75
73
  server,
76
- method,
77
- url,
74
+ method = "get",
75
+ url = "/",
78
76
  children,
79
77
  ...props
80
- }: Partial<PlaygroundContentProps> & { children: ReactNode } & Pick<
81
- PlaygroundContentProps,
82
- "server"
83
- > & {
84
- requireAuth: boolean;
85
- }) => {
86
- const auth = useAuth();
87
-
78
+ }: PropsWithChildren<Partial<PlaygroundContentProps>>) => {
88
79
  if (!server) {
89
80
  throw new Error("Server is required");
90
81
  }
91
82
 
92
- if (requireAuth && !auth.isAuthenticated) {
93
- return (
94
- <Button
95
- className="gap-2 items-center"
96
- variant="outline"
97
- onClick={auth.login}
98
- >
99
- Login to open in Playground <LogInIcon size={16} />
100
- </Button>
101
- );
102
- }
103
-
104
83
  return (
105
84
  <PlaygroundDialog
106
- url={url ?? "/"}
107
- method={method ?? "get"}
85
+ url={url}
86
+ method={method}
108
87
  server={server}
109
88
  {...props}
110
89
  >
111
90
  <Button className="gap-2 items-center" variant="outline">
112
91
  {children ?? (
113
92
  <>
114
- Open in Playground <CirclePlayIcon size={16} />
93
+ Open in Playground
94
+ <CirclePlayIcon size={16} />
115
95
  </>
116
96
  )}
117
97
  </Button>
@@ -1 +0,0 @@
1
- {"version":3,"file":"MdxPage-DFRNwSsc.js","sources":["../src/lib/plugins/markdown/assets/ChatGPTLogo.tsx","../src/lib/plugins/markdown/assets/ClaudeLogo.tsx","../src/lib/plugins/markdown/MdxPage.tsx"],"sourcesContent":["import type { SVGProps } from \"react\";\n\nexport const ChatGPTLogo = (props: SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 320\" {...props}>\n <title>ChatGPT</title>\n <path\n fill=\"currentColor\"\n d=\"M297.06 130.97a79.712 79.712 0 0 0-6.85-65.48c-17.46-30.4-52.56-46.04-86.84-38.68A79.747 79.747 0 0 0 143.24 0C108.2-.08 77.11 22.48 66.33 55.82a79.754 79.754 0 0 0-53.31 38.67c-17.59 30.32-13.58 68.54 9.92 94.54a79.712 79.712 0 0 0 6.85 65.48c17.46 30.4 52.56 46.04 86.84 38.68a79.687 79.687 0 0 0 60.13 26.8c35.06.09 66.16-22.49 76.94-55.86a79.754 79.754 0 0 0 53.31-38.67c17.57-30.32 13.55-68.51-9.94-94.51zM176.78 299.08a59.77 59.77 0 0 1-38.39-13.88c.49-.26 1.34-.73 1.89-1.07l63.72-36.8a10.36 10.36 0 0 0 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zM47.94 244.05a59.71 59.71 0 0 1-7.15-40.18c.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83L129.87 266c-28.69 16.52-65.33 6.7-81.92-21.95zM31.17 104.96c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91L118.44 224c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94a59.94 59.94 0 0 1-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8a10.375 10.375 0 0 0-10.47 0l-77.79 44.92V92c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22a59.95 59.95 0 0 1 7.15 40.1zm-168.51 55.43-26.94-15.55a.943.943 0 0 1-.52-.74V80.86c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07L116 72.67a10.344 10.344 0 0 0-5.24 9.06l-.04 89.79zM125.35 140 160 119.99l34.65 20V180L160 200l-34.65-20z\"\n />\n </svg>\n);\n","import type { SVGProps } from \"react\";\n\nexport const ClaudeLogo = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <title>Claude</title>\n <path\n fill=\"#D97757\"\n d=\"m4.709 15.955 4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 0 1-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312z\"\n />\n </svg>\n);\n","import { useMDXComponents } from \"@mdx-js/react\";\nimport slugify from \"@sindresorhus/slugify\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport {\n CheckIcon,\n ChevronDownIcon,\n CopyIcon,\n EditIcon,\n ExternalLinkIcon,\n Link2Icon,\n} from \"lucide-react\";\nimport { type PropsWithChildren, useEffect, useState } from \"react\";\nimport { useLocation } from \"react-router\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"zudoku/ui/DropdownMenu.js\";\nimport { CategoryHeading } from \"../../components/CategoryHeading.js\";\nimport { Heading } from \"../../components/Heading.js\";\nimport { Toc } from \"../../components/navigation/Toc.js\";\nimport {\n useCurrentItem,\n usePrevNext,\n} from \"../../components/navigation/utils.js\";\nimport { Pagination } from \"../../components/Pagination.js\";\nimport { Typography } from \"../../components/Typography.js\";\nimport type { MdxComponentsType } from \"../../util/MdxComponents.js\";\nimport { ChatGPTLogo } from \"./assets/ChatGPTLogo.js\";\nimport { ClaudeLogo } from \"./assets/ClaudeLogo.js\";\nimport type { MarkdownPluginDefaultOptions, MDXImport } from \"./index.js\";\n\ndeclare global {\n interface Window {\n __getReactRefreshIgnoredExports?: (args: {\n id: string;\n }) => string[] | undefined;\n }\n}\n\nconst MarkdownHeadings = {\n h2: ({ children, id }) => (\n <Heading level={2} id={id} registerNavigationAnchor>\n {children}\n </Heading>\n ),\n h3: ({ children, id }) => (\n <Heading level={3} id={id} registerNavigationAnchor>\n {children}\n </Heading>\n ),\n} satisfies MdxComponentsType;\n\nexport const MdxPage = ({\n mdxComponent: MdxComponent,\n frontmatter = {},\n defaultOptions,\n __filepath,\n tableOfContents,\n excerpt,\n}: PropsWithChildren<\n Omit<MDXImport, \"default\"> & {\n mdxComponent: MDXImport[\"default\"];\n defaultOptions?: MarkdownPluginDefaultOptions;\n }\n>) => {\n const categoryTitle = useCurrentItem()?.categoryLabel;\n const location = useLocation();\n const [isCopied, setIsCopied] = useState(false);\n\n const title = frontmatter.title;\n const description = frontmatter.description ?? excerpt;\n const category = frontmatter.category ?? categoryTitle;\n const hideToc = frontmatter.toc === false || defaultOptions?.toc === false;\n const pageTitle =\n title ?? tableOfContents.find((item) => item.depth === 1)?.value;\n const hidePager =\n frontmatter.disable_pager ??\n frontmatter.disablePager ??\n defaultOptions?.disablePager ??\n false;\n\n const showLastModified =\n frontmatter.showLastModified ?? defaultOptions?.showLastModified ?? true;\n\n const lastModifiedDate = frontmatter.lastModifiedTime\n ? new Date(frontmatter.lastModifiedTime)\n : null;\n\n const editConfig =\n frontmatter.suggestEdit !== false &&\n (frontmatter.suggestEdit ?? defaultOptions?.suggestEdit);\n\n const editUrl = editConfig\n ? editConfig.url.replaceAll(\"{filePath}\", __filepath)\n : null;\n const editText = editConfig ? editConfig.text || \"Edit this page\" : null;\n\n const copyMarkdownConfig =\n frontmatter.copyPage !== false && defaultOptions?.copyPage !== false;\n\n const markdownUrl = `${location.pathname}.md`;\n\n const handleCopyMarkdown = async () => {\n const response = await fetch(markdownUrl);\n if (!response.ok) throw new Error(\"Failed to fetch markdown\");\n const markdown = await response.text();\n void navigator.clipboard.writeText(markdown);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n };\n\n const tocEntries =\n tableOfContents.find((item) => item.depth === 1)?.children ??\n // if `title` is provided by frontmatter it does not appear in the table of contents\n tableOfContents.filter((item) => item.depth === 2);\n\n const showToc = !hideToc && tocEntries.length > 0;\n\n const { prev, next } = usePrevNext();\n\n useEffect(() => {\n if (process.env.NODE_ENV === \"development\") {\n window.__getReactRefreshIgnoredExports = ({ id }) => {\n if (!id.endsWith(__filepath)) return;\n\n return [\"frontmatter\", \"tableOfContents\"];\n };\n\n return () => {\n window.__getReactRefreshIgnoredExports = undefined;\n };\n }\n }, [__filepath]);\n\n return (\n <div\n className=\"grid grid-cols-1 xl:grid-cols-(--sidecar-grid-cols) gap-8 justify-between\"\n data-pagefind-filter=\"section:markdown\"\n data-pagefind-meta=\"section:markdown\"\n >\n <Helmet>\n <title>{pageTitle}</title>\n {description && <meta name=\"description\" content={description} />}\n </Helmet>\n <Typography className=\"max-w-full xl:w-full xl:max-w-3xl flex-1 shrink pt-(--padding-content-top)\">\n {(category || title) && (\n <header className=\"flex items-start justify-between gap-4\">\n <div className=\"flex-1\">\n {category && <CategoryHeading>{category}</CategoryHeading>}\n {title && (\n <Heading level={1} id={slugify(title)}>\n {title}\n </Heading>\n )}\n </div>\n {copyMarkdownConfig && (\n <div className=\"flex items-center border rounded-md\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopyMarkdown}\n className=\"rounded-r-none border-r gap-2 h-7\"\n >\n {isCopied ? (\n <CheckIcon size={14} className=\"text-emerald-600\" />\n ) : (\n <CopyIcon size={14} />\n )}\n <span>Copy page</span>\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"rounded-l-none\"\n >\n <ChevronDownIcon size={14} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem\n className=\"gap-2\"\n onClick={() =>\n void navigator.clipboard.writeText(window.location.href)\n }\n >\n <Link2Icon className=\"size-4\" />\n Copy link to page\n </DropdownMenuItem>\n <DropdownMenuItem className=\"gap-2\" asChild>\n <a\n href={markdownUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <ExternalLinkIcon className=\"size-4\" />\n Open Markdown page\n </a>\n </DropdownMenuItem>\n <DropdownMenuItem\n className=\"gap-2\"\n onClick={() => {\n const prompt = encodeURIComponent(\n `Help me understand this documentation page: ${window.location.href}`,\n );\n window.open(\n `https://claude.ai/new?q=${prompt}`,\n \"_blank\",\n );\n }}\n >\n <ClaudeLogo className=\"size-4\" />\n Open in Claude\n </DropdownMenuItem>\n <DropdownMenuItem\n className=\"gap-2\"\n onClick={() => {\n const prompt = encodeURIComponent(\n `Help me understand this documentation page: ${window.location.href}`,\n );\n window.open(\n `https://chatgpt.com/?q=${prompt}`,\n \"_blank\",\n );\n }}\n >\n <ChatGPTLogo className=\"size-4\" />\n Open in ChatGPT\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )}\n </header>\n )}\n\n <MdxComponent\n components={{ ...useMDXComponents(), ...MarkdownHeadings }}\n />\n <div className=\"h-16\" />\n {(showLastModified && lastModifiedDate) || editUrl ? (\n <div className=\"flex justify-between text-xs text-muted-foreground \">\n <div />\n <div className=\"flex items-center gap-2\">\n <div>\n {editUrl && (\n <Button asChild variant=\"ghost\" size=\"sm\">\n <a\n href={editUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1\"\n >\n <EditIcon size={12} />\n {editText}\n </a>\n </Button>\n )}\n </div>\n <div>\n {showLastModified && lastModifiedDate && (\n <div\n title={lastModifiedDate.toLocaleString(undefined, {\n dateStyle: \"full\",\n timeStyle: \"medium\",\n })}\n >\n Last modified on{\" \"}\n <time dateTime={lastModifiedDate.toISOString()}>\n {lastModifiedDate.toLocaleDateString(\"en-US\", {\n dateStyle: \"long\",\n })}\n </time>\n </div>\n )}\n </div>\n </div>\n </div>\n ) : null}\n {!hidePager && (\n <>\n <div className=\"h-px bg-border mt-2 mb-6\" />\n <Pagination\n prev={prev ? { to: prev.id, label: prev.label ?? \"\" } : undefined}\n next={next ? { to: next.id, label: next.label ?? \"\" } : undefined}\n className=\"mb-10\"\n />\n </>\n )}\n </Typography>\n <div className=\"hidden xl:block\" data-pagefind-ignore=\"all\">\n {showToc && <Toc entries={tocEntries} />}\n </div>\n </div>\n );\n};\n"],"names":["ChatGPTLogo","props","jsxs","jsx","ClaudeLogo","MarkdownHeadings","children","id","Heading","MdxPage","MdxComponent","frontmatter","defaultOptions","__filepath","tableOfContents","excerpt","categoryTitle","useCurrentItem","location","useLocation","isCopied","setIsCopied","useState","title","description","category","hideToc","pageTitle","item","hidePager","showLastModified","lastModifiedDate","editConfig","editUrl","editText","copyMarkdownConfig","markdownUrl","handleCopyMarkdown","response","markdown","tocEntries","showToc","prev","next","usePrevNext","useEffect","Helmet","Typography","CategoryHeading","slugify","Button","CheckIcon","CopyIcon","DropdownMenu","DropdownMenuTrigger","ChevronDownIcon","DropdownMenuContent","DropdownMenuItem","Link2Icon","ExternalLinkIcon","prompt","useMDXComponents","EditIcon","Fragment","Pagination","Toc"],"mappings":"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"}