zudoku 0.5.0 → 0.5.1-dev.0

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 (58) hide show
  1. package/dist/lib/components/InlineCode.js +1 -1
  2. package/dist/lib/components/InlineCode.js.map +1 -1
  3. package/dist/lib/components/SyntaxHighlight.js +14 -14
  4. package/dist/lib/components/SyntaxHighlight.js.map +1 -1
  5. package/dist/lib/plugins/openapi/Endpoint.d.ts +3 -0
  6. package/dist/lib/plugins/openapi/Endpoint.js +14 -0
  7. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -0
  8. package/dist/lib/plugins/openapi/OperationList.js +2 -1
  9. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  10. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +1 -1
  11. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  12. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +1 -1
  13. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  14. package/dist/lib/plugins/openapi/Sidecar.js +1 -1
  15. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  16. package/lib/{CategoryHeading-BG0OI3O5.js → CategoryHeading-w2EW676o.js} +2 -2
  17. package/lib/{CategoryHeading-BG0OI3O5.js.map → CategoryHeading-w2EW676o.js.map} +1 -1
  18. package/lib/{DeveloperHint-Dim4dKeY.js → DeveloperHint-D87KcpDW.js} +2 -2
  19. package/lib/{DeveloperHint-Dim4dKeY.js.map → DeveloperHint-D87KcpDW.js.map} +1 -1
  20. package/lib/{ErrorPage-XOZWbKDe.js → ErrorPage-BdHAg3Rg.js} +3 -3
  21. package/lib/{ErrorPage-XOZWbKDe.js.map → ErrorPage-BdHAg3Rg.js.map} +1 -1
  22. package/lib/{Input-BtumfhQu.js → Input-BmwltPfA.js} +3 -3
  23. package/lib/{Input-BtumfhQu.js.map → Input-BmwltPfA.js.map} +1 -1
  24. package/lib/{Markdown-Bg4SS0au.js → Markdown-BZUoEvL7.js} +5 -5
  25. package/lib/{Markdown-Bg4SS0au.js.map → Markdown-BZUoEvL7.js.map} +1 -1
  26. package/lib/{MdxPage-C3VDc6a7.js → MdxPage-BUHSDTy6.js} +3 -3
  27. package/lib/{MdxPage-C3VDc6a7.js.map → MdxPage-BUHSDTy6.js.map} +1 -1
  28. package/lib/{OperationList-C9ZThjSM.js → OperationList-DVIuzHN7.js} +106 -84
  29. package/lib/OperationList-DVIuzHN7.js.map +1 -0
  30. package/lib/{Route-D4ypsgCo.js → Route-5sI-urRK.js} +2 -2
  31. package/lib/{Route-D4ypsgCo.js.map → Route-5sI-urRK.js.map} +1 -1
  32. package/lib/{SidebarBadge-DMBr3H-a.js → SidebarBadge-6EEz-Bwe.js} +3 -3
  33. package/lib/{SidebarBadge-DMBr3H-a.js.map → SidebarBadge-6EEz-Bwe.js.map} +1 -1
  34. package/lib/{SlotletProvider-CRKX9y2Z.js → SlotletProvider-CNyl5wU0.js} +4 -4
  35. package/lib/{SlotletProvider-CRKX9y2Z.js.map → SlotletProvider-CNyl5wU0.js.map} +1 -1
  36. package/lib/{Spinner-BJ5wiTiz.js → Spinner-B9eFggre.js} +2 -2
  37. package/lib/{Spinner-BJ5wiTiz.js.map → Spinner-B9eFggre.js.map} +1 -1
  38. package/lib/{index-KUt-5Yzq.js → index-BGY8VjAV.js} +2 -2
  39. package/lib/{index-KUt-5Yzq.js.map → index-BGY8VjAV.js.map} +1 -1
  40. package/lib/{index-CvPXovcL.js → index-CbJpF8Yf.js} +3 -3
  41. package/lib/{index-CvPXovcL.js.map → index-CbJpF8Yf.js.map} +1 -1
  42. package/lib/{index-CQLpez2Z.js → index-DdUotMOQ.js} +15 -15
  43. package/lib/{index-CQLpez2Z.js.map → index-DdUotMOQ.js.map} +1 -1
  44. package/lib/zudoku.auth-openid.js +4 -4
  45. package/lib/zudoku.components.js +6 -6
  46. package/lib/zudoku.plugin-api-keys.js +5 -5
  47. package/lib/zudoku.plugin-custom-page.js +1 -1
  48. package/lib/zudoku.plugin-markdown.js +1 -1
  49. package/lib/zudoku.plugin-openapi.js +4 -4
  50. package/package.json +1 -1
  51. package/src/lib/components/InlineCode.tsx +1 -1
  52. package/src/lib/components/SyntaxHighlight.tsx +15 -15
  53. package/src/lib/plugins/openapi/Endpoint.tsx +31 -0
  54. package/src/lib/plugins/openapi/OperationList.tsx +4 -0
  55. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +2 -2
  56. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +2 -2
  57. package/src/lib/plugins/openapi/Sidecar.tsx +2 -2
  58. package/lib/OperationList-C9ZThjSM.js.map +0 -1
@@ -5,10 +5,10 @@ import { j as E } from "./jsx-runtime-B6kdoens.js";
5
5
  import { c as Ce, a as Ie } from "./_commonjsHelpers-BVfed4GL.js";
6
6
  import { A as je } from "./AuthenticationPlugin-DYnkydqa.js";
7
7
  import { useState as Je, useRef as Oe, useEffect as Ne } from "react";
8
- import { D as ze } from "./DeveloperHint-Dim4dKeY.js";
9
- import { E as De } from "./ErrorPage-XOZWbKDe.js";
10
- import { S as Ke } from "./Spinner-BJ5wiTiz.js";
11
- import { S as We } from "./Markdown-Bg4SS0au.js";
8
+ import { D as ze } from "./DeveloperHint-D87KcpDW.js";
9
+ import { E as De } from "./ErrorPage-BdHAg3Rg.js";
10
+ import { S as Ke } from "./Spinner-B9eFggre.js";
11
+ import { S as We } from "./Markdown-BZUoEvL7.js";
12
12
  import { e as He } from "./index-ChhUJhLT.js";
13
13
  import { u as z } from "./state-DsXXkBLH.js";
14
14
  var fe = { exports: {} };
@@ -15,19 +15,19 @@ var lt = (e, t, n, r) => ({
15
15
  });
16
16
  import { H as Dn, a as Ot, M as Ao, u as ko, A as $o, b as Lo } from "./utils-BPHLKjns.js";
17
17
  import { d as Fo, a as Ho, R as Uo, N as We, L as It, u as Bo, O as jn, b as zo, c as At } from "./index-ChhUJhLT.js";
