fumadocs-openapi 10.2.2 → 10.2.3

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 (278) hide show
  1. package/dist/generate-file.d.ts +53 -49
  2. package/dist/generate-file.d.ts.map +1 -1
  3. package/dist/generate-file.js +88 -102
  4. package/dist/generate-file.js.map +1 -0
  5. package/dist/index.d.ts +6 -6
  6. package/dist/index.js +3 -1
  7. package/dist/playground/client.d.ts +88 -72
  8. package/dist/playground/client.d.ts.map +1 -1
  9. package/dist/playground/client.js +446 -296
  10. package/dist/playground/client.js.map +1 -0
  11. package/dist/playground/components/inputs.js +395 -172
  12. package/dist/playground/components/inputs.js.map +1 -0
  13. package/dist/playground/components/oauth-dialog.js +270 -174
  14. package/dist/playground/components/oauth-dialog.js.map +1 -0
  15. package/dist/playground/components/server-select.js +115 -55
  16. package/dist/playground/components/server-select.js.map +1 -0
  17. package/dist/playground/fetcher.d.ts +10 -18
  18. package/dist/playground/fetcher.d.ts.map +1 -1
  19. package/dist/playground/fetcher.js +67 -75
  20. package/dist/playground/fetcher.js.map +1 -0
  21. package/dist/playground/get-default-values.js +23 -26
  22. package/dist/playground/get-default-values.js.map +1 -0
  23. package/dist/playground/index.d.ts +23 -13
  24. package/dist/playground/index.d.ts.map +1 -1
  25. package/dist/playground/index.js +87 -91
  26. package/dist/playground/index.js.map +1 -0
  27. package/dist/playground/lazy.js +9 -2
  28. package/dist/playground/lazy.js.map +1 -0
  29. package/dist/playground/schema.d.ts +18 -55
  30. package/dist/playground/schema.d.ts.map +1 -1
  31. package/dist/playground/schema.js +117 -106
  32. package/dist/playground/schema.js.map +1 -0
  33. package/dist/playground/status-info.js +49 -37
  34. package/dist/playground/status-info.js.map +1 -0
  35. package/dist/requests/generators/csharp.js +40 -50
  36. package/dist/requests/generators/csharp.js.map +1 -0
  37. package/dist/requests/generators/curl.js +28 -27
  38. package/dist/requests/generators/curl.js.map +1 -0
  39. package/dist/requests/generators/go.js +39 -35
  40. package/dist/requests/generators/go.js.map +1 -0
  41. package/dist/requests/generators/index.js +49 -43
  42. package/dist/requests/generators/index.js.map +1 -0
  43. package/dist/requests/generators/java.js +56 -67
  44. package/dist/requests/generators/java.js.map +1 -0
  45. package/dist/requests/generators/javascript.js +38 -45
  46. package/dist/requests/generators/javascript.js.map +1 -0
  47. package/dist/requests/generators/python.js +33 -37
  48. package/dist/requests/generators/python.js.map +1 -0
  49. package/dist/requests/media/adapter.d.ts +38 -84
  50. package/dist/requests/media/adapter.d.ts.map +1 -1
  51. package/dist/requests/media/adapter.js +122 -169
  52. package/dist/requests/media/adapter.js.map +1 -0
  53. package/dist/requests/media/encode.d.ts +12 -7
  54. package/dist/requests/media/encode.d.ts.map +1 -1
  55. package/dist/requests/media/encode.js +129 -109
  56. package/dist/requests/media/encode.js.map +1 -0
  57. package/dist/requests/media/resolve-adapter.js +28 -28
  58. package/dist/requests/media/resolve-adapter.js.map +1 -0
  59. package/dist/requests/string-utils.js +28 -35
  60. package/dist/requests/string-utils.js.map +1 -0
  61. package/dist/requests/to-python-object.js +16 -28
  62. package/dist/requests/to-python-object.js.map +1 -0
  63. package/dist/requests/types.d.ts +25 -21
  64. package/dist/requests/types.d.ts.map +1 -1
  65. package/dist/scalar/client.js +57 -20
  66. package/dist/scalar/client.js.map +1 -0
  67. package/dist/scalar/index.d.ts +8 -2
  68. package/dist/scalar/index.d.ts.map +1 -1
  69. package/dist/scalar/index.js +29 -19
  70. package/dist/scalar/index.js.map +1 -0
  71. package/dist/server/create.d.ts +29 -25
  72. package/dist/server/create.d.ts.map +1 -1
  73. package/dist/server/create.js +42 -39
  74. package/dist/server/create.js.map +1 -0
  75. package/dist/server/index.d.ts +3 -3
  76. package/dist/server/index.js +4 -2
  77. package/dist/server/proxy.d.ts +28 -28
  78. package/dist/server/proxy.d.ts.map +1 -1
  79. package/dist/server/proxy.js +58 -75
  80. package/dist/server/proxy.js.map +1 -0
  81. package/dist/server/source-api.d.ts +32 -29
  82. package/dist/server/source-api.d.ts.map +1 -1
  83. package/dist/server/source-api.js +82 -75
  84. package/dist/server/source-api.js.map +1 -0
  85. package/dist/types.d.ts +41 -36
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/ui/api-page.d.ts +140 -136
  88. package/dist/ui/api-page.d.ts.map +1 -1
  89. package/dist/ui/api-page.js +134 -118
  90. package/dist/ui/api-page.js.map +1 -0
  91. package/dist/ui/client/index.d.ts +30 -26
  92. package/dist/ui/client/index.d.ts.map +1 -1
  93. package/dist/ui/client/index.js +8 -2
  94. package/dist/ui/client/index.js.map +1 -0
  95. package/dist/ui/client/storage-key.js +16 -10
  96. package/dist/ui/client/storage-key.js.map +1 -0
  97. package/dist/ui/components/accordion.js +40 -14
  98. package/dist/ui/components/accordion.js.map +1 -0
  99. package/dist/ui/components/dialog.js +51 -15
  100. package/dist/ui/components/dialog.js.map +1 -0
  101. package/dist/ui/components/input.js +18 -8
  102. package/dist/ui/components/input.js.map +1 -0
  103. package/dist/ui/components/method-label.js +38 -33
  104. package/dist/ui/components/method-label.js.map +1 -0
  105. package/dist/ui/components/select.js +66 -15
  106. package/dist/ui/components/select.js.map +1 -0
  107. package/dist/ui/contexts/api.js +96 -85
  108. package/dist/ui/contexts/api.js.map +1 -0
  109. package/dist/ui/contexts/api.lazy.js +9 -2
  110. package/dist/ui/contexts/api.lazy.js.map +1 -0
  111. package/dist/ui/index.d.ts +2 -2
  112. package/dist/ui/index.js +3 -1
  113. package/dist/ui/operation/client.js +65 -27
  114. package/dist/ui/operation/client.js.map +1 -0
  115. package/dist/ui/operation/index.js +403 -186
  116. package/dist/ui/operation/index.js.map +1 -0
  117. package/dist/ui/operation/request-tabs.d.ts +15 -16
  118. package/dist/ui/operation/request-tabs.d.ts.map +1 -1
  119. package/dist/ui/operation/request-tabs.js +151 -131
  120. package/dist/ui/operation/request-tabs.js.map +1 -0
  121. package/dist/ui/operation/response-tabs.d.ts +27 -28
  122. package/dist/ui/operation/response-tabs.d.ts.map +1 -1
  123. package/dist/ui/operation/response-tabs.js +73 -56
  124. package/dist/ui/operation/response-tabs.js.map +1 -0
  125. package/dist/ui/operation/usage-tabs/client.js +117 -88
  126. package/dist/ui/operation/usage-tabs/client.js.map +1 -0
  127. package/dist/ui/operation/usage-tabs/index.d.ts +22 -21
  128. package/dist/ui/operation/usage-tabs/index.d.ts.map +1 -1
  129. package/dist/ui/operation/usage-tabs/index.js +63 -48
  130. package/dist/ui/operation/usage-tabs/index.js.map +1 -0
  131. package/dist/ui/operation/usage-tabs/lazy.js +11 -4
  132. package/dist/ui/operation/usage-tabs/lazy.js.map +1 -0
  133. package/dist/ui/schema/client.d.ts +11 -7
  134. package/dist/ui/schema/client.d.ts.map +1 -1
  135. package/dist/ui/schema/client.js +213 -127
  136. package/dist/ui/schema/client.js.map +1 -0
  137. package/dist/ui/schema/index.d.ts +51 -50
  138. package/dist/ui/schema/index.d.ts.map +1 -1
  139. package/dist/ui/schema/index.js +225 -248
  140. package/dist/ui/schema/index.js.map +1 -0
  141. package/dist/ui/schema/lazy.js +9 -2
  142. package/dist/ui/schema/lazy.js.map +1 -0
  143. package/dist/utils/cn.js +3 -1
  144. package/dist/utils/deep-equal.js +18 -26
  145. package/dist/utils/deep-equal.js.map +1 -0
  146. package/dist/utils/get-typescript-schema.js +21 -19
  147. package/dist/utils/get-typescript-schema.js.map +1 -0
  148. package/dist/utils/id-to-title.js +13 -16
  149. package/dist/utils/id-to-title.js.map +1 -0
  150. package/dist/utils/lazy.js +13 -11
  151. package/dist/utils/lazy.js.map +1 -0
  152. package/dist/utils/merge-schema.js +130 -174
  153. package/dist/utils/merge-schema.js.map +1 -0
  154. package/dist/utils/pages/builder.d.ts +80 -76
  155. package/dist/utils/pages/builder.d.ts.map +1 -1
  156. package/dist/utils/pages/builder.js +101 -118
  157. package/dist/utils/pages/builder.js.map +1 -0
  158. package/dist/utils/pages/preset-auto.d.ts +58 -55
  159. package/dist/utils/pages/preset-auto.d.ts.map +1 -1
  160. package/dist/utils/pages/preset-auto.js +124 -137
  161. package/dist/utils/pages/preset-auto.js.map +1 -0
  162. package/dist/utils/pages/to-body.js +21 -18
  163. package/dist/utils/pages/to-body.js.map +1 -0
  164. package/dist/utils/pages/to-static-data.js +48 -40
  165. package/dist/utils/pages/to-static-data.js.map +1 -0
  166. package/dist/utils/pages/to-text.d.ts +43 -41
  167. package/dist/utils/pages/to-text.d.ts.map +1 -1
  168. package/dist/utils/pages/to-text.js +93 -126
  169. package/dist/utils/pages/to-text.js.map +1 -0
  170. package/dist/utils/process-document.d.ts +18 -19
  171. package/dist/utils/process-document.d.ts.map +1 -1
  172. package/dist/utils/process-document.js +43 -54
  173. package/dist/utils/process-document.js.map +1 -0
  174. package/dist/utils/remove-undefined.js +18 -18
  175. package/dist/utils/remove-undefined.js.map +1 -0
  176. package/dist/utils/schema-to-string.js +46 -64
  177. package/dist/utils/schema-to-string.js.map +1 -0
  178. package/dist/utils/schema.d.ts +11 -27
  179. package/dist/utils/schema.d.ts.map +1 -1
  180. package/dist/utils/schema.js +43 -44
  181. package/dist/utils/schema.js.map +1 -0
  182. package/dist/utils/url.js +35 -56
  183. package/dist/utils/url.js.map +1 -0
  184. package/dist/utils/use-query.js +39 -33
  185. package/dist/utils/use-query.js.map +1 -0
  186. package/package.json +33 -32
  187. package/dist/index.d.ts.map +0 -1
  188. package/dist/playground/components/inputs.d.ts +0 -25
  189. package/dist/playground/components/inputs.d.ts.map +0 -1
  190. package/dist/playground/components/oauth-dialog.d.ts +0 -13
  191. package/dist/playground/components/oauth-dialog.d.ts.map +0 -1
  192. package/dist/playground/components/server-select.d.ts +0 -3
  193. package/dist/playground/components/server-select.d.ts.map +0 -1
  194. package/dist/playground/get-default-values.d.ts +0 -3
  195. package/dist/playground/get-default-values.d.ts.map +0 -1
  196. package/dist/playground/lazy.d.ts +0 -2
  197. package/dist/playground/lazy.d.ts.map +0 -1
  198. package/dist/playground/status-info.d.ts +0 -8
  199. package/dist/playground/status-info.d.ts.map +0 -1
  200. package/dist/requests/generators/csharp.d.ts +0 -3
  201. package/dist/requests/generators/csharp.d.ts.map +0 -1
  202. package/dist/requests/generators/curl.d.ts +0 -3
  203. package/dist/requests/generators/curl.d.ts.map +0 -1
  204. package/dist/requests/generators/go.d.ts +0 -3
  205. package/dist/requests/generators/go.d.ts.map +0 -1
  206. package/dist/requests/generators/index.d.ts +0 -3
  207. package/dist/requests/generators/index.d.ts.map +0 -1
  208. package/dist/requests/generators/java.d.ts +0 -3
  209. package/dist/requests/generators/java.d.ts.map +0 -1
  210. package/dist/requests/generators/javascript.d.ts +0 -3
  211. package/dist/requests/generators/javascript.d.ts.map +0 -1
  212. package/dist/requests/generators/python.d.ts +0 -3
  213. package/dist/requests/generators/python.d.ts.map +0 -1
  214. package/dist/requests/media/resolve-adapter.d.ts +0 -19
  215. package/dist/requests/media/resolve-adapter.d.ts.map +0 -1
  216. package/dist/requests/string-utils.d.ts +0 -7
  217. package/dist/requests/string-utils.d.ts.map +0 -1
  218. package/dist/requests/to-python-object.d.ts +0 -2
  219. package/dist/requests/to-python-object.d.ts.map +0 -1
  220. package/dist/requests/types.js +0 -1
  221. package/dist/scalar/client.d.ts +0 -7
  222. package/dist/scalar/client.d.ts.map +0 -1
  223. package/dist/server/index.d.ts.map +0 -1
  224. package/dist/types.js +0 -1
  225. package/dist/ui/client/storage-key.d.ts +0 -9
  226. package/dist/ui/client/storage-key.d.ts.map +0 -1
  227. package/dist/ui/components/accordion.d.ts +0 -8
  228. package/dist/ui/components/accordion.d.ts.map +0 -1
  229. package/dist/ui/components/dialog.d.ts +0 -20
  230. package/dist/ui/components/dialog.d.ts.map +0 -1
  231. package/dist/ui/components/input.d.ts +0 -6
  232. package/dist/ui/components/input.d.ts.map +0 -1
  233. package/dist/ui/components/method-label.d.ts +0 -10
  234. package/dist/ui/components/method-label.d.ts.map +0 -1
  235. package/dist/ui/components/select.d.ts +0 -14
  236. package/dist/ui/components/select.d.ts.map +0 -1
  237. package/dist/ui/contexts/api.d.ts +0 -33
  238. package/dist/ui/contexts/api.d.ts.map +0 -1
  239. package/dist/ui/contexts/api.lazy.d.ts +0 -2
  240. package/dist/ui/contexts/api.lazy.d.ts.map +0 -1
  241. package/dist/ui/icons.d.ts +0 -49
  242. package/dist/ui/icons.d.ts.map +0 -1
  243. package/dist/ui/icons.js +0 -281
  244. package/dist/ui/index.d.ts.map +0 -1
  245. package/dist/ui/operation/client.d.ts +0 -19
  246. package/dist/ui/operation/client.d.ts.map +0 -1
  247. package/dist/ui/operation/index.d.ts +0 -12
  248. package/dist/ui/operation/index.d.ts.map +0 -1
  249. package/dist/ui/operation/usage-tabs/client.d.ts +0 -23
  250. package/dist/ui/operation/usage-tabs/client.d.ts.map +0 -1
  251. package/dist/ui/operation/usage-tabs/lazy.d.ts +0 -4
  252. package/dist/ui/operation/usage-tabs/lazy.d.ts.map +0 -1
  253. package/dist/ui/schema/lazy.d.ts +0 -2
  254. package/dist/ui/schema/lazy.d.ts.map +0 -1
  255. package/dist/utils/cn.d.ts +0 -2
  256. package/dist/utils/cn.d.ts.map +0 -1
  257. package/dist/utils/deep-equal.d.ts +0 -2
  258. package/dist/utils/deep-equal.d.ts.map +0 -1
  259. package/dist/utils/get-typescript-schema.d.ts +0 -4
  260. package/dist/utils/get-typescript-schema.d.ts.map +0 -1
  261. package/dist/utils/id-to-title.d.ts +0 -2
  262. package/dist/utils/id-to-title.d.ts.map +0 -1
  263. package/dist/utils/lazy.d.ts +0 -5
  264. package/dist/utils/lazy.d.ts.map +0 -1
  265. package/dist/utils/merge-schema.d.ts +0 -7
  266. package/dist/utils/merge-schema.d.ts.map +0 -1
  267. package/dist/utils/pages/to-body.d.ts +0 -4
  268. package/dist/utils/pages/to-body.d.ts.map +0 -1
  269. package/dist/utils/pages/to-static-data.d.ts +0 -10
  270. package/dist/utils/pages/to-static-data.d.ts.map +0 -1
  271. package/dist/utils/remove-undefined.d.ts +0 -2
  272. package/dist/utils/remove-undefined.d.ts.map +0 -1
  273. package/dist/utils/schema-to-string.d.ts +0 -8
  274. package/dist/utils/schema-to-string.d.ts.map +0 -1
  275. package/dist/utils/url.d.ts +0 -11
  276. package/dist/utils/url.d.ts.map +0 -1
  277. package/dist/utils/use-query.d.ts +0 -8
  278. package/dist/utils/use-query.d.ts.map +0 -1
