zudoku 0.28.2 → 0.29.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 (116) hide show
  1. package/dist/cli/common/output.js.map +1 -1
  2. package/dist/cli/dev/handler.js +5 -0
  3. package/dist/cli/dev/handler.js.map +1 -1
  4. package/dist/config/validators/common.d.ts +111 -0
  5. package/dist/config/validators/common.js +9 -6
  6. package/dist/config/validators/common.js.map +1 -1
  7. package/dist/config/validators/validate.d.ts +42 -0
  8. package/dist/lib/authentication/state.d.ts +9 -0
  9. package/dist/lib/authentication/state.js +11 -0
  10. package/dist/lib/authentication/state.js.map +1 -1
  11. package/dist/lib/components/Autocomplete.d.ts +4 -3
  12. package/dist/lib/components/Autocomplete.js +2 -2
  13. package/dist/lib/components/Autocomplete.js.map +1 -1
  14. package/dist/lib/components/PathRenderer.js +23 -20
  15. package/dist/lib/components/PathRenderer.js.map +1 -1
  16. package/dist/lib/components/navigation/SidebarItem.js +1 -0
  17. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  18. package/dist/lib/oas/graphql/index.d.ts +7 -0
  19. package/dist/lib/oas/graphql/index.js +7 -6
  20. package/dist/lib/oas/graphql/index.js.map +1 -1
  21. package/dist/lib/plugins/openapi/Endpoint.js +6 -7
  22. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
  23. package/dist/lib/plugins/openapi/OperationList.js +11 -7
  24. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  25. package/dist/lib/plugins/openapi/Sidecar.js +4 -4
  26. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  27. package/dist/lib/plugins/openapi/graphql/gql.d.ts +2 -2
  28. package/dist/lib/plugins/openapi/graphql/gql.js +2 -2
  29. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  30. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +20 -4
  31. package/dist/lib/plugins/openapi/graphql/graphql.js +16 -2
  32. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  33. package/dist/lib/plugins/openapi/index.js +57 -28
  34. package/dist/lib/plugins/openapi/index.js.map +1 -1
  35. package/dist/lib/plugins/openapi/interfaces.d.ts +4 -2
  36. package/dist/lib/plugins/openapi/playground/Headers.d.ts +3 -2
  37. package/dist/lib/plugins/openapi/playground/Headers.js +42 -26
  38. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  39. package/dist/lib/plugins/openapi/playground/ParamsGrid.d.ts +4 -0
  40. package/dist/lib/plugins/openapi/playground/ParamsGrid.js +2 -1
  41. package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -1
  42. package/dist/lib/plugins/openapi/playground/PathParams.js +3 -3
  43. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  44. package/dist/lib/plugins/openapi/playground/Playground.d.ts +1 -0
  45. package/dist/lib/plugins/openapi/playground/Playground.js +4 -4
  46. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  47. package/dist/lib/plugins/openapi/playground/QueryParams.js +21 -21
  48. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  49. package/dist/lib/ui/Input.d.ts +1 -2
  50. package/dist/lib/ui/Input.js.map +1 -1
  51. package/dist/lib/util/useScrollToAnchor.js +1 -1
  52. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  53. package/dist/lib/util/useScrollToTop.js +6 -4
  54. package/dist/lib/util/useScrollToTop.js.map +1 -1
  55. package/dist/vite/plugin-api.js +13 -6
  56. package/dist/vite/plugin-api.js.map +1 -1
  57. package/dist/vite/plugin-mdx.js +18 -12
  58. package/dist/vite/plugin-mdx.js.map +1 -1
  59. package/dist/vite/plugin.js.map +1 -1
  60. package/lib/{Markdown-LcMEZ0Sn.js → Markdown-8mv9nhGd.js} +3338 -3360
  61. package/lib/Markdown-8mv9nhGd.js.map +1 -0
  62. package/lib/{MdxPage-DkH3V4hV.js → MdxPage-BalfwlsD.js} +3 -3
  63. package/lib/{MdxPage-DkH3V4hV.js.map → MdxPage-BalfwlsD.js.map} +1 -1
  64. package/lib/{OperationList-wzZNceUl.js → OperationList-B3VX94x4.js} +500 -493
  65. package/lib/OperationList-B3VX94x4.js.map +1 -0
  66. package/lib/{Select-DJkXPPD0.js → Select-BcAbBUmk.js} +2 -2
  67. package/lib/{Select-DJkXPPD0.js.map → Select-BcAbBUmk.js.map} +1 -1
  68. package/lib/{SlotletProvider-D1t2ePCI.js → SlotletProvider-D0mFmGJu.js} +2 -2
  69. package/lib/{SlotletProvider-D1t2ePCI.js.map → SlotletProvider-D0mFmGJu.js.map} +1 -1
  70. package/lib/{createServer-DIztAu7i.js → createServer-E3cXjB0P.js} +4 -6
  71. package/lib/{createServer-DIztAu7i.js.map → createServer-E3cXjB0P.js.map} +1 -1
  72. package/lib/{hook-CiX69UZ6.js → hook-NIpDSpau.js} +2 -2
  73. package/lib/{hook-CiX69UZ6.js.map → hook-NIpDSpau.js.map} +1 -1
  74. package/lib/{index-DrR58fsJ.js → index-P0YUtHIb.js} +802 -745
  75. package/lib/index-P0YUtHIb.js.map +1 -0
  76. package/lib/state-bfQxaDxU.js +211 -0
  77. package/lib/{state-mM7uaXTW.js.map → state-bfQxaDxU.js.map} +1 -1
  78. package/lib/ui/Input.js.map +1 -1
  79. package/lib/{useScrollToAnchor-DYGn1MT9.js → useScrollToAnchor-BVCQSeKB.js} +29 -28
  80. package/lib/{useScrollToAnchor-DYGn1MT9.js.map → useScrollToAnchor-BVCQSeKB.js.map} +1 -1
  81. package/lib/zudoku.auth-auth0.js +1 -1
  82. package/lib/zudoku.auth-clerk.js +1 -1
  83. package/lib/zudoku.auth-openid.js +1 -1
  84. package/lib/zudoku.components.js +348 -347
  85. package/lib/zudoku.components.js.map +1 -1
  86. package/lib/zudoku.plugin-api-catalog.js +2 -2
  87. package/lib/zudoku.plugin-api-keys.js +3 -3
  88. package/lib/zudoku.plugin-custom-pages.js +1 -1
  89. package/lib/zudoku.plugin-markdown.js +1 -1
  90. package/lib/zudoku.plugin-openapi.js +2 -2
  91. package/package.json +2 -1
  92. package/src/app/demo-cdn.html +31 -31
  93. package/src/lib/authentication/state.ts +18 -0
  94. package/src/lib/components/Autocomplete.tsx +6 -4
  95. package/src/lib/components/PathRenderer.tsx +6 -4
  96. package/src/lib/components/navigation/SidebarItem.tsx +1 -0
  97. package/src/lib/oas/graphql/index.ts +10 -9
  98. package/src/lib/plugins/openapi/Endpoint.tsx +11 -9
  99. package/src/lib/plugins/openapi/OperationList.tsx +16 -10
  100. package/src/lib/plugins/openapi/Sidecar.tsx +4 -4
  101. package/src/lib/plugins/openapi/graphql/gql.ts +4 -4
  102. package/src/lib/plugins/openapi/graphql/graphql.ts +30 -6
  103. package/src/lib/plugins/openapi/index.tsx +74 -41
  104. package/src/lib/plugins/openapi/interfaces.ts +5 -10
  105. package/src/lib/plugins/openapi/playground/Headers.tsx +125 -89
  106. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +6 -1
  107. package/src/lib/plugins/openapi/playground/PathParams.tsx +9 -9
  108. package/src/lib/plugins/openapi/playground/Playground.tsx +7 -4
  109. package/src/lib/plugins/openapi/playground/QueryParams.tsx +88 -86
  110. package/src/lib/ui/Input.tsx +1 -2
  111. package/src/lib/util/useScrollToAnchor.ts +1 -1
  112. package/src/lib/util/useScrollToTop.ts +8 -3
  113. package/lib/Markdown-LcMEZ0Sn.js.map +0 -1
  114. package/lib/OperationList-wzZNceUl.js.map +0 -1
  115. package/lib/index-DrR58fsJ.js.map +0 -1
  116. package/lib/state-mM7uaXTW.js +0 -202
