@brainfish-ai/devdoc 0.1.21
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/LICENSE +33 -0
- package/README.md +415 -0
- package/bin/devdoc.js +13 -0
- package/dist/cli/commands/build.d.ts +5 -0
- package/dist/cli/commands/build.js +87 -0
- package/dist/cli/commands/check.d.ts +1 -0
- package/dist/cli/commands/check.js +143 -0
- package/dist/cli/commands/create.d.ts +24 -0
- package/dist/cli/commands/create.js +387 -0
- package/dist/cli/commands/deploy.d.ts +9 -0
- package/dist/cli/commands/deploy.js +433 -0
- package/dist/cli/commands/dev.d.ts +6 -0
- package/dist/cli/commands/dev.js +139 -0
- package/dist/cli/commands/init.d.ts +11 -0
- package/dist/cli/commands/init.js +238 -0
- package/dist/cli/commands/keys.d.ts +12 -0
- package/dist/cli/commands/keys.js +165 -0
- package/dist/cli/commands/start.d.ts +5 -0
- package/dist/cli/commands/start.js +56 -0
- package/dist/cli/commands/upload.d.ts +13 -0
- package/dist/cli/commands/upload.js +238 -0
- package/dist/cli/commands/whoami.d.ts +8 -0
- package/dist/cli/commands/whoami.js +91 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +106 -0
- package/dist/config/index.d.ts +80 -0
- package/dist/config/index.js +133 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.js +13 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +12 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.js +61 -0
- package/dist/utils/paths.d.ts +16 -0
- package/dist/utils/paths.js +50 -0
- package/package.json +51 -0
- package/renderer/app/api/assets/[...path]/route.ts +123 -0
- package/renderer/app/api/assets/route.ts +124 -0
- package/renderer/app/api/assets/upload/route.ts +177 -0
- package/renderer/app/api/auth-schemes/route.ts +77 -0
- package/renderer/app/api/chat/route.ts +858 -0
- package/renderer/app/api/codegen/route.ts +72 -0
- package/renderer/app/api/collections/route.ts +1016 -0
- package/renderer/app/api/debug/route.ts +53 -0
- package/renderer/app/api/deploy/route.ts +234 -0
- package/renderer/app/api/device/route.ts +42 -0
- package/renderer/app/api/docs/route.ts +187 -0
- package/renderer/app/api/keys/regenerate/route.ts +80 -0
- package/renderer/app/api/openapi-spec/route.ts +151 -0
- package/renderer/app/api/projects/[slug]/route.ts +153 -0
- package/renderer/app/api/projects/[slug]/stats/route.ts +96 -0
- package/renderer/app/api/projects/register/route.ts +152 -0
- package/renderer/app/api/proxy/route.ts +149 -0
- package/renderer/app/api/proxy-stream/route.ts +168 -0
- package/renderer/app/api/redirects/route.ts +47 -0
- package/renderer/app/api/schema/route.ts +65 -0
- package/renderer/app/api/subdomains/check/route.ts +172 -0
- package/renderer/app/api/suggestions/route.ts +144 -0
- package/renderer/app/favicon.ico +0 -0
- package/renderer/app/globals.css +1103 -0
- package/renderer/app/layout.tsx +47 -0
- package/renderer/app/llms-full.txt/route.ts +346 -0
- package/renderer/app/llms.txt/route.ts +279 -0
- package/renderer/app/page.tsx +14 -0
- package/renderer/app/robots.txt/route.ts +84 -0
- package/renderer/app/sitemap.xml/route.ts +199 -0
- package/renderer/components/docs/index.ts +12 -0
- package/renderer/components/docs/mdx/accordion.tsx +169 -0
- package/renderer/components/docs/mdx/badge.tsx +132 -0
- package/renderer/components/docs/mdx/callouts.tsx +154 -0
- package/renderer/components/docs/mdx/cards.tsx +213 -0
- package/renderer/components/docs/mdx/changelog.tsx +120 -0
- package/renderer/components/docs/mdx/code-block.tsx +186 -0
- package/renderer/components/docs/mdx/code-group.tsx +421 -0
- package/renderer/components/docs/mdx/file-embeds.tsx +105 -0
- package/renderer/components/docs/mdx/frame.tsx +112 -0
- package/renderer/components/docs/mdx/highlight.tsx +151 -0
- package/renderer/components/docs/mdx/iframe.tsx +134 -0
- package/renderer/components/docs/mdx/image.tsx +235 -0
- package/renderer/components/docs/mdx/index.ts +204 -0
- package/renderer/components/docs/mdx/mermaid.tsx +240 -0
- package/renderer/components/docs/mdx/param-field.tsx +200 -0
- package/renderer/components/docs/mdx/steps.tsx +113 -0
- package/renderer/components/docs/mdx/tabs.tsx +86 -0
- package/renderer/components/docs/mdx-renderer.tsx +100 -0
- package/renderer/components/docs/navigation/breadcrumbs.tsx +76 -0
- package/renderer/components/docs/navigation/index.ts +8 -0
- package/renderer/components/docs/navigation/page-nav.tsx +64 -0
- package/renderer/components/docs/navigation/sidebar.tsx +515 -0
- package/renderer/components/docs/navigation/toc.tsx +113 -0
- package/renderer/components/docs/notice.tsx +105 -0
- package/renderer/components/docs-header.tsx +274 -0
- package/renderer/components/docs-viewer/agent/agent-chat.tsx +2076 -0
- package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +90 -0
- package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +49 -0
- package/renderer/components/docs-viewer/agent/cards/index.tsx +50 -0
- package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +212 -0
- package/renderer/components/docs-viewer/agent/cards/types.ts +84 -0
- package/renderer/components/docs-viewer/agent/chat-message.tsx +17 -0
- package/renderer/components/docs-viewer/agent/index.tsx +6 -0
- package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +119 -0
- package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +46 -0
- package/renderer/components/docs-viewer/agent/messages/index.ts +17 -0
- package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +721 -0
- package/renderer/components/docs-viewer/agent/messages/types.ts +61 -0
- package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +24 -0
- package/renderer/components/docs-viewer/agent/messages/user-message.tsx +51 -0
- package/renderer/components/docs-viewer/code-editor/index.tsx +2 -0
- package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +1283 -0
- package/renderer/components/docs-viewer/content/changelog-page.tsx +331 -0
- package/renderer/components/docs-viewer/content/doc-page.tsx +285 -0
- package/renderer/components/docs-viewer/content/documentation-viewer.tsx +17 -0
- package/renderer/components/docs-viewer/content/index.tsx +29 -0
- package/renderer/components/docs-viewer/content/introduction.tsx +21 -0
- package/renderer/components/docs-viewer/content/request-details.tsx +330 -0
- package/renderer/components/docs-viewer/content/sections/auth.tsx +69 -0
- package/renderer/components/docs-viewer/content/sections/body.tsx +66 -0
- package/renderer/components/docs-viewer/content/sections/headers.tsx +43 -0
- package/renderer/components/docs-viewer/content/sections/overview.tsx +40 -0
- package/renderer/components/docs-viewer/content/sections/parameters.tsx +43 -0
- package/renderer/components/docs-viewer/content/sections/responses.tsx +87 -0
- package/renderer/components/docs-viewer/global-auth-modal.tsx +352 -0
- package/renderer/components/docs-viewer/index.tsx +1466 -0
- package/renderer/components/docs-viewer/playground/auth-editor.tsx +280 -0
- package/renderer/components/docs-viewer/playground/body-editor.tsx +221 -0
- package/renderer/components/docs-viewer/playground/code-editor.tsx +224 -0
- package/renderer/components/docs-viewer/playground/code-snippet.tsx +387 -0
- package/renderer/components/docs-viewer/playground/graphql-playground.tsx +745 -0
- package/renderer/components/docs-viewer/playground/index.tsx +671 -0
- package/renderer/components/docs-viewer/playground/key-value-editor.tsx +261 -0
- package/renderer/components/docs-viewer/playground/method-selector.tsx +60 -0
- package/renderer/components/docs-viewer/playground/request-builder.tsx +179 -0
- package/renderer/components/docs-viewer/playground/request-tabs.tsx +237 -0
- package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +21 -0
- package/renderer/components/docs-viewer/playground/response-cards/index.tsx +93 -0
- package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +16 -0
- package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +23 -0
- package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +268 -0
- package/renderer/components/docs-viewer/playground/response-cards/types.ts +82 -0
- package/renderer/components/docs-viewer/playground/response-viewer.tsx +43 -0
- package/renderer/components/docs-viewer/search/index.ts +2 -0
- package/renderer/components/docs-viewer/search/search-dialog.tsx +331 -0
- package/renderer/components/docs-viewer/search/use-search.ts +117 -0
- package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +431 -0
- package/renderer/components/docs-viewer/shared/method-badge.tsx +41 -0
- package/renderer/components/docs-viewer/shared/schema-viewer.tsx +349 -0
- package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +239 -0
- package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +316 -0
- package/renderer/components/docs-viewer/sidebar/index.tsx +343 -0
- package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +202 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +118 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +226 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +52 -0
- package/renderer/components/theme-provider.tsx +11 -0
- package/renderer/components/theme-toggle.tsx +76 -0
- package/renderer/components/ui/badge.tsx +46 -0
- package/renderer/components/ui/button.tsx +59 -0
- package/renderer/components/ui/dialog.tsx +118 -0
- package/renderer/components/ui/dropdown-menu.tsx +257 -0
- package/renderer/components/ui/input.tsx +21 -0
- package/renderer/components/ui/label.tsx +24 -0
- package/renderer/components/ui/navigation-menu.tsx +168 -0
- package/renderer/components/ui/select.tsx +190 -0
- package/renderer/components/ui/spinner.tsx +114 -0
- package/renderer/components/ui/tabs.tsx +66 -0
- package/renderer/components/ui/tooltip.tsx +61 -0
- package/renderer/hooks/use-code-copy.ts +88 -0
- package/renderer/hooks/use-openapi-title.ts +44 -0
- package/renderer/lib/api-docs/agent/index.ts +6 -0
- package/renderer/lib/api-docs/agent/indexer.ts +323 -0
- package/renderer/lib/api-docs/agent/spec-summary.ts +335 -0
- package/renderer/lib/api-docs/agent/types.ts +116 -0
- package/renderer/lib/api-docs/auth/auth-context.tsx +225 -0
- package/renderer/lib/api-docs/auth/auth-storage.ts +87 -0
- package/renderer/lib/api-docs/auth/crypto.ts +89 -0
- package/renderer/lib/api-docs/auth/index.ts +4 -0
- package/renderer/lib/api-docs/code-editor/db.ts +164 -0
- package/renderer/lib/api-docs/code-editor/hooks.ts +266 -0
- package/renderer/lib/api-docs/code-editor/index.ts +6 -0
- package/renderer/lib/api-docs/code-editor/mode-context.tsx +207 -0
- package/renderer/lib/api-docs/code-editor/types.ts +105 -0
- package/renderer/lib/api-docs/codegen/definitions.ts +297 -0
- package/renderer/lib/api-docs/codegen/har.ts +251 -0
- package/renderer/lib/api-docs/codegen/index.ts +159 -0
- package/renderer/lib/api-docs/factories.ts +151 -0
- package/renderer/lib/api-docs/index.ts +17 -0
- package/renderer/lib/api-docs/mobile-context.tsx +112 -0
- package/renderer/lib/api-docs/navigation-context.tsx +88 -0
- package/renderer/lib/api-docs/parsers/graphql/README.md +129 -0
- package/renderer/lib/api-docs/parsers/graphql/index.ts +91 -0
- package/renderer/lib/api-docs/parsers/graphql/parser.ts +491 -0
- package/renderer/lib/api-docs/parsers/graphql/transformer.ts +246 -0
- package/renderer/lib/api-docs/parsers/graphql/types.ts +283 -0
- package/renderer/lib/api-docs/parsers/openapi/README.md +32 -0
- package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +60 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +574 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +403 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +232 -0
- package/renderer/lib/api-docs/parsers/openapi/index.ts +171 -0
- package/renderer/lib/api-docs/parsers/openapi/transformer.ts +277 -0
- package/renderer/lib/api-docs/parsers/openapi/validator.ts +31 -0
- package/renderer/lib/api-docs/playground/context.tsx +107 -0
- package/renderer/lib/api-docs/playground/navigation-context.tsx +124 -0
- package/renderer/lib/api-docs/playground/request-builder.ts +223 -0
- package/renderer/lib/api-docs/playground/request-runner.ts +282 -0
- package/renderer/lib/api-docs/playground/types.ts +35 -0
- package/renderer/lib/api-docs/types.ts +269 -0
- package/renderer/lib/api-docs/utils.ts +311 -0
- package/renderer/lib/cache.ts +193 -0
- package/renderer/lib/docs/config/index.ts +29 -0
- package/renderer/lib/docs/config/loader.ts +142 -0
- package/renderer/lib/docs/config/schema.ts +298 -0
- package/renderer/lib/docs/index.ts +12 -0
- package/renderer/lib/docs/mdx/compiler.ts +176 -0
- package/renderer/lib/docs/mdx/frontmatter.ts +80 -0
- package/renderer/lib/docs/mdx/index.ts +26 -0
- package/renderer/lib/docs/navigation/generator.ts +348 -0
- package/renderer/lib/docs/navigation/index.ts +12 -0
- package/renderer/lib/docs/navigation/types.ts +123 -0
- package/renderer/lib/docs-navigation-context.tsx +80 -0
- package/renderer/lib/multi-tenant/context.ts +105 -0
- package/renderer/lib/storage/blob.ts +845 -0
- package/renderer/lib/utils.ts +6 -0
- package/renderer/next.config.ts +76 -0
- package/renderer/package.json +66 -0
- package/renderer/postcss.config.mjs +5 -0
- package/renderer/public/assets/images/screenshot.png +0 -0
- package/renderer/public/assets/logo/dark.svg +9 -0
- package/renderer/public/assets/logo/light.svg +9 -0
- package/renderer/public/assets/logo.svg +9 -0
- package/renderer/public/file.svg +1 -0
- package/renderer/public/globe.svg +1 -0
- package/renderer/public/icon.png +0 -0
- package/renderer/public/logo.svg +9 -0
- package/renderer/public/window.svg +1 -0
- package/renderer/tsconfig.json +28 -0
- package/templates/basic/README.md +139 -0
- package/templates/basic/assets/favicon.svg +4 -0
- package/templates/basic/assets/logo.svg +9 -0
- package/templates/basic/docs.json +47 -0
- package/templates/basic/guides/configuration.mdx +149 -0
- package/templates/basic/guides/overview.mdx +96 -0
- package/templates/basic/index.mdx +39 -0
- package/templates/basic/package.json +14 -0
- package/templates/basic/quickstart.mdx +92 -0
- package/templates/basic/vercel.json +6 -0
- package/templates/graphql/README.md +139 -0
- package/templates/graphql/api-reference/schema.graphql +305 -0
- package/templates/graphql/assets/favicon.svg +4 -0
- package/templates/graphql/assets/logo.svg +9 -0
- package/templates/graphql/docs.json +54 -0
- package/templates/graphql/guides/configuration.mdx +149 -0
- package/templates/graphql/guides/overview.mdx +96 -0
- package/templates/graphql/index.mdx +39 -0
- package/templates/graphql/package.json +14 -0
- package/templates/graphql/quickstart.mdx +92 -0
- package/templates/graphql/vercel.json +6 -0
- package/templates/openapi/README.md +139 -0
- package/templates/openapi/api-reference/openapi.json +419 -0
- package/templates/openapi/assets/favicon.svg +4 -0
- package/templates/openapi/assets/logo.svg +9 -0
- package/templates/openapi/docs.json +61 -0
- package/templates/openapi/guides/configuration.mdx +149 -0
- package/templates/openapi/guides/overview.mdx +96 -0
- package/templates/openapi/index.mdx +39 -0
- package/templates/openapi/package.json +14 -0
- package/templates/openapi/quickstart.mdx +92 -0
- package/templates/openapi/vercel.json +6 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { cn } from '@/lib/utils'
|
|
4
|
+
import { ReactNode } from 'react'
|
|
5
|
+
|
|
6
|
+
type HighlightVariant = 'marker' | 'underline' | 'box' | 'gradient'
|
|
7
|
+
type HighlightColor = 'yellow' | 'blue' | 'green' | 'pink' | 'orange' | 'purple' | 'red'
|
|
8
|
+
|
|
9
|
+
interface HighlightProps {
|
|
10
|
+
children: ReactNode
|
|
11
|
+
/** Highlight style variant */
|
|
12
|
+
variant?: HighlightVariant
|
|
13
|
+
/** Highlight color */
|
|
14
|
+
color?: HighlightColor
|
|
15
|
+
/** Custom className */
|
|
16
|
+
className?: string
|
|
17
|
+
/** Whether to animate the highlight */
|
|
18
|
+
animated?: boolean
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const colorStyles: Record<HighlightColor, Record<HighlightVariant, string>> = {
|
|
22
|
+
yellow: {
|
|
23
|
+
marker: 'bg-yellow-200/70 dark:bg-yellow-500/30',
|
|
24
|
+
underline: 'decoration-yellow-400 dark:decoration-yellow-500',
|
|
25
|
+
box: 'ring-yellow-400 dark:ring-yellow-500',
|
|
26
|
+
gradient: 'from-yellow-200/80 to-yellow-300/80 dark:from-yellow-500/30 dark:to-yellow-600/30',
|
|
27
|
+
},
|
|
28
|
+
blue: {
|
|
29
|
+
marker: 'bg-blue-200/70 dark:bg-blue-500/30',
|
|
30
|
+
underline: 'decoration-blue-400 dark:decoration-blue-500',
|
|
31
|
+
box: 'ring-blue-400 dark:ring-blue-500',
|
|
32
|
+
gradient: 'from-blue-200/80 to-blue-300/80 dark:from-blue-500/30 dark:to-blue-600/30',
|
|
33
|
+
},
|
|
34
|
+
green: {
|
|
35
|
+
marker: 'bg-green-200/70 dark:bg-green-500/30',
|
|
36
|
+
underline: 'decoration-green-400 dark:decoration-green-500',
|
|
37
|
+
box: 'ring-green-400 dark:ring-green-500',
|
|
38
|
+
gradient: 'from-green-200/80 to-green-300/80 dark:from-green-500/30 dark:to-green-600/30',
|
|
39
|
+
},
|
|
40
|
+
pink: {
|
|
41
|
+
marker: 'bg-pink-200/70 dark:bg-pink-500/30',
|
|
42
|
+
underline: 'decoration-pink-400 dark:decoration-pink-500',
|
|
43
|
+
box: 'ring-pink-400 dark:ring-pink-500',
|
|
44
|
+
gradient: 'from-pink-200/80 to-pink-300/80 dark:from-pink-500/30 dark:to-pink-600/30',
|
|
45
|
+
},
|
|
46
|
+
orange: {
|
|
47
|
+
marker: 'bg-orange-200/70 dark:bg-orange-500/30',
|
|
48
|
+
underline: 'decoration-orange-400 dark:decoration-orange-500',
|
|
49
|
+
box: 'ring-orange-400 dark:ring-orange-500',
|
|
50
|
+
gradient: 'from-orange-200/80 to-orange-300/80 dark:from-orange-500/30 dark:to-orange-600/30',
|
|
51
|
+
},
|
|
52
|
+
purple: {
|
|
53
|
+
marker: 'bg-purple-200/70 dark:bg-purple-500/30',
|
|
54
|
+
underline: 'decoration-purple-400 dark:decoration-purple-500',
|
|
55
|
+
box: 'ring-purple-400 dark:ring-purple-500',
|
|
56
|
+
gradient: 'from-purple-200/80 to-purple-300/80 dark:from-purple-500/30 dark:to-purple-600/30',
|
|
57
|
+
},
|
|
58
|
+
red: {
|
|
59
|
+
marker: 'bg-red-200/70 dark:bg-red-500/30',
|
|
60
|
+
underline: 'decoration-red-400 dark:decoration-red-500',
|
|
61
|
+
box: 'ring-red-400 dark:ring-red-500',
|
|
62
|
+
gradient: 'from-red-200/80 to-red-300/80 dark:from-red-500/30 dark:to-red-600/30',
|
|
63
|
+
},
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Highlight - Text highlighter component
|
|
68
|
+
*
|
|
69
|
+
* Variants:
|
|
70
|
+
* - marker: Background highlight like a marker pen
|
|
71
|
+
* - underline: Wavy or straight underline
|
|
72
|
+
* - box: Outlined box around text
|
|
73
|
+
* - gradient: Gradient background highlight
|
|
74
|
+
*/
|
|
75
|
+
export function Highlight({
|
|
76
|
+
children,
|
|
77
|
+
variant = 'marker',
|
|
78
|
+
color = 'yellow',
|
|
79
|
+
className,
|
|
80
|
+
animated = false,
|
|
81
|
+
}: HighlightProps) {
|
|
82
|
+
const colorStyle = colorStyles[color]?.[variant] || colorStyles.yellow[variant]
|
|
83
|
+
|
|
84
|
+
const baseStyles = {
|
|
85
|
+
marker: cn(
|
|
86
|
+
'docs-highlight docs-highlight-marker',
|
|
87
|
+
'px-1 py-0.5 rounded-sm',
|
|
88
|
+
colorStyle,
|
|
89
|
+
animated && 'animate-pulse',
|
|
90
|
+
className
|
|
91
|
+
),
|
|
92
|
+
underline: cn(
|
|
93
|
+
'docs-highlight docs-highlight-underline',
|
|
94
|
+
'underline decoration-wavy decoration-2 underline-offset-4',
|
|
95
|
+
colorStyle,
|
|
96
|
+
className
|
|
97
|
+
),
|
|
98
|
+
box: cn(
|
|
99
|
+
'docs-highlight docs-highlight-box',
|
|
100
|
+
'px-1 py-0.5 ring-2 rounded',
|
|
101
|
+
colorStyle,
|
|
102
|
+
className
|
|
103
|
+
),
|
|
104
|
+
gradient: cn(
|
|
105
|
+
'docs-highlight docs-highlight-gradient',
|
|
106
|
+
'px-1 py-0.5 rounded-sm bg-gradient-to-r',
|
|
107
|
+
colorStyle,
|
|
108
|
+
animated && 'animate-pulse',
|
|
109
|
+
className
|
|
110
|
+
),
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return (
|
|
114
|
+
<span className={baseStyles[variant]}>
|
|
115
|
+
{children}
|
|
116
|
+
</span>
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Marker - Shorthand for marker-style highlight
|
|
122
|
+
*/
|
|
123
|
+
export function Marker({
|
|
124
|
+
children,
|
|
125
|
+
color = 'yellow',
|
|
126
|
+
className,
|
|
127
|
+
}: Omit<HighlightProps, 'variant'>) {
|
|
128
|
+
return (
|
|
129
|
+
<Highlight variant="marker" color={color} className={className}>
|
|
130
|
+
{children}
|
|
131
|
+
</Highlight>
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Underline - Shorthand for underline-style highlight
|
|
137
|
+
*/
|
|
138
|
+
export function Underline({
|
|
139
|
+
children,
|
|
140
|
+
color = 'orange',
|
|
141
|
+
className,
|
|
142
|
+
}: Omit<HighlightProps, 'variant'>) {
|
|
143
|
+
return (
|
|
144
|
+
<Highlight variant="underline" color={color} className={className}>
|
|
145
|
+
{children}
|
|
146
|
+
</Highlight>
|
|
147
|
+
)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Export all components
|
|
151
|
+
export default Highlight
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import React from 'react'
|
|
4
|
+
import { cn } from '@/lib/utils'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Iframe Component for MDX Documentation
|
|
8
|
+
*
|
|
9
|
+
* Embed external content like videos, demos, or interactive widgets.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
interface IframeProps {
|
|
13
|
+
src: string
|
|
14
|
+
title?: string
|
|
15
|
+
width?: string | number
|
|
16
|
+
height?: string | number
|
|
17
|
+
aspectRatio?: '16/9' | '4/3' | '1/1' | '9/16' | string
|
|
18
|
+
allowFullScreen?: boolean
|
|
19
|
+
allow?: string
|
|
20
|
+
className?: string
|
|
21
|
+
frameBorder?: string | number
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function Iframe({
|
|
25
|
+
src,
|
|
26
|
+
title = 'Embedded content',
|
|
27
|
+
width,
|
|
28
|
+
height,
|
|
29
|
+
aspectRatio,
|
|
30
|
+
allowFullScreen = true,
|
|
31
|
+
allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',
|
|
32
|
+
className,
|
|
33
|
+
frameBorder = 0,
|
|
34
|
+
}: IframeProps) {
|
|
35
|
+
// Determine sizing approach
|
|
36
|
+
const hasFixedSize = width || height
|
|
37
|
+
const useAspectRatio = aspectRatio && !hasFixedSize
|
|
38
|
+
|
|
39
|
+
// Convert numeric values to pixels
|
|
40
|
+
const getSize = (value: string | number | undefined) => {
|
|
41
|
+
if (value === undefined) return undefined
|
|
42
|
+
if (typeof value === 'number') return `${value}px`
|
|
43
|
+
return value
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const containerStyle: React.CSSProperties = useAspectRatio
|
|
47
|
+
? { aspectRatio }
|
|
48
|
+
: {}
|
|
49
|
+
|
|
50
|
+
const iframeStyle: React.CSSProperties = {
|
|
51
|
+
width: getSize(width) || (useAspectRatio ? '100%' : undefined),
|
|
52
|
+
height: getSize(height) || (useAspectRatio ? '100%' : undefined),
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<div
|
|
57
|
+
className={cn(
|
|
58
|
+
'docs-iframe my-4 overflow-hidden rounded-lg border border-border',
|
|
59
|
+
useAspectRatio && 'w-full',
|
|
60
|
+
className
|
|
61
|
+
)}
|
|
62
|
+
style={containerStyle}
|
|
63
|
+
>
|
|
64
|
+
<iframe
|
|
65
|
+
src={src}
|
|
66
|
+
title={title}
|
|
67
|
+
style={iframeStyle}
|
|
68
|
+
frameBorder={frameBorder}
|
|
69
|
+
allowFullScreen={allowFullScreen}
|
|
70
|
+
allow={allow}
|
|
71
|
+
className={cn(
|
|
72
|
+
'docs-iframe-content',
|
|
73
|
+
useAspectRatio && 'w-full h-full'
|
|
74
|
+
)}
|
|
75
|
+
/>
|
|
76
|
+
</div>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Video embed component - convenience wrapper for common video platforms
|
|
81
|
+
interface VideoProps {
|
|
82
|
+
src: string
|
|
83
|
+
title?: string
|
|
84
|
+
aspectRatio?: '16/9' | '4/3'
|
|
85
|
+
className?: string
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function Video({ src, title = 'Video', aspectRatio = '16/9', className }: VideoProps) {
|
|
89
|
+
// Convert YouTube watch URLs to embed URLs
|
|
90
|
+
let embedSrc = src
|
|
91
|
+
if (src.includes('youtube.com/watch')) {
|
|
92
|
+
const videoId = new URL(src).searchParams.get('v')
|
|
93
|
+
if (videoId) {
|
|
94
|
+
embedSrc = `https://www.youtube.com/embed/${videoId}`
|
|
95
|
+
}
|
|
96
|
+
} else if (src.includes('youtu.be/')) {
|
|
97
|
+
const videoId = src.split('youtu.be/')[1]?.split('?')[0]
|
|
98
|
+
if (videoId) {
|
|
99
|
+
embedSrc = `https://www.youtube.com/embed/${videoId}`
|
|
100
|
+
}
|
|
101
|
+
} else if (src.includes('vimeo.com/') && !src.includes('player.vimeo.com')) {
|
|
102
|
+
const videoId = src.split('vimeo.com/')[1]?.split('?')[0]
|
|
103
|
+
if (videoId) {
|
|
104
|
+
embedSrc = `https://player.vimeo.com/video/${videoId}`
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return (
|
|
109
|
+
<Iframe
|
|
110
|
+
src={embedSrc}
|
|
111
|
+
title={title}
|
|
112
|
+
aspectRatio={aspectRatio}
|
|
113
|
+
className={cn('docs-video', className)}
|
|
114
|
+
/>
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Loom embed component
|
|
119
|
+
interface LoomProps {
|
|
120
|
+
id: string
|
|
121
|
+
title?: string
|
|
122
|
+
className?: string
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function Loom({ id, title = 'Loom video', className }: LoomProps) {
|
|
126
|
+
return (
|
|
127
|
+
<Iframe
|
|
128
|
+
src={`https://www.loom.com/embed/${id}`}
|
|
129
|
+
title={title}
|
|
130
|
+
aspectRatio="16/9"
|
|
131
|
+
className={cn('docs-loom', className)}
|
|
132
|
+
/>
|
|
133
|
+
)
|
|
134
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import React from 'react'
|
|
4
|
+
import { cn } from '@/lib/utils'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Image Component for MDX Documentation
|
|
8
|
+
*
|
|
9
|
+
* Supports resizing via wsrv.nl image proxy for optimization.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
interface ImageProps {
|
|
13
|
+
src: string
|
|
14
|
+
alt: string
|
|
15
|
+
width?: number
|
|
16
|
+
height?: number
|
|
17
|
+
maxWidth?: number
|
|
18
|
+
maxHeight?: number
|
|
19
|
+
caption?: string
|
|
20
|
+
className?: string
|
|
21
|
+
rounded?: boolean
|
|
22
|
+
shadow?: boolean
|
|
23
|
+
border?: boolean
|
|
24
|
+
align?: 'left' | 'center' | 'right'
|
|
25
|
+
optimize?: boolean // Enable wsrv.nl optimization (default: true for external images)
|
|
26
|
+
quality?: number // Image quality 1-100 (default: 80)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Get resized image URL using wsrv.nl proxy
|
|
31
|
+
*/
|
|
32
|
+
function getResizedImageUrl(
|
|
33
|
+
imageUrl: string,
|
|
34
|
+
options: {
|
|
35
|
+
width?: number
|
|
36
|
+
height?: number
|
|
37
|
+
maxWidth?: number
|
|
38
|
+
maxHeight?: number
|
|
39
|
+
quality?: number
|
|
40
|
+
} = {}
|
|
41
|
+
): string {
|
|
42
|
+
const { width, height, maxWidth, maxHeight, quality = 80 } = options
|
|
43
|
+
|
|
44
|
+
// Skip if already a wsrv.nl URL
|
|
45
|
+
if (imageUrl.startsWith('https://wsrv.nl')) {
|
|
46
|
+
return imageUrl
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// For data URLs, we can't use wsrv.nl
|
|
50
|
+
if (imageUrl.startsWith('data:')) {
|
|
51
|
+
return imageUrl
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// For relative URLs (local images), don't proxy
|
|
55
|
+
if (imageUrl.startsWith('/') || imageUrl.startsWith('./') || imageUrl.startsWith('../')) {
|
|
56
|
+
return imageUrl
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Build wsrv.nl URL
|
|
60
|
+
const proxyUrl = new URL('https://wsrv.nl/')
|
|
61
|
+
proxyUrl.searchParams.set('url', imageUrl)
|
|
62
|
+
|
|
63
|
+
// Set dimensions
|
|
64
|
+
if (width) {
|
|
65
|
+
proxyUrl.searchParams.set('w', width.toString())
|
|
66
|
+
} else if (maxWidth) {
|
|
67
|
+
proxyUrl.searchParams.set('w', maxWidth.toString())
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (height) {
|
|
71
|
+
proxyUrl.searchParams.set('h', height.toString())
|
|
72
|
+
} else if (maxHeight) {
|
|
73
|
+
proxyUrl.searchParams.set('h', maxHeight.toString())
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// If only max dimensions are set, use fit=inside to maintain aspect ratio
|
|
77
|
+
if ((maxWidth || maxHeight) && !width && !height) {
|
|
78
|
+
proxyUrl.searchParams.set('fit', 'inside')
|
|
79
|
+
proxyUrl.searchParams.set('n', '-1') // Don't upscale
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Quality and format
|
|
83
|
+
proxyUrl.searchParams.set('q', quality.toString())
|
|
84
|
+
|
|
85
|
+
return proxyUrl.toString()
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function Image({
|
|
89
|
+
src,
|
|
90
|
+
alt,
|
|
91
|
+
width,
|
|
92
|
+
height,
|
|
93
|
+
maxWidth,
|
|
94
|
+
maxHeight,
|
|
95
|
+
caption,
|
|
96
|
+
className,
|
|
97
|
+
rounded = true,
|
|
98
|
+
shadow = false,
|
|
99
|
+
border = false,
|
|
100
|
+
align = 'center',
|
|
101
|
+
optimize = true,
|
|
102
|
+
quality = 80,
|
|
103
|
+
}: ImageProps) {
|
|
104
|
+
// Determine if we should optimize
|
|
105
|
+
const isExternalImage = src.startsWith('http://') || src.startsWith('https://')
|
|
106
|
+
const shouldOptimize = optimize && isExternalImage
|
|
107
|
+
|
|
108
|
+
// Get the final image URL
|
|
109
|
+
const imageSrc = shouldOptimize
|
|
110
|
+
? getResizedImageUrl(src, { width, height, maxWidth, maxHeight, quality })
|
|
111
|
+
: src
|
|
112
|
+
|
|
113
|
+
const alignmentClasses = {
|
|
114
|
+
left: 'mr-auto',
|
|
115
|
+
center: 'mx-auto',
|
|
116
|
+
right: 'ml-auto',
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const imageElement = (
|
|
120
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
121
|
+
<img
|
|
122
|
+
src={imageSrc}
|
|
123
|
+
alt={alt}
|
|
124
|
+
width={width}
|
|
125
|
+
height={height}
|
|
126
|
+
style={{
|
|
127
|
+
maxWidth: maxWidth ? `${maxWidth}px` : '100%',
|
|
128
|
+
maxHeight: maxHeight ? `${maxHeight}px` : undefined,
|
|
129
|
+
height: 'auto',
|
|
130
|
+
}}
|
|
131
|
+
className={cn(
|
|
132
|
+
'docs-image',
|
|
133
|
+
rounded && 'rounded-lg',
|
|
134
|
+
shadow && 'shadow-lg',
|
|
135
|
+
border && 'border border-border',
|
|
136
|
+
alignmentClasses[align],
|
|
137
|
+
className
|
|
138
|
+
)}
|
|
139
|
+
loading="lazy"
|
|
140
|
+
/>
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
if (caption) {
|
|
144
|
+
return (
|
|
145
|
+
<figure className={cn('docs-image-figure my-6', alignmentClasses[align])}>
|
|
146
|
+
{imageElement}
|
|
147
|
+
<figcaption className="docs-image-caption mt-2 text-center text-sm text-muted-foreground">
|
|
148
|
+
{caption}
|
|
149
|
+
</figcaption>
|
|
150
|
+
</figure>
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return <div className={cn('docs-image-wrapper my-4', alignmentClasses[align])}>{imageElement}</div>
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Screenshot component - convenience wrapper with default styling
|
|
159
|
+
*/
|
|
160
|
+
export function Screenshot({
|
|
161
|
+
src,
|
|
162
|
+
alt,
|
|
163
|
+
caption,
|
|
164
|
+
maxWidth = 800,
|
|
165
|
+
className,
|
|
166
|
+
...props
|
|
167
|
+
}: Omit<ImageProps, 'shadow' | 'border' | 'rounded'>) {
|
|
168
|
+
return (
|
|
169
|
+
<Image
|
|
170
|
+
src={src}
|
|
171
|
+
alt={alt}
|
|
172
|
+
caption={caption}
|
|
173
|
+
maxWidth={maxWidth}
|
|
174
|
+
rounded
|
|
175
|
+
shadow
|
|
176
|
+
border
|
|
177
|
+
className={cn('docs-screenshot', className)}
|
|
178
|
+
{...props}
|
|
179
|
+
/>
|
|
180
|
+
)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Logo component - for displaying logos without optimization artifacts
|
|
185
|
+
*/
|
|
186
|
+
export function Logo({
|
|
187
|
+
src,
|
|
188
|
+
alt,
|
|
189
|
+
width = 200,
|
|
190
|
+
height,
|
|
191
|
+
className,
|
|
192
|
+
...props
|
|
193
|
+
}: Omit<ImageProps, 'optimize' | 'quality' | 'shadow' | 'rounded' | 'border'>) {
|
|
194
|
+
return (
|
|
195
|
+
<Image
|
|
196
|
+
src={src}
|
|
197
|
+
alt={alt}
|
|
198
|
+
width={width}
|
|
199
|
+
height={height}
|
|
200
|
+
optimize={false}
|
|
201
|
+
rounded={false}
|
|
202
|
+
shadow={false}
|
|
203
|
+
border={false}
|
|
204
|
+
className={cn('docs-logo', className)}
|
|
205
|
+
{...props}
|
|
206
|
+
/>
|
|
207
|
+
)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Icon component - small images/icons
|
|
212
|
+
*/
|
|
213
|
+
export function Icon({
|
|
214
|
+
src,
|
|
215
|
+
alt,
|
|
216
|
+
size = 24,
|
|
217
|
+
className,
|
|
218
|
+
}: {
|
|
219
|
+
src: string
|
|
220
|
+
alt: string
|
|
221
|
+
size?: number
|
|
222
|
+
className?: string
|
|
223
|
+
}) {
|
|
224
|
+
return (
|
|
225
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
226
|
+
<img
|
|
227
|
+
src={src}
|
|
228
|
+
alt={alt}
|
|
229
|
+
width={size}
|
|
230
|
+
height={size}
|
|
231
|
+
className={cn('docs-icon inline-block', className)}
|
|
232
|
+
loading="lazy"
|
|
233
|
+
/>
|
|
234
|
+
)
|
|
235
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDX Components Registry
|
|
3
|
+
*
|
|
4
|
+
* Exports all custom MDX components for use in documentation pages.
|
|
5
|
+
* These components are Mintlify-compatible.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Callouts
|
|
9
|
+
export {
|
|
10
|
+
Note,
|
|
11
|
+
Warning,
|
|
12
|
+
Info,
|
|
13
|
+
Tip,
|
|
14
|
+
Check,
|
|
15
|
+
Error,
|
|
16
|
+
Callout,
|
|
17
|
+
} from './callouts'
|
|
18
|
+
|
|
19
|
+
// Cards
|
|
20
|
+
export {
|
|
21
|
+
Card,
|
|
22
|
+
CardGroup,
|
|
23
|
+
} from './cards'
|
|
24
|
+
|
|
25
|
+
// Accordion
|
|
26
|
+
export {
|
|
27
|
+
Accordion,
|
|
28
|
+
AccordionGroup,
|
|
29
|
+
} from './accordion'
|
|
30
|
+
|
|
31
|
+
// Steps
|
|
32
|
+
export {
|
|
33
|
+
Steps,
|
|
34
|
+
Step,
|
|
35
|
+
} from './steps'
|
|
36
|
+
|
|
37
|
+
// Tabs
|
|
38
|
+
export {
|
|
39
|
+
Tabs,
|
|
40
|
+
Tab,
|
|
41
|
+
} from './tabs'
|
|
42
|
+
|
|
43
|
+
// Code Group
|
|
44
|
+
export { CodeGroup } from './code-group'
|
|
45
|
+
|
|
46
|
+
// Layout
|
|
47
|
+
export {
|
|
48
|
+
Frame,
|
|
49
|
+
Columns,
|
|
50
|
+
Snippet,
|
|
51
|
+
Latex,
|
|
52
|
+
} from './frame'
|
|
53
|
+
|
|
54
|
+
// API Documentation
|
|
55
|
+
export {
|
|
56
|
+
ParamField,
|
|
57
|
+
ResponseField,
|
|
58
|
+
Expandable,
|
|
59
|
+
} from './param-field'
|
|
60
|
+
|
|
61
|
+
// Embeds
|
|
62
|
+
export {
|
|
63
|
+
Iframe,
|
|
64
|
+
Video,
|
|
65
|
+
Loom,
|
|
66
|
+
} from './iframe'
|
|
67
|
+
|
|
68
|
+
// Images
|
|
69
|
+
export {
|
|
70
|
+
Image,
|
|
71
|
+
Screenshot,
|
|
72
|
+
Logo,
|
|
73
|
+
Icon,
|
|
74
|
+
} from './image'
|
|
75
|
+
|
|
76
|
+
// Highlight
|
|
77
|
+
export {
|
|
78
|
+
Highlight,
|
|
79
|
+
Marker,
|
|
80
|
+
Underline,
|
|
81
|
+
} from './highlight'
|
|
82
|
+
|
|
83
|
+
// Badge
|
|
84
|
+
export { Badge } from './badge'
|
|
85
|
+
|
|
86
|
+
// Mermaid
|
|
87
|
+
export { Mermaid } from './mermaid'
|
|
88
|
+
|
|
89
|
+
// File Embeds
|
|
90
|
+
export { PDF, Audio, Download } from './file-embeds'
|
|
91
|
+
|
|
92
|
+
// Changelog
|
|
93
|
+
export {
|
|
94
|
+
ChangelogEntry,
|
|
95
|
+
ChangelogTitle,
|
|
96
|
+
ChangelogDescription,
|
|
97
|
+
ChangelogImage,
|
|
98
|
+
BreakingChange,
|
|
99
|
+
MoreUpdates,
|
|
100
|
+
UpdateItem,
|
|
101
|
+
} from './changelog'
|
|
102
|
+
|
|
103
|
+
// Re-export types
|
|
104
|
+
export type { Frontmatter } from '@/lib/docs/mdx/frontmatter'
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Default MDX components mapping
|
|
108
|
+
*
|
|
109
|
+
* Use this object with next-mdx-remote to enable all custom components
|
|
110
|
+
*/
|
|
111
|
+
import { Note, Warning, Info, Tip, Check, Error as ErrorCallout, Callout } from './callouts'
|
|
112
|
+
import { Card, CardGroup } from './cards'
|
|
113
|
+
import { Accordion, AccordionGroup } from './accordion'
|
|
114
|
+
import { Steps, Step } from './steps'
|
|
115
|
+
import { Tabs, Tab } from './tabs'
|
|
116
|
+
import { CodeGroup } from './code-group'
|
|
117
|
+
import { Frame, Columns, Snippet, Latex } from './frame'
|
|
118
|
+
import { ParamField, ResponseField, Expandable } from './param-field'
|
|
119
|
+
import { Iframe, Video, Loom } from './iframe'
|
|
120
|
+
import { Image, Screenshot, Logo, Icon } from './image'
|
|
121
|
+
import { Highlight, Marker, Underline } from './highlight'
|
|
122
|
+
import { Badge } from './badge'
|
|
123
|
+
import { Mermaid } from './mermaid'
|
|
124
|
+
import { PDF, Audio, Download } from './file-embeds'
|
|
125
|
+
import { ChangelogEntry, ChangelogTitle, ChangelogDescription, ChangelogImage, BreakingChange, MoreUpdates, UpdateItem } from './changelog'
|
|
126
|
+
|
|
127
|
+
export const mdxComponents = {
|
|
128
|
+
// Callouts
|
|
129
|
+
Note,
|
|
130
|
+
Warning,
|
|
131
|
+
Info,
|
|
132
|
+
Tip,
|
|
133
|
+
Check,
|
|
134
|
+
Error: ErrorCallout,
|
|
135
|
+
Callout,
|
|
136
|
+
|
|
137
|
+
// Cards
|
|
138
|
+
Card,
|
|
139
|
+
CardGroup,
|
|
140
|
+
|
|
141
|
+
// Accordion
|
|
142
|
+
Accordion,
|
|
143
|
+
AccordionGroup,
|
|
144
|
+
|
|
145
|
+
// Steps
|
|
146
|
+
Steps,
|
|
147
|
+
Step,
|
|
148
|
+
|
|
149
|
+
// Tabs
|
|
150
|
+
Tabs,
|
|
151
|
+
Tab,
|
|
152
|
+
|
|
153
|
+
// Code
|
|
154
|
+
CodeGroup,
|
|
155
|
+
|
|
156
|
+
// Layout
|
|
157
|
+
Frame,
|
|
158
|
+
Columns,
|
|
159
|
+
Snippet,
|
|
160
|
+
Latex,
|
|
161
|
+
|
|
162
|
+
// API docs
|
|
163
|
+
ParamField,
|
|
164
|
+
ResponseField,
|
|
165
|
+
Expandable,
|
|
166
|
+
|
|
167
|
+
// Embeds
|
|
168
|
+
Iframe,
|
|
169
|
+
Video,
|
|
170
|
+
Loom,
|
|
171
|
+
|
|
172
|
+
// Images
|
|
173
|
+
Image,
|
|
174
|
+
Screenshot,
|
|
175
|
+
Logo,
|
|
176
|
+
Icon,
|
|
177
|
+
|
|
178
|
+
// Highlight
|
|
179
|
+
Highlight,
|
|
180
|
+
Marker,
|
|
181
|
+
Underline,
|
|
182
|
+
|
|
183
|
+
// Badge
|
|
184
|
+
Badge,
|
|
185
|
+
|
|
186
|
+
// Mermaid
|
|
187
|
+
Mermaid,
|
|
188
|
+
|
|
189
|
+
// File Embeds
|
|
190
|
+
PDF,
|
|
191
|
+
Audio,
|
|
192
|
+
Download,
|
|
193
|
+
|
|
194
|
+
// Changelog
|
|
195
|
+
ChangelogEntry,
|
|
196
|
+
ChangelogTitle,
|
|
197
|
+
ChangelogDescription,
|
|
198
|
+
ChangelogImage,
|
|
199
|
+
BreakingChange,
|
|
200
|
+
MoreUpdates,
|
|
201
|
+
UpdateItem,
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export default mdxComponents
|