zudoku 0.33.1 → 0.34.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 (244) hide show
  1. package/dist/config/validators/common.d.ts +572 -354
  2. package/dist/config/validators/common.js +26 -8
  3. package/dist/config/validators/common.js.map +1 -1
  4. package/dist/config/validators/validate.d.ts +254 -167
  5. package/dist/lib/authentication/hook.d.ts +1 -0
  6. package/dist/lib/authentication/hook.js +11 -1
  7. package/dist/lib/authentication/hook.js.map +1 -1
  8. package/dist/lib/authentication/providers/clerk.js +6 -6
  9. package/dist/lib/authentication/providers/clerk.js.map +1 -1
  10. package/dist/lib/components/AnchorLink.d.ts +2 -2
  11. package/dist/lib/components/AnchorLink.js +4 -4
  12. package/dist/lib/components/AnchorLink.js.map +1 -1
  13. package/dist/lib/components/Banner.js +1 -1
  14. package/dist/lib/components/Banner.js.map +1 -1
  15. package/dist/lib/components/Heading.d.ts +2 -2
  16. package/dist/lib/components/Layout.js +1 -1
  17. package/dist/lib/components/Layout.js.map +1 -1
  18. package/dist/lib/components/context/ZudokuContext.d.ts +1 -1
  19. package/dist/lib/components/index.d.ts +1 -0
  20. package/dist/lib/components/navigation/SidebarItem.js +6 -5
  21. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  22. package/dist/lib/core/RouteGuard.js +2 -1
  23. package/dist/lib/core/RouteGuard.js.map +1 -1
  24. package/dist/lib/core/ZudokuContext.d.ts +4 -0
  25. package/dist/lib/core/ZudokuContext.js.map +1 -1
  26. package/dist/lib/plugins/api-catalog/Catalog.d.ts +3 -1
  27. package/dist/lib/plugins/api-catalog/Catalog.js +7 -4
  28. package/dist/lib/plugins/api-catalog/Catalog.js.map +1 -1
  29. package/dist/lib/plugins/api-catalog/index.js +1 -1
  30. package/dist/lib/plugins/api-catalog/index.js.map +1 -1
  31. package/dist/lib/plugins/markdown/MdxPage.js +1 -1
  32. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  33. package/dist/lib/plugins/openapi/OperationList.d.ts +1 -1
  34. package/dist/lib/plugins/openapi/OperationList.js +5 -1
  35. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  36. package/dist/lib/plugins/openapi/OperationListItem.d.ts +1 -1
  37. package/dist/lib/plugins/openapi/OperationListItem.js +6 -3
  38. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  39. package/dist/lib/plugins/openapi/ParameterList.d.ts +2 -1
  40. package/dist/lib/plugins/openapi/ParameterList.js +3 -2
  41. package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
  42. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +3 -1
  43. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  44. package/dist/lib/plugins/openapi/Sidecar.js +1 -1
  45. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  46. package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
  47. package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
  48. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  49. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +1 -0
  50. package/dist/lib/plugins/openapi/graphql/graphql.js +2 -0
  51. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  52. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.d.ts +2 -2
  53. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +1 -5
  54. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
  55. package/dist/lib/plugins/openapi/playground/Headers.js +1 -1
  56. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  57. package/dist/lib/plugins/openapi/playground/IdentityDialog.d.ts +11 -0
  58. package/dist/lib/plugins/openapi/playground/IdentityDialog.js +14 -0
  59. package/dist/lib/plugins/openapi/playground/IdentityDialog.js.map +1 -0
  60. package/dist/lib/plugins/openapi/playground/IdentitySelector.d.ts +7 -0
  61. package/dist/lib/plugins/openapi/playground/IdentitySelector.js +10 -0
  62. package/dist/lib/plugins/openapi/playground/IdentitySelector.js.map +1 -0
  63. package/dist/lib/plugins/openapi/playground/PathParams.d.ts +3 -2
  64. package/dist/lib/plugins/openapi/playground/PathParams.js +3 -2
  65. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  66. package/dist/lib/plugins/openapi/playground/Playground.d.ts +13 -2
  67. package/dist/lib/plugins/openapi/playground/Playground.js +80 -26
  68. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  69. package/dist/lib/plugins/openapi/playground/QueryParams.js +1 -1
  70. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  71. package/dist/lib/plugins/openapi/playground/RequestLoginDialog.d.ts +7 -0
  72. package/dist/lib/plugins/openapi/playground/RequestLoginDialog.js +8 -0
  73. package/dist/lib/plugins/openapi/playground/RequestLoginDialog.js.map +1 -0
  74. package/dist/lib/plugins/openapi/playground/rememberedIdentity.d.ts +17 -0
  75. package/dist/lib/plugins/openapi/playground/rememberedIdentity.js +11 -0
  76. package/dist/lib/plugins/openapi/playground/rememberedIdentity.js.map +1 -0
  77. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +19 -13
  78. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  79. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +6 -4
  80. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +4 -3
  81. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -1
  82. package/dist/lib/plugins/search-pagefind/PagefindSearch.d.ts +6 -0
  83. package/dist/lib/plugins/search-pagefind/PagefindSearch.js +66 -0
  84. package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -0
  85. package/dist/lib/plugins/search-pagefind/ResultList.d.ts +8 -0
  86. package/dist/lib/plugins/search-pagefind/ResultList.js +31 -0
  87. package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -0
  88. package/dist/lib/plugins/search-pagefind/get-results.d.ts +3 -0
  89. package/dist/lib/plugins/search-pagefind/get-results.js +37 -0
  90. package/dist/lib/plugins/search-pagefind/get-results.js.map +1 -0
  91. package/dist/lib/plugins/search-pagefind/index.d.ts +8 -0
  92. package/dist/lib/plugins/search-pagefind/index.js +9 -0
  93. package/dist/lib/plugins/search-pagefind/index.js.map +1 -0
  94. package/dist/lib/plugins/search-pagefind/types.d.ts +85 -0
  95. package/dist/lib/plugins/search-pagefind/types.js +2 -0
  96. package/dist/lib/plugins/search-pagefind/types.js.map +1 -0
  97. package/dist/lib/ui/Checkbox.d.ts +2 -8
  98. package/dist/lib/ui/Checkbox.js +1 -13
  99. package/dist/lib/ui/Checkbox.js.map +1 -1
  100. package/dist/lib/ui/Command.d.ts +13 -7
  101. package/dist/lib/ui/Command.js +2 -2
  102. package/dist/lib/ui/Command.js.map +1 -1
  103. package/dist/lib/ui/Select.js +1 -1
  104. package/dist/lib/ui/Select.js.map +1 -1
  105. package/dist/lib/ui/SyntaxHighlight.d.ts +2 -1
  106. package/dist/lib/ui/SyntaxHighlight.js +19 -15
  107. package/dist/lib/ui/SyntaxHighlight.js.map +1 -1
  108. package/dist/lib/util/MdxComponents.d.ts +1 -1
  109. package/dist/lib/util/MdxComponents.js +2 -2
  110. package/dist/lib/util/MdxComponents.js.map +1 -1
  111. package/dist/lib/util/useScrollToAnchor.js +6 -8
  112. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  113. package/dist/vite/build.js +4 -0
  114. package/dist/vite/build.js.map +1 -1
  115. package/dist/vite/config.js +7 -2
  116. package/dist/vite/config.js.map +1 -1
  117. package/dist/vite/dev-server.js +8 -0
  118. package/dist/vite/dev-server.js.map +1 -1
  119. package/dist/vite/pagefind.d.ts +4 -0
  120. package/dist/vite/pagefind.js +15 -0
  121. package/dist/vite/pagefind.js.map +1 -0
  122. package/dist/vite/plugin-component.js +4 -0
  123. package/dist/vite/plugin-component.js.map +1 -1
  124. package/dist/vite/plugin-search.js +4 -0
  125. package/dist/vite/plugin-search.js.map +1 -1
  126. package/dist/vite/prerender/prerender.js +1 -1
  127. package/dist/vite/prerender/prerender.js.map +1 -1
  128. package/dist/vite/sitemap.js +2 -1
  129. package/dist/vite/sitemap.js.map +1 -1
  130. package/lib/{AuthenticationPlugin-CiO1FM6Q.js → AuthenticationPlugin-4ip08maU.js} +3 -3
  131. package/lib/{AuthenticationPlugin-CiO1FM6Q.js.map → AuthenticationPlugin-4ip08maU.js.map} +1 -1
  132. package/lib/Callout-B_sEhkYd.js +211 -0
  133. package/lib/Callout-B_sEhkYd.js.map +1 -0
  134. package/lib/{Dialog-DIKGQxQc.js → Dialog-sbgekbjb.js} +47 -32
  135. package/lib/{Dialog-DIKGQxQc.js.map → Dialog-sbgekbjb.js.map} +1 -1
  136. package/lib/{Markdown-DePfm7oQ.js → Markdown-DZXjQjpH.js} +4099 -3848
  137. package/lib/Markdown-DZXjQjpH.js.map +1 -0
  138. package/lib/MdxPage-52vRwa_7.js +200 -0
  139. package/lib/MdxPage-52vRwa_7.js.map +1 -0
  140. package/lib/{OasProvider-SzD9mHJc.js → OasProvider-CR2nG1Eg.js} +4 -4
  141. package/lib/{OasProvider-SzD9mHJc.js.map → OasProvider-CR2nG1Eg.js.map} +1 -1
  142. package/lib/{OperationList-DDs9NblY.js → OperationList-DndcCJUG.js} +2069 -1983
  143. package/lib/OperationList-DndcCJUG.js.map +1 -0
  144. package/lib/{Select-Dqtcn53H.js → Select-FAYHOYTy.js} +4 -4
  145. package/lib/{Select-Dqtcn53H.js.map → Select-FAYHOYTy.js.map} +1 -1
  146. package/lib/{SlotletProvider-DdtIOUi6.js → SlotletProvider-TydSHROc.js} +4 -4
  147. package/lib/{SlotletProvider-DdtIOUi6.js.map → SlotletProvider-TydSHROc.js.map} +1 -1
  148. package/lib/{chunk-IR6S3I6Y-D_3UmFIn.js → chunk-HA7DTUK3-ZGg2W6yV.js} +277 -277
  149. package/lib/chunk-HA7DTUK3-ZGg2W6yV.js.map +1 -0
  150. package/lib/hook-CfCFKZ-2.js +350 -0
  151. package/lib/hook-CfCFKZ-2.js.map +1 -0
  152. package/lib/index-DK7IuUyR.js +2201 -0
  153. package/lib/index-DK7IuUyR.js.map +1 -0
  154. package/lib/{index.esm-CQHE3GEU.js → index.esm-CltAN0Tf.js} +259 -239
  155. package/lib/index.esm-CltAN0Tf.js.map +1 -0
  156. package/lib/{mutation-EclmI0is.js → mutation-B81DztCT.js} +2 -2
  157. package/lib/{mutation-EclmI0is.js.map → mutation-B81DztCT.js.map} +1 -1
  158. package/lib/objectEntries-BS7aAgOm.js +12 -0
  159. package/lib/objectEntries-BS7aAgOm.js.map +1 -0
  160. package/lib/ui/Checkbox.js +15 -25
  161. package/lib/ui/Checkbox.js.map +1 -1
  162. package/lib/ui/Command.js +96 -70
  163. package/lib/ui/Command.js.map +1 -1
  164. package/lib/ui/Select.js +1 -1
  165. package/lib/ui/Select.js.map +1 -1
  166. package/lib/ui/SyntaxHighlight.js +483 -502
  167. package/lib/ui/SyntaxHighlight.js.map +1 -1
  168. package/lib/{useExposedProps-RIvey2Oy.js → useExposedProps-BslIn-FE.js} +2 -2
  169. package/lib/{useExposedProps-RIvey2Oy.js.map → useExposedProps-BslIn-FE.js.map} +1 -1
  170. package/lib/useQuery-CQUwWR9i.js +1137 -0
  171. package/lib/useQuery-CQUwWR9i.js.map +1 -0
  172. package/lib/zudoku.auth-auth0.js +1 -1
  173. package/lib/zudoku.auth-clerk.js +29 -29
  174. package/lib/zudoku.auth-clerk.js.map +1 -1
  175. package/lib/zudoku.auth-openid.js +3 -3
  176. package/lib/zudoku.components.js +146 -149
  177. package/lib/zudoku.components.js.map +1 -1
  178. package/lib/zudoku.hooks.js +1 -1
  179. package/lib/zudoku.plugin-api-catalog.js +87 -71
  180. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  181. package/lib/zudoku.plugin-api-keys.js +16 -15
  182. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  183. package/lib/zudoku.plugin-custom-pages.js +2 -2
  184. package/lib/zudoku.plugin-markdown.js +1 -1
  185. package/lib/zudoku.plugin-openapi.js +3 -3
  186. package/lib/zudoku.plugin-redirect.js +1 -1
  187. package/lib/zudoku.plugin-search-pagefind.js +204 -0
  188. package/lib/zudoku.plugin-search-pagefind.js.map +1 -0
  189. package/package.json +10 -5
  190. package/src/lib/authentication/hook.ts +12 -1
  191. package/src/lib/authentication/providers/clerk.tsx +10 -6
  192. package/src/lib/components/AnchorLink.tsx +7 -7
  193. package/src/lib/components/Banner.tsx +1 -0
  194. package/src/lib/components/Heading.tsx +1 -1
  195. package/src/lib/components/Layout.tsx +1 -0
  196. package/src/lib/components/navigation/SidebarItem.tsx +8 -23
  197. package/src/lib/core/RouteGuard.tsx +2 -1
  198. package/src/lib/core/ZudokuContext.ts +4 -0
  199. package/src/lib/plugins/api-catalog/Catalog.tsx +23 -7
  200. package/src/lib/plugins/api-catalog/index.tsx +1 -0
  201. package/src/lib/plugins/markdown/MdxPage.tsx +5 -1
  202. package/src/lib/plugins/openapi/OperationList.tsx +83 -31
  203. package/src/lib/plugins/openapi/OperationListItem.tsx +107 -86
  204. package/src/lib/plugins/openapi/ParameterList.tsx +4 -0
  205. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +7 -0
  206. package/src/lib/plugins/openapi/Sidecar.tsx +1 -0
  207. package/src/lib/plugins/openapi/graphql/gql.ts +3 -3
  208. package/src/lib/plugins/openapi/graphql/graphql.ts +3 -0
  209. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +30 -32
  210. package/src/lib/plugins/openapi/playground/Headers.tsx +0 -1
  211. package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +74 -0
  212. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +54 -0
  213. package/src/lib/plugins/openapi/playground/PathParams.tsx +8 -2
  214. package/src/lib/plugins/openapi/playground/Playground.tsx +175 -88
  215. package/src/lib/plugins/openapi/playground/QueryParams.tsx +0 -1
  216. package/src/lib/plugins/openapi/playground/RequestLoginDialog.tsx +51 -0
  217. package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -0
  218. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +24 -4
  219. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +66 -45
  220. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +135 -0
  221. package/src/lib/plugins/search-pagefind/ResultList.tsx +104 -0
  222. package/src/lib/plugins/search-pagefind/get-results.tsx +54 -0
  223. package/src/lib/plugins/search-pagefind/index.tsx +21 -0
  224. package/src/lib/plugins/search-pagefind/types.ts +118 -0
  225. package/src/lib/ui/Checkbox.tsx +8 -24
  226. package/src/lib/ui/Command.tsx +25 -3
  227. package/src/lib/ui/Select.tsx +1 -1
  228. package/src/lib/ui/SyntaxHighlight.tsx +94 -96
  229. package/src/lib/util/MdxComponents.tsx +2 -2
  230. package/src/lib/util/useScrollToAnchor.ts +8 -8
  231. package/lib/Markdown-DePfm7oQ.js.map +0 -1
  232. package/lib/MdxPage-DZTt9ld7.js +0 -193
  233. package/lib/MdxPage-DZTt9ld7.js.map +0 -1
  234. package/lib/OperationList-DDs9NblY.js.map +0 -1
  235. package/lib/chunk-IR6S3I6Y-D_3UmFIn.js.map +0 -1
  236. package/lib/hook-CN__aZIt.js +0 -1464
  237. package/lib/hook-CN__aZIt.js.map +0 -1
  238. package/lib/index-CibzSNks.js +0 -2100
  239. package/lib/index-CibzSNks.js.map +0 -1
  240. package/lib/index.esm-CQHE3GEU.js.map +0 -1
  241. package/lib/objectEntries-yMIkr2mI.js +0 -5
  242. package/lib/objectEntries-yMIkr2mI.js.map +0 -1
  243. package/lib/useScrollToAnchor-C7ilRSts.js +0 -290
  244. package/lib/useScrollToAnchor-C7ilRSts.js.map +0 -1