@@ -9,7 +9,7 @@ import { Checkbox } from "zudoku/ui/Checkbox.js";
9
9
  import { Autocomplete } from "../../../components/Autocomplete.js";
10
10
  import { Input } from "../../../ui/Input.js";
11
11
  import { InlineInput } from "./InlineInput.js";
12
- import ParamsGrid from "./ParamsGrid.js";
12
+ import ParamsGrid, { ParamsGridItem } from "./ParamsGrid.js";
13
13
  import { type PlaygroundForm, type QueryParam } from "./Playground.js";
14
14
 
15
15
  export const QueryParams = ({
@@ -19,7 +19,7 @@ export const QueryParams = ({
19
19
  control: Control<PlaygroundForm>;
20
20
  queryParams: QueryParam[];
21
21
  }) => {
22
- const { fields } = useFieldArray<PlaygroundForm>({
22
+ const { fields } = useFieldArray<PlaygroundForm, "queryParams">({
23
23
  control,
24
24
  name: "queryParams",
25
25
  });
@@ -30,97 +30,99 @@ export const QueryParams = ({
30
30
  return (
31
31
  <Card className="rounded-lg">
32
32
  <div className="w-full ">
33
- {fields.map((field, i) => {
34
- const currentParam = queryParams.find(
35
- (param) => param.name === field.name,
36
- );
37
- return (
38
- <ParamsGrid key={field.id}>
39
- <div className="flex items-center">
40
- <Controller
41
- control={control}
42
- name={`queryParams.${i}.active`}
43
- render={({ field }) => (
44
- <Checkbox
45
- variant="outline"
46
- id={`queryParams.${i}.active`}
47
- className="mr-2"
48
- checked={field.value}
49
- onCheckedChange={field.onChange}
50
- />
51
- )}
52
- />
53
- <Controller
54
- control={control}
55
- render={({ field }) =>
56
- !requiredFields[i] ? (
57
- <Autocomplete
58
- value={field.value}
59
- options={queryParams.map((param) => param.name)}
60
- onChange={(e) => {
61
- field.onChange(e);
62
- }}
63
- className="border-0 font-mono text-xs bg-transparent hover:bg-transparent"
33
+ <ParamsGrid>
34
+ {fields.map((field, i) => {
35
+ const currentParam = queryParams.find(
36
+ (param) => param.name === form.watch(`queryParams.${i}.name`),
37
+ );
38
+ return (
39
+ <ParamsGridItem key={field.id}>
40
+ <div key={field.id} className="flex items-center gap-2">
41
+ <Controller
42
+ control={control}
43
+ name={`queryParams.${i}.active`}
44
+ render={({ field }) => (
45
+ <Checkbox
46
+ variant="outline"
47
+ id={`queryParams.${i}.active`}
48
+ className="mr-2"
49
+ checked={field.value}
50
+ onCheckedChange={field.onChange}
64
51
  />
65
- ) : (
66
- <InlineInput asChild>
67
- <label
68
- className="flex items-center cursor-pointer gap-1"
69
- htmlFor={`queryParams.${i}.active`}
70
- title={
71
- requiredFields[i] ? "Required field" : undefined
72
- }
73
- >
74
- {field.value}
75
- {requiredFields[i] && <sup>&nbsp;*</sup>}
76
- </label>
77
- </InlineInput>
78
- )
79
- }
80
- name={`queryParams.${i}.name`}
81
- />
82
- </div>
83
- <div className="flex justify-between items-center">
84
- <Controller
85
- control={control}
86
- render={({ field }) => {
87
- const hasEnum =
88
- currentParam?.enum && currentParam.enum.length > 0;
52
+ )}
53
+ />
54
+ <Controller
55
+ control={control}
56
+ render={({ field }) =>
57
+ !requiredFields[i] ? (
58
+ <Autocomplete
59
+ value={field.value}
60
+ options={queryParams.map((param) => param.name)}
61
+ onChange={(e) => {
62
+ field.onChange(e);
63
+ }}
64
+ className="border-0 font-mono text-xs bg-transparent hover:bg-transparent"
65
+ />
66
+ ) : (
67
+ <InlineInput asChild>
68
+ <label
69
+ className="flex items-center cursor-pointer gap-1"
70
+ htmlFor={`queryParams.${i}.active`}
71
+ title={
72
+ requiredFields[i] ? "Required field" : undefined
73
+ }
74
+ >
75
+ {field.value}
76
+ {requiredFields[i] && <sup>&nbsp;*</sup>}
77
+ </label>
78
+ </InlineInput>
79
+ )
80
+ }
81
+ name={`queryParams.${i}.name`}
82
+ />
83
+ </div>
84
+ <div className="flex justify-between items-center">
85
+ <Controller
86
+ control={control}
87
+ render={({ field }) => {
88
+ const hasEnum =
89
+ currentParam?.enum && currentParam.enum.length > 0;
90
+
91
+ if (!hasEnum) {
92
+ return (
93
+ <Input
94
+ {...field}
95
+ onChange={(e) => {
96
+ field.onChange(e.target.value);
97
+ if (e.target.value.length > 0) {
98
+ form.setValue(`queryParams.${i}.active`, true);
99
+ }
100
+ }}
101
+ placeholder="Enter value"
102
+ className="w-full border-0 shadow-none focus-visible:ring-0 text-xs font-mono"
103
+ />
104
+ );
105
+ }
89
106
 
90
- if (!hasEnum) {
91
107
  return (
92
- <Input
93
- {...field}
108
+ <Autocomplete
109
+ value={field.value}
110
+ options={currentParam.enum ?? []}
94
111
  onChange={(e) => {
95
- field.onChange(e.target.value);
96
- if (e.target.value.length > 0) {
97
- form.setValue(`queryParams.${i}.active`, true);
98
- }
112
+ field.onChange(e);
113
+ form.setValue(`queryParams.${i}.active`, true);
99
114
  }}
100
- placeholder="Enter value"
101
- className="w-full border-0 shadow-none text-xs font-mono"
115
+ className="font-mono text-xs border-0 ring-1 ring-ring"
102
116
  />
103
117
  );
104
- }
105
-
106
- return (
107
- <Autocomplete
108
- value={field.value}
109
- options={currentParam.enum ?? []}
110
- onChange={(e) => {
111
- field.onChange(e);
112
- form.setValue(`queryParams.${i}.active`, true);
113
- }}
114
- className="font-mono text-xs border-0 ring-1 ring-ring"
115
- />
116
- );
117
- }}
118
- name={`queryParams.${i}.value`}
119
- />
120
- </div>
121
- </ParamsGrid>
122
- );
123
- })}
118
+ }}
119
+ name={`queryParams.${i}.value`}
120
+ />
121
+ </div>
122
+ </ParamsGridItem>
123
+ );
124
+ })}
125
+ </ParamsGrid>
124
126
  </div>
125
127
  </Card>
126
128
  );
@@ -1,8 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { cn } from "../util/cn.js";
3
3
 
4
- export interface InputProps
5
- extends React.InputHTMLAttributes<HTMLInputElement> {}
4
+ type InputProps = React.InputHTMLAttributes<HTMLInputElement>;
6
5
 
7
6
  const Input = React.forwardRef<HTMLInputElement, InputProps>(
8
7
  ({ className, type, ...props }, ref) => {
@@ -54,5 +54,5 @@ export const useScrollToAnchor = () => {
54
54
 
55
55
  return () => observer.disconnect();
56
56
  }
57
- }, [location.hash, setActiveAnchor]);
57
+ }, [location.hash, scrollToHash, setActiveAnchor]);
58
58
  };
@@ -6,8 +6,13 @@ export const useScrollToTop = () => {
6
6
  const previousPath = useRef(location.pathname);
7
7
 
8
8
  useEffect(() => {
9
- if (previousPath.current === location.pathname) return;
10
- window.scrollTo(0, 0);
9
+ const isNewPage = previousPath.current !== location.pathname;
10
+ const hasAnchor = location.hash !== "";
11
+
12
+ if (isNewPage && !hasAnchor) {
13
+ window.scrollTo(0, 0);
14
+ }
15
+
11
16
  previousPath.current = location.pathname;
12
- }, [location.pathname]);
17
+ }, [location.pathname, location.hash]);
13
18
  };