@brainfish-ai/devdoc 0.1.42 → 0.1.44
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/cli/commands/create.js +2 -2
- package/dist/cli/commands/dev.js +19 -10
- package/package.json +3 -2
- package/renderer/app/api/assets/[...path]/route.js +108 -0
- package/renderer/app/api/assets/route.js +114 -0
- package/renderer/app/api/assets/upload/route.js +163 -0
- package/renderer/app/api/auth-schemes/route.js +58 -0
- package/renderer/app/api/chat/route.js +759 -0
- package/renderer/app/api/codegen/route.js +52 -0
- package/renderer/app/api/collections/route.js +706 -0
- package/renderer/app/api/debug/route.js +47 -0
- package/renderer/app/api/deploy/route.js +199 -0
- package/renderer/app/api/device/route.js +36 -0
- package/renderer/app/api/docs/route.js +205 -0
- package/renderer/app/api/domains/add/route.js +121 -0
- package/renderer/app/api/domains/lookup/route.js +43 -0
- package/renderer/app/api/domains/remove/route.js +89 -0
- package/renderer/app/api/domains/status/route.js +140 -0
- package/renderer/app/api/domains/verify/route.js +168 -0
- package/renderer/app/api/keys/regenerate/route.js +71 -0
- package/renderer/app/api/local-assets/[...path]/route.js +108 -0
- package/renderer/app/api/openapi-spec/route.js +73 -0
- package/renderer/app/api/projects/[slug]/route.js +129 -0
- package/renderer/app/api/projects/[slug]/stats/route.js +80 -0
- package/renderer/app/api/projects/register/route.js +176 -0
- package/renderer/app/api/proxy/route.js +139 -0
- package/renderer/app/api/proxy-stream/route.js +156 -0
- package/renderer/app/api/redirects/route.js +35 -0
- package/renderer/app/api/schema/route.js +85 -0
- package/renderer/app/api/subdomains/check/route.js +158 -0
- package/renderer/app/api/suggestions/route.js +195 -0
- package/renderer/app/globals.css +69 -0
- package/renderer/app/layout.js +47 -0
- package/renderer/app/llms-full.txt/route.js +266 -0
- package/renderer/app/llms.txt/route.js +228 -0
- package/renderer/app/page.js +12 -0
- package/renderer/app/robots.txt/route.js +66 -0
- package/renderer/app/sitemap.xml/route.js +155 -0
- package/renderer/components/docs/index.js +8 -0
- package/renderer/components/docs/mdx/accordion.js +113 -0
- package/renderer/components/docs/mdx/badge.js +72 -0
- package/renderer/components/docs/mdx/callouts.js +137 -0
- package/renderer/components/docs/mdx/cards.js +175 -0
- package/renderer/components/docs/mdx/changelog.js +100 -0
- package/renderer/components/docs/mdx/code-block.js +147 -0
- package/renderer/components/docs/mdx/code-group.js +287 -0
- package/renderer/components/docs/mdx/file-embeds.js +82 -0
- package/renderer/components/docs/mdx/frame.js +59 -0
- package/renderer/components/docs/mdx/highlight.js +90 -0
- package/renderer/components/docs/mdx/iframe.js +69 -0
- package/renderer/components/docs/mdx/image.js +135 -0
- package/renderer/components/docs/mdx/index.js +134 -0
- package/renderer/components/docs/mdx/landing.js +317 -0
- package/renderer/components/docs/mdx/mermaid.js +212 -0
- package/renderer/components/docs/mdx/param-field.js +112 -0
- package/renderer/components/docs/mdx/steps.js +74 -0
- package/renderer/components/docs/mdx/tabs.js +50 -0
- package/renderer/components/docs/mdx-renderer.js +77 -0
- package/renderer/components/docs/navigation/breadcrumbs.js +64 -0
- package/renderer/components/docs/navigation/index.js +6 -0
- package/renderer/components/docs/navigation/page-nav.js +57 -0
- package/renderer/components/docs/navigation/sidebar.js +375 -0
- package/renderer/components/docs/navigation/toc.js +89 -0
- package/renderer/components/docs/notice.js +77 -0
- package/renderer/components/docs-header.js +202 -0
- package/renderer/components/docs-viewer/agent/agent-chat.js +1831 -0
- package/renderer/components/docs-viewer/agent/agent-popup-button.js +99 -0
- package/renderer/components/docs-viewer/agent/cards/debug-context-card.js +107 -0
- package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.js +57 -0
- package/renderer/components/docs-viewer/agent/cards/index.js +45 -0
- package/renderer/components/docs-viewer/agent/cards/response-options-card.js +154 -0
- package/renderer/components/docs-viewer/agent/cards/types.js +22 -0
- package/renderer/components/docs-viewer/agent/chat-message.js +2 -0
- package/renderer/components/docs-viewer/agent/index.js +7 -0
- package/renderer/components/docs-viewer/agent/messages/assistant-message.js +108 -0
- package/renderer/components/docs-viewer/agent/messages/chat-message.js +34 -0
- package/renderer/components/docs-viewer/agent/messages/index.js +6 -0
- package/renderer/components/docs-viewer/agent/messages/tool-call-display.js +1065 -0
- package/renderer/components/docs-viewer/agent/messages/types.js +2 -0
- package/renderer/components/docs-viewer/agent/messages/typing-indicator.js +26 -0
- package/renderer/components/docs-viewer/agent/messages/user-message.js +37 -0
- package/renderer/components/docs-viewer/code-editor/{index.tsx → index.js} +1 -1
- package/renderer/components/docs-viewer/code-editor/notes-mode.js +1338 -0
- package/renderer/components/docs-viewer/content/changelog-page.js +297 -0
- package/renderer/components/docs-viewer/content/content-router.js +182 -0
- package/renderer/components/docs-viewer/content/doc-page.js +290 -0
- package/renderer/components/docs-viewer/content/documentation-viewer.js +14 -0
- package/renderer/components/docs-viewer/content/index.js +31 -0
- package/renderer/components/docs-viewer/content/not-found-page.js +300 -0
- package/renderer/components/docs-viewer/content/request-details.js +528 -0
- package/renderer/components/docs-viewer/content/sections/auth.js +108 -0
- package/renderer/components/docs-viewer/content/sections/body.js +80 -0
- package/renderer/components/docs-viewer/content/sections/headers.js +64 -0
- package/renderer/components/docs-viewer/content/sections/overview.js +56 -0
- package/renderer/components/docs-viewer/content/sections/parameters.js +64 -0
- package/renderer/components/docs-viewer/content/sections/responses.js +91 -0
- package/renderer/components/docs-viewer/global-auth-modal.js +427 -0
- package/renderer/components/docs-viewer/index.js +1448 -0
- package/renderer/components/docs-viewer/playground/auth-editor.js +418 -0
- package/renderer/components/docs-viewer/playground/body-editor.js +240 -0
- package/renderer/components/docs-viewer/playground/code-editor.js +135 -0
- package/renderer/components/docs-viewer/playground/code-snippet.js +393 -0
- package/renderer/components/docs-viewer/playground/graphql-playground.js +936 -0
- package/renderer/components/docs-viewer/playground/index.js +682 -0
- package/renderer/components/docs-viewer/playground/key-value-editor.js +317 -0
- package/renderer/components/docs-viewer/playground/method-selector.js +65 -0
- package/renderer/components/docs-viewer/playground/request-builder.js +181 -0
- package/renderer/components/docs-viewer/playground/request-tabs.js +240 -0
- package/renderer/components/docs-viewer/playground/response-cards/idle-card.js +42 -0
- package/renderer/components/docs-viewer/playground/response-cards/index.js +72 -0
- package/renderer/components/docs-viewer/playground/response-cards/loading-card.js +24 -0
- package/renderer/components/docs-viewer/playground/response-cards/network-error-card.js +28 -0
- package/renderer/components/docs-viewer/playground/response-cards/response-body-card.js +308 -0
- package/renderer/components/docs-viewer/playground/response-cards/types.js +9 -0
- package/renderer/components/docs-viewer/playground/response-viewer.js +18 -0
- package/renderer/components/docs-viewer/search/index.js +2 -0
- package/renderer/components/docs-viewer/search/search-dialog.js +367 -0
- package/renderer/components/docs-viewer/search/use-search.js +89 -0
- package/renderer/components/docs-viewer/shared/markdown-renderer.js +423 -0
- package/renderer/components/docs-viewer/shared/method-badge.js +23 -0
- package/renderer/components/docs-viewer/shared/schema-viewer.js +321 -0
- package/renderer/components/docs-viewer/sidebar/collection-tree.js +222 -0
- package/renderer/components/docs-viewer/sidebar/endpoint-options.js +512 -0
- package/renderer/components/docs-viewer/sidebar/index.js +196 -0
- package/renderer/components/docs-viewer/sidebar/right-sidebar.js +159 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-group.js +87 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-item.js +172 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-section.js +31 -0
- package/renderer/components/theme-provider.js +10 -0
- package/renderer/components/theme-toggle.js +86 -0
- package/renderer/components/ui/badge.js +29 -0
- package/renderer/components/ui/button.js +40 -0
- package/renderer/components/ui/dialog.js +50 -0
- package/renderer/components/ui/dropdown-menu.js +143 -0
- package/renderer/components/ui/input.js +12 -0
- package/renderer/components/ui/label.js +13 -0
- package/renderer/components/ui/navigation-menu.js +83 -0
- package/renderer/components/ui/select.js +116 -0
- package/renderer/components/ui/spinner.js +92 -0
- package/renderer/components/ui/tabs.js +34 -0
- package/renderer/components/ui/tooltip.js +43 -0
- package/renderer/hooks/use-code-copy.js +76 -0
- package/renderer/hooks/use-openapi-title.js +33 -0
- package/renderer/hooks/use-route-state.js +159 -0
- package/renderer/lib/api-docs/agent/index.js +4 -0
- package/renderer/lib/api-docs/agent/indexer.js +254 -0
- package/renderer/lib/api-docs/agent/spec-summary.js +227 -0
- package/renderer/lib/api-docs/agent/types.js +5 -0
- package/renderer/lib/api-docs/agent/use-suggestions.js +97 -0
- package/renderer/lib/api-docs/auth/auth-context.js +157 -0
- package/renderer/lib/api-docs/auth/auth-storage.js +66 -0
- package/renderer/lib/api-docs/auth/crypto.js +64 -0
- package/renderer/lib/api-docs/auth/index.js +3 -0
- package/renderer/lib/api-docs/code-editor/db.js +145 -0
- package/renderer/lib/api-docs/code-editor/hooks.js +254 -0
- package/renderer/lib/api-docs/code-editor/{index.ts → index.js} +3 -4
- package/renderer/lib/api-docs/code-editor/mode-context.js +126 -0
- package/renderer/lib/api-docs/code-editor/types.js +53 -0
- package/renderer/lib/api-docs/codegen/definitions.js +258 -0
- package/renderer/lib/api-docs/codegen/har.js +171 -0
- package/renderer/lib/api-docs/codegen/index.js +118 -0
- package/renderer/lib/api-docs/factories.js +136 -0
- package/renderer/lib/api-docs/{index.ts → index.js} +5 -10
- package/renderer/lib/api-docs/mobile-context.js +116 -0
- package/renderer/lib/api-docs/navigation-context.js +62 -0
- package/renderer/lib/api-docs/parsers/graphql/index.js +50 -0
- package/renderer/lib/api-docs/parsers/graphql/parser.js +350 -0
- package/renderer/lib/api-docs/parsers/graphql/transformer.js +215 -0
- package/renderer/lib/api-docs/parsers/graphql/types.js +46 -0
- package/renderer/lib/api-docs/parsers/openapi/dereferencer.js +43 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/auth.js +486 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/body.js +295 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/index.js +132 -0
- package/renderer/lib/api-docs/parsers/openapi/index.js +127 -0
- package/renderer/lib/api-docs/parsers/openapi/transformer.js +192 -0
- package/renderer/lib/api-docs/parsers/openapi/validator.js +24 -0
- package/renderer/lib/api-docs/playground/context.js +65 -0
- package/renderer/lib/api-docs/playground/navigation-context.js +74 -0
- package/renderer/lib/api-docs/playground/request-builder.js +163 -0
- package/renderer/lib/api-docs/playground/request-runner.js +224 -0
- package/renderer/lib/api-docs/playground/types.js +5 -0
- package/renderer/lib/api-docs/types.js +23 -0
- package/renderer/lib/api-docs/utils.js +212 -0
- package/renderer/lib/cache.js +157 -0
- package/renderer/lib/docs/config/domain-schema.js +161 -0
- package/renderer/lib/docs/config/environment.js +38 -0
- package/renderer/lib/docs/config/index.js +6 -0
- package/renderer/lib/docs/config/loader.js +113 -0
- package/renderer/lib/docs/config/schema.js +281 -0
- package/renderer/lib/docs/index.js +8 -0
- package/renderer/lib/docs/mdx/compiler.js +131 -0
- package/renderer/lib/docs/mdx/frontmatter.js +73 -0
- package/renderer/lib/docs/mdx/index.js +10 -0
- package/renderer/lib/docs/mdx/remark-mermaid.js +63 -0
- package/renderer/lib/docs/navigation/generator.js +269 -0
- package/renderer/lib/docs/navigation/index.js +3 -0
- package/renderer/lib/docs/navigation/types.js +11 -0
- package/renderer/lib/docs-navigation-context.js +40 -0
- package/renderer/lib/docs-navigation.js +140 -0
- package/renderer/lib/multi-tenant/context.js +80 -0
- package/renderer/lib/storage/blob.js +767 -0
- package/renderer/lib/utils/icons.js +30 -0
- package/renderer/lib/utils.js +5 -0
- package/renderer/next.config.js +62 -0
- package/renderer/package.json +1 -0
- package/renderer/tsconfig.json +23 -5
- package/renderer/app/api/assets/[...path]/route.ts +0 -123
- package/renderer/app/api/assets/route.ts +0 -124
- package/renderer/app/api/assets/upload/route.ts +0 -177
- package/renderer/app/api/auth-schemes/route.ts +0 -77
- package/renderer/app/api/chat/route.ts +0 -858
- package/renderer/app/api/codegen/route.ts +0 -72
- package/renderer/app/api/collections/route.ts +0 -1002
- package/renderer/app/api/debug/route.ts +0 -53
- package/renderer/app/api/deploy/route.ts +0 -234
- package/renderer/app/api/device/route.ts +0 -42
- package/renderer/app/api/docs/route.ts +0 -201
- package/renderer/app/api/domains/add/route.ts +0 -132
- package/renderer/app/api/domains/lookup/route.ts +0 -43
- package/renderer/app/api/domains/remove/route.ts +0 -100
- package/renderer/app/api/domains/status/route.ts +0 -158
- package/renderer/app/api/domains/verify/route.ts +0 -181
- package/renderer/app/api/keys/regenerate/route.ts +0 -80
- package/renderer/app/api/local-assets/[...path]/route.ts +0 -122
- package/renderer/app/api/openapi-spec/route.ts +0 -151
- package/renderer/app/api/projects/[slug]/route.ts +0 -153
- package/renderer/app/api/projects/[slug]/stats/route.ts +0 -96
- package/renderer/app/api/projects/register/route.ts +0 -152
- package/renderer/app/api/proxy/route.ts +0 -149
- package/renderer/app/api/proxy-stream/route.ts +0 -168
- package/renderer/app/api/redirects/route.ts +0 -47
- package/renderer/app/api/schema/route.ts +0 -73
- package/renderer/app/api/subdomains/check/route.ts +0 -172
- package/renderer/app/api/suggestions/route.ts +0 -144
- package/renderer/app/layout.tsx +0 -54
- package/renderer/app/llms-full.txt/route.ts +0 -346
- package/renderer/app/llms.txt/route.ts +0 -279
- package/renderer/app/page.tsx +0 -14
- package/renderer/app/robots.txt/route.ts +0 -84
- package/renderer/app/sitemap.xml/route.ts +0 -199
- package/renderer/components/docs/index.ts +0 -12
- package/renderer/components/docs/mdx/accordion.tsx +0 -169
- package/renderer/components/docs/mdx/badge.tsx +0 -132
- package/renderer/components/docs/mdx/callouts.tsx +0 -154
- package/renderer/components/docs/mdx/cards.tsx +0 -241
- package/renderer/components/docs/mdx/changelog.tsx +0 -120
- package/renderer/components/docs/mdx/code-block.tsx +0 -186
- package/renderer/components/docs/mdx/code-group.tsx +0 -421
- package/renderer/components/docs/mdx/file-embeds.tsx +0 -105
- package/renderer/components/docs/mdx/frame.tsx +0 -112
- package/renderer/components/docs/mdx/highlight.tsx +0 -151
- package/renderer/components/docs/mdx/iframe.tsx +0 -134
- package/renderer/components/docs/mdx/image.tsx +0 -235
- package/renderer/components/docs/mdx/index.ts +0 -237
- package/renderer/components/docs/mdx/landing.tsx +0 -684
- package/renderer/components/docs/mdx/mermaid.tsx +0 -240
- package/renderer/components/docs/mdx/param-field.tsx +0 -200
- package/renderer/components/docs/mdx/steps.tsx +0 -113
- package/renderer/components/docs/mdx/tabs.tsx +0 -86
- package/renderer/components/docs/mdx-renderer.tsx +0 -100
- package/renderer/components/docs/navigation/breadcrumbs.tsx +0 -76
- package/renderer/components/docs/navigation/index.ts +0 -8
- package/renderer/components/docs/navigation/page-nav.tsx +0 -64
- package/renderer/components/docs/navigation/sidebar.tsx +0 -515
- package/renderer/components/docs/navigation/toc.tsx +0 -113
- package/renderer/components/docs/notice.tsx +0 -105
- package/renderer/components/docs-header.tsx +0 -278
- package/renderer/components/docs-viewer/agent/agent-chat.tsx +0 -2076
- package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +0 -90
- package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +0 -49
- package/renderer/components/docs-viewer/agent/cards/index.tsx +0 -50
- package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +0 -212
- package/renderer/components/docs-viewer/agent/cards/types.ts +0 -84
- package/renderer/components/docs-viewer/agent/chat-message.tsx +0 -17
- package/renderer/components/docs-viewer/agent/index.tsx +0 -6
- package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +0 -119
- package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +0 -46
- package/renderer/components/docs-viewer/agent/messages/index.ts +0 -17
- package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +0 -721
- package/renderer/components/docs-viewer/agent/messages/types.ts +0 -61
- package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +0 -24
- package/renderer/components/docs-viewer/agent/messages/user-message.tsx +0 -51
- package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +0 -1283
- package/renderer/components/docs-viewer/content/changelog-page.tsx +0 -331
- package/renderer/components/docs-viewer/content/doc-page.tsx +0 -367
- package/renderer/components/docs-viewer/content/documentation-viewer.tsx +0 -17
- package/renderer/components/docs-viewer/content/index.tsx +0 -29
- package/renderer/components/docs-viewer/content/not-found-page.tsx +0 -330
- package/renderer/components/docs-viewer/content/request-details.tsx +0 -330
- package/renderer/components/docs-viewer/content/sections/auth.tsx +0 -69
- package/renderer/components/docs-viewer/content/sections/body.tsx +0 -66
- package/renderer/components/docs-viewer/content/sections/headers.tsx +0 -43
- package/renderer/components/docs-viewer/content/sections/overview.tsx +0 -40
- package/renderer/components/docs-viewer/content/sections/parameters.tsx +0 -43
- package/renderer/components/docs-viewer/content/sections/responses.tsx +0 -87
- package/renderer/components/docs-viewer/global-auth-modal.tsx +0 -352
- package/renderer/components/docs-viewer/index.tsx +0 -1670
- package/renderer/components/docs-viewer/playground/auth-editor.tsx +0 -280
- package/renderer/components/docs-viewer/playground/body-editor.tsx +0 -221
- package/renderer/components/docs-viewer/playground/code-editor.tsx +0 -224
- package/renderer/components/docs-viewer/playground/code-snippet.tsx +0 -387
- package/renderer/components/docs-viewer/playground/graphql-playground.tsx +0 -745
- package/renderer/components/docs-viewer/playground/index.tsx +0 -671
- package/renderer/components/docs-viewer/playground/key-value-editor.tsx +0 -261
- package/renderer/components/docs-viewer/playground/method-selector.tsx +0 -60
- package/renderer/components/docs-viewer/playground/request-builder.tsx +0 -179
- package/renderer/components/docs-viewer/playground/request-tabs.tsx +0 -237
- package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +0 -21
- package/renderer/components/docs-viewer/playground/response-cards/index.tsx +0 -93
- package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +0 -16
- package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +0 -23
- package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +0 -268
- package/renderer/components/docs-viewer/playground/response-cards/types.ts +0 -82
- package/renderer/components/docs-viewer/playground/response-viewer.tsx +0 -43
- package/renderer/components/docs-viewer/search/index.ts +0 -2
- package/renderer/components/docs-viewer/search/search-dialog.tsx +0 -331
- package/renderer/components/docs-viewer/search/use-search.ts +0 -117
- package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +0 -431
- package/renderer/components/docs-viewer/shared/method-badge.tsx +0 -41
- package/renderer/components/docs-viewer/shared/schema-viewer.tsx +0 -349
- package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +0 -259
- package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +0 -316
- package/renderer/components/docs-viewer/sidebar/index.tsx +0 -282
- package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +0 -202
- package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +0 -118
- package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +0 -212
- package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +0 -38
- package/renderer/components/theme-provider.tsx +0 -11
- package/renderer/components/theme-toggle.tsx +0 -76
- package/renderer/components/ui/badge.tsx +0 -46
- package/renderer/components/ui/button.tsx +0 -59
- package/renderer/components/ui/dialog.tsx +0 -118
- package/renderer/components/ui/dropdown-menu.tsx +0 -257
- package/renderer/components/ui/input.tsx +0 -21
- package/renderer/components/ui/label.tsx +0 -24
- package/renderer/components/ui/navigation-menu.tsx +0 -168
- package/renderer/components/ui/select.tsx +0 -190
- package/renderer/components/ui/spinner.tsx +0 -114
- package/renderer/components/ui/tabs.tsx +0 -66
- package/renderer/components/ui/tooltip.tsx +0 -61
- package/renderer/hooks/use-code-copy.ts +0 -88
- package/renderer/hooks/use-openapi-title.ts +0 -44
- package/renderer/lib/api-docs/agent/index.ts +0 -6
- package/renderer/lib/api-docs/agent/indexer.ts +0 -323
- package/renderer/lib/api-docs/agent/spec-summary.ts +0 -335
- package/renderer/lib/api-docs/agent/types.ts +0 -116
- package/renderer/lib/api-docs/auth/auth-context.tsx +0 -225
- package/renderer/lib/api-docs/auth/auth-storage.ts +0 -87
- package/renderer/lib/api-docs/auth/crypto.ts +0 -89
- package/renderer/lib/api-docs/auth/index.ts +0 -4
- package/renderer/lib/api-docs/code-editor/db.ts +0 -164
- package/renderer/lib/api-docs/code-editor/hooks.ts +0 -266
- package/renderer/lib/api-docs/code-editor/mode-context.tsx +0 -207
- package/renderer/lib/api-docs/code-editor/types.ts +0 -105
- package/renderer/lib/api-docs/codegen/definitions.ts +0 -297
- package/renderer/lib/api-docs/codegen/har.ts +0 -251
- package/renderer/lib/api-docs/codegen/index.ts +0 -159
- package/renderer/lib/api-docs/factories.ts +0 -170
- package/renderer/lib/api-docs/mobile-context.tsx +0 -112
- package/renderer/lib/api-docs/navigation-context.tsx +0 -88
- package/renderer/lib/api-docs/parsers/graphql/README.md +0 -129
- package/renderer/lib/api-docs/parsers/graphql/index.ts +0 -91
- package/renderer/lib/api-docs/parsers/graphql/parser.ts +0 -491
- package/renderer/lib/api-docs/parsers/graphql/transformer.ts +0 -246
- package/renderer/lib/api-docs/parsers/graphql/types.ts +0 -283
- package/renderer/lib/api-docs/parsers/openapi/README.md +0 -32
- package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +0 -60
- package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +0 -574
- package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +0 -403
- package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +0 -232
- package/renderer/lib/api-docs/parsers/openapi/index.ts +0 -171
- package/renderer/lib/api-docs/parsers/openapi/transformer.ts +0 -278
- package/renderer/lib/api-docs/parsers/openapi/validator.ts +0 -31
- package/renderer/lib/api-docs/playground/context.tsx +0 -107
- package/renderer/lib/api-docs/playground/navigation-context.tsx +0 -124
- package/renderer/lib/api-docs/playground/request-builder.ts +0 -223
- package/renderer/lib/api-docs/playground/request-runner.ts +0 -282
- package/renderer/lib/api-docs/playground/types.ts +0 -35
- package/renderer/lib/api-docs/types.ts +0 -269
- package/renderer/lib/api-docs/utils.ts +0 -311
- package/renderer/lib/cache.ts +0 -193
- package/renderer/lib/docs/config/domain-schema.ts +0 -260
- package/renderer/lib/docs/config/index.ts +0 -43
- package/renderer/lib/docs/config/loader.ts +0 -142
- package/renderer/lib/docs/config/schema.ts +0 -308
- package/renderer/lib/docs/index.ts +0 -12
- package/renderer/lib/docs/mdx/compiler.ts +0 -176
- package/renderer/lib/docs/mdx/frontmatter.ts +0 -91
- package/renderer/lib/docs/mdx/index.ts +0 -26
- package/renderer/lib/docs/navigation/generator.ts +0 -348
- package/renderer/lib/docs/navigation/index.ts +0 -12
- package/renderer/lib/docs/navigation/types.ts +0 -123
- package/renderer/lib/docs-navigation-context.tsx +0 -80
- package/renderer/lib/multi-tenant/context.ts +0 -105
- package/renderer/lib/storage/blob.ts +0 -1083
- package/renderer/lib/utils/icons.ts +0 -48
- package/renderer/lib/utils.ts +0 -6
- package/renderer/next.config.ts +0 -76
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
|
|
4
|
+
/**
|
|
5
|
+
* sitemap.xml - Auto-generated sitemap for search engines
|
|
6
|
+
*
|
|
7
|
+
* Generated from docs.json configuration.
|
|
8
|
+
* Private tabs and groups are excluded from the sitemap.
|
|
9
|
+
*/ const DOCS_DIR = join(process.cwd(), 'templates', 'starter');
|
|
10
|
+
const BASE_URL = process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3000';
|
|
11
|
+
function loadDocsConfig() {
|
|
12
|
+
const configPath = join(DOCS_DIR, 'docs.json');
|
|
13
|
+
if (!existsSync(configPath)) return null;
|
|
14
|
+
try {
|
|
15
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
16
|
+
return JSON.parse(content);
|
|
17
|
+
} catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function getFileLastModified(slug) {
|
|
22
|
+
const extensions = [
|
|
23
|
+
'.mdx',
|
|
24
|
+
'.md'
|
|
25
|
+
];
|
|
26
|
+
for (const ext of extensions){
|
|
27
|
+
const filePath = join(DOCS_DIR, `${slug}${ext}`);
|
|
28
|
+
if (existsSync(filePath)) {
|
|
29
|
+
try {
|
|
30
|
+
const stats = statSync(filePath);
|
|
31
|
+
return stats.mtime.toISOString().split('T')[0];
|
|
32
|
+
} catch {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
function getChangelogFiles() {
|
|
40
|
+
const changelogDir = join(DOCS_DIR, 'changelog');
|
|
41
|
+
if (!existsSync(changelogDir)) return [];
|
|
42
|
+
try {
|
|
43
|
+
return readdirSync(changelogDir).filter((f)=>(f.endsWith('.mdx') || f.endsWith('.md')) && f !== 'latest.mdx').map((f)=>f.replace(/\.(mdx?|md)$/, ''));
|
|
44
|
+
} catch {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function generateSitemap(config) {
|
|
49
|
+
const entries = [];
|
|
50
|
+
const baseUrl = config.seo?.metatags?.canonical || BASE_URL;
|
|
51
|
+
// Add homepage
|
|
52
|
+
entries.push({
|
|
53
|
+
url: baseUrl,
|
|
54
|
+
changefreq: 'weekly',
|
|
55
|
+
priority: 1.0
|
|
56
|
+
});
|
|
57
|
+
// Process navigation tabs (skip private tabs)
|
|
58
|
+
if (config.navigation?.tabs) {
|
|
59
|
+
for (const tab of config.navigation.tabs){
|
|
60
|
+
// Skip private tabs - they should not appear in sitemap
|
|
61
|
+
if (tab.visibility === 'private') {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (tab.type === 'docs' && tab.groups) {
|
|
65
|
+
for (const group of tab.groups){
|
|
66
|
+
// Skip private groups
|
|
67
|
+
if (group.visibility === 'private') {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
for (const page of group.pages){
|
|
71
|
+
const lastmod = getFileLastModified(page);
|
|
72
|
+
const urlPath = page === 'index' ? '' : page;
|
|
73
|
+
entries.push({
|
|
74
|
+
url: `${baseUrl}/#${tab.tab.toLowerCase()}/page/${urlPath}`.replace(/\/+$/, ''),
|
|
75
|
+
lastmod,
|
|
76
|
+
changefreq: 'weekly',
|
|
77
|
+
priority: page === 'index' ? 0.9 : 0.8
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
} else if (tab.type === 'openapi') {
|
|
82
|
+
entries.push({
|
|
83
|
+
url: `${baseUrl}/#api-reference`,
|
|
84
|
+
changefreq: 'weekly',
|
|
85
|
+
priority: 0.9
|
|
86
|
+
});
|
|
87
|
+
} else if (tab.type === 'changelog') {
|
|
88
|
+
entries.push({
|
|
89
|
+
url: `${baseUrl}/#changelog`,
|
|
90
|
+
changefreq: 'weekly',
|
|
91
|
+
priority: 0.7
|
|
92
|
+
});
|
|
93
|
+
// Add individual changelog pages
|
|
94
|
+
const versions = getChangelogFiles();
|
|
95
|
+
for (const version of versions){
|
|
96
|
+
const lastmod = getFileLastModified(`changelog/${version}`);
|
|
97
|
+
entries.push({
|
|
98
|
+
url: `${baseUrl}/#changelog/page/changelog/${version}`,
|
|
99
|
+
lastmod,
|
|
100
|
+
changefreq: 'monthly',
|
|
101
|
+
priority: 0.6
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Note: graphql tabs are skipped since they don't have individual pages
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Generate XML
|
|
109
|
+
const xml = `<?xml version="1.0" encoding="UTF-8"?>
|
|
110
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
111
|
+
${entries.map((entry)=>` <url>
|
|
112
|
+
<loc>${escapeXml(entry.url)}</loc>
|
|
113
|
+
${entry.lastmod ? ` <lastmod>${entry.lastmod}</lastmod>\n` : ''}${entry.changefreq ? ` <changefreq>${entry.changefreq}</changefreq>\n` : ''}${entry.priority !== undefined ? ` <priority>${entry.priority}</priority>\n` : ''} </url>`).join('\n')}
|
|
114
|
+
</urlset>`;
|
|
115
|
+
return xml;
|
|
116
|
+
}
|
|
117
|
+
function escapeXml(str) {
|
|
118
|
+
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
119
|
+
}
|
|
120
|
+
export async function GET() {
|
|
121
|
+
try {
|
|
122
|
+
// Check for custom sitemap.xml first
|
|
123
|
+
const customPath = join(DOCS_DIR, 'sitemap.xml');
|
|
124
|
+
if (existsSync(customPath)) {
|
|
125
|
+
const customContent = readFileSync(customPath, 'utf-8');
|
|
126
|
+
return new NextResponse(customContent, {
|
|
127
|
+
headers: {
|
|
128
|
+
'Content-Type': 'application/xml; charset=utf-8',
|
|
129
|
+
'Cache-Control': 'public, max-age=3600'
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Generate from docs.json config
|
|
134
|
+
const config = loadDocsConfig();
|
|
135
|
+
if (!config) {
|
|
136
|
+
return new NextResponse('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>', {
|
|
137
|
+
headers: {
|
|
138
|
+
'Content-Type': 'application/xml; charset=utf-8'
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const content = generateSitemap(config);
|
|
143
|
+
return new NextResponse(content, {
|
|
144
|
+
headers: {
|
|
145
|
+
'Content-Type': 'application/xml; charset=utf-8',
|
|
146
|
+
'Cache-Control': 'public, max-age=3600'
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
} catch (error) {
|
|
150
|
+
console.error('Error generating sitemap.xml:', error);
|
|
151
|
+
return new NextResponse('Error generating sitemap.xml', {
|
|
152
|
+
status: 500
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useState, createContext, useContext } from 'react';
|
|
4
|
+
import { cn } from '@/lib/utils';
|
|
5
|
+
import { CaretDown } from '@phosphor-icons/react';
|
|
6
|
+
import * as PhosphorIcons from '@phosphor-icons/react';
|
|
7
|
+
/**
|
|
8
|
+
* Accordion Components for MDX Documentation
|
|
9
|
+
*
|
|
10
|
+
* Mintlify-compatible accordion components for collapsible content sections.
|
|
11
|
+
*/ // Dynamic icon resolver
|
|
12
|
+
function getIcon(iconName) {
|
|
13
|
+
if (!iconName) return null;
|
|
14
|
+
const pascalCase = iconName.split(/[-_]/).map((word)=>word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join('');
|
|
15
|
+
const Icon = PhosphorIcons[pascalCase];
|
|
16
|
+
return Icon || null;
|
|
17
|
+
}
|
|
18
|
+
const AccordionGroupContext = /*#__PURE__*/ createContext(null);
|
|
19
|
+
export function Accordion({ title, children, description, icon, defaultOpen = false, className }) {
|
|
20
|
+
const groupContext = useContext(AccordionGroupContext);
|
|
21
|
+
const [localOpen, setLocalOpen] = useState(defaultOpen);
|
|
22
|
+
// Generate a stable ID for this accordion
|
|
23
|
+
const id = React.useId();
|
|
24
|
+
// Use group context if available, otherwise use local state
|
|
25
|
+
const isOpen = groupContext ? groupContext.openItems.has(id) : localOpen;
|
|
26
|
+
const toggle = ()=>{
|
|
27
|
+
if (groupContext) {
|
|
28
|
+
groupContext.toggleItem(id);
|
|
29
|
+
} else {
|
|
30
|
+
setLocalOpen(!localOpen);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
// Register default open state with group on mount
|
|
34
|
+
React.useEffect(()=>{
|
|
35
|
+
if (groupContext && defaultOpen) {
|
|
36
|
+
groupContext.toggleItem(id);
|
|
37
|
+
}
|
|
38
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
39
|
+
}, []);
|
|
40
|
+
const Icon = icon ? getIcon(icon) : null;
|
|
41
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
42
|
+
className: cn('border border-border rounded-lg overflow-hidden', 'bg-card', className),
|
|
43
|
+
children: [
|
|
44
|
+
/*#__PURE__*/ _jsxs("button", {
|
|
45
|
+
type: "button",
|
|
46
|
+
onClick: toggle,
|
|
47
|
+
className: cn('flex w-full items-center gap-3 p-4 text-left', 'hover:bg-muted/50 transition-colors', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50'),
|
|
48
|
+
"aria-expanded": isOpen,
|
|
49
|
+
children: [
|
|
50
|
+
Icon && /*#__PURE__*/ _jsx(Icon, {
|
|
51
|
+
className: "h-5 w-5 shrink-0 text-primary",
|
|
52
|
+
weight: "duotone"
|
|
53
|
+
}),
|
|
54
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
55
|
+
className: "flex-1 min-w-0",
|
|
56
|
+
children: [
|
|
57
|
+
/*#__PURE__*/ _jsx("div", {
|
|
58
|
+
className: "font-medium text-foreground",
|
|
59
|
+
children: title
|
|
60
|
+
}),
|
|
61
|
+
description && /*#__PURE__*/ _jsx("div", {
|
|
62
|
+
className: "text-sm text-muted-foreground mt-0.5",
|
|
63
|
+
children: description
|
|
64
|
+
})
|
|
65
|
+
]
|
|
66
|
+
}),
|
|
67
|
+
/*#__PURE__*/ _jsx(CaretDown, {
|
|
68
|
+
className: cn('h-5 w-5 shrink-0 text-muted-foreground transition-transform duration-200', isOpen && 'rotate-180'),
|
|
69
|
+
weight: "bold"
|
|
70
|
+
})
|
|
71
|
+
]
|
|
72
|
+
}),
|
|
73
|
+
/*#__PURE__*/ _jsx("div", {
|
|
74
|
+
className: cn('grid transition-all duration-200 ease-in-out', isOpen ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'),
|
|
75
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
76
|
+
className: "overflow-hidden",
|
|
77
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
78
|
+
className: "px-4 pb-4 text-sm text-foreground/90 [&>p]:mb-2 [&>p:last-child]:mb-0",
|
|
79
|
+
children: children
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
]
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export function AccordionGroup({ children, allowMultiple = true, className }) {
|
|
87
|
+
const [openItems, setOpenItems] = useState(new Set());
|
|
88
|
+
const toggleItem = (id)=>{
|
|
89
|
+
setOpenItems((prev)=>{
|
|
90
|
+
const next = new Set(prev);
|
|
91
|
+
if (next.has(id)) {
|
|
92
|
+
next.delete(id);
|
|
93
|
+
} else {
|
|
94
|
+
if (!allowMultiple) {
|
|
95
|
+
next.clear();
|
|
96
|
+
}
|
|
97
|
+
next.add(id);
|
|
98
|
+
}
|
|
99
|
+
return next;
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
return /*#__PURE__*/ _jsx(AccordionGroupContext.Provider, {
|
|
103
|
+
value: {
|
|
104
|
+
openItems,
|
|
105
|
+
toggleItem,
|
|
106
|
+
allowMultiple
|
|
107
|
+
},
|
|
108
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
109
|
+
className: cn('space-y-2 my-4', className),
|
|
110
|
+
children: children
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from '@/lib/utils';
|
|
4
|
+
import * as PhosphorIcons from '@phosphor-icons/react';
|
|
5
|
+
// Helper to get Phosphor icon component from name
|
|
6
|
+
function getIcon(iconName) {
|
|
7
|
+
if (!iconName) return null;
|
|
8
|
+
// Convert kebab-case to PascalCase for Phosphor icons
|
|
9
|
+
const pascalCase = iconName.split('-').map((part)=>part.charAt(0).toUpperCase() + part.slice(1)).join('');
|
|
10
|
+
const IconComponent = PhosphorIcons[pascalCase];
|
|
11
|
+
return IconComponent || null;
|
|
12
|
+
}
|
|
13
|
+
// Color variants - filled background
|
|
14
|
+
const colorVariants = {
|
|
15
|
+
gray: 'bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300',
|
|
16
|
+
blue: 'bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300',
|
|
17
|
+
green: 'bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300',
|
|
18
|
+
yellow: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-300',
|
|
19
|
+
orange: 'bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300',
|
|
20
|
+
red: 'bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300',
|
|
21
|
+
purple: 'bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300',
|
|
22
|
+
white: 'bg-white text-gray-900 border border-gray-200 dark:bg-gray-900 dark:text-gray-100 dark:border-gray-700',
|
|
23
|
+
surface: 'bg-muted text-foreground',
|
|
24
|
+
'white-destructive': 'bg-white text-red-600 border border-red-200 dark:bg-gray-900 dark:text-red-400 dark:border-red-800',
|
|
25
|
+
'surface-destructive': 'bg-red-50 text-red-600 dark:bg-red-950 dark:text-red-400'
|
|
26
|
+
};
|
|
27
|
+
// Color variants - stroke/outline
|
|
28
|
+
const strokeVariants = {
|
|
29
|
+
gray: 'border border-gray-300 text-gray-700 dark:border-gray-600 dark:text-gray-300',
|
|
30
|
+
blue: 'border border-blue-300 text-blue-700 dark:border-blue-600 dark:text-blue-300',
|
|
31
|
+
green: 'border border-green-300 text-green-700 dark:border-green-600 dark:text-green-300',
|
|
32
|
+
yellow: 'border border-yellow-300 text-yellow-700 dark:border-yellow-600 dark:text-yellow-300',
|
|
33
|
+
orange: 'border border-orange-300 text-orange-700 dark:border-orange-600 dark:text-orange-300',
|
|
34
|
+
red: 'border border-red-300 text-red-700 dark:border-red-600 dark:text-red-300',
|
|
35
|
+
purple: 'border border-purple-300 text-purple-700 dark:border-purple-600 dark:text-purple-300',
|
|
36
|
+
white: 'border border-gray-300 text-gray-700 dark:border-gray-600 dark:text-gray-300',
|
|
37
|
+
surface: 'border border-border text-foreground',
|
|
38
|
+
'white-destructive': 'border border-red-300 text-red-600 dark:border-red-600 dark:text-red-400',
|
|
39
|
+
'surface-destructive': 'border border-red-300 text-red-600 dark:border-red-600 dark:text-red-400'
|
|
40
|
+
};
|
|
41
|
+
// Size variants
|
|
42
|
+
const sizeVariants = {
|
|
43
|
+
xs: 'text-[10px] px-1.5 py-0.5 gap-1',
|
|
44
|
+
sm: 'text-xs px-2 py-0.5 gap-1',
|
|
45
|
+
md: 'text-sm px-2.5 py-1 gap-1.5',
|
|
46
|
+
lg: 'text-base px-3 py-1.5 gap-2'
|
|
47
|
+
};
|
|
48
|
+
// Icon size variants
|
|
49
|
+
const iconSizeVariants = {
|
|
50
|
+
xs: 'h-2.5 w-2.5',
|
|
51
|
+
sm: 'h-3 w-3',
|
|
52
|
+
md: 'h-3.5 w-3.5',
|
|
53
|
+
lg: 'h-4 w-4'
|
|
54
|
+
};
|
|
55
|
+
// Shape variants
|
|
56
|
+
const shapeVariants = {
|
|
57
|
+
rounded: 'rounded-md',
|
|
58
|
+
pill: 'rounded-full'
|
|
59
|
+
};
|
|
60
|
+
export function Badge({ children, color = 'gray', size = 'md', shape = 'rounded', icon, stroke = false, disabled = false, className }) {
|
|
61
|
+
const IconComponent = getIcon(icon);
|
|
62
|
+
return /*#__PURE__*/ _jsxs("span", {
|
|
63
|
+
className: cn('inline-flex items-center font-medium whitespace-nowrap', sizeVariants[size], shapeVariants[shape], stroke ? strokeVariants[color] : colorVariants[color], disabled && 'opacity-50 cursor-not-allowed', className),
|
|
64
|
+
children: [
|
|
65
|
+
IconComponent && /*#__PURE__*/ _jsx(IconComponent, {
|
|
66
|
+
className: cn(iconSizeVariants[size], 'shrink-0'),
|
|
67
|
+
weight: "bold"
|
|
68
|
+
}),
|
|
69
|
+
children
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { cn } from '@/lib/utils';
|
|
5
|
+
import { Info as InfoIcon, Warning as WarningIcon, Lightbulb, Note as NoteIcon, CheckCircle, XCircle } from '@phosphor-icons/react';
|
|
6
|
+
const calloutConfig = {
|
|
7
|
+
note: {
|
|
8
|
+
icon: NoteIcon,
|
|
9
|
+
defaultTitle: 'Note',
|
|
10
|
+
containerClass: 'border-blue-500/30 bg-blue-500/10 dark:border-blue-400/30 dark:bg-blue-400/10',
|
|
11
|
+
iconClass: 'text-blue-600 dark:text-blue-400',
|
|
12
|
+
titleClass: 'text-blue-700 dark:text-blue-300'
|
|
13
|
+
},
|
|
14
|
+
warning: {
|
|
15
|
+
icon: WarningIcon,
|
|
16
|
+
defaultTitle: 'Warning',
|
|
17
|
+
containerClass: 'border-amber-500/30 bg-amber-500/10 dark:border-amber-400/30 dark:bg-amber-400/10',
|
|
18
|
+
iconClass: 'text-amber-600 dark:text-amber-400',
|
|
19
|
+
titleClass: 'text-amber-700 dark:text-amber-300'
|
|
20
|
+
},
|
|
21
|
+
info: {
|
|
22
|
+
icon: InfoIcon,
|
|
23
|
+
defaultTitle: 'Info',
|
|
24
|
+
containerClass: 'border-sky-500/30 bg-sky-500/10 dark:border-sky-400/30 dark:bg-sky-400/10',
|
|
25
|
+
iconClass: 'text-sky-600 dark:text-sky-400',
|
|
26
|
+
titleClass: 'text-sky-700 dark:text-sky-300'
|
|
27
|
+
},
|
|
28
|
+
tip: {
|
|
29
|
+
icon: Lightbulb,
|
|
30
|
+
defaultTitle: 'Tip',
|
|
31
|
+
containerClass: 'border-emerald-500/30 bg-emerald-500/10 dark:border-emerald-400/30 dark:bg-emerald-400/10',
|
|
32
|
+
iconClass: 'text-emerald-600 dark:text-emerald-400',
|
|
33
|
+
titleClass: 'text-emerald-700 dark:text-emerald-300'
|
|
34
|
+
},
|
|
35
|
+
check: {
|
|
36
|
+
icon: CheckCircle,
|
|
37
|
+
defaultTitle: 'Success',
|
|
38
|
+
containerClass: 'border-green-500/30 bg-green-500/10 dark:border-green-400/30 dark:bg-green-400/10',
|
|
39
|
+
iconClass: 'text-green-600 dark:text-green-400',
|
|
40
|
+
titleClass: 'text-green-700 dark:text-green-300'
|
|
41
|
+
},
|
|
42
|
+
error: {
|
|
43
|
+
icon: XCircle,
|
|
44
|
+
defaultTitle: 'Error',
|
|
45
|
+
containerClass: 'border-red-500/30 bg-red-500/10 dark:border-red-400/30 dark:bg-red-400/10',
|
|
46
|
+
iconClass: 'text-red-600 dark:text-red-400',
|
|
47
|
+
titleClass: 'text-red-700 dark:text-red-300'
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
function BaseCallout({ variant, children, title, className }) {
|
|
51
|
+
const config = calloutConfig[variant];
|
|
52
|
+
const Icon = config.icon;
|
|
53
|
+
const displayTitle = title ?? config.defaultTitle;
|
|
54
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
55
|
+
className: cn(`docs-callout docs-callout-${variant} my-4 rounded-lg border p-4`, config.containerClass, className),
|
|
56
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
57
|
+
className: "flex items-start gap-3",
|
|
58
|
+
children: [
|
|
59
|
+
/*#__PURE__*/ _jsx(Icon, {
|
|
60
|
+
className: cn('docs-callout-icon mt-0.5 h-5 w-5 shrink-0', config.iconClass),
|
|
61
|
+
weight: "fill"
|
|
62
|
+
}),
|
|
63
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
64
|
+
className: "docs-callout-content flex-1 min-w-0",
|
|
65
|
+
children: [
|
|
66
|
+
displayTitle && /*#__PURE__*/ _jsx("div", {
|
|
67
|
+
className: cn('docs-callout-title font-semibold text-sm mb-1', config.titleClass),
|
|
68
|
+
children: displayTitle
|
|
69
|
+
}),
|
|
70
|
+
/*#__PURE__*/ _jsx("div", {
|
|
71
|
+
className: "docs-callout-body text-sm text-foreground/90 [&>p]:mb-2 [&>p:last-child]:mb-0 [&>ul]:mt-2 [&>ol]:mt-2",
|
|
72
|
+
children: children
|
|
73
|
+
})
|
|
74
|
+
]
|
|
75
|
+
})
|
|
76
|
+
]
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// Individual callout components for MDX usage
|
|
81
|
+
export function Note({ children, title, className }) {
|
|
82
|
+
return /*#__PURE__*/ _jsx(BaseCallout, {
|
|
83
|
+
variant: "note",
|
|
84
|
+
title: title,
|
|
85
|
+
className: className,
|
|
86
|
+
children: children
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
export function Warning({ children, title, className }) {
|
|
90
|
+
return /*#__PURE__*/ _jsx(BaseCallout, {
|
|
91
|
+
variant: "warning",
|
|
92
|
+
title: title,
|
|
93
|
+
className: className,
|
|
94
|
+
children: children
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export function Info({ children, title, className }) {
|
|
98
|
+
return /*#__PURE__*/ _jsx(BaseCallout, {
|
|
99
|
+
variant: "info",
|
|
100
|
+
title: title,
|
|
101
|
+
className: className,
|
|
102
|
+
children: children
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export function Tip({ children, title, className }) {
|
|
106
|
+
return /*#__PURE__*/ _jsx(BaseCallout, {
|
|
107
|
+
variant: "tip",
|
|
108
|
+
title: title,
|
|
109
|
+
className: className,
|
|
110
|
+
children: children
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
export function Check({ children, title, className }) {
|
|
114
|
+
return /*#__PURE__*/ _jsx(BaseCallout, {
|
|
115
|
+
variant: "check",
|
|
116
|
+
title: title,
|
|
117
|
+
className: className,
|
|
118
|
+
children: children
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
export function Error({ children, title, className }) {
|
|
122
|
+
return /*#__PURE__*/ _jsx(BaseCallout, {
|
|
123
|
+
variant: "error",
|
|
124
|
+
title: title,
|
|
125
|
+
className: className,
|
|
126
|
+
children: children
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// Generic Callout component with type prop
|
|
130
|
+
export function Callout({ type = 'note', children, title, className }) {
|
|
131
|
+
return /*#__PURE__*/ _jsx(BaseCallout, {
|
|
132
|
+
variant: type,
|
|
133
|
+
title: title,
|
|
134
|
+
className: className,
|
|
135
|
+
children: children
|
|
136
|
+
});
|
|
137
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import Link from 'next/link';
|
|
5
|
+
import { cn } from '@/lib/utils';
|
|
6
|
+
import { ArrowRight, ArrowSquareOut } from '@phosphor-icons/react';
|
|
7
|
+
import * as PhosphorIcons from '@phosphor-icons/react';
|
|
8
|
+
import { useDocsNavigation } from '@/lib/docs-navigation-context';
|
|
9
|
+
// Dynamic icon resolver for Phosphor icons
|
|
10
|
+
function getIcon(iconName) {
|
|
11
|
+
if (!iconName) return null;
|
|
12
|
+
// Convert kebab-case or snake_case to PascalCase
|
|
13
|
+
const pascalCase = iconName.split(/[-_]/).map((word)=>word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join('');
|
|
14
|
+
// Try to get the icon from Phosphor
|
|
15
|
+
const Icon = PhosphorIcons[pascalCase];
|
|
16
|
+
return Icon || null;
|
|
17
|
+
}
|
|
18
|
+
// Icon size configurations
|
|
19
|
+
const ICON_SIZES = {
|
|
20
|
+
sm: {
|
|
21
|
+
container: 'h-8 w-8',
|
|
22
|
+
icon: 'h-4 w-4',
|
|
23
|
+
img: 'h-5 w-5'
|
|
24
|
+
},
|
|
25
|
+
md: {
|
|
26
|
+
container: 'h-10 w-10',
|
|
27
|
+
icon: 'h-5 w-5',
|
|
28
|
+
img: 'h-6 w-6'
|
|
29
|
+
},
|
|
30
|
+
lg: {
|
|
31
|
+
container: 'h-12 w-12',
|
|
32
|
+
icon: 'h-6 w-6',
|
|
33
|
+
img: 'h-8 w-8'
|
|
34
|
+
},
|
|
35
|
+
xl: {
|
|
36
|
+
container: 'h-16 w-16',
|
|
37
|
+
icon: 'h-8 w-8',
|
|
38
|
+
img: 'h-12 w-12'
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
export function Card({ title, children, icon, iconSize = 'md', href, horizontal = false, img, cta, arrow, className }) {
|
|
42
|
+
// Check if icon is a string (icon name) or React node
|
|
43
|
+
const isIconString = typeof icon === 'string';
|
|
44
|
+
const Icon = isIconString ? getIcon(icon) : null;
|
|
45
|
+
const hasCustomIcon = !isIconString && icon != null;
|
|
46
|
+
const sizeConfig = ICON_SIZES[iconSize];
|
|
47
|
+
const isExternal = href?.startsWith('http') || href?.startsWith('//');
|
|
48
|
+
const docsNav = useDocsNavigation();
|
|
49
|
+
// Check if this is a tab switch link (/api-reference, /changelog)
|
|
50
|
+
const isTabSwitchLink = (href === '/api-reference' || href === '/changelog') && docsNav?.isApiDocsView;
|
|
51
|
+
// Check if this is an internal docs link (starts with / but not external or tab switch)
|
|
52
|
+
const isInternalDocsLink = href?.startsWith('/') && !isExternal && !isTabSwitchLink && docsNav?.isApiDocsView;
|
|
53
|
+
// Extract slug from href - removes /docs/ prefix if present, or just the leading /
|
|
54
|
+
const getSlugFromHref = (path)=>{
|
|
55
|
+
let slug = path;
|
|
56
|
+
if (slug.startsWith('/docs/')) {
|
|
57
|
+
slug = slug.slice(6); // Remove '/docs/'
|
|
58
|
+
} else if (slug.startsWith('/')) {
|
|
59
|
+
slug = slug.slice(1); // Remove leading '/'
|
|
60
|
+
}
|
|
61
|
+
return slug;
|
|
62
|
+
};
|
|
63
|
+
// Get tab ID from href
|
|
64
|
+
const getTabIdFromHref = (path)=>{
|
|
65
|
+
if (path === '/api-reference') return 'api-reference';
|
|
66
|
+
if (path === '/changelog') return 'changelog';
|
|
67
|
+
return 'docs';
|
|
68
|
+
};
|
|
69
|
+
// Handle click for internal navigation
|
|
70
|
+
const handleClick = (e)=>{
|
|
71
|
+
if (!href || !docsNav) return;
|
|
72
|
+
if (isTabSwitchLink) {
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
const tabId = getTabIdFromHref(href);
|
|
75
|
+
docsNav.switchToTab(tabId);
|
|
76
|
+
} else if (isInternalDocsLink) {
|
|
77
|
+
e.preventDefault();
|
|
78
|
+
const slug = getSlugFromHref(href);
|
|
79
|
+
docsNav.navigateToPage(slug);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const showArrow = arrow ?? isExternal;
|
|
83
|
+
const cardContent = /*#__PURE__*/ _jsxs("div", {
|
|
84
|
+
className: cn('docs-card group relative rounded-lg border border-border bg-transparent p-4 transition-all h-full', href && 'hover:border-primary/50 hover:bg-muted/30 cursor-pointer', horizontal ? 'docs-card-horizontal flex items-start gap-4' : 'flex flex-col justify-start', className),
|
|
85
|
+
children: [
|
|
86
|
+
img && !horizontal && /*#__PURE__*/ _jsx("div", {
|
|
87
|
+
className: "mb-4 -mx-4 -mt-4 overflow-hidden rounded-t-lg",
|
|
88
|
+
children: /*#__PURE__*/ _jsx("img", {
|
|
89
|
+
src: img,
|
|
90
|
+
alt: title,
|
|
91
|
+
className: "w-full h-auto object-cover"
|
|
92
|
+
})
|
|
93
|
+
}),
|
|
94
|
+
Icon && /*#__PURE__*/ _jsx("div", {
|
|
95
|
+
className: cn('docs-card-icon flex shrink-0 items-center justify-center rounded-lg', sizeConfig.container, 'bg-primary/10 text-primary', horizontal && 'mt-0.5'),
|
|
96
|
+
children: /*#__PURE__*/ _jsx(Icon, {
|
|
97
|
+
className: sizeConfig.icon,
|
|
98
|
+
weight: "duotone"
|
|
99
|
+
})
|
|
100
|
+
}),
|
|
101
|
+
hasCustomIcon && /*#__PURE__*/ _jsx("div", {
|
|
102
|
+
className: cn('docs-card-icon flex shrink-0 items-center justify-center rounded-lg overflow-hidden', sizeConfig.container, horizontal && 'mt-0.5'),
|
|
103
|
+
children: icon
|
|
104
|
+
}),
|
|
105
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
106
|
+
className: cn('docs-card-content min-w-0', horizontal && 'flex-1', !horizontal && (Icon || hasCustomIcon) && 'mt-3'),
|
|
107
|
+
children: [
|
|
108
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
109
|
+
className: "flex items-center gap-2",
|
|
110
|
+
children: [
|
|
111
|
+
/*#__PURE__*/ _jsx("h3", {
|
|
112
|
+
className: "docs-card-title font-semibold text-foreground group-hover:text-primary transition-colors",
|
|
113
|
+
children: title
|
|
114
|
+
}),
|
|
115
|
+
showArrow && (isExternal ? /*#__PURE__*/ _jsx(ArrowSquareOut, {
|
|
116
|
+
className: "h-4 w-4 text-muted-foreground"
|
|
117
|
+
}) : /*#__PURE__*/ _jsx(ArrowRight, {
|
|
118
|
+
className: "h-4 w-4 text-muted-foreground opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 transition-all"
|
|
119
|
+
}))
|
|
120
|
+
]
|
|
121
|
+
}),
|
|
122
|
+
children && /*#__PURE__*/ _jsx("div", {
|
|
123
|
+
className: "docs-card-description mt-1 text-sm text-muted-foreground",
|
|
124
|
+
children: children
|
|
125
|
+
}),
|
|
126
|
+
cta && /*#__PURE__*/ _jsx("div", {
|
|
127
|
+
className: "docs-card-cta mt-3 text-sm font-medium text-primary",
|
|
128
|
+
children: cta
|
|
129
|
+
})
|
|
130
|
+
]
|
|
131
|
+
})
|
|
132
|
+
]
|
|
133
|
+
});
|
|
134
|
+
if (href) {
|
|
135
|
+
if (isExternal) {
|
|
136
|
+
return /*#__PURE__*/ _jsx("a", {
|
|
137
|
+
href: href,
|
|
138
|
+
target: "_blank",
|
|
139
|
+
rel: "noopener noreferrer",
|
|
140
|
+
className: "docs-card-link block h-full",
|
|
141
|
+
children: cardContent
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// For internal docs links or tab switch links in ApiDocs view, use click handler
|
|
145
|
+
if (isInternalDocsLink || isTabSwitchLink) {
|
|
146
|
+
return /*#__PURE__*/ _jsx("a", {
|
|
147
|
+
href: href,
|
|
148
|
+
onClick: handleClick,
|
|
149
|
+
className: "docs-card-link block h-full cursor-pointer",
|
|
150
|
+
children: cardContent
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// Standard Next.js Link for all other internal links
|
|
154
|
+
return /*#__PURE__*/ _jsx(Link, {
|
|
155
|
+
href: href,
|
|
156
|
+
className: "docs-card-link block h-full",
|
|
157
|
+
children: cardContent
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return cardContent;
|
|
161
|
+
}
|
|
162
|
+
export function CardGroup({ children, cols = 2, className }) {
|
|
163
|
+
const gridCols = {
|
|
164
|
+
1: 'grid-cols-1',
|
|
165
|
+
2: 'grid-cols-1 sm:grid-cols-2',
|
|
166
|
+
3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',
|
|
167
|
+
4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4'
|
|
168
|
+
};
|
|
169
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
170
|
+
className: cn('docs-card-group grid gap-4 my-4', gridCols[cols], className),
|
|
171
|
+
children: children
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// Alias for Mintlify compatibility
|
|
175
|
+
export { CardGroup as Columns };
|