zudoku 0.28.0 → 0.28.2

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 (126) hide show
  1. package/dist/app/main.js +1 -3
  2. package/dist/app/main.js.map +1 -1
  3. package/dist/config/validators/InputSidebarSchema.d.ts +2 -2
  4. package/dist/lib/components/PathRenderer.d.ts +11 -0
  5. package/dist/lib/components/PathRenderer.js +25 -0
  6. package/dist/lib/components/PathRenderer.js.map +1 -0
  7. package/dist/lib/components/ThemeSwitch.js +4 -4
  8. package/dist/lib/components/ThemeSwitch.js.map +1 -1
  9. package/dist/lib/components/index.d.ts +5 -0
  10. package/dist/lib/components/index.js +6 -2
  11. package/dist/lib/components/index.js.map +1 -1
  12. package/dist/lib/components/navigation/Sidebar.js +6 -1
  13. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  14. package/dist/lib/components/navigation/SidebarCategory.js +16 -14
  15. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  16. package/dist/lib/oas/graphql/circular.js +17 -6
  17. package/dist/lib/oas/graphql/circular.js.map +1 -1
  18. package/dist/lib/oas/graphql/index.js +11 -10
  19. package/dist/lib/oas/graphql/index.js.map +1 -1
  20. package/dist/lib/plugins/openapi/ColorizedParam.js +3 -1
  21. package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
  22. package/dist/lib/plugins/openapi/OperationListItem.d.ts +2 -1
  23. package/dist/lib/plugins/openapi/OperationListItem.js +2 -2
  24. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  25. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  26. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  27. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +6 -2
  28. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  29. package/dist/lib/plugins/openapi/Sidecar.js +5 -10
  30. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  31. package/dist/lib/plugins/openapi/playground/Headers.d.ts +2 -3
  32. package/dist/lib/plugins/openapi/playground/Headers.js +2 -2
  33. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  34. package/dist/lib/plugins/openapi/playground/PathParams.js +1 -1
  35. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  36. package/dist/lib/plugins/openapi/playground/Playground.d.ts +3 -0
  37. package/dist/lib/plugins/openapi/playground/Playground.js +8 -16
  38. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  39. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +1 -1
  40. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  41. package/dist/lib/plugins/openapi/schema/{SchemaComponents.js → SchemaPropertyItem.js} +10 -8
  42. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -0
  43. package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
  44. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  45. package/dist/lib/plugins/openapi/schema/utils.d.ts +1 -0
  46. package/dist/lib/plugins/openapi/schema/utils.js +2 -0
  47. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  48. package/dist/lib/util/scrollIntoViewIfNeeded.d.ts +1 -0
  49. package/dist/lib/util/scrollIntoViewIfNeeded.js +14 -0
  50. package/dist/lib/util/scrollIntoViewIfNeeded.js.map +1 -0
  51. package/dist/lib/util/useScrollToAnchor.js +1 -13
  52. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  53. package/dist/vite/plugin-api.js +97 -95
  54. package/dist/vite/plugin-api.js.map +1 -1
  55. package/dist/vite/plugin-theme-css.js +7 -4
  56. package/dist/vite/plugin-theme-css.js.map +1 -1
  57. package/dist/vite/prerender.js +0 -1
  58. package/dist/vite/prerender.js.map +1 -1
  59. package/lib/{AuthenticationPlugin-Du8cLBSr.js → AuthenticationPlugin-DeEA69mE.js} +3 -3
  60. package/lib/{AuthenticationPlugin-Du8cLBSr.js.map → AuthenticationPlugin-DeEA69mE.js.map} +1 -1
  61. package/lib/{Markdown-Cyrx_JrO.js → Markdown-LcMEZ0Sn.js} +2 -2
  62. package/lib/{Markdown-Cyrx_JrO.js.map → Markdown-LcMEZ0Sn.js.map} +1 -1
  63. package/lib/{MdxPage-DewragjB.js → MdxPage-DkH3V4hV.js} +5 -5
  64. package/lib/{MdxPage-DewragjB.js.map → MdxPage-DkH3V4hV.js.map} +1 -1
  65. package/lib/{OpenApiRoute-UrC_t0e5.js → OpenApiRoute-ULLXjfro.js} +3 -3
  66. package/lib/{OpenApiRoute-UrC_t0e5.js.map → OpenApiRoute-ULLXjfro.js.map} +1 -1
  67. package/lib/{OperationList-D_ejrepA.js → OperationList-wzZNceUl.js} +738 -727
  68. package/lib/OperationList-wzZNceUl.js.map +1 -0
  69. package/lib/{Select-CnCZ4WhS.js → Select-DJkXPPD0.js} +3 -3
  70. package/lib/{Select-CnCZ4WhS.js.map → Select-DJkXPPD0.js.map} +1 -1
  71. package/lib/{SlotletProvider-mQiPDQIH.js → SlotletProvider-D1t2ePCI.js} +4 -4
  72. package/lib/{SlotletProvider-mQiPDQIH.js.map → SlotletProvider-D1t2ePCI.js.map} +1 -1
  73. package/lib/{ZudokuContext-BTUJPpQl.js → ZudokuContext-dUyBGMap.js} +2 -2
  74. package/lib/{ZudokuContext-BTUJPpQl.js.map → ZudokuContext-dUyBGMap.js.map} +1 -1
  75. package/lib/{chunk-SYFQ2XB5-BPvC-soB.js → chunk-SYFQ2XB5-QijJrSf0.js} +3 -3
  76. package/lib/{chunk-SYFQ2XB5-BPvC-soB.js.map → chunk-SYFQ2XB5-QijJrSf0.js.map} +1 -1
  77. package/lib/{circular-Dgpd6AN-.js → circular-DxaIIlWD.js} +251 -239
  78. package/lib/{circular-Dgpd6AN-.js.map → circular-DxaIIlWD.js.map} +1 -1
  79. package/lib/{createServer-BydbkTsd.js → createServer-DIztAu7i.js} +12 -9
  80. package/lib/{createServer-BydbkTsd.js.map → createServer-DIztAu7i.js.map} +1 -1
  81. package/lib/{hook-FT3SJLe_.js → hook-CiX69UZ6.js} +2 -2
  82. package/lib/{hook-FT3SJLe_.js.map → hook-CiX69UZ6.js.map} +1 -1
  83. package/lib/{index-DGugJOLc.js → index-DrR58fsJ.js} +663 -629
  84. package/lib/index-DrR58fsJ.js.map +1 -0
  85. package/lib/{useExposedProps-BLKFBylA.js → useExposedProps-Bbf99zic.js} +2 -2
  86. package/lib/{useExposedProps-BLKFBylA.js.map → useExposedProps-Bbf99zic.js.map} +1 -1
  87. package/lib/{useScrollToAnchor-eRM9tVvD.js → useScrollToAnchor-DYGn1MT9.js} +86 -90
  88. package/lib/useScrollToAnchor-DYGn1MT9.js.map +1 -0
  89. package/lib/zudoku.auth-clerk.js +1 -1
  90. package/lib/zudoku.auth-openid.js +3 -3
  91. package/lib/zudoku.components.js +596 -492
  92. package/lib/zudoku.components.js.map +1 -1
  93. package/lib/zudoku.plugin-api-catalog.js +3 -3
  94. package/lib/zudoku.plugin-api-keys.js +5 -5
  95. package/lib/zudoku.plugin-custom-pages.js +2 -2
  96. package/lib/zudoku.plugin-markdown.js +1 -1
  97. package/lib/zudoku.plugin-openapi.js +3 -3
  98. package/lib/zudoku.plugin-redirect.js +1 -1
  99. package/package.json +2 -2
  100. package/src/app/main.tsx +7 -3
  101. package/src/lib/components/PathRenderer.tsx +59 -0
  102. package/src/lib/components/ThemeSwitch.tsx +15 -14
  103. package/src/lib/components/index.ts +9 -5
  104. package/src/lib/components/navigation/Sidebar.tsx +7 -1
  105. package/src/lib/components/navigation/SidebarCategory.tsx +43 -41
  106. package/src/lib/oas/graphql/circular.ts +27 -6
  107. package/src/lib/oas/graphql/index.ts +14 -17
  108. package/src/lib/plugins/openapi/ColorizedParam.tsx +3 -3
  109. package/src/lib/plugins/openapi/OperationListItem.tsx +7 -2
  110. package/src/lib/plugins/openapi/ParameterListItem.tsx +1 -1
  111. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +7 -2
  112. package/src/lib/plugins/openapi/Sidecar.tsx +17 -26
  113. package/src/lib/plugins/openapi/playground/Headers.tsx +5 -9
  114. package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -1
  115. package/src/lib/plugins/openapi/playground/Playground.tsx +27 -34
  116. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +5 -2
  117. package/src/lib/plugins/openapi/schema/{SchemaComponents.tsx → SchemaPropertyItem.tsx} +10 -6
  118. package/src/lib/plugins/openapi/schema/SchemaView.tsx +4 -1
  119. package/src/lib/plugins/openapi/schema/utils.ts +4 -0
  120. package/src/lib/util/scrollIntoViewIfNeeded.ts +18 -0
  121. package/src/lib/util/useScrollToAnchor.ts +1 -19
  122. package/dist/lib/plugins/openapi/schema/SchemaComponents.js.map +0 -1
  123. package/lib/OperationList-D_ejrepA.js.map +0 -1
  124. package/lib/index-DGugJOLc.js.map +0 -1
  125. package/lib/useScrollToAnchor-eRM9tVvD.js.map +0 -1
  126. /package/dist/lib/plugins/openapi/schema/{SchemaComponents.d.ts → SchemaPropertyItem.d.ts} +0 -0