@@ -1,36 +1,20 @@
1
1
  import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
2
- import { cva, type VariantProps } from "class-variance-authority";
3
2
  import { Check } from "lucide-react";
4
3
  import * as React from "react";
5
4
 
6
5
  import { cn } from "../util/cn.js";
7
6
 
8
- const checkboxVariants = cva(
9
- "peer h-4 w-4 shrink-0 rounded-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:text-primary",
10
- {
11
- variants: {
12
- variant: {
13
- default: "border border-primary data-[state=checked]:bg-primary",
14
- outline: "border border-input data-[state=checked]:bg-accent",
15
- },
16
- },
17
- defaultVariants: {
18
- variant: "default",
19
- },
20
- },
21
- );
22
-
23
- interface CheckboxProps
24
- extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,
25
- VariantProps<typeof checkboxVariants> {}
26
-
27
7
  const Checkbox = React.forwardRef<
28
8
  React.ElementRef<typeof CheckboxPrimitive.Root>,
29
- CheckboxProps
30
- >(({ className, variant, ...props }, ref) => (
9
+ React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>
10
+ >(({ className, ...props }, ref) => (
31
11
  <CheckboxPrimitive.Root
32
12
  ref={ref}
33
- className={cn(checkboxVariants({ variant, className }))}
13
+ className={cn(
14
+ "peer h-4 w-4 shrink-0 rounded-[min(6px,var(--radius)-4px)] ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:text-primary",
15
+ "border border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary",
16
+ className,
17
+ )}
34
18
  {...props}
35
19
  >
36
20
  <CheckboxPrimitive.Indicator
@@ -42,4 +26,4 @@ const Checkbox = React.forwardRef<
42
26
  ));
43
27
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
44
28
 
45
- export { Checkbox, type CheckboxProps };
29
+ export { Checkbox };
@@ -2,6 +2,7 @@ import { type DialogProps } from "@radix-ui/react-dialog";
2
2
  import { Command as CommandPrimitive } from "cmdk";
3
3
  import { Search } from "lucide-react";
4
4
  import * as React from "react";
5
+ import { ComponentPropsWithoutRef } from "react";
5
6
  import { Dialog, DialogContent } from "zudoku/ui/Dialog.js";
6
7
  import { cn } from "../util/cn.js";
7
8
 
@@ -20,11 +21,32 @@ const Command = React.forwardRef<
20
21
  ));