18
- import { E as Nn, S as Te, a as Ko, R as qo } from "./SlotletProvider-CRKX9y2Z.js";
18
+ import { E as Nn, S as Te, a as Ko, R as qo } from "./SlotletProvider-CNyl5wU0.js";
19
19
  import { j as o } from "./jsx-runtime-B6kdoens.js";
20
- import { M as Vo, c as Qo, a as Pn, b as Tn, A as Go, u as Ze, h as Wo, d as I, e as Yo, F as Xo, D as Jo, C as Zo, P as Ue, f as kt, g as ea, i as _n, R as ta, S as na, j as ra, k as oa, l as On, m as aa, n as pt, o as In, V as An, p as un, B as Dt } from "./index-KUt-5Yzq.js";
21
- import { c as Re, a as A, C as sa, b as kn, u as ia, T as la, M as ca, V as ua, d as $t, e as da, f as fa } from "./Markdown-Bg4SS0au.js";
20
+ import { M as Vo, c as Qo, a as Pn, b as Tn, A as Go, u as Ze, h as Wo, d as I, e as Yo, F as Xo, D as Jo, C as Zo, P as Ue, f as kt, g as ea, i as _n, R as ta, S as na, j as ra, k as oa, l as On, m as aa, n as pt, o as In, V as An, p as un, B as Dt } from "./index-BGY8VjAV.js";
21
+ import { c as Re, a as A, C as sa, b as kn, u as ia, T as la, M as ca, V as ua, d as $t, e as da, f as fa } from "./Markdown-BZUoEvL7.js";
22
22
  import * as h from "react";
23
23
  import g, { StrictMode as $n, createContext as Ln, Component as ha, createElement as dn, isValidElement as pa, useLayoutEffect as ma, useEffect as xe, useState as He, useCallback as Fn, Suspense as Hn, memo as Un, useMemo as bt, useContext as ga, Fragment as va, useRef as Lt, forwardRef as wa } from "react";
24
24
  import { g as Ft } from "./_commonjsHelpers-BVfed4GL.js";
25
25
  import { r as xa } from "./router-BiRCp01d.js";
26
- import { S as jt, R as ya, T as ba, C as Ma } from "./index-CvPXovcL.js";
26
+ import { S as jt, R as ya, T as ba, C as Ma } from "./index-CbJpF8Yf.js";
27
27
  import { S as Bn, h as zn, Q as Sa, n as ee, m as fn, a as hn, b as ve, e as Ea, c as Ca, d as Ra, f as Da, o as pn, r as mn, g as ja, i as gn, p as vn, s as Na, u as et, j as Pa, Z as Ta, k as _a, l as Kn, q as Oa } from "./ZudokuContext-BHNQL3XO.js";
28
28
  import { j as Ht } from "./joinPath-B7kNnUX4.js";