@@ -1,37 +1,42 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { cva } from 'class-variance-authority';
3
- import { cn } from '../../utils/cn.js';
4
- export const badgeVariants = cva('font-mono font-medium', {
5
- variants: {
6
- color: {
7
- green: 'text-green-600 dark:text-green-400',
8
- yellow: 'text-yellow-600 dark:text-yellow-400',
9
- red: 'text-red-600 dark:text-red-400',
10
- blue: 'text-blue-600 dark:text-blue-400',
11
- orange: 'text-orange-600 dark:text-orange-400',
12
- },
13
- },
14
- });
1
+ import { cn } from "../../utils/cn.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+
5
+ //#region src/ui/components/method-label.tsx
6
+ const badgeVariants = cva("font-mono font-medium", { variants: { color: {
7
+ green: "text-green-600 dark:text-green-400",
8
+ yellow: "text-yellow-600 dark:text-yellow-400",
9
+ red: "text-red-600 dark:text-red-400",
10
+ blue: "text-blue-600 dark:text-blue-400",
11
+ orange: "text-orange-600 dark:text-orange-400"
12
+ } } });
15
13
  function getMethodColor(method) {
16
- switch (method.toUpperCase()) {
17
- case 'PUT':
18
- return 'yellow';
19
- case 'PATCH':
20
- return 'orange';
21
- case 'POST':
22
- return 'blue';
23
- case 'DELETE':
24
- return 'red';
25
- default:
26
- return 'green';
27
- }
14
+ switch (method.toUpperCase()) {
15
+ case "PUT": return "yellow";
16
+ case "PATCH": return "orange";
17
+ case "POST": return "blue";
18
+ case "DELETE": return "red";
19
+ default: return "green";
20
+ }
28
21
  }
