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.
- package/dist/config/validators/common.d.ts +572 -354
- package/dist/config/validators/common.js +26 -8
- package/dist/config/validators/common.js.map +1 -1
- package/dist/config/validators/validate.d.ts +254 -167
- package/dist/lib/authentication/hook.d.ts +1 -0
- package/dist/lib/authentication/hook.js +11 -1
- package/dist/lib/authentication/hook.js.map +1 -1
- package/dist/lib/authentication/providers/clerk.js +6 -6
- package/dist/lib/authentication/providers/clerk.js.map +1 -1
- package/dist/lib/components/AnchorLink.d.ts +2 -2
- package/dist/lib/components/AnchorLink.js +4 -4
- package/dist/lib/components/AnchorLink.js.map +1 -1
- package/dist/lib/components/Banner.js +1 -1
- package/dist/lib/components/Banner.js.map +1 -1
- package/dist/lib/components/Heading.d.ts +2 -2
- package/dist/lib/components/Layout.js +1 -1
- package/dist/lib/components/Layout.js.map +1 -1
- package/dist/lib/components/context/ZudokuContext.d.ts +1 -1
- package/dist/lib/components/index.d.ts +1 -0
- package/dist/lib/components/navigation/SidebarItem.js +6 -5
- package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
- package/dist/lib/core/RouteGuard.js +2 -1
- package/dist/lib/core/RouteGuard.js.map +1 -1
- package/dist/lib/core/ZudokuContext.d.ts +4 -0
- package/dist/lib/core/ZudokuContext.js.map +1 -1
- package/dist/lib/plugins/api-catalog/Catalog.d.ts +3 -1
- package/dist/lib/plugins/api-catalog/Catalog.js +7 -4
- package/dist/lib/plugins/api-catalog/Catalog.js.map +1 -1
- package/dist/lib/plugins/api-catalog/index.js +1 -1
- package/dist/lib/plugins/api-catalog/index.js.map +1 -1
- package/dist/lib/plugins/markdown/MdxPage.js +1 -1
- package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationList.d.ts +1 -1
- package/dist/lib/plugins/openapi/OperationList.js +5 -1
- package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.d.ts +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.js +6 -3
- package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
- package/dist/lib/plugins/openapi/ParameterList.d.ts +2 -1
- package/dist/lib/plugins/openapi/ParameterList.js +3 -2
- package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
- package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +3 -1
- package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
- package/dist/lib/plugins/openapi/Sidecar.js +1 -1
- package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/graphql.d.ts +1 -0
- package/dist/lib/plugins/openapi/graphql/graphql.js +2 -0
- package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/ExamplesDropdown.d.ts +2 -2
- package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +1 -5
- package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/Headers.js +1 -1
- package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/IdentityDialog.d.ts +11 -0
- package/dist/lib/plugins/openapi/playground/IdentityDialog.js +14 -0
- package/dist/lib/plugins/openapi/playground/IdentityDialog.js.map +1 -0
- package/dist/lib/plugins/openapi/playground/IdentitySelector.d.ts +7 -0
- package/dist/lib/plugins/openapi/playground/IdentitySelector.js +10 -0
- package/dist/lib/plugins/openapi/playground/IdentitySelector.js.map +1 -0
- package/dist/lib/plugins/openapi/playground/PathParams.d.ts +3 -2
- package/dist/lib/plugins/openapi/playground/PathParams.js +3 -2
- package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/Playground.d.ts +13 -2
- package/dist/lib/plugins/openapi/playground/Playground.js +80 -26
- package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/QueryParams.js +1 -1
- package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/RequestLoginDialog.d.ts +7 -0
- package/dist/lib/plugins/openapi/playground/RequestLoginDialog.js +8 -0
- package/dist/lib/plugins/openapi/playground/RequestLoginDialog.js.map +1 -0
- package/dist/lib/plugins/openapi/playground/rememberedIdentity.d.ts +17 -0
- package/dist/lib/plugins/openapi/playground/rememberedIdentity.js +11 -0
- package/dist/lib/plugins/openapi/playground/rememberedIdentity.js.map +1 -0
- package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +19 -13
- package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +6 -4
- package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +4 -3
- package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -1
- package/dist/lib/plugins/search-pagefind/PagefindSearch.d.ts +6 -0
- package/dist/lib/plugins/search-pagefind/PagefindSearch.js +66 -0
- package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -0
- package/dist/lib/plugins/search-pagefind/ResultList.d.ts +8 -0
- package/dist/lib/plugins/search-pagefind/ResultList.js +31 -0
- package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -0
- package/dist/lib/plugins/search-pagefind/get-results.d.ts +3 -0
- package/dist/lib/plugins/search-pagefind/get-results.js +37 -0
- package/dist/lib/plugins/search-pagefind/get-results.js.map +1 -0
- package/dist/lib/plugins/search-pagefind/index.d.ts +8 -0
- package/dist/lib/plugins/search-pagefind/index.js +9 -0
- package/dist/lib/plugins/search-pagefind/index.js.map +1 -0
- package/dist/lib/plugins/search-pagefind/types.d.ts +85 -0
- package/dist/lib/plugins/search-pagefind/types.js +2 -0
- package/dist/lib/plugins/search-pagefind/types.js.map +1 -0
- package/dist/lib/ui/Checkbox.d.ts +2 -8
- package/dist/lib/ui/Checkbox.js +1 -13
- package/dist/lib/ui/Checkbox.js.map +1 -1
- package/dist/lib/ui/Command.d.ts +13 -7
- package/dist/lib/ui/Command.js +2 -2
- package/dist/lib/ui/Command.js.map +1 -1
- package/dist/lib/ui/Select.js +1 -1
- package/dist/lib/ui/Select.js.map +1 -1
- package/dist/lib/ui/SyntaxHighlight.d.ts +2 -1
- package/dist/lib/ui/SyntaxHighlight.js +19 -15
- package/dist/lib/ui/SyntaxHighlight.js.map +1 -1
- package/dist/lib/util/MdxComponents.d.ts +1 -1
- package/dist/lib/util/MdxComponents.js +2 -2
- package/dist/lib/util/MdxComponents.js.map +1 -1
- package/dist/lib/util/useScrollToAnchor.js +6 -8
- package/dist/lib/util/useScrollToAnchor.js.map +1 -1
- package/dist/vite/build.js +4 -0
- package/dist/vite/build.js.map +1 -1
- package/dist/vite/config.js +7 -2
- package/dist/vite/config.js.map +1 -1
- package/dist/vite/dev-server.js +8 -0
- package/dist/vite/dev-server.js.map +1 -1
- package/dist/vite/pagefind.d.ts +4 -0
- package/dist/vite/pagefind.js +15 -0
- package/dist/vite/pagefind.js.map +1 -0
- package/dist/vite/plugin-component.js +4 -0
- package/dist/vite/plugin-component.js.map +1 -1
- package/dist/vite/plugin-search.js +4 -0
- package/dist/vite/plugin-search.js.map +1 -1
- package/dist/vite/prerender/prerender.js +1 -1
- package/dist/vite/prerender/prerender.js.map +1 -1
- package/dist/vite/sitemap.js +2 -1
- package/dist/vite/sitemap.js.map +1 -1
- package/lib/{AuthenticationPlugin-CiO1FM6Q.js → AuthenticationPlugin-4ip08maU.js} +3 -3
- package/lib/{AuthenticationPlugin-CiO1FM6Q.js.map → AuthenticationPlugin-4ip08maU.js.map} +1 -1
- package/lib/Callout-B_sEhkYd.js +211 -0
- package/lib/Callout-B_sEhkYd.js.map +1 -0
- package/lib/{Dialog-DIKGQxQc.js → Dialog-sbgekbjb.js} +47 -32
- package/lib/{Dialog-DIKGQxQc.js.map → Dialog-sbgekbjb.js.map} +1 -1
- package/lib/{Markdown-DePfm7oQ.js → Markdown-DZXjQjpH.js} +4099 -3848
- package/lib/Markdown-DZXjQjpH.js.map +1 -0
- package/lib/MdxPage-52vRwa_7.js +200 -0
- package/lib/MdxPage-52vRwa_7.js.map +1 -0
- package/lib/{OasProvider-SzD9mHJc.js → OasProvider-CR2nG1Eg.js} +4 -4
- package/lib/{OasProvider-SzD9mHJc.js.map → OasProvider-CR2nG1Eg.js.map} +1 -1
- package/lib/{OperationList-DDs9NblY.js → OperationList-DndcCJUG.js} +2069 -1983
- package/lib/OperationList-DndcCJUG.js.map +1 -0
- package/lib/{Select-Dqtcn53H.js → Select-FAYHOYTy.js} +4 -4
- package/lib/{Select-Dqtcn53H.js.map → Select-FAYHOYTy.js.map} +1 -1
- package/lib/{SlotletProvider-DdtIOUi6.js → SlotletProvider-TydSHROc.js} +4 -4
- package/lib/{SlotletProvider-DdtIOUi6.js.map → SlotletProvider-TydSHROc.js.map} +1 -1
- package/lib/{chunk-IR6S3I6Y-D_3UmFIn.js → chunk-HA7DTUK3-ZGg2W6yV.js} +277 -277
- package/lib/chunk-HA7DTUK3-ZGg2W6yV.js.map +1 -0
- package/lib/hook-CfCFKZ-2.js +350 -0
- package/lib/hook-CfCFKZ-2.js.map +1 -0
- package/lib/index-DK7IuUyR.js +2201 -0
- package/lib/index-DK7IuUyR.js.map +1 -0
- package/lib/{index.esm-CQHE3GEU.js → index.esm-CltAN0Tf.js} +259 -239
- package/lib/index.esm-CltAN0Tf.js.map +1 -0
- package/lib/{mutation-EclmI0is.js → mutation-B81DztCT.js} +2 -2
- package/lib/{mutation-EclmI0is.js.map → mutation-B81DztCT.js.map} +1 -1
- package/lib/objectEntries-BS7aAgOm.js +12 -0
- package/lib/objectEntries-BS7aAgOm.js.map +1 -0
- package/lib/ui/Checkbox.js +15 -25
- package/lib/ui/Checkbox.js.map +1 -1
- package/lib/ui/Command.js +96 -70
- package/lib/ui/Command.js.map +1 -1
- package/lib/ui/Select.js +1 -1
- package/lib/ui/Select.js.map +1 -1
- package/lib/ui/SyntaxHighlight.js +483 -502
- package/lib/ui/SyntaxHighlight.js.map +1 -1
- package/lib/{useExposedProps-RIvey2Oy.js → useExposedProps-BslIn-FE.js} +2 -2
- package/lib/{useExposedProps-RIvey2Oy.js.map → useExposedProps-BslIn-FE.js.map} +1 -1
- package/lib/useQuery-CQUwWR9i.js +1137 -0
- package/lib/useQuery-CQUwWR9i.js.map +1 -0
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-clerk.js +29 -29
- package/lib/zudoku.auth-clerk.js.map +1 -1
- package/lib/zudoku.auth-openid.js +3 -3
- package/lib/zudoku.components.js +146 -149
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.hooks.js +1 -1
- package/lib/zudoku.plugin-api-catalog.js +87 -71
- package/lib/zudoku.plugin-api-catalog.js.map +1 -1
- package/lib/zudoku.plugin-api-keys.js +16 -15
- package/lib/zudoku.plugin-api-keys.js.map +1 -1
- package/lib/zudoku.plugin-custom-pages.js +2 -2
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +3 -3
- package/lib/zudoku.plugin-redirect.js +1 -1
- package/lib/zudoku.plugin-search-pagefind.js +204 -0
- package/lib/zudoku.plugin-search-pagefind.js.map +1 -0
- package/package.json +10 -5
- package/src/lib/authentication/hook.ts +12 -1
- package/src/lib/authentication/providers/clerk.tsx +10 -6
- package/src/lib/components/AnchorLink.tsx +7 -7
- package/src/lib/components/Banner.tsx +1 -0
- package/src/lib/components/Heading.tsx +1 -1
- package/src/lib/components/Layout.tsx +1 -0
- package/src/lib/components/navigation/SidebarItem.tsx +8 -23
- package/src/lib/core/RouteGuard.tsx +2 -1
- package/src/lib/core/ZudokuContext.ts +4 -0
- package/src/lib/plugins/api-catalog/Catalog.tsx +23 -7
- package/src/lib/plugins/api-catalog/index.tsx +1 -0
- package/src/lib/plugins/markdown/MdxPage.tsx +5 -1
- package/src/lib/plugins/openapi/OperationList.tsx +83 -31
- package/src/lib/plugins/openapi/OperationListItem.tsx +107 -86
- package/src/lib/plugins/openapi/ParameterList.tsx +4 -0
- package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +7 -0
- package/src/lib/plugins/openapi/Sidecar.tsx +1 -0
- package/src/lib/plugins/openapi/graphql/gql.ts +3 -3
- package/src/lib/plugins/openapi/graphql/graphql.ts +3 -0
- package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +30 -32
- package/src/lib/plugins/openapi/playground/Headers.tsx +0 -1
- package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +74 -0
- package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +54 -0
- package/src/lib/plugins/openapi/playground/PathParams.tsx +8 -2
- package/src/lib/plugins/openapi/playground/Playground.tsx +175 -88
- package/src/lib/plugins/openapi/playground/QueryParams.tsx +0 -1
- package/src/lib/plugins/openapi/playground/RequestLoginDialog.tsx +51 -0
- package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -0
- package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +24 -4
- package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +66 -45
- package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +135 -0
- package/src/lib/plugins/search-pagefind/ResultList.tsx +104 -0
- package/src/lib/plugins/search-pagefind/get-results.tsx +54 -0
- package/src/lib/plugins/search-pagefind/index.tsx +21 -0
- package/src/lib/plugins/search-pagefind/types.ts +118 -0
- package/src/lib/ui/Checkbox.tsx +8 -24
- package/src/lib/ui/Command.tsx +25 -3
- package/src/lib/ui/Select.tsx +1 -1
- package/src/lib/ui/SyntaxHighlight.tsx +94 -96
- package/src/lib/util/MdxComponents.tsx +2 -2
- package/src/lib/util/useScrollToAnchor.ts +8 -8
- package/lib/Markdown-DePfm7oQ.js.map +0 -1
- package/lib/MdxPage-DZTt9ld7.js +0 -193
- package/lib/MdxPage-DZTt9ld7.js.map +0 -1
- package/lib/OperationList-DDs9NblY.js.map +0 -1
- package/lib/chunk-IR6S3I6Y-D_3UmFIn.js.map +0 -1
- package/lib/hook-CN__aZIt.js +0 -1464
- package/lib/hook-CN__aZIt.js.map +0 -1
- package/lib/index-CibzSNks.js +0 -2100
- package/lib/index-CibzSNks.js.map +0 -1
- package/lib/index.esm-CQHE3GEU.js.map +0 -1
- package/lib/objectEntries-yMIkr2mI.js +0 -5
- package/lib/objectEntries-yMIkr2mI.js.map +0 -1
- package/lib/useScrollToAnchor-C7ilRSts.js +0 -290
- package/lib/useScrollToAnchor-C7ilRSts.js.map +0 -1
package/src/lib/ui/Checkbox.tsx
CHANGED
|
@@ -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
|
-
|
|
30
|
-
>(({ className,
|
|
9
|
+
React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>
|
|
10
|
+
>(({ className, ...props }, ref) => (
|
|
31
11
|
<CheckboxPrimitive.Root
|
|
32
12
|
ref={ref}
|
|
33
|
-
className={cn(
|
|
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
|
|
29
|
+
export { Checkbox };
|
package/src/lib/ui/Command.tsx
CHANGED
|
@@ -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 = ({
|
|
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
|
|
27
|
-
|
|
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>
|
package/src/lib/ui/Select.tsx
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
114
|
-
{
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
<
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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}="${
|
|
20
|
+
`[${DATA_ANCHOR_ATTR}="${linkHash}"]`,
|
|
21
21
|
);
|
|
22
22
|
|
|
23
23
|
if (element) {
|
|
24
24
|
element.scrollIntoView();
|
|
25
25
|
scrollIntoViewIfNeeded(link);
|
|
26
|
-
requestIdleCallback(() => setActiveAnchor(
|
|
26
|
+
requestIdleCallback(() => setActiveAnchor(linkHash));
|
|
27
27
|
return true;
|
|
28
28
|
}
|
|
29
29
|
|