29
- import { c as qn, P as vt, R as Ia, I as Aa, O as ka, C as $a, T as La, a as Fa, b as Ha, d as Ua, D as Ba, e as za, S as Mt } from "./SidebarBadge-DMBr3H-a.js";
30
- import { S as Ka } from "./Spinner-BJ5wiTiz.js";
29
+ import { c as qn, P as vt, R as Ia, I as Aa, O as ka, C as $a, T as La, a as Fa, b as Ha, d as Ua, D as Ba, e as za, S as Mt } from "./SidebarBadge-6EEz-Bwe.js";
30
+ import { S as Ka } from "./Spinner-B9eFggre.js";
31
31
  /**
32
32
  * @license lucide-react v0.378.0 - ISC
33
33
  *
@@ -1,12 +1,12 @@
1
1
  import { j as e } from "./jsx-runtime-B6kdoens.js";
2
- import { S as p, R as g } from "./SlotletProvider-CRKX9y2Z.js";
3
- import { u as j, a as u, I as v, S as k, b as w, c as b, d as K, e as N, f as y } from "./Input-BtumfhQu.js";
2
+ import { S as p, R as g } from "./SlotletProvider-CNyl5wU0.js";
3
+ import { u as j, a as u, I as v, S as k, b as w, c as b, d as K, e as N, f as y } from "./Input-BmwltPfA.js";
4
4
  import { e as E, L as x, O as A } from "./index-ChhUJhLT.js";
5
5
  import { u as m, t as C, j as S } from "./ZudokuContext-BHNQL3XO.js";
6
- import { B as l, p as I } from "./index-KUt-5Yzq.js";
7
- import { D as P } from "./DeveloperHint-Dim4dKeY.js";
6
+ import { B as l, p as I } from "./index-BGY8VjAV.js";
7
+ import { D as P } from "./DeveloperHint-D87KcpDW.js";
8
8
  import { useState as h } from "react";
9
- import { c as d, a as D, C as R, g as q } from "./Markdown-Bg4SS0au.js";
9
+ import { c as d, a as D, C as R, g as q } from "./Markdown-BZUoEvL7.js";
10
10
  /**
11
11
  * @license lucide-react v0.378.0 - ISC
12
12
  *
@@ -1,5 +1,5 @@
1
1
  import { j as m } from "./jsx-runtime-B6kdoens.js";
2
- import { P as o } from "./Markdown-Bg4SS0au.js";
2
+ import { P as o } from "./Markdown-BZUoEvL7.js";
3
3
  const l = (s) => ({
4
4
  getRoutes: () => s.map(({ path: e, element: t }) => ({
5
5
  path: e,
@@ -4,7 +4,7 @@ const i = (t, e) => Object.entries(t).flatMap(([a, s]) => {
4
4
  return o ? {
5
5
  path: o,
6
6
  lazy: async () => {
7
- const { MdxPage: r } = await import("./MdxPage-C3VDc6a7.js"), { default: p, ...m } = await s();
7
+ const { MdxPage: r } = await import("./MdxPage-BUHSDTy6.js"), { default: p, ...m } = await s();
8
8
  return {
9
9
  element: /* @__PURE__ */ c.jsx(
10
10
  r,
@@ -1,11 +1,11 @@
1
1
  import "./jsx-runtime-B6kdoens.js";
2
- import { o as s } from "./index-CQLpez2Z.js";
2
+ import { o as s } from "./index-DdUotMOQ.js";
3
3
  import "./urql-YhcsXYy8.js";
4
4
  import "./ZudokuContext-BHNQL3XO.js";
5
5
  import "zudoku/openapi-worker";
6
- import "./index-KUt-5Yzq.js";
7
- import "./ErrorPage-XOZWbKDe.js";
8
- import "./Markdown-Bg4SS0au.js";
6
+ import "./index-BGY8VjAV.js";
7
+ import "./ErrorPage-BdHAg3Rg.js";
8
+ import "./Markdown-BZUoEvL7.js";
9
9
  import "./joinPath-B7kNnUX4.js";
10
10
  import "./router-BiRCp01d.js";
11
11
  import "./index-ChhUJhLT.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.5.0",
3
+ "version": "0.5.1-dev.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -10,8 +10,8 @@ export const InlineCode = ({
10
10
  }) => (
11
11
  <code
12
12
  className={cn(
13
- className,
14
13
  "font-mono border p-1 py-0.5 rounded bg-border/50 dark:bg-border/70 whitespace-nowrap",
14
+ className,
15
15
  )}
16
16
  >
17
17
  {children}
@@ -9,29 +9,29 @@ import { CheckIcon, CopyIcon } from "lucide-react";
9
9
 
10
10
  globalThis.Prism = Prism;
11
11
  // @ts-expect-error This is untyped
12
- import("prismjs/components/prism-bash.min.js");
12
+ void import("prismjs/components/prism-bash.min.js");
13
13
  // @ts-expect-error This is untyped
14
- import("prismjs/components/prism-ruby.min.js");
14
+ void import("prismjs/components/prism-ruby.min.js");
15
15
  // @ts-expect-error This is untyped
16
- import("prismjs/components/prism-markup-templating.js");
16
+ void import("prismjs/components/prism-markup-templating.js");
17
17
  // @ts-expect-error This is untyped
18
- import("prismjs/components/prism-markup.js");
18
+ void import("prismjs/components/prism-markup.js");
19
19
  // @ts-expect-error This is untyped
20
- import("prismjs/components/prism-php.min.js");
20
+ void import("prismjs/components/prism-php.min.js");
21
21
  // @ts-expect-error This is untyped
22
- import("prismjs/components/prism-json.min.js");
22
+ void import("prismjs/components/prism-json.min.js");
23
23
  // @ts-expect-error This is untyped
24
- import("prismjs/components/prism-java.min.js");
24
+ void import("prismjs/components/prism-java.min.js");
25
25
  // @ts-expect-error This is untyped
26
- import("prismjs/components/prism-csharp.min.js");
26
+ void import("prismjs/components/prism-csharp.min.js");
27
27
  // @ts-expect-error This is untyped
28
- import("prismjs/components/prism-objectivec.min.js");
28
+ void import("prismjs/components/prism-objectivec.min.js");
29
29
  // @ts-expect-error This is untyped
30
- import("prismjs/components/prism-markdown.min.js");
30
+ void import("prismjs/components/prism-markdown.min.js");
31
31
  // @ts-expect-error This is untyped
32
- import("prismjs/components/prism-javascript.min.js");
32
+ void import("prismjs/components/prism-javascript.min.js");
33
33
  // @ts-expect-error This is untyped
34
- import("prismjs/components/prism-typescript.min.js");
34
+ void import("prismjs/components/prism-typescript.min.js");
35
35
 
36
36
  import { useState } from "react";
37
37
  import { cn } from "../util/cn.js";
@@ -96,7 +96,7 @@ export const SyntaxHighlight = ({
96
96
  type="button"
97
97
  aria-label="Copy code"
98
98
  title="Copy code"
99
- className="absolute top-1.5 right-1.5 p-2.5 opacity-0 group-hover:opacity-100 group-hover:bg-zinc-100 group-hover:dark:bg-zinc-700 hover:outline hover:outline-border/75 dark:hover:outline-border rounded-md text-sm text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 transition"
99
+ className="absolute top-2 right-2 p-2 opacity-0 group-hover:opacity-100 group-hover:bg-zinc-100 group-hover:dark:bg-zinc-700 hover:outline hover:outline-border/75 dark:hover:outline-border rounded-md text-sm text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 transition"
100
100
  disabled={isCopied}
101
101
  onClick={() => {
102
102
  setIsCopied(true);
@@ -109,9 +109,9 @@ export const SyntaxHighlight = ({
109
109
  }}
110
110
  >
111
111
  {isCopied ? (
112
- <CheckIcon className="text-emerald-600" size={18} />
112
+ <CheckIcon className="text-emerald-600" size={16} />
113
113
  ) : (
114
- <CopyIcon size={18} />
114
+ <CopyIcon size={16} />
115
115
  )}
116
116
  </button>
117
117
  )}
@@ -0,0 +1,31 @@
1
+ import { CheckIcon, CopyIcon } from "lucide-react";
2
+ import { useState } from "react";
3
+ import { InlineCode } from "../../components/InlineCode.js";
4
+
5
+ export const Endpoint = ({ url }: { url: string }) => {
6
+ const [isCopied, setIsCopied] = useState(false);
7
+
8
+ return (
9
+ <div className="my-4 flex items-center justify-end gap-2 text-sm">
10
+ <span className="font-medium">Endpoint:</span>
11
+ <InlineCode className="p-1.5 flex gap-2.5 items-center text-xs">
12
+ {url}
13
+ <button
14
+ onClick={() => {
15
+ void navigator.clipboard.writeText(url).then(() => {
16
+ setIsCopied(true);
17
+ setTimeout(() => setIsCopied(false), 2000);
18
+ });
19
+ }}
20
+ type="button"
21
+ >
22
+ {isCopied ? (
23
+ <CheckIcon className="text-green-600" size={14} />
24
+ ) : (
25
+ <CopyIcon size={14} strokeWidth={1.3} />
26
+ )}
27
+ </button>
28
+ </InlineCode>
29
+ </div>
30
+ );
31
+ };
@@ -7,6 +7,7 @@ import { InlineCode } from "../../components/InlineCode.js";
7
7
  import { Markdown, ProseClasses } from "../../components/Markdown.js";
8
8
  import { SyntaxHighlight } from "../../components/SyntaxHighlight.js";
9
9
  import { cn } from "../../util/cn.js";
10
+ import { Endpoint } from "./Endpoint.js";
10
11
  import { OperationListItem } from "./OperationListItem.js";
11
12
  import StaggeredRender from "./StaggeredRender.js";
12
13
  import { useOasConfig } from "./context.js";
@@ -131,6 +132,9 @@ export const OperationList = () => {
131
132
  </Heading>
132
133
  <Markdown content={result.data.schema.description ?? ""} />
133
134
  </div>
135
+ <hr />
136
+ <Endpoint url={result.data.schema.url} />
137
+
134
138
  {result.data.schema.tags
135
139
  .filter((tag) => tag.operations.length > 0)
136
140
  .map((tag) => (
@@ -18,12 +18,12 @@ export const RequestBodySidecarBox = ({ content }: { content: Content }) => {
18
18
  <SidecarBox.Head className="text-xs flex justify-between items-center">
19
19
  <span className="font-mono">Request Body Example</span>
20
20
  </SidecarBox.Head>
21
- <SidecarBox.Body>
21
+ <SidecarBox.Body className="p-0">
22
22
  <SyntaxHighlight
23
23
  language="json"
24
24
  noBackground
25
25
  copyable
26
- className="text-xs max-h-[450px]"
26
+ className="text-xs max-h-[450px] p-2"
27
27
  code={JSON.stringify(
28
28
  content.at(0)?.schema
29
29
  ? generateSchemaExample(content[0].schema as SchemaObject)
@@ -47,12 +47,12 @@ export const ResponsesSidecarBox = ({
47
47
 
48
48
  return (
49
49
  <Tabs.Content key={response.statusCode} value={response.statusCode}>
50
- <SidecarBox.Body>
50
+ <SidecarBox.Body className="p-0">
51
51
  {schema ? (
52
52
  <SyntaxHighlight
53
53
  language="json"
54
54
  noBackground
55
- className="text-xs max-h-[450px]"
55
+ className="text-xs max-h-[450px] p-2"
56
56
  code={JSON.stringify(generateSchemaExample(schema), null, 2)}
57
57
  />
58
58
  ) : (
@@ -178,11 +178,11 @@ export const Sidecar = ({
178
178
  operation={operation}
179
179
  />
180
180
  </SidecarBox.Head>
181
- <SidecarBox.Body className="max-h-[480px]">
181
+ <SidecarBox.Body className="max-h-[480px] p-0">
182
182
  <SyntaxHighlight
183
183
  language={selectedLang}
184
184
  noBackground
185
- className="text-xs"
185
+ className="text-xs p-2"
186
186
  code={code}
187
187
  />
188
188
  </SidecarBox.Body>
@@ -1 +0,0 @@
1
- {"version":3,"file":"OperationList-C9ZThjSM.js","sources":["../../../node_modules/.pnpm/lucide-react@0.378.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-dot.js","../../../node_modules/.pnpm/lucide-react@0.378.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-fading-plus.js","../../../node_modules/.pnpm/lucide-react@0.378.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle.js","../../../node_modules/.pnpm/lucide-react@0.378.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/list-plus.js","../../../node_modules/.pnpm/lucide-react@0.378.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/square-minus.js","../../../node_modules/.pnpm/lucide-react@0.378.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/square-plus.js","../src/lib/plugins/openapi/graphql/fragment-masking.ts","../src/lib/util/groupBy.ts","../src/lib/util/renderIf.ts","../src/lib/plugins/openapi/ParameterListItem.tsx","../src/lib/plugins/openapi/ParameterList.tsx","../src/lib/util/objectEntries.ts","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.tsx","../src/lib/plugins/openapi/schema/utils.ts","../src/lib/plugins/openapi/schema/SchemaComponents.tsx","../src/lib/plugins/openapi/schema/SchemaView.tsx","../src/lib/plugins/openapi/OperationListItem.tsx","../src/lib/plugins/openapi/OperationList.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.378.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleDot = createLucideIcon(\"CircleDot\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }]\n]);\n\nexport { CircleDot as default };\n//# sourceMappingURL=circle-dot.js.map\n","/**\n * @license lucide-react v0.378.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleFadingPlus = createLucideIcon(\"CircleFadingPlus\", [\n [\"path\", { d: \"M12 2a10 10 0 0 1 7.38 16.75\", key: \"175t95\" }],\n [\"path\", { d: \"M12 8v8\", key: \"napkw2\" }],\n [\"path\", { d: \"M16 12H8\", key: \"1fr5h0\" }],\n [\"path\", { d: \"M2.5 8.875a10 10 0 0 0-.5 3\", key: \"1vce0s\" }],\n [\"path\", { d: \"M2.83 16a10 10 0 0 0 2.43 3.4\", key: \"o3fkw4\" }],\n [\"path\", { d: \"M4.636 5.235a10 10 0 0 1 .891-.857\", key: \"1szpfk\" }],\n [\"path\", { d: \"M8.644 21.42a10 10 0 0 0 7.631-.38\", key: \"9yhvd4\" }]\n]);\n\nexport { CircleFadingPlus as default };\n//# sourceMappingURL=circle-fading-plus.js.map\n","/**\n * @license lucide-react v0.378.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Circle = createLucideIcon(\"Circle\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n]);\n\nexport { Circle as default };\n//# sourceMappingURL=circle.js.map\n","/**\n * @license lucide-react v0.378.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ListPlus = createLucideIcon(\"ListPlus\", [\n [\"path\", { d: \"M11 12H3\", key: \"51ecnj\" }],\n [\"path\", { d: \"M16 6H3\", key: \"1wxfjs\" }],\n [\"path\", { d: \"M16 18H3\", key: \"12xzn7\" }],\n [\"path\", { d: \"M18 9v6\", key: \"1twb98\" }],\n [\"path\", { d: \"M21 12h-6\", key: \"bt1uis\" }]\n]);\n\nexport { ListPlus as default };\n//# sourceMappingURL=list-plus.js.map\n","/**\n * @license lucide-react v0.378.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SquareMinus = createLucideIcon(\"SquareMinus\", [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M8 12h8\", key: \"1wcyev\" }]\n]);\n\nexport { SquareMinus as default };\n//# sourceMappingURL=square-minus.js.map\n","/**\n * @license lucide-react v0.378.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SquarePlus = createLucideIcon(\"SquarePlus\", [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M8 12h8\", key: \"1wcyev\" }],\n [\"path\", { d: \"M12 8v8\", key: \"napkw2\" }]\n]);\n\nexport { SquarePlus as default };\n//# sourceMappingURL=square-plus.js.map\n","/* eslint-disable */\nimport type {\n DocumentTypeDecoration,\n ResultOf,\n TypedDocumentNode,\n} from \"@graphql-typed-document-node/core\";\nimport type { FragmentDefinitionNode } from \"graphql\";\nimport type { Incremental } from \"./graphql.js\";\n\nexport type FragmentType<\n TDocumentType extends DocumentTypeDecoration<any, any>,\n> =\n TDocumentType extends DocumentTypeDecoration<infer TType, any>\n ? [TType] extends [{ \" $fragmentName\"?: infer TKey }]\n ? TKey extends string\n ? { \" $fragmentRefs\"?: { [key in TKey]: TType } }\n : never\n : never\n : never;\n\n// return non-nullable if `fragmentType` is non-nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: FragmentType<DocumentTypeDecoration<TType, any>>,\n): TType;\n// return nullable if `fragmentType` is undefined\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | undefined,\n): TType | undefined;\n// return nullable if `fragmentType` is nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | null,\n): TType | null;\n// return nullable if `fragmentType` is nullable or undefined\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType:\n | FragmentType<DocumentTypeDecoration<TType, any>>\n | null\n | undefined,\n): TType | null | undefined;\n// return array of non-nullable if `fragmentType` is array of non-nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: Array<FragmentType<DocumentTypeDecoration<TType, any>>>,\n): Array<TType>;\n// return array of nullable if `fragmentType` is array of nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType:\n | Array<FragmentType<DocumentTypeDecoration<TType, any>>>\n | null\n | undefined,\n): Array<TType> | null | undefined;\n// return readonly array of non-nullable if `fragmentType` is array of non-nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>>,\n): ReadonlyArray<TType>;\n// return readonly array of nullable if `fragmentType` is array of nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType:\n | ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>>\n | null\n | undefined,\n): ReadonlyArray<TType> | null | undefined;\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType:\n | FragmentType<DocumentTypeDecoration<TType, any>>\n | Array<FragmentType<DocumentTypeDecoration<TType, any>>>\n | ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>>\n | null\n | undefined,\n): TType | Array<TType> | ReadonlyArray<TType> | null | undefined {\n return fragmentType as any;\n}\n\nexport function makeFragmentData<\n F extends DocumentTypeDecoration<any, any>,\n FT extends ResultOf<F>,\n>(data: FT, _fragment: F): FragmentType<F> {\n return data as FragmentType<F>;\n}\nexport function isFragmentReady<TQuery, TFrag>(\n queryNode: DocumentTypeDecoration<TQuery, any>,\n fragmentNode: TypedDocumentNode<TFrag>,\n data:\n | FragmentType<TypedDocumentNode<Incremental<TFrag>, any>>\n | null\n | undefined,\n): data is FragmentType<typeof fragmentNode> {\n const deferredFields = (\n queryNode as {\n __meta__?: { deferredFields: Record<string, (keyof TFrag)[]> };\n }\n ).__meta__?.deferredFields;\n\n if (!deferredFields) return true;\n\n const fragDef = fragmentNode.definitions[0] as\n | FragmentDefinitionNode\n | undefined;\n const fragName = fragDef?.name?.value;\n\n const fields = (fragName && deferredFields[fragName]) || [];\n return fields.length > 0 && fields.every((field) => data && field in data);\n}\n","export const groupBy = <\n T extends Record<PropertyKey, any>,\n KeySelector extends (item: T) => PropertyKey,\n>(\n arr: T[],\n keySelector: KeySelector,\n): Partial<Record<ReturnType<KeySelector>, T[]>> => {\n return arr.reduce(\n (accumulator, val) => {\n const groupedKey = keySelector(val) as ReturnType<KeySelector>;\n if (!accumulator[groupedKey]) {\n accumulator[groupedKey] = [];\n }\n accumulator[groupedKey].push(val);\n return accumulator;\n },\n {} as Record<ReturnType<KeySelector>, T[]>,\n );\n};\n","export const renderIf = <G, R>(\n variable: G | undefined | null,\n callback: (variable: G) => R,\n): R | undefined => (variable ? callback(variable) : undefined);\n","import { Markdown } from \"../../components/Markdown.js\";\nimport { type SchemaObject } from \"../../oas/graphql/index.js\";\nimport { ColorizedParam } from \"./ColorizedParam.js\";\nimport type { OperationListItemResult } from \"./OperationList.js\";\nimport type { ParameterGroup } from \"./OperationListItem.js\";\n\nconst getParameterSchema = (\n parameter: ParameterListItemResult,\n): SchemaObject => {\n if (parameter.schema != null && typeof parameter.schema === \"object\") {\n return parameter.schema;\n }\n return {\n type: \"string\",\n };\n};\n\nexport type ParameterListItemResult = NonNullable<\n OperationListItemResult[\"parameters\"]\n>[number];\n\nexport const ParameterListItem = ({\n parameter,\n group,\n id,\n}: {\n parameter: ParameterListItemResult;\n group: ParameterGroup;\n id: string;\n}) => (\n <li className=\"p-4 bg-border/20 text-sm flex flex-col gap-1\">\n <div className=\"flex items-center gap-2\">\n <code>\n {group === \"path\" ? (\n <ColorizedParam\n name={parameter.name}\n backgroundOpacity=\"15%\"\n slug={id + \"-\" + parameter.name.toLocaleLowerCase()}\n />\n ) : (\n parameter.name\n )}\n </code>\n {parameter.required && (\n <span className=\"py-px px-1.5 font-medium bg-primary/75 text-muted rounded-lg\">\n required\n </span>\n )}\n {getParameterSchema(parameter).type && (\n <span className=\"text-muted-foreground\">\n {getParameterSchema(parameter).type}\n </span>\n )}\n </div>\n {parameter.description && (\n <Markdown\n content={parameter.description}\n className=\"text-sm prose-p:my-1 prose-code:whitespace-pre-line\"\n />\n )}\n </li>\n);\n","import { Heading } from \"../../components/Heading.js\";\nimport { Card } from \"../../ui/Card.js\";\nimport type { ParameterGroup } from \"./OperationListItem.js\";\nimport {\n ParameterListItem,\n type ParameterListItemResult,\n} from \"./ParameterListItem.js\";\n\nexport const ParameterList = ({\n group,\n parameters,\n id,\n}: {\n group: ParameterGroup;\n parameters: ParameterListItemResult[];\n id: string;\n}) => (\n <>\n <Heading level={3} id={`${id}/${group}-parameters`} className=\"capitalize\">\n {group === \"header\" ? \"Headers\" : `${group} Parameters`}\n </Heading>\n <Card>\n <ul className=\"list-none m-0 px-0 divide-y \">\n {parameters\n .sort((a, b) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map((parameter) => (\n <ParameterListItem\n key={`${parameter.name}-${parameter.in}`}\n parameter={parameter}\n id={id}\n group={group}\n />\n ))}\n </ul>\n </Card>\n </>\n);\n","type ValueOf<T> = T[keyof T];\ntype Entries<T> = [keyof T, ValueOf<T>][];\n\nexport const objectEntries = <T extends object>(obj: T): Entries<T> =>\n Object.entries(obj) as Entries<T>;\n","import {\n ChevronDownIcon,\n CircleDotIcon,\n CircleFadingPlusIcon,\n CircleIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../../../util/cn.js\";\n\nimport type { LogicalGroupType } from \"../utils.js\";\n\nconst iconMap = {\n AND: <CircleFadingPlusIcon size={16} className=\"fill-card\" />,\n OR: <CircleDotIcon size={16} className=\"fill-card\" />,\n ONE: <CircleIcon size={14} className=\"fill-card\" />,\n} as const;\n\nconst colorClass = {\n AND: \"text-green-500 dark:text-green-300/60\",\n OR: \"text-blue-400 dark:text-blue-500\",\n ONE: \"text-purple-500 dark:text-purple-300/60\",\n} as const;\n\nexport const LogicalGroupConnector = ({\n type,\n isOpen,\n className,\n}: {\n type: LogicalGroupType;\n isOpen: boolean;\n className?: string;\n}) => {\n return (\n <div\n className={cn(\n colorClass[type],\n \"relative text-sm flex py-2\",\n \"before:border-l before:absolute before:-top-2 before:-bottom-2 before:border-border before:border-dashed before:content-['']\",\n className,\n )}\n >\n <div className=\"-translate-x-[7px] flex gap-1 items-center\">\n {iconMap[type]}\n <div\n className={cn(\n \"translate-y-px mx-px opacity-0 group-hover:opacity-100 transition\",\n !isOpen && \"-rotate-90\",\n )}\n >\n <ChevronDownIcon size={16} />\n </div>\n </div>\n </div>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { useState } from \"react\";\nimport type { SchemaObject } from \"../../../../oas/parser/index.js\";\nimport { SchemaView } from \"../SchemaView.js\";\nimport type { LogicalGroupType } from \"../utils.js\";\nimport { LogicalGroupConnector } from \"./LogicalGroupConnector.js\";\n\nexport const LogicalGroupItem = (props: {\n type: LogicalGroupType;\n schema: SchemaObject;\n level: number;\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n\n return (\n <Collapsible.Root\n open={isOpen}\n onOpenChange={() => setIsOpen((prev) => !prev)}\n className=\"group\"\n >\n <Collapsible.Trigger>\n <LogicalGroupConnector type={props.type} isOpen={isOpen} />\n </Collapsible.Trigger>\n {!isOpen && <div className=\"wavy-line bg-border translate-y-1\" />}\n <Collapsible.Content>\n <SchemaView schema={props.schema} level={props.level + 1} />\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { SquareMinusIcon, SquarePlusIcon } from \"lucide-react\";\nimport type { SchemaObject } from \"../../../../oas/parser/index.js\";\nimport { Card } from \"../../../../ui/Card.js\";\nimport type { LogicalGroupType } from \"../utils.js\";\nimport { LogicalGroupItem } from \"./LogicalGroupItem.js\";\n\nconst typeLabel = {\n AND: \"All of\",\n OR: \"Any of\",\n ONE: \"One of\",\n};\n\nexport const LogicalGroup = ({\n schemas,\n type,\n isOpen,\n level,\n toggleOpen,\n}: {\n schemas: SchemaObject[];\n type: LogicalGroupType;\n isOpen: boolean;\n toggleOpen: () => void;\n level: number;\n}) => (\n <Collapsible.Root open={isOpen} onOpenChange={toggleOpen} asChild>\n <Card className=\"px-6\">\n <Collapsible.Trigger className=\"flex gap-2 items-center py-2 w-full text-sm text-muted-foreground -translate-x-1.5\">\n {isOpen ? <SquareMinusIcon size={14} /> : <SquarePlusIcon size={14} />}\n <span>{typeLabel[type]}</span>\n </Collapsible.Trigger>\n\n <Collapsible.Content className=\"pb-4\">\n {schemas.map((subSchema, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <LogicalGroupItem\n key={index}\n type={type}\n schema={subSchema}\n level={level}\n />\n ))}\n </Collapsible.Content>\n </Card>\n </Collapsible.Root>\n);\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\n\nexport const isComplexType = (value: SchemaObject) =>\n value.type === \"object\" ||\n (value.type === \"array\" &&\n typeof value.items === \"object\" &&\n (!value.items.type || value.items.type === \"object\"));\n\nexport const hasLogicalGroupings = (value: SchemaObject) =>\n Boolean(value.oneOf ?? value.allOf ?? value.anyOf);\n\nexport const LogicalSchemaTypeMap = {\n allOf: \"AND\",\n anyOf: \"OR\",\n oneOf: \"ONE\",\n} as const;\n\nexport type LogicalGroupType = \"AND\" | \"OR\" | \"ONE\";\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { ListPlusIcon } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport { Markdown, ProseClasses } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { objectEntries } from \"../../../util/objectEntries.js\";\nimport { LogicalGroup } from \"./LogicalGroup/LogicalGroup.js\";\nimport { SchemaView } from \"./SchemaView.js\";\nimport {\n hasLogicalGroupings,\n isComplexType,\n LogicalSchemaTypeMap,\n} from \"./utils.js\";\n\nexport const SchemaLogicalGroup = ({\n schema,\n level,\n}: {\n schema: SchemaObject;\n level: number;\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n const toggleOpen = useCallback(() => setIsOpen((prev) => !prev), []);\n\n for (const [key, type] of objectEntries(LogicalSchemaTypeMap)) {\n if (!schema[key]) continue;\n\n return (\n <LogicalGroup\n schemas={schema[key]}\n type={type}\n isOpen={isOpen}\n toggleOpen={toggleOpen}\n level={level}\n />\n );\n }\n};\n\nexport const SchemaPropertyItem = ({\n name,\n schema,\n group,\n level,\n defaultOpen = false,\n showCollapseButton = true,\n}: {\n name: string;\n schema: SchemaObject;\n group: \"required\" | \"optional\" | \"deprecated\";\n level: number;\n defaultOpen?: boolean;\n showCollapseButton?: boolean;\n}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n return (\n <li className=\"p-4 bg-border/20 hover:bg-border/30\">\n <div className=\"flex flex-col gap-1 justify-between text-sm\">\n <div className=\"flex gap-2 items-center\">\n <code>{name}</code>\n <span className=\"text-muted-foreground\">\n {schema.type === \"array\" && schema.items.type ? (\n <span>{schema.items.type}[]</span>\n ) : Array.isArray(schema.type) ? (\n <span>{schema.type.join(\" | \")}</span>\n ) : (\n <span>{schema.type}</span>\n )}\n </span>\n {group === \"optional\" && (\n <span className=\"py-px px-1.5 font-medium border rounded-lg\">\n optional\n </span>\n )}\n </div>\n\n {schema.description && (\n <Markdown\n className={cn(ProseClasses, \"text-sm leading-normal line-clamp-4\")}\n content={schema.description}\n />\n )}\n\n {(hasLogicalGroupings(schema) || isComplexType(schema)) && (\n <Collapsible.Root\n defaultOpen={defaultOpen}\n open={isOpen}\n onOpenChange={() => setIsOpen(!isOpen)}\n >\n {showCollapseButton && (\n <Collapsible.Trigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-2 flex gap-1.5\"\n >\n <ListPlusIcon size={18} />\n {!isOpen\n ? \"Show nested properties\"\n : \"Hide nested properties\"}\n </Button>\n </Collapsible.Trigger>\n )}\n <Collapsible.Content>\n <div className=\"mt-2\">\n {hasLogicalGroupings(schema) ? (\n <SchemaLogicalGroup schema={schema} level={level + 1} />\n ) : schema.type === \"object\" ? (\n <SchemaView schema={schema} level={level + 1} />\n ) : (\n schema.type === \"array\" &&\n typeof schema.items === \"object\" && (\n <SchemaView schema={schema.items} level={level + 1} />\n )\n )}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n )}\n </div>\n </li>\n );\n};\n","import { Markdown, ProseClasses } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../../../ui/Card.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { groupBy } from \"../../../util/groupBy.js\";\nimport { SchemaLogicalGroup, SchemaPropertyItem } from \"./SchemaComponents.js\";\nimport { hasLogicalGroupings } from \"./utils.js\";\n\nexport const SchemaView = ({\n schema,\n level = 0,\n defaultOpen = false,\n}: {\n schema?: SchemaObject | null;\n level?: number;\n defaultOpen?: boolean;\n}) => {\n if (!schema || Object.keys(schema).length === 0) {\n return (\n <Card className=\"p-4\">\n <span className=\"text-sm text-muted-foreground italic\">\n No response specified\n </span>\n </Card>\n );\n }\n\n const renderSchema = (schema: SchemaObject, level: number) => {\n if (hasLogicalGroupings(schema)) {\n return <SchemaLogicalGroup schema={schema} level={level} />;\n }\n\n // Sometimes items is not defined\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (schema.type === \"array\" && schema.items) {\n const itemsSchema = schema.items as SchemaObject;\n\n if (\n typeof itemsSchema.type === \"string\" &&\n [\"string\", \"number\", \"boolean\", \"integer\"].includes(itemsSchema.type)\n ) {\n return (\n <Card className=\"p-4\">\n <span className=\"text-sm text-muted-foreground\">\n {itemsSchema.type}[]\n </span>\n {schema.description && (\n <Markdown\n className={cn(\n ProseClasses,\n \"text-sm leading-normal line-clamp-4\",\n )}\n content={schema.description}\n />\n )}\n </Card>\n );\n } else if (itemsSchema.type === \"object\") {\n return (\n <Card className=\"flex flex-col gap-2 bg-border/30 p-4\">\n <span className=\"text-sm text-muted-foreground\">object[]</span>\n {renderSchema(itemsSchema, level + 1)}\n </Card>\n );\n } else {\n return renderSchema(itemsSchema, level + 1);\n }\n }\n\n if (schema.type === \"object\" && !schema.properties) {\n return (\n <Card className=\"p-4 flex gap-2 items-center\">\n {\"name\" in schema && <>{schema.name}</>}\n <span className=\"text-sm text-muted-foreground\">object</span>\n {schema.description && (\n <Markdown\n className={cn(\n ProseClasses,\n \"text-sm leading-normal line-clamp-4\",\n )}\n content={schema.description}\n />\n )}\n </Card>\n );\n }\n\n if (schema.properties) {\n const groupedProperties = groupBy(\n Object.entries(schema.properties),\n ([propertyName, property]) => {\n return property.deprecated\n ? \"deprecated\"\n : schema.required?.includes(propertyName)\n ? \"required\"\n : \"optional\";\n },\n );\n\n const groupNames = [\"required\", \"optional\", \"deprecated\"] as const;\n\n return (\n <Card className=\"divide-y overflow-hidden\">\n {groupNames.map(\n (group) =>\n groupedProperties[group] && (\n <ul key={group} className=\"divide-y\">\n {groupedProperties[group].map(([name, schema]) => (\n <SchemaPropertyItem\n key={name}\n name={name}\n schema={schema}\n group={group}\n level={level}\n defaultOpen={defaultOpen}\n />\n ))}\n </ul>\n ),\n )}\n </Card>\n );\n }\n\n if (\n typeof schema.type === \"string\" &&\n [\"string\", \"number\", \"boolean\", \"integer\", \"null\"].includes(schema.type)\n ) {\n return (\n <Card className=\"p-4\">\n <span className=\"text-sm text-muted-foreground\">{schema.type}</span>\n {schema.description && (\n <Markdown\n className={cn(\n ProseClasses,\n \"text-sm leading-normal line-clamp-4\",\n )}\n content={schema.description}\n />\n )}\n </Card>\n );\n }\n\n if (schema.additionalProperties) {\n return (\n <Card className=\"my-2\">\n <CardHeader>\n <CardTitle>Additional Properties:</CardTitle>\n </CardHeader>\n <CardContent>\n {renderSchema(\n schema.additionalProperties as SchemaObject,\n level + 1,\n )}\n </CardContent>\n </Card>\n );\n }\n\n return null;\n };\n\n return renderSchema(schema, level);\n};\n","import { useState } from \"react\";\nimport { Heading } from \"../../components/Heading.js\";\nimport { Markdown, ProseClasses } from \"../../components/Markdown.js\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../ui/Tabs.js\";\nimport { groupBy } from \"../../util/groupBy.js\";\nimport { renderIf } from \"../../util/renderIf.js\";\nimport { OperationsFragment } from \"./OperationList.js\";\nimport { ParameterList } from \"./ParameterList.js\";\nimport { Sidecar } from \"./Sidecar.js\";\nimport { FragmentType, useFragment } from \"./graphql/index.js\";\nimport { SchemaView } from \"./schema/SchemaView.js\";\n\nexport const PARAM_GROUPS = [\"path\", \"query\", \"header\", \"cookie\"] as const;\nexport type ParameterGroup = (typeof PARAM_GROUPS)[number];\n\nexport const OperationListItem = ({\n operationFragment,\n}: {\n operationFragment: FragmentType<typeof OperationsFragment>;\n}) => {\n const operation = useFragment(OperationsFragment, operationFragment);\n const groupedParameters = groupBy(\n operation.parameters ?? [],\n (param) => param.in,\n );\n\n const first = operation.responses.at(0);\n const [selectedResponse, setSelectedResponse] = useState(first?.statusCode);\n\n return (\n <div\n key={operation.operationId}\n className=\"grid grid-cols-1 lg:grid-cols-[4fr_3fr] gap-8 items-start border-b-2 mb-16 pb-16\"\n >\n <div className=\"flex flex-col gap-4\">\n <Heading level={2} id={operation.slug} registerSidebarAnchor>\n {operation.summary}\n </Heading>\n {operation.description && (\n <Markdown\n className={`${ProseClasses} max-w-full prose-img:max-w-prose`}\n content={operation.description}\n />\n )}\n {operation.parameters && operation.parameters.length > 0 && (\n <>\n {PARAM_GROUPS.flatMap((group) =>\n groupedParameters[group]?.length ? (\n <ParameterList\n key={group}\n id={operation.slug}\n parameters={groupedParameters[group]}\n group={group}\n />\n ) : (\n []\n ),\n )}\n </>\n )}\n {renderIf(operation.requestBody?.content?.at(0)?.schema, (schema) => (\n <div className=\"mt-4 flex flex-col gap-4\">\n <Heading\n level={3}\n className=\"capitalize\"\n id={`${operation.slug}/request-body`}\n registerSidebarAnchor\n >\n Request Body\n </Heading>\n <SchemaView schema={schema} />\n </div>\n ))}\n {operation.responses.length > 0 && (\n <>\n <Heading\n level={3}\n className=\"capitalize mt-8 pt-8 border-t\"\n id={`${operation.slug}/responses`}\n registerSidebarAnchor\n >\n Responses\n </Heading>\n <Tabs\n onValueChange={(value) => setSelectedResponse(value)}\n value={selectedResponse}\n >\n {operation.responses.length > 1 && (\n <TabsList>\n {operation.responses.map((response) => (\n <TabsTrigger\n value={response.statusCode}\n key={response.statusCode}\n title={response.description}\n >\n {response.statusCode}\n </TabsTrigger>\n ))}\n </TabsList>\n )}\n <ul className=\"list-none m-0 px-0\">\n {operation.responses.map((response) => (\n <TabsContent\n value={response.statusCode}\n key={response.statusCode}\n >\n <SchemaView\n schema={\n response.content?.find((content) => content.schema)\n ?.schema\n }\n />\n </TabsContent>\n ))}\n </ul>\n </Tabs>\n </>\n )}\n </div>\n\n <Sidecar\n selectedResponse={selectedResponse}\n onSelectResponse={setSelectedResponse}\n operation={operation}\n />\n </div>\n );\n};\n","import { ResultOf } from \"@graphql-typed-document-node/core\";\nimport { CategoryHeading } from \"../../components/CategoryHeading.js\";\nimport { DeveloperHint } from \"../../components/DeveloperHint.js\";\nimport { ErrorPage } from \"../../components/ErrorPage.js\";\nimport { Heading } from \"../../components/Heading.js\";\nimport { InlineCode } from \"../../components/InlineCode.js\";\nimport { Markdown, ProseClasses } from \"../../components/Markdown.js\";\nimport { SyntaxHighlight } from \"../../components/SyntaxHighlight.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { OperationListItem } from \"./OperationListItem.js\";\nimport StaggeredRender from \"./StaggeredRender.js\";\nimport { useOasConfig } from \"./context.js\";\nimport { graphql } from \"./graphql/index.js\";\nimport { useQuery } from \"./util/urql.js\";\n\nexport const OperationsFragment = graphql(/* GraphQL */ `\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n parameters {\n name\n in\n description\n required\n schema\n style\n examples {\n name\n description\n externalValue\n value\n summary\n }\n }\n requestBody {\n content {\n mediaType\n encoding {\n name\n }\n schema\n }\n description\n required\n }\n responses {\n statusCode\n links\n description\n content {\n mediaType\n encoding {\n name\n }\n schema\n }\n }\n }\n`);\n\nexport type OperationListItemResult = ResultOf<typeof OperationsFragment>;\n\nconst AllOperationsQuery = graphql(/* GraphQL */ `\n query AllOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n description\n title\n url\n version\n tags {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n }\n }\n }\n`);\n\nconst suspenseContext = { suspense: true };\n\nexport const OperationList = () => {\n const { type, input } = useOasConfig();\n\n const [result] = useQuery({\n query: AllOperationsQuery,\n variables: { type, input },\n context: suspenseContext,\n });\n\n const error = result.error?.graphQLErrors.at(0);\n\n // Looks like there is no Suspense level error handling (yet)?\n // So we handle the error case in the component directly\n if (error) {\n return (\n <ErrorPage\n category=\"Error\"\n title=\"Schema cannot be displayed\"\n message={\n <>\n <DeveloperHint className=\"mb-4\">\n Check your configuration value <InlineCode>apis.type</InlineCode>{\" \"}\n and <InlineCode>apis.input</InlineCode> in the Zudoku config.\n </DeveloperHint>\n An error occurred while trying to fetch the API reference:\n <SyntaxHighlight code={error.toString()} language=\"plain\" />\n </>\n }\n />\n );\n }\n\n if (!result.data) return null;\n\n return (\n <div className=\"pt-[--padding-content-top]\">\n <div\n className={cn(ProseClasses, \"mb-16 max-w-full prose-img:max-w-prose\")}\n >\n <CategoryHeading>Overview</CategoryHeading>\n <Heading level={1} id=\"description\" registerSidebarAnchor>\n {result.data.schema.title}\n </Heading>\n <Markdown content={result.data.schema.description ?? \"\"} />\n </div>\n {result.data.schema.tags\n .filter((tag) => tag.operations.length > 0)\n .map((tag) => (\n <div key={tag.name}>\n {tag.name && <CategoryHeading>{tag.name}</CategoryHeading>}\n {tag.description && (\n <Markdown\n className={`${ProseClasses} max-w-full prose-img:max-w-prose w-full mt-2 mb-12`}\n content={tag.description}\n />\n )}\n <div className=\"operation mb-12\">\n <StaggeredRender>\n {tag.operations.map((fragment) => (\n <OperationListItem\n key={fragment.slug}\n operationFragment={fragment}\n />\n ))}\n </StaggeredRender>\n </div>\n </div>\n ))}\n </div>\n );\n};\n"],"names":["CircleDot","createLucideIcon","CircleFadingPlus","Circle","ListPlus","SquareMinus","SquarePlus","useFragment","_documentNode","fragmentType","groupBy","arr","keySelector","accumulator","val","groupedKey","renderIf","variable","callback","getParameterSchema","parameter","ParameterListItem","group","id","jsxs","jsx","ColorizedParam","Markdown","ParameterList","parameters","Fragment","Heading","Card","a","b","objectEntries","obj","iconMap","CircleFadingPlusIcon","CircleDotIcon","CircleIcon","colorClass","LogicalGroupConnector","type","isOpen","className","cn","ChevronDownIcon","LogicalGroupItem","props","setIsOpen","useState","Collapsible.Root","prev","Collapsible.Trigger","Collapsible.Content","SchemaView","typeLabel","LogicalGroup","schemas","level","toggleOpen","SquareMinusIcon","SquarePlusIcon","subSchema","index","isComplexType","value","hasLogicalGroupings","LogicalSchemaTypeMap","SchemaLogicalGroup","schema","useCallback","key","SchemaPropertyItem","name","defaultOpen","showCollapseButton","ProseClasses","Button","ListPlusIcon","renderSchema","itemsSchema","groupedProperties","propertyName","property","groupNames","CardHeader","CardTitle","CardContent","PARAM_GROUPS","OperationListItem","operationFragment","operation","OperationsFragment","groupedParameters","param","first","selectedResponse","setSelectedResponse","_a","_c","_b","Tabs","TabsList","response","TabsTrigger","TabsContent","content","Sidecar","graphql","AllOperationsQuery","suspenseContext","OperationList","input","useOasConfig","result","useQuery","error","ErrorPage","DeveloperHint","InlineCode","SyntaxHighlight","CategoryHeading","tag","StaggeredRender","fragment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}