@@ -22,7 +22,7 @@ export const PathParams = ({
22
22
  <>
23
23
  <Controller
24
24
  control={control}
25
- name={`pathParams.${i}.value`}
25
+ name={`pathParams.${i}.name`}
26
26
  render={() => (
27
27
  <div>
28
28
  <ColorizedParam
@@ -3,6 +3,7 @@ import { InfoIcon } from "lucide-react";
3
3
  import { Fragment, useEffect, useRef, useTransition } from "react";
4
4
  import { FormProvider, useForm } from "react-hook-form";
5
5
  import { Alert, AlertDescription, AlertTitle } from "zudoku/ui/Alert.js";
6
+ import { PathRenderer } from "../../../components/PathRenderer.js";
6
7
 
7
8
  import { Label } from "zudoku/ui/Label.js";
8
9
  import { RadioGroup, RadioGroupItem } from "zudoku/ui/RadioGroup.js";
@@ -35,6 +36,9 @@ export type Header = {
35
36
  name: string;
36
37
  defaultValue?: string;
37
38
  defaultActive?: boolean;
39
+ isRequired?: boolean;
40
+ enum?: string[];
41
+ type?: string;
38
42
  };
39
43
 
40
44
  export type QueryParam = {
@@ -222,36 +226,27 @@ export const Playground = ({
222
226
  },
223
227
  });
224
228
 
225
- const path = url.split("/").map((part, i, arr) => {
226
- const isPathParam =
227
- (part.startsWith("{") && part.endsWith("}")) || part.startsWith(":");
228
- const replaced = part.replace(/[:{}]/g, "");
229
- const value = formState.pathParams.find((p) => p.name === replaced)?.value;
230
-
231
- const pathParamValue = (
232
- <ColorizedParam
233
- backgroundOpacity="25%"
234
- name={part}
235
- slug={part}
236
- title={
237
- !value
238
- ? `Missing value for path parameter \`${replaced}\``
239
- : undefined
240
- }
241
- >
242
- {value ? encodeURIComponent(value) : part}
243
- </ColorizedParam>
244
- );
229
+ const path = (
230
+ <PathRenderer
231
+ path={url}
232
+ renderParam={({ name, originalValue, index }) => {
233
+ const formValue = formState.pathParams.find(
234
+ (param) => param.name === name,
235
+ )?.value;
245
236
 
246
- return (
247
- // eslint-disable-next-line react/no-array-index-key
248
- <Fragment key={part + i}>
249
- {isPathParam ? pathParamValue : part}
250
- {i < arr.length - 1 && "/"}
251
- <wbr />
252
- </Fragment>
253
- );
254
- });
237
+ return (
238
+ <ColorizedParam
239
+ name={name}
240
+ backgroundOpacity="0"
241
+ slug={name}
242
+ onClick={() => form.setFocus(`pathParams.${index}.value`)}
243
+ >
244
+ {formValue || originalValue}
245
+ </ColorizedParam>
246
+ );
247
+ }}
248
+ />
249
+ );
255
250
 
256
251
  const urlQueryParams = formState.queryParams
257
252
  .filter((p) => p.active)
@@ -268,9 +263,7 @@ export const Playground = ({
268
263
  {servers && servers.length > 1 ? (
269
264
  <Select
270
265
  onValueChange={(value) => {
271
- startTransition(() => {
272
- setSelectedServer(value);
273
- });
266
+ startTransition(() => setSelectedServer(value));
274
267
  }}
275
268
  value={selectedServer}
276
269
  defaultValue={selectedServer}
@@ -307,7 +300,7 @@ export const Playground = ({
307
300
  <div className="border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono flex items-center">
308
301
  {method.toUpperCase()}
309
302
  </div>
310
- <div className="flex items-center flex-wrap p-2 font-mono text-xs break-all">
303
+ <div className="items-center p-2 font-mono text-xs break-words">
311
304
  {serverSelect}
312
305
  {path}
313
306
  {urlQueryParams.length > 0 ? "?" : ""}
@@ -347,7 +340,7 @@ export const Playground = ({
347
340
  </TabsList>
348
341
  </div>
349
342
  <TabsContent value="headers">
350
- <Headers control={control} register={register} />
343
+ <Headers control={control} />
351
344
  </TabsContent>
352
345
  <TabsContent value="parameters">
353
346
  {pathParams.length > 0 && (
@@ -39,9 +39,12 @@ const PlaygroundDialog = (props: PlaygroundDialogProps) => {
39
39
  <Dialog onOpenChange={(open) => setOpen(open)}>
40
40
  <DialogTrigger asChild>
41
41
  {props.children ?? (
42
- <button className="flex gap-1 items-center px-2 py-1 rounded-md transition text-xs bg-primary text-primary-foreground shadow-sm hover:bg-primary/80">
42
+ <button
43
+ type="button"
44
+ className="flex gap-1 items-center px-2 py-1 rounded-md transition text-xs bg-primary text-primary-foreground shadow-sm hover:bg-primary/80"
45
+ >
43
46
  Test
44
- <HeroPlayIcon className="" size={14} />
47
+ <HeroPlayIcon size={14} />
45
48
  </button>
46
49
  )}
47
50
  </DialogTrigger>
@@ -3,7 +3,6 @@ import { ListPlusIcon, RefreshCcwDotIcon } from "lucide-react";
3
3
  import { useCallback, useState } from "react";
4
4
  import { Badge } from "zudoku/ui/Badge.js";
5
5
  import { Markdown, ProseClasses } from "../../../components/Markdown.js";
6
- import { CIRCULAR_REF } from "../../../oas/graphql/circular.js";
7
6
  import type { SchemaObject } from "../../../oas/parser/index.js";
8
7
  import { Button } from "../../../ui/Button.js";
9
8
  import { cn } from "../../../util/cn.js";
@@ -12,6 +11,7 @@ import { LogicalGroup } from "./LogicalGroup/LogicalGroup.js";
12
11
  import { SchemaView } from "./SchemaView.js";
13
12
  import {
14
13
  hasLogicalGroupings,
14
+ isCircularRef,
15
15
  isComplexType,
16
16
  LogicalSchemaTypeMap,
17
17
  } from "./utils.js";
@@ -41,13 +41,10 @@ export const SchemaLogicalGroup = ({
41
41
  }
42
42
  };
43
43
 
44
- const isCircularRef = (schema: unknown): schema is string =>
45
- schema === CIRCULAR_REF;
46
-
47
44
  const RecursiveIndicator = () => (
48
45
  <div className="flex items-center gap-2 italic text-sm text-muted-foreground font-mono bg-muted px-2 py-0.5 rounded-md">
49
46
  <RefreshCcwDotIcon size={16} />
50
- <span>recursive</span>
47
+ <span>circular</span>
51
48
  </div>
52
49
  );
53
50
 
@@ -74,6 +71,8 @@ export const SchemaPropertyItem = ({
74
71
  <div className="flex flex-col gap-1 justify-between text-sm">
75
72
  <div className="flex gap-2 items-center">
76
73
  <code>{name}</code>
74
+ <Badge variant="muted">object</Badge>
75
+ {group === "optional" && <Badge variant="outline">optional</Badge>}
77
76
  <RecursiveIndicator />
78
77
  </div>
79
78
  </div>
@@ -96,6 +95,9 @@ export const SchemaPropertyItem = ({
96
95
  )}
97
96
  </Badge>
98
97
  {group === "optional" && <Badge variant="outline">optional</Badge>}
98
+ {schema.type === "array" &&
99
+ "items" in schema &&
100
+ isCircularRef(schema.items) && <RecursiveIndicator />}
99
101
  </div>
100
102
 
101
103
  {schema.description && (
@@ -133,7 +135,9 @@ export const SchemaPropertyItem = ({
133
135
  <SchemaView schema={schema} level={level + 1} />
134
136
  ) : (
135
137
  schema.type === "array" &&
136
- typeof schema.items === "object" && (
138
+ "items" in schema &&
139
+ typeof schema.items === "object" &&
140
+ !isCircularRef(schema.items) && (
137
141
  <SchemaView schema={schema.items} level={level + 1} />
138
142
  )
139
143
  )}
@@ -3,7 +3,10 @@ import type { SchemaObject } from "../../../oas/parser/index.js";
3
3
  import { Card, CardContent, CardHeader, CardTitle } from "../../../ui/Card.js";
4
4
  import { cn } from "../../../util/cn.js";
5
5
  import { groupBy } from "../../../util/groupBy.js";
6
- import { SchemaLogicalGroup, SchemaPropertyItem } from "./SchemaComponents.js";
6
+ import {
7
+ SchemaLogicalGroup,
8
+ SchemaPropertyItem,
9
+ } from "./SchemaPropertyItem.js";
7
10
  import { hasLogicalGroupings } from "./utils.js";
8
11
 
9
12
  export const SchemaView = ({
@@ -1,3 +1,4 @@
1
+ import { CIRCULAR_REF } from "../../../oas/graphql/circular.js";
1
2
  import type { SchemaObject } from "../../../oas/parser/index.js";
2
3
 
3
4
  export const isComplexType = (value: SchemaObject) =>
@@ -16,3 +17,6 @@ export const LogicalSchemaTypeMap = {
16
17
  } as const;
17
18
 
18
19
  export type LogicalGroupType = "AND" | "OR" | "ONE";
20
+
21
+ export const isCircularRef = (schema: unknown): schema is string =>
22
+ schema === CIRCULAR_REF;
@@ -0,0 +1,18 @@
1
+ export const scrollIntoViewIfNeeded = (
2
+ element: Element | null,
3
+ options: ScrollIntoViewOptions = { block: "center" },
4
+ ) => {
5
+ if (!element) return;
6
+
7
+ const rect = element.getBoundingClientRect();
8
+ const isInView =
9
+ rect.top >= 0 &&
10
+ rect.left >= 0 &&
11
+ rect.bottom <=
12
+ (window.innerHeight || document.documentElement.clientHeight) &&
13
+ rect.right <= (window.innerWidth || document.documentElement.clientWidth);
14
+
15
+ if (isInView) return;
16
+
17
+ element.scrollIntoView(options);
18
+ };
@@ -2,25 +2,7 @@ import { useCallback, useEffect } from "react";
2
2
  import { useLocation } from "react-router";
3
3
  import { useViewportAnchor } from "../components/context/ViewportAnchorContext.js";
4
4
  import { DATA_ANCHOR_ATTR } from "../components/navigation/SidebarItem.js";
5
-
6
- const scrollIntoViewIfNeeded = (
7
- element: Element | null,
8
- options: ScrollIntoViewOptions = { block: "center" },
9
- ) => {
10
- if (!element) return;
11
-
12
- const rect = element.getBoundingClientRect();
13
- const isInView =
14
- rect.top >= 0 &&
15
- rect.left >= 0 &&
16
- rect.bottom <=
17
- (window.innerHeight || document.documentElement.clientHeight) &&
18
- rect.right <= (window.innerWidth || document.documentElement.clientWidth);
19
-
20
- if (isInView) return;
21
-
22
- element.scrollIntoView(options);
23
- };
5
+ import { scrollIntoViewIfNeeded } from "./scrollIntoViewIfNeeded.js";
24
6
 
25
7
  export const useScrollToHash = () => {
26
8
  const { setActiveAnchor } = useViewportAnchor();
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaComponents.js","sourceRoot":"","sources":["../../../../../src/lib/plugins/openapi/schema/SchemaComponents.tsx"],"names":[],"mappings":"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"}