29
- export function Badge({ className, color, ...props }) {
30
- return (_jsx("span", { className: cn(badgeVariants({
31
- color,
32
- className,
33
- })), ...props, children: props.children }));
22
+ function Badge({ className, color, ...props }) {
23
+ return /* @__PURE__ */ jsx("span", {
24
+ className: cn(badgeVariants({
25
+ color,
26
+ className
27
+ })),
28
+ ...props,
29
+ children: props.children
30
+ });
34
31
  }
35
- export function MethodLabel({ children, ...props }) {
36
- return (_jsx(Badge, { ...props, color: getMethodColor(children), children: children.toUpperCase() }));
32
+ function MethodLabel({ children, ...props }) {
33
+ return /* @__PURE__ */ jsx(Badge, {
34
+ ...props,
35
+ color: getMethodColor(children),
36
+ children: children.toUpperCase()
37
+ });
37
38
  }
39
+
40
+ //#endregion
41
+ export { Badge, MethodLabel };
42
+ //# sourceMappingURL=method-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method-label.js","names":[],"sources":["../../../src/ui/components/method-label.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\nimport { cn } from '@/utils/cn';\n\nexport const badgeVariants = cva('font-mono font-medium', {\n variants: {\n color: {\n green: 'text-green-600 dark:text-green-400',\n yellow: 'text-yellow-600 dark:text-yellow-400',\n red: 'text-red-600 dark:text-red-400',\n blue: 'text-blue-600 dark:text-blue-400',\n orange: 'text-orange-600 dark:text-orange-400',\n },\n },\n});\n\nfunction getMethodColor(method: string): VariantProps<typeof badgeVariants>['color'] {\n switch (method.toUpperCase()) {\n case 'PUT':\n return 'yellow';\n case 'PATCH':\n return 'orange';\n case 'POST':\n return 'blue';\n case 'DELETE':\n return 'red';\n default:\n return 'green';\n }\n}\n\nexport function Badge({\n className,\n color,\n ...props\n}: Omit<HTMLAttributes<HTMLSpanElement>, 'color'> & VariantProps<typeof badgeVariants>) {\n return (\n <span\n className={cn(\n badgeVariants({\n color,\n className,\n }),\n )}\n {...props}\n >\n {props.children}\n </span>\n );\n}\n\nexport function MethodLabel({\n children,\n ...props\n}: Omit<HTMLAttributes<HTMLSpanElement>, 'children'> & {\n children: string;\n}) {\n return (\n <Badge {...props} color={getMethodColor(children)}>\n {children.toUpperCase()}\n </Badge>\n );\n}\n"],"mappings":";;;;;AAIA,MAAa,gBAAgB,IAAI,yBAAyB,EACxD,UAAU,EACR,OAAO;CACL,OAAO;CACP,QAAQ;CACR,KAAK;CACL,MAAM;CACN,QAAQ;CACT,EACF,EACF,CAAC;AAEF,SAAS,eAAe,QAA6D;AACnF,SAAQ,OAAO,aAAa,EAA5B;EACE,KAAK,MACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAgB,MAAM,EACpB,WACA,OACA,GAAG,SACmF;AACtF,QACE,oBAAC;EACC,WAAW,GACT,cAAc;GACZ;GACA;GACD,CAAC,CACH;EACD,GAAI;YAEH,MAAM;GACF;;AAIX,SAAgB,YAAY,EAC1B,UACA,GAAG,SAGF;AACD,QACE,oBAAC;EAAM,GAAI;EAAO,OAAO,eAAe,SAAS;YAC9C,SAAS,aAAa;GACjB"}
@@ -1,24 +1,75 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import * as SelectPrimitive from '@radix-ui/react-select';
3
- import { Check, ChevronDown, ChevronUp } from '../../ui/icons.js';
4
- import { forwardRef } from 'react';
5
- import { cn } from '../../utils/cn.js';
1
+ import { cn } from "../../utils/cn.js";
2
+ import { forwardRef } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { Check, ChevronDown, ChevronUp } from "lucide-react";
5
+ import * as SelectPrimitive from "@radix-ui/react-select";
6
+
7
+ //#region src/ui/components/select.tsx
6
8
  const Select = SelectPrimitive.Root;
7
9
  const SelectGroup = SelectPrimitive.Group;
8
10
  const SelectValue = SelectPrimitive.Value;
9
- const SelectTrigger = forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Trigger, { ref: ref, className: cn('flex items-center w-full rounded-md border p-2 gap-2 text-start text-sm text-fd-secondary-foreground bg-fd-secondary hover:bg-fd-accent focus:outline-none focus:ring focus:ring-fd-ring disabled:cursor-not-allowed disabled:opacity-50', className), ...props, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDown, { className: "ms-auto size-3.5 text-fd-muted-foreground shrink-0" }) })] })));
11
+ const SelectTrigger = forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SelectPrimitive.Trigger, {
12
+ ref,
13
+ className: cn("flex items-center w-full rounded-md border p-2 gap-2 text-start text-sm text-fd-secondary-foreground bg-fd-secondary hover:bg-fd-accent focus:outline-none focus:ring focus:ring-fd-ring disabled:cursor-not-allowed disabled:opacity-50", className),
14
+ ...props,
15
+ children: [children, /* @__PURE__ */ jsx(SelectPrimitive.Icon, {
16
+ asChild: true,
17
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "ms-auto size-3.5 text-fd-muted-foreground shrink-0" })
18
+ })]
19
+ }));
10
20
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
11
- const SelectScrollUpButton = forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollUpButton, { ref: ref, className: cn('flex items-center justify-center py-1', className), ...props, children: _jsx(ChevronUp, { className: "size-4" }) })));
21
+ const SelectScrollUpButton = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.ScrollUpButton, {
22
+ ref,
23
+ className: cn("flex items-center justify-center py-1", className),
24
+ ...props,
25
+ children: /* @__PURE__ */ jsx(ChevronUp, { className: "size-4" })
26
+ }));
12
27
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
13
- const SelectScrollDownButton = forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollDownButton, { ref: ref, className: cn('flex items-center justify-center py-1', className), ...props, children: _jsx(ChevronDown, { className: "size-4" }) })));
14
- SelectScrollDownButton.displayName =
15
- SelectPrimitive.ScrollDownButton.displayName;
16
- const SelectContent = forwardRef(({ className, children, position, ...props }, ref) => (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { ref: ref, className: cn('z-50 overflow-hidden rounded-lg border bg-fd-popover text-fd-popover-foreground shadow-md', className), position: position, ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { className: "p-1", children: children }), _jsx(SelectScrollDownButton, {})] }) })));
28
+ const SelectScrollDownButton = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.ScrollDownButton, {
29
+ ref,
30
+ className: cn("flex items-center justify-center py-1", className),
31
+ ...props,
32
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4" })
33
+ }));
34
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
35
+ const SelectContent = forwardRef(({ className, children, position, ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(SelectPrimitive.Content, {
36
+ ref,
37
+ className: cn("z-50 overflow-hidden rounded-lg border bg-fd-popover text-fd-popover-foreground shadow-md", className),
38
+ position,
39
+ ...props,
40
+ children: [
41
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
42
+ /* @__PURE__ */ jsx(SelectPrimitive.Viewport, {
43
+ className: "p-1",
44
+ children
45
+ }),
46
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
47
+ ]
48
+ }) }));
17
49
  SelectContent.displayName = SelectPrimitive.Content.displayName;