21
22
  Command.displayName = CommandPrimitive.displayName;
22
23
 
23
- const CommandDialog = ({ children, ...props }: DialogProps) => {
24
+ const CommandDialog = ({
25
+ children,
26
+ command,
27
+ content,
28
+ ...props
29
+ }: DialogProps & {
30
+ command?: ComponentPropsWithoutRef<typeof CommandPrimitive>;
31
+ content?: ComponentPropsWithoutRef<typeof DialogContent>;
32
+ }) => {
24
33
  return (
25
34
  <Dialog {...props}>
26
- <DialogContent className="overflow-hidden p-0 shadow-lg">
27
- <Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
35
+ <DialogContent
36
+ {...content}
37
+ className={cn(
38
+ "overflow-hidden p-0 shadow-lg top-[15vh] translate-y-[0%]",
39
+ content?.className,
40
+ )}
41
+ aria-describedby={undefined}
42
+ >
43
+ <Command
44
+ {...command}
45
+ className={cn(
46
+ "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5",
47
+ command?.className,
48
+ )}
49
+ >
28
50
  {children}
29
51
  </Command>
30
52
  </DialogContent>
@@ -115,7 +115,7 @@ const SelectItem = React.forwardRef<
115
115
  <SelectPrimitive.Item
116
116
  ref={ref}
117
117
  className={cn(
118
- "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
118
+ "relative flex w-full cursor-default select-none items-center py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
119
119
  className,
120
120
  )}
121
121
  {...props}
@@ -30,7 +30,7 @@ void import("prismjs/components/prism-javascript.min.js");
30
30
  void import("prismjs/components/prism-typescript.min.js");
31
31
 
32
32
  import { useTheme } from "next-themes";
33
- import { useState } from "react";
33
+ import { memo, useState } from "react";
34
34
  import { ClientOnly } from "../components/ClientOnly.js";
35
35
  import { cn } from "../util/cn.js";
36
36
 
@@ -45,18 +45,20 @@ export type SyntaxHighlightProps = {
45
45
  code?: string;
46
46
  showCopy?: "hover" | "always" | "never";
47
47
  showCopyText?: boolean;
48
+ disabled?: boolean;
48
49
  } & Omit<HighlightProps, "children" | "language">;
49
50
 
50
51
  const remapLang = {
51
52
  mdx: "md",
52
53
  } as Record<string, string>;
53
54
 
54
- export const SyntaxHighlight = ({
55
+ const SyntaxHighlightInner = ({
55
56
  language = "plain",
56
57
  showCopy = "hover",
57
58
  showCopyText,
58
59
  title,
59
60
  children,
61
+ disabled,
60
62
  ...props
61
63
  }: SyntaxHighlightProps) => {
62
64
  const { resolvedTheme } = useTheme();
@@ -75,34 +77,84 @@ export const SyntaxHighlight = ({
75
77
  const themeColorClasses =
76
78
  "bg-[#f6f8fa] text-[#393a34] dark:bg-[#1e1e1e] dark:text-[#9cdcfe]";
77
79
 
78
- return (
79
- <ClientOnly
80
- fallback={
81
- <div className="relative group">
82
- {title && (
83
- <div className="text-xs text-muted-foreground absolute top-2 font-mono border-b w-full pb-2 px-4 ">
84
- {title}
85
- </div>
80
+ const Wrapper = ({
81
+ children,
82
+ className,
83
+ style,
84
+ }: {
85
+ children: React.ReactNode;
86
+ className?: string;
87
+ style?: React.CSSProperties;
88
+ }) => (
89
+ <div className="relative group">
90
+ {title && (
91
+ <div className="text-xs text-muted-foreground absolute top-2 font-mono border-b w-full pb-2 px-4 ">
92
+ {title}
93
+ </div>
94
+ )}
95
+ <pre
96
+ className={cn(
97
+ "relative scrollbar overflow-x-auto",
98
+ props.className,
99
+ props.noBackground ? "!bg-transparent" : themeColorClasses,
100
+ props.wrapLines && "whitespace-pre-wrap break-words",
101
+ title && "pt-10",
102
+ className,
103
+ )}
104
+ style={style}
105
+ >
106
+ {children}
107
+ </pre>
108
+ {props.showLanguageIndicator && (
109
+ <span className="absolute top-1.5 right-3 text-[11px] font-mono text-muted-foreground transition group-hover:opacity-0">
110
+ {language}
111
+ </span>
112
+ )}
113
+ {showCopy !== "never" && (
114
+ <button
115
+ type="button"
116
+ aria-label="Copy code"
117
+ title="Copy code"
118
+ className={cn(
119
+ "absolute top-2 right-2 p-2 hover:outline hover:outline-border/75 dark:hover:outline-border rounded-md text-sm text-muted-foreground transition",
120
+ showCopy === "hover"
121
+ ? "opacity-0 group-hover:opacity-100 group-hover:bg-zinc-100 group-hover:dark:bg-zinc-700"
122
+ : "bg-zinc-100 dark:bg-zinc-700",
123
+ showCopyText && "flex gap-2 items-center font-medium",
86
124
  )}
87
- <pre
88
- className={cn(
89
- "relative scrollbar overflow-x-auto",
90
- props.className,
91
- props.noBackground ? "!bg-transparent" : themeColorClasses,
92
- props.wrapLines && "whitespace-pre-wrap break-words",
93
- title && "pt-10",
94
- )}
95
- >
96
- {code}
97
- </pre>
98
- {props.showLanguageIndicator && (
99
- <span className="absolute top-1.5 right-3 text-[11px] font-mono text-muted-foreground transition group-hover:opacity-0">
100
- {language}
101
- </span>
125
+ disabled={isCopied}
126
+ onClick={() => {
127
+ setIsCopied(true);
128
+ void navigator.clipboard.writeText(code);
129
+ setTimeout(() => setIsCopied(false), 2000);
130
+ }}
131
+ >
132
+ {isCopied ? (
133
+ <CheckIcon
134
+ className="text-emerald-600"
135
+ size={16}
136
+ strokeWidth={2.5}
137
+ absoluteStrokeWidth
138
+ />
139
+ ) : (
140
+ <CopyIcon size={16} />
102
141
  )}
103
- </div>
104
- }
105
- >
142
+ {showCopyText && "Copy"}
143
+ </button>
144
+ )}
145
+ </div>
146
+ );
147
+
148
+ if (disabled) {
149
+ return (
150
+ <ClientOnly fallback={<Wrapper>{code}</Wrapper>}>
151
+ <Wrapper>{code}</Wrapper>
152
+ </ClientOnly>
153
+ );
154
+ }
155
+
156
+ return (
157
+ <ClientOnly fallback={<Wrapper>{code}</Wrapper>}>
106
158
  <Highlight
107
159
  theme={highlightTheme}
108
160
  language={remapLang[language] ?? language}
@@ -110,77 +162,23 @@ export const SyntaxHighlight = ({
110
162
  code={code}
111
163
  >
112
164
  {({ className, style, tokens, getLineProps, getTokenProps }) => (
113
- <div className="relative group">
114
- {title && (
115
- <div className="text-xs text-muted-foreground absolute top-2 font-mono border-b w-full pb-2 px-4 ">
116
- {title}
165
+ <Wrapper className={className} style={style}>
166
+ {tokens.map((line, i) => (
167
+ // eslint-disable-next-line react/no-array-index-key
168
+ <div key={i} {...getLineProps({ line })}>
169
+ {line.map((token, key) => (
170
+ // eslint-disable-next-line react/no-array-index-key
171
+ <span key={key} {...getTokenProps({ token })} />
172
+ ))}
117
173
  </div>
118
- )}
119
- <pre
120
- className={cn(
121
- "relative scrollbar overflow-x-auto",
122
- className,
123
- props.className,
124
- props.noBackground && "!bg-transparent",
125
- props.wrapLines && "whitespace-pre-wrap break-words",
126
- title && "pt-10",
127
- )}
128
- style={style}
129
- >
130
- {tokens.map((line, i) => (
131
- // eslint-disable-next-line react/no-array-index-key
132
- <div key={i} {...getLineProps({ line })}>
133
- {line.map((token, key) => (
134
- // eslint-disable-next-line react/no-array-index-key
135
- <span key={key} {...getTokenProps({ token })} />
136
- ))}
137
- </div>
138
- ))}
139
- </pre>
140
- {props.showLanguageIndicator && (
141
- <span className="absolute top-1.5 right-3 text-[11px] font-mono text-muted-foreground transition group-hover:opacity-0">
142
- {language}
143
- </span>
144
- )}
145
- {showCopy !== "never" && (
146
- <button
147
- type="button"
148
- aria-label="Copy code"
149
- title="Copy code"
150
- className={cn(
151
- "absolute top-2 right-2 p-2 hover:outline hover:outline-border/75 dark:hover:outline-border rounded-md text-sm text-muted-foreground transition",
152
- showCopy === "hover"
153
- ? "opacity-0 group-hover:opacity-100 group-hover:bg-zinc-100 group-hover:dark:bg-zinc-700"
154
- : "bg-zinc-100 dark:bg-zinc-700",
155
- showCopyText && "flex gap-2 items-center font-medium",
156
- )}
157
- disabled={isCopied}
158
- onClick={() => {
159
- setIsCopied(true);
160
- void navigator.clipboard.writeText(
161
- tokens
162
- .map((l) => l.map(({ content }) => content).join(""))
163
- .join("\n"),
164
- );
165
- setTimeout(() => setIsCopied(false), 2000);
166
- }}
167
- >
168
- {isCopied ? (
169
- <CheckIcon
170
- className="text-emerald-600"
171
- size={16}
172
- strokeWidth={2.5}
173
- absoluteStrokeWidth
174
- />
175
- ) : (
176
- <CopyIcon size={16} />
177
- )}
178
- {showCopyText && "Copy"}
179
- </button>
180
- )}
181
- </div>
174
+ ))}
175
+ </Wrapper>
182
176
  )}
183
177
  </Highlight>
184
178
  </ClientOnly>
185
179
  );
186
180
  };
181
+
182
+ export const SyntaxHighlight = memo(SyntaxHighlightInner);
183
+
184
+ SyntaxHighlight.displayName = "SyntaxHighlight";
@@ -1,5 +1,5 @@
1
1
  import { type MDXComponents } from "mdx/types.js";
2
- import { Link } from "react-router";
2
+ import { AnchorLink } from "../components/AnchorLink.js";
3
3
  import { Heading } from "../components/Heading.js";
4
4
  import { InlineCode } from "../components/InlineCode.js";
5
5
  import { Callout } from "../ui/Callout.js";
@@ -47,7 +47,7 @@ export const MdxComponents = {
47
47
  ),
48
48
  a: ({ href, node, ...props }) =>
49
49
  href && !href.startsWith("http") ? (
50
- <Link to={href} relative="path" {...props} />
50
+ <AnchorLink to={href} relative="path" {...props} />
51
51
  ) : (
52
52
  <a href={href} target="_blank" {...props} rel="noreferrer" />
53
53
  ),
@@ -9,21 +9,21 @@ export const useScrollToHash = () => {
9
9
 
10
10
  const scrollToHash = useCallback(
11
11
  (hash: string) => {
12
- const cleanHash = hash
13
- .replace(/^#/, "")
14
- // Operation list items might have subdivisions that the sidebar doesn't show.
15
- // The subdivisions are separated by a slash so we need to remove everything before the slash to get the sidebar correct item.
16
- .split("/")
17
- .at(0)!;
12
+ const cleanHash = hash.replace(/^#/, "");
13
+
14
+ // Operation list items might have subdivisions that the sidebar doesn't show.
15
+ // The subdivisions are separated by a slash so we need to remove everything before the slash to get the sidebar correct item.
16
+ const linkHash = cleanHash.split("/").at(0)!;
18
17
  const element = document.getElementById(decodeURIComponent(cleanHash));
18
+
19
19
  const link = document.querySelector(
20
- `[${DATA_ANCHOR_ATTR}="${cleanHash}"]`,
20
+ `[${DATA_ANCHOR_ATTR}="${linkHash}"]`,
21
21
  );
22
22
 
23
23
  if (element) {
24
24
  element.scrollIntoView();
25
25
  scrollIntoViewIfNeeded(link);
26
- requestIdleCallback(() => setActiveAnchor(cleanHash));
26
+ requestIdleCallback(() => setActiveAnchor(linkHash));
27
27
  return true;
28
28
  }
29
29