18
- const SelectLabel = forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Label, { ref: ref, className: cn('py-1.5 pe-2 ps-6 text-sm font-semibold', className), ...props })));
50
+ const SelectLabel = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Label, {
51
+ ref,
52
+ className: cn("py-1.5 pe-2 ps-6 text-sm font-semibold", className),
53
+ ...props
54
+ }));
19
55
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
20
- const SelectItem = forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Item, { ref: ref, className: cn('flex select-none flex-row items-center rounded-md py-1.5 px-2 text-sm outline-none focus:bg-fd-accent focus:text-fd-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50', className), ...props, children: [_jsx(SelectPrimitive.ItemText, { children: children }), _jsx(SelectPrimitive.ItemIndicator, { className: "ms-auto", children: _jsx(Check, { className: "size-3.5 text-fd-primary" }) })] })));
56
+ const SelectItem = forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SelectPrimitive.Item, {
57
+ ref,
58
+ className: cn("flex select-none flex-row items-center rounded-md py-1.5 px-2 text-sm outline-none focus:bg-fd-accent focus:text-fd-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", className),
59
+ ...props,
60
+ children: [/* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children }), /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, {
61
+ className: "ms-auto",
62
+ children: /* @__PURE__ */ jsx(Check, { className: "size-3.5 text-fd-primary" })
63
+ })]
64
+ }));
21
65
  SelectItem.displayName = SelectPrimitive.Item.displayName;
22
- const SelectSeparator = forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Separator, { ref: ref, className: cn('my-1 h-px bg-fd-muted', className), ...props })));
66
+ const SelectSeparator = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Separator, {
67
+ ref,
68
+ className: cn("my-1 h-px bg-fd-muted", className),
69
+ ...props
70
+ }));
23
71
  SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
24
- export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
72
+
73
+ //#endregion
74
+ export { Select, SelectContent, SelectItem, SelectTrigger, SelectValue };
75
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","names":[],"sources":["../../../src/ui/components/select.tsx"],"sourcesContent":["import * as SelectPrimitive from '@radix-ui/react-select';\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react';\nimport React, { forwardRef } from 'react';\nimport { cn } from '@/utils/cn';\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex items-center w-full rounded-md border p-2 gap-2 text-start text-sm text-fd-secondary-foreground bg-fd-secondary hover:bg-fd-accent focus:outline-none focus:ring focus:ring-fd-ring disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"ms-auto size-3.5 text-fd-muted-foreground shrink-0\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = forwardRef<\n React.ComponentRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn('flex items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUp className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = forwardRef<\n React.ComponentRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn('flex items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDown className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position, ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n 'z-50 overflow-hidden rounded-lg border bg-fd-popover text-fd-popover-foreground shadow-md',\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport className=\"p-1\">{children}</SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('py-1.5 pe-2 ps-6 text-sm font-semibold', className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'flex select-none flex-row items-center rounded-md py-1.5 px-2 text-sm outline-none focus:bg-fd-accent focus:text-fd-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"ms-auto\">\n <Check className=\"size-3.5 text-fd-primary\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('my-1 h-px bg-fd-muted', className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n"],"mappings":";;;;;;;AAKA,MAAM,SAAS,gBAAgB;AAE/B,MAAM,cAAc,gBAAgB;AAEpC,MAAM,cAAc,gBAAgB;AAEpC,MAAM,gBAAgB,YAGnB,EAAE,WAAW,UAAU,GAAG,SAAS,QACpC,qBAAC,gBAAgB;CACV;CACL,WAAW,GACT,4OACA,UACD;CACD,GAAI;YAEH,UACD,oBAAC,gBAAgB;EAAK;YACpB,oBAAC,eAAY,WAAU,uDAAuD;GACzD;EACC,CAC1B;AACF,cAAc,cAAc,gBAAgB,QAAQ;AAEpD,MAAM,uBAAuB,YAG1B,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,gBAAgB;CACV;CACL,WAAW,GAAG,yCAAyC,UAAU;CACjE,GAAI;WAEJ,oBAAC,aAAU,WAAU,WAAW;EACD,CACjC;AACF,qBAAqB,cAAc,gBAAgB,eAAe;AAElE,MAAM,yBAAyB,YAG5B,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,gBAAgB;CACV;CACL,WAAW,GAAG,yCAAyC,UAAU;CACjE,GAAI;WAEJ,oBAAC,eAAY,WAAU,WAAW;EACD,CACnC;AACF,uBAAuB,cAAc,gBAAgB,iBAAiB;AAEtE,MAAM,gBAAgB,YAGnB,EAAE,WAAW,UAAU,UAAU,GAAG,SAAS,QAC9C,oBAAC,gBAAgB,oBACf,qBAAC,gBAAgB;CACV;CACL,WAAW,GACT,6FACA,UACD;CACS;CACV,GAAI;;EAEJ,oBAAC,yBAAuB;EACxB,oBAAC,gBAAgB;GAAS,WAAU;GAAO;IAAoC;EAC/E,oBAAC,2BAAyB;;EACF,GACH,CACzB;AACF,cAAc,cAAc,gBAAgB,QAAQ;AAEpD,MAAM,cAAc,YAGjB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,gBAAgB;CACV;CACL,WAAW,GAAG,0CAA0C,UAAU;CAClE,GAAI;EACJ,CACF;AACF,YAAY,cAAc,gBAAgB,MAAM;AAEhD,MAAM,aAAa,YAGhB,EAAE,WAAW,UAAU,GAAG,SAAS,QACpC,qBAAC,gBAAgB;CACV;CACL,WAAW,GACT,wMACA,UACD;CACD,GAAI;YAEJ,oBAAC,gBAAgB,YAAU,WAAoC,EAC/D,oBAAC,gBAAgB;EAAc,WAAU;YACvC,oBAAC,SAAM,WAAU,6BAA6B;GAChB;EACX,CACvB;AACF,WAAW,cAAc,gBAAgB,KAAK;AAE9C,MAAM,kBAAkB,YAGrB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,gBAAgB;CACV;CACL,WAAW,GAAG,yBAAyB,UAAU;CACjD,GAAI;EACJ,CACF;AACF,gBAAgB,cAAc,gBAAgB,UAAU"}
@@ -1,94 +1,105 @@
1
1
  'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { createContext, use, useEffect, useMemo, useRef, useState, } from 'react';
4
- import { defaultAdapters } from '../../requests/media/adapter.js';
5
- import { useStorageKey } from '../client/storage-key.js';
2
+
3
+ import { defaultAdapters } from "../../requests/media/adapter.js";
4
+ import { useStorageKey } from "../client/storage-key.js";
5
+ import { createContext, use, useEffect, useMemo, useRef, useState } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+
8
+ //#region src/ui/contexts/api.tsx
6
9
  const ApiContext = createContext(null);
7
10
  const ServerSelectContext = createContext(null);
8
- export function useApiContext() {
9
- const ctx = use(ApiContext);
10
- if (!ctx)
11
- throw new Error('Component must be used under <ApiProvider />');
12
- return ctx;
11
+ function useApiContext() {
12
+ const ctx = use(ApiContext);
13
+ if (!ctx) throw new Error("Component must be used under <ApiProvider />");
14
+ return ctx;
13
15
  }
14
- export function useServerSelectContext() {
15
- const ctx = use(ServerSelectContext);
16
- if (!ctx)
17
- throw new Error('Component must be used under <ApiProvider />');
18
- return ctx;
16
+ function useServerSelectContext() {
17
+ const ctx = use(ServerSelectContext);
18
+ if (!ctx) throw new Error("Component must be used under <ApiProvider />");
19
+ return ctx;
19
20
  }
20
- export function ApiProvider({ defaultBaseUrl, children, servers, shikiOptions, client, }) {
21
- const serverRef = useRef(null);
22
- return (_jsx(ApiContext, { value: useMemo(() => ({
23
- serverRef,
24
- shikiOptions,
25
- client,
26
- mediaAdapters: {
27
- ...defaultAdapters,
28
- ...client.mediaAdapters,
29
- },
30
- servers,
31
- }), [servers, client, shikiOptions]), children: _jsx(ServerSelectProvider, { defaultBaseUrl: defaultBaseUrl, children: children }) }));
21
+ function ApiProvider({ defaultBaseUrl, children, servers, shikiOptions, client }) {
22
+ const serverRef = useRef(null);
23
+ return /* @__PURE__ */ jsx(ApiContext, {
24
+ value: useMemo(() => ({
25
+ serverRef,
26
+ shikiOptions,
27
+ client,
28
+ mediaAdapters: {
29
+ ...defaultAdapters,
30
+ ...client.mediaAdapters
31
+ },
32
+ servers
33
+ }), [
34
+ servers,
35
+ client,
36
+ shikiOptions
37
+ ]),
38
+ children: /* @__PURE__ */ jsx(ServerSelectProvider, {
39
+ defaultBaseUrl,
40
+ children
41
+ })
42
+ });
32
43
  }
33
- function ServerSelectProvider({ defaultBaseUrl, children, }) {
34
- const { servers, serverRef } = useApiContext();
35
- const storageKeys = useStorageKey();
36
- const [server, setServer] = useState(() => {
37
- const defaultItem = defaultBaseUrl
38
- ? servers.find((item) => item.url === defaultBaseUrl)
39
- : servers[0];
40
- return defaultItem
41
- ? {
42
- url: defaultItem.url,
43
- variables: getDefaultValues(defaultItem),
44
- }
45
- : null;
46
- });
47
- serverRef.current = server;
48
- useEffect(() => {
49
- const cached = localStorage.getItem(storageKeys.of('server-url'));
50
- if (!cached)
51
- return;
52
- try {
53
- const obj = JSON.parse(cached);
54
- if (!obj || typeof obj !== 'object')
55
- return;
56
- setServer(obj);
57
- }
58
- catch {
59
- // ignore
60
- }
61
- }, [storageKeys]);
62
- return (_jsx(ServerSelectContext, { value: useMemo(() => ({
63
- server,
64
- setServerVariables(variables) {
65
- setServer((prev) => {
66
- if (!prev)
67
- return null;
68
- const updated = { ...prev, variables };
69
- localStorage.setItem(storageKeys.of('server-url'), JSON.stringify(updated));
70
- return updated;
71
- });
72
- },
73
- setServer(value) {
74
- const obj = servers.find((item) => item.url === value);
75
- if (!obj)
76
- return;
77
- const result = {
78
- url: value,
79
- variables: getDefaultValues(obj),
80
- };
81
- localStorage.setItem(storageKeys.of('server-url'), JSON.stringify(result));
82
- setServer(result);
83
- },
84
- }), [server, servers, storageKeys]), children: children }));
44
+ function ServerSelectProvider({ defaultBaseUrl, children }) {
45
+ const { servers, serverRef } = useApiContext();
46
+ const storageKeys = useStorageKey();
47
+ const [server, setServer] = useState(() => {
48
+ const defaultItem = defaultBaseUrl ? servers.find((item) => item.url === defaultBaseUrl) : servers[0];
49
+ return defaultItem ? {
50
+ url: defaultItem.url,
51
+ variables: getDefaultValues(defaultItem)
52
+ } : null;
53
+ });
54
+ serverRef.current = server;
55
+ useEffect(() => {
56
+ const cached = localStorage.getItem(storageKeys.of("server-url"));
57
+ if (!cached) return;
58
+ try {
59
+ const obj = JSON.parse(cached);
60
+ if (!obj || typeof obj !== "object") return;
61
+ setServer(obj);
62
+ } catch {}
63
+ }, [storageKeys]);
64
+ return /* @__PURE__ */ jsx(ServerSelectContext, {
65
+ value: useMemo(() => ({
66
+ server,
67
+ setServerVariables(variables) {
68
+ setServer((prev) => {
69
+ if (!prev) return null;
70
+ const updated = {
71
+ ...prev,
72
+ variables
73
+ };
74
+ localStorage.setItem(storageKeys.of("server-url"), JSON.stringify(updated));
75
+ return updated;
76
+ });
77
+ },
78
+ setServer(value) {
79
+ const obj = servers.find((item) => item.url === value);
80
+ if (!obj) return;
81
+ const result = {
82
+ url: value,
83
+ variables: getDefaultValues(obj)
84
+ };
85
+ localStorage.setItem(storageKeys.of("server-url"), JSON.stringify(result));
86
+ setServer(result);
87
+ }
88
+ }), [
89
+ server,
90
+ servers,
91
+ storageKeys
92
+ ]),
93
+ children
94
+ });
85
95
  }
86
96
  function getDefaultValues(server) {
87
- const out = {};
88
- if (!server.variables)
89
- return out;
90
- for (const [k, v] of Object.entries(server.variables)) {
91
- out[k] = v.default;
92
- }
93
- return out;
97
+ const out = {};
98
+ if (!server.variables) return out;
99
+ for (const [k, v] of Object.entries(server.variables)) out[k] = v.default;
100
+ return out;
94
101
  }
102
+
103
+ //#endregion
104
+ export { ApiProvider, useApiContext, useServerSelectContext };
105
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","names":["result: SelectedServer","out: Record<string, string>"],"sources":["../../../src/ui/contexts/api.tsx"],"sourcesContent":["'use client';\nimport {\n createContext,\n type ReactNode,\n type RefObject,\n use,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { RenderContext, ServerObject } from '@/types';\nimport { defaultAdapters, type MediaAdapter } from '@/requests/media/adapter';\nimport type { NoReference } from '@/utils/schema';\nimport { useStorageKey } from '../client/storage-key';\n\ntype InheritFromContext = Pick<Required<RenderContext>, 'servers' | 'client'> &\n Pick<RenderContext, 'shikiOptions'>;\n\nexport interface ApiProviderProps extends InheritFromContext {\n /**\n * Base URL for API requests\n */\n defaultBaseUrl?: string;\n}\n\nexport interface SelectedServer {\n url: string;\n variables: Record<string, string>;\n}\n\ninterface ApiContextType extends InheritFromContext {\n /**\n * ref to selected API server (to query)\n */\n serverRef: RefObject<SelectedServer | null>;\n\n mediaAdapters: Record<string, MediaAdapter>;\n}\n\ninterface ServerSelectType {\n server: SelectedServer | null;\n setServer: (value: string) => void;\n setServerVariables: (value: Record<string, string>) => void;\n}\n\nconst ApiContext = createContext<ApiContextType | null>(null);\nconst ServerSelectContext = createContext<ServerSelectType | null>(null);\n\nexport function useApiContext(): ApiContextType {\n const ctx = use(ApiContext);\n if (!ctx) throw new Error('Component must be used under <ApiProvider />');\n\n return ctx;\n}\n\nexport function useServerSelectContext(): ServerSelectType {\n const ctx = use(ServerSelectContext);\n if (!ctx) throw new Error('Component must be used under <ApiProvider />');\n\n return ctx;\n}\n\nexport function ApiProvider({\n defaultBaseUrl,\n children,\n servers,\n shikiOptions,\n client,\n}: ApiProviderProps & { children: ReactNode }) {\n const serverRef = useRef<SelectedServer | null>(null);\n\n return (\n <ApiContext\n value={useMemo(\n () => ({\n serverRef,\n shikiOptions,\n client,\n mediaAdapters: {\n ...defaultAdapters,\n ...client.mediaAdapters,\n },\n servers,\n }),\n [servers, client, shikiOptions],\n )}\n >\n <ServerSelectProvider defaultBaseUrl={defaultBaseUrl}>{children}</ServerSelectProvider>\n </ApiContext>\n );\n}\n\nfunction ServerSelectProvider({\n defaultBaseUrl,\n children,\n}: Pick<ApiProviderProps, 'defaultBaseUrl'> & {\n children: ReactNode;\n}) {\n const { servers, serverRef } = useApiContext();\n const storageKeys = useStorageKey();\n const [server, setServer] = useState<SelectedServer | null>(() => {\n const defaultItem = defaultBaseUrl\n ? servers.find((item) => item.url === defaultBaseUrl)\n : servers[0];\n\n return defaultItem\n ? {\n url: defaultItem.url,\n variables: getDefaultValues(defaultItem),\n }\n : null;\n });\n serverRef.current = server;\n\n useEffect(() => {\n const cached = localStorage.getItem(storageKeys.of('server-url'));\n if (!cached) return;\n\n try {\n const obj = JSON.parse(cached);\n if (!obj || typeof obj !== 'object') return;\n\n setServer(obj);\n } catch {\n // ignore\n }\n }, [storageKeys]);\n\n return (\n <ServerSelectContext\n value={useMemo(\n () => ({\n server,\n setServerVariables(variables) {\n setServer((prev) => {\n if (!prev) return null;\n\n const updated = { ...prev, variables };\n localStorage.setItem(storageKeys.of('server-url'), JSON.stringify(updated));\n return updated;\n });\n },\n setServer(value) {\n const obj = servers.find((item) => item.url === value);\n if (!obj) return;\n\n const result: SelectedServer = {\n url: value,\n variables: getDefaultValues(obj),\n };\n\n localStorage.setItem(storageKeys.of('server-url'), JSON.stringify(result));\n setServer(result);\n },\n }),\n [server, servers, storageKeys],\n )}\n >\n {children}\n </ServerSelectContext>\n );\n}\n\nfunction getDefaultValues(server: NoReference<ServerObject>): Record<string, string> {\n const out: Record<string, string> = {};\n if (!server.variables) return out;\n\n for (const [k, v] of Object.entries(server.variables)) {\n out[k] = v.default;\n }\n\n return out;\n}\n"],"mappings":";;;;;;;;AA8CA,MAAM,aAAa,cAAqC,KAAK;AAC7D,MAAM,sBAAsB,cAAuC,KAAK;AAExE,SAAgB,gBAAgC;CAC9C,MAAM,MAAM,IAAI,WAAW;AAC3B,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,+CAA+C;AAEzE,QAAO;;AAGT,SAAgB,yBAA2C;CACzD,MAAM,MAAM,IAAI,oBAAoB;AACpC,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,+CAA+C;AAEzE,QAAO;;AAGT,SAAgB,YAAY,EAC1B,gBACA,UACA,SACA,cACA,UAC6C;CAC7C,MAAM,YAAY,OAA8B,KAAK;AAErD,QACE,oBAAC;EACC,OAAO,eACE;GACL;GACA;GACA;GACA,eAAe;IACb,GAAG;IACH,GAAG,OAAO;IACX;GACD;GACD,GACD;GAAC;GAAS;GAAQ;GAAa,CAChC;YAED,oBAAC;GAAqC;GAAiB;IAAgC;GAC5E;;AAIjB,SAAS,qBAAqB,EAC5B,gBACA,YAGC;CACD,MAAM,EAAE,SAAS,cAAc,eAAe;CAC9C,MAAM,cAAc,eAAe;CACnC,MAAM,CAAC,QAAQ,aAAa,eAAsC;EAChE,MAAM,cAAc,iBAChB,QAAQ,MAAM,SAAS,KAAK,QAAQ,eAAe,GACnD,QAAQ;AAEZ,SAAO,cACH;GACE,KAAK,YAAY;GACjB,WAAW,iBAAiB,YAAY;GACzC,GACD;GACJ;AACF,WAAU,UAAU;AAEpB,iBAAgB;EACd,MAAM,SAAS,aAAa,QAAQ,YAAY,GAAG,aAAa,CAAC;AACjE,MAAI,CAAC,OAAQ;AAEb,MAAI;GACF,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9B,OAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AAErC,aAAU,IAAI;UACR;IAGP,CAAC,YAAY,CAAC;AAEjB,QACE,oBAAC;EACC,OAAO,eACE;GACL;GACA,mBAAmB,WAAW;AAC5B,eAAW,SAAS;AAClB,SAAI,CAAC,KAAM,QAAO;KAElB,MAAM,UAAU;MAAE,GAAG;MAAM;MAAW;AACtC,kBAAa,QAAQ,YAAY,GAAG,aAAa,EAAE,KAAK,UAAU,QAAQ,CAAC;AAC3E,YAAO;MACP;;GAEJ,UAAU,OAAO;IACf,MAAM,MAAM,QAAQ,MAAM,SAAS,KAAK,QAAQ,MAAM;AACtD,QAAI,CAAC,IAAK;IAEV,MAAMA,SAAyB;KAC7B,KAAK;KACL,WAAW,iBAAiB,IAAI;KACjC;AAED,iBAAa,QAAQ,YAAY,GAAG,aAAa,EAAE,KAAK,UAAU,OAAO,CAAC;AAC1E,cAAU,OAAO;;GAEpB,GACD;GAAC;GAAQ;GAAS;GAAY,CAC/B;EAEA;GACmB;;AAI1B,SAAS,iBAAiB,QAA2D;CACnF,MAAMC,MAA8B,EAAE;AACtC,KAAI,CAAC,OAAO,UAAW,QAAO;AAE9B,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,OAAO,UAAU,CACnD,KAAI,KAAK,EAAE;AAGb,QAAO"}
@@ -1,3 +1,10 @@
1
1
  'use client';
2
- import { wrapLazy } from '../../utils/lazy.js';
3
- export const ApiProviderLazy = wrapLazy(() => import('./api.js').then((mod) => ({ default: mod.ApiProvider })));
2
+
3
+ import { wrapLazy } from "../../utils/lazy.js";
4
+
5
+ //#region src/ui/contexts/api.lazy.ts
6
+ const ApiProviderLazy = wrapLazy(() => import("./api.js").then((mod) => ({ default: mod.ApiProvider })));
7
+
8
+ //#endregion
9
+ export { ApiProviderLazy };
10
+ //# sourceMappingURL=api.lazy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.lazy.js","names":[],"sources":["../../../src/ui/contexts/api.lazy.ts"],"sourcesContent":["'use client';\nimport { wrapLazy } from '../../utils/lazy';\n\nexport const ApiProviderLazy = wrapLazy(() =>\n import('./api').then((mod) => ({ default: mod.ApiProvider })),\n);\n"],"mappings":";;;;;AAGA,MAAa,kBAAkB,eAC7B,OAAO,YAAS,MAAM,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,CAC9D"}
@@ -1,2 +1,2 @@
1
- export * from '../ui/api-page.js';
2
- //# sourceMappingURL=index.d.ts.map
1
+ import { ApiPageProps, CreateAPIPageOptions, OperationItem, WebhookItem, createAPIPage } from "./api-page.js";
2
+ export { ApiPageProps, CreateAPIPageOptions, OperationItem, WebhookItem, createAPIPage };
package/dist/ui/index.js CHANGED
@@ -1 +1,3 @@
1
- export * from '../ui/api-page.js';
1
+ import { createAPIPage } from "./api-page.js";
2
+
3
+ export { createAPIPage };
@@ -1,33 +1,71 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useCopyButton } from 'fumadocs-ui/utils/use-copy-button';
4
- import { buttonVariants } from 'fumadocs-ui/components/ui/button';
5
- import { cn } from '../../utils/cn.js';
6
- import { Check, Copy } from '../../ui/icons.js';
7
- import { createContext, use, useMemo, useState, } from 'react';
8
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/components/select.js';
9
- export function CopyResponseTypeScript({ code }) {
10
- const [isChecked, onCopy] = useCopyButton(() => {
11
- void navigator.clipboard.writeText(code);
12
- });
13
- return (_jsxs("div", { className: "flex items-start justify-between gap-2 bg-fd-card text-fd-card-foreground border rounded-xl p-3 not-prose mb-4 last:mb-0", children: [_jsxs("div", { children: [_jsx("p", { className: "font-medium text-sm mb-2", children: "TypeScript Definitions" }), _jsx("p", { className: "text-xs text-fd-muted-foreground", children: "Use the response body type in TypeScript." })] }), _jsxs("button", { onClick: onCopy, className: cn(buttonVariants({
14
- color: 'secondary',
15
- className: 'p-2 gap-2',
16
- size: 'sm',
17
- })), children: [isChecked ? (_jsx(Check, { className: "size-3.5" })) : (_jsx(Copy, { className: "size-3.5" })), "Copy"] })] }));
2
+
3
+ import { cn } from "../../utils/cn.js";
4
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../components/select.js";
5
+ import { createContext, use, useMemo, useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Check, Copy } from "lucide-react";
8
+ import { buttonVariants } from "fumadocs-ui/components/ui/button";
9
+ import { useCopyButton } from "fumadocs-ui/utils/use-copy-button";
10
+
11
+ //#region src/ui/operation/client.tsx
12
+ function CopyResponseTypeScript({ code }) {
13
+ const [isChecked, onCopy] = useCopyButton(() => {
14
+ navigator.clipboard.writeText(code);
15
+ });
16
+ return /* @__PURE__ */ jsxs("div", {
17
+ className: "flex items-start justify-between gap-2 bg-fd-card text-fd-card-foreground border rounded-xl p-3 not-prose mb-4 last:mb-0",
18
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
19
+ className: "font-medium text-sm mb-2",
20
+ children: "TypeScript Definitions"
21
+ }), /* @__PURE__ */ jsx("p", {
22
+ className: "text-xs text-fd-muted-foreground",
23
+ children: "Use the response body type in TypeScript."
24
+ })] }), /* @__PURE__ */ jsxs("button", {
25
+ onClick: onCopy,
26
+ className: cn(buttonVariants({
27
+ color: "secondary",
28
+ className: "p-2 gap-2",
29
+ size: "sm"
30
+ })),
31
+ children: [isChecked ? /* @__PURE__ */ jsx(Check, { className: "size-3.5" }) : /* @__PURE__ */ jsx(Copy, { className: "size-3.5" }), "Copy"]
32
+ })]
33
+ });
18
34
  }
19
35
  const Context = createContext(null);
20
- export function SelectTabs({ defaultValue, children, }) {
21
- const [type, setType] = useState(defaultValue ?? null);
22
- return (_jsx(Context, { value: useMemo(() => ({ type, setType }), [type]), children: children }));
36
+ function SelectTabs({ defaultValue, children }) {
37
+ const [type, setType] = useState(defaultValue ?? null);
38
+ return /* @__PURE__ */ jsx(Context, {
39
+ value: useMemo(() => ({
40
+ type,
41
+ setType
42
+ }), [type]),
43
+ children
44
+ });
23
45
  }
24
- export function SelectTab({ value, ...props }) {
25
- const ctx = use(Context);
26
- if (value !== ctx?.type)
27
- return;
28
- return _jsx("div", { ...props, children: props.children });
46
+ function SelectTab({ value, ...props }) {
47
+ if (value !== use(Context)?.type) return;
48
+ return /* @__PURE__ */ jsx("div", {
49
+ ...props,
50
+ children: props.children
51
+ });
29
52
  }
30
- export function SelectTabTrigger({ items, className, ...props }) {
31
- const { type, setType } = use(Context);
32
- return (_jsxs(Select, { value: type ?? '', onValueChange: setType, children: [_jsx(SelectTrigger, { className: cn('not-prose w-fit min-w-0 *:min-w-0', className), ...props, children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: items.map(({ label, value }) => (_jsx(SelectItem, { value: value, children: label }, value))) })] }));
53
+ function SelectTabTrigger({ items, className, ...props }) {
54
+ const { type, setType } = use(Context);
55
+ return /* @__PURE__ */ jsxs(Select, {
56
+ value: type ?? "",
57
+ onValueChange: setType,
58
+ children: [/* @__PURE__ */ jsx(SelectTrigger, {
59
+ className: cn("not-prose w-fit min-w-0 *:min-w-0", className),
60
+ ...props,
61
+ children: /* @__PURE__ */ jsx(SelectValue, {})
62
+ }), /* @__PURE__ */ jsx(SelectContent, { children: items.map(({ label, value }) => /* @__PURE__ */ jsx(SelectItem, {
63
+ value,
64
+ children: label
65
+ }, value)) })]
66
+ });
33
67
  }
68
+
69
+ //#endregion
70
+ export { CopyResponseTypeScript, SelectTab, SelectTabTrigger, SelectTabs };
71
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","names":[],"sources":["../../../src/ui/operation/client.tsx"],"sourcesContent":["'use client';\n\nimport { useCopyButton } from 'fumadocs-ui/utils/use-copy-button';\nimport { buttonVariants } from 'fumadocs-ui/components/ui/button';\nimport { cn } from '@/utils/cn';\nimport { Check, Copy } from 'lucide-react';\nimport { type ComponentProps, createContext, type ReactNode, use, useMemo, useState } from 'react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\n\nexport function CopyResponseTypeScript({ code }: { code: string }) {\n const [isChecked, onCopy] = useCopyButton(() => {\n void navigator.clipboard.writeText(code);\n });\n\n return (\n <div className=\"flex items-start justify-between gap-2 bg-fd-card text-fd-card-foreground border rounded-xl p-3 not-prose mb-4 last:mb-0\">\n <div>\n <p className=\"font-medium text-sm mb-2\">TypeScript Definitions</p>\n <p className=\"text-xs text-fd-muted-foreground\">\n Use the response body type in TypeScript.\n </p>\n </div>\n <button\n onClick={onCopy}\n className={cn(\n buttonVariants({\n color: 'secondary',\n className: 'p-2 gap-2',\n size: 'sm',\n }),\n )}\n >\n {isChecked ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n Copy\n </button>\n </div>\n );\n}\n\nconst Context = createContext<{\n type: string | null;\n setType: (type: string) => void;\n} | null>(null);\n\nexport function SelectTabs({\n defaultValue,\n children,\n}: {\n defaultValue?: string;\n children: ReactNode;\n}) {\n const [type, setType] = useState<string | null>(defaultValue ?? null);\n\n return <Context value={useMemo(() => ({ type, setType }), [type])}>{children}</Context>;\n}\n\nexport function SelectTab({\n value,\n ...props\n}: ComponentProps<'div'> & {\n value: string;\n}) {\n const ctx = use(Context);\n if (value !== ctx?.type) return;\n\n return <div {...props}>{props.children}</div>;\n}\n\nexport function SelectTabTrigger({\n items,\n className,\n ...props\n}: ComponentProps<typeof SelectTrigger> & {\n items: {\n label: ReactNode;\n value: string;\n }[];\n}) {\n const { type, setType } = use(Context)!;\n\n return (\n <Select value={type ?? ''} onValueChange={setType}>\n <SelectTrigger className={cn('not-prose w-fit min-w-0 *:min-w-0', className)} {...props}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {items.map(({ label, value }) => (\n <SelectItem key={value} value={value}>\n {label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n"],"mappings":";;;;;;;;;;;AAeA,SAAgB,uBAAuB,EAAE,QAA0B;CACjE,MAAM,CAAC,WAAW,UAAU,oBAAoB;AAC9C,EAAK,UAAU,UAAU,UAAU,KAAK;GACxC;AAEF,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC,oBACC,oBAAC;GAAE,WAAU;aAA2B;IAA0B,EAClE,oBAAC;GAAE,WAAU;aAAmC;IAE5C,IACA,EACN,qBAAC;GACC,SAAS;GACT,WAAW,GACT,eAAe;IACb,OAAO;IACP,WAAW;IACX,MAAM;IACP,CAAC,CACH;cAEA,YAAY,oBAAC,SAAM,WAAU,aAAa,GAAG,oBAAC,QAAK,WAAU,aAAa,EAAC;IAErE;GACL;;AAIV,MAAM,UAAU,cAGN,KAAK;AAEf,SAAgB,WAAW,EACzB,cACA,YAIC;CACD,MAAM,CAAC,MAAM,WAAW,SAAwB,gBAAgB,KAAK;AAErE,QAAO,oBAAC;EAAQ,OAAO,eAAe;GAAE;GAAM;GAAS,GAAG,CAAC,KAAK,CAAC;EAAG;GAAmB;;AAGzF,SAAgB,UAAU,EACxB,OACA,GAAG,SAGF;AAED,KAAI,UADQ,IAAI,QAAQ,EACL,KAAM;AAEzB,QAAO,oBAAC;EAAI,GAAI;YAAQ,MAAM;GAAe;;AAG/C,SAAgB,iBAAiB,EAC/B,OACA,WACA,GAAG,SAMF;CACD,MAAM,EAAE,MAAM,YAAY,IAAI,QAAQ;AAEtC,QACE,qBAAC;EAAO,OAAO,QAAQ;EAAI,eAAe;aACxC,oBAAC;GAAc,WAAW,GAAG,qCAAqC,UAAU;GAAE,GAAI;aAChF,oBAAC,gBAAc;IACD,EAChB,oBAAC,2BACE,MAAM,KAAK,EAAE,OAAO,YACnB,oBAAC;GAA8B;aAC5B;KADc,MAEJ,CACb,GACY;GACT"}