@assistant-ui/mcp-docs-server 0.2.3 → 0.3.1
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/README.md +16 -43
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -91
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +9 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +91 -0
- package/dist/proxy.js.map +1 -0
- package/package.json +8 -12
- package/src/index.ts +3 -115
- package/src/proxy.test.ts +385 -0
- package/src/proxy.ts +126 -0
- package/.docs/organized/code-examples/waterfall.md +0 -807
- package/.docs/organized/code-examples/with-a2a.md +0 -675
- package/.docs/organized/code-examples/with-ag-ui.md +0 -553
- package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -466
- package/.docs/organized/code-examples/with-artifacts.md +0 -815
- package/.docs/organized/code-examples/with-assistant-transport.md +0 -576
- package/.docs/organized/code-examples/with-browser-extension.md +0 -371
- package/.docs/organized/code-examples/with-chain-of-thought.md +0 -962
- package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
- package/.docs/organized/code-examples/with-cloud.md +0 -439
- package/.docs/organized/code-examples/with-custom-thread-list.md +0 -569
- package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -527
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -697
- package/.docs/organized/code-examples/with-eve.md +0 -405
- package/.docs/organized/code-examples/with-expo.md +0 -2246
- package/.docs/organized/code-examples/with-external-store.md +0 -421
- package/.docs/organized/code-examples/with-ffmpeg.md +0 -829
- package/.docs/organized/code-examples/with-generative-ui.md +0 -1810
- package/.docs/organized/code-examples/with-google-adk.md +0 -368
- package/.docs/organized/code-examples/with-heat-graph.md +0 -304
- package/.docs/organized/code-examples/with-image-generation.md +0 -463
- package/.docs/organized/code-examples/with-interactables.md +0 -733
- package/.docs/organized/code-examples/with-langchain.md +0 -446
- package/.docs/organized/code-examples/with-langgraph.md +0 -855
- package/.docs/organized/code-examples/with-livekit.md +0 -643
- package/.docs/organized/code-examples/with-mcp.md +0 -782
- package/.docs/organized/code-examples/with-nuxt.md +0 -2428
- package/.docs/organized/code-examples/with-opencode.md +0 -1974
- package/.docs/organized/code-examples/with-openui.md +0 -450
- package/.docs/organized/code-examples/with-pi.md +0 -2084
- package/.docs/organized/code-examples/with-react-hook-form.md +0 -727
- package/.docs/organized/code-examples/with-react-ink-web.md +0 -740
- package/.docs/organized/code-examples/with-react-ink.md +0 -473
- package/.docs/organized/code-examples/with-react-router.md +0 -936
- package/.docs/organized/code-examples/with-resumable-stream.md +0 -668
- package/.docs/organized/code-examples/with-store.md +0 -679
- package/.docs/organized/code-examples/with-svelte.md +0 -415
- package/.docs/organized/code-examples/with-sveltekit.md +0 -1061
- package/.docs/organized/code-examples/with-tanstack.md +0 -812
- package/.docs/organized/code-examples/with-tap-runtime.md +0 -813
- package/.docs/organized/code-examples/with-virtualized-thread.md +0 -681
- package/.docs/organized/code-examples/with-vue.md +0 -408
- package/.docs/raw/docs/(getting-started)/architecture.mdx +0 -146
- package/.docs/raw/docs/(getting-started)/base-ui.mdx +0 -39
- package/.docs/raw/docs/(getting-started)/cli.mdx +0 -542
- package/.docs/raw/docs/(getting-started)/devtools.mdx +0 -79
- package/.docs/raw/docs/(getting-started)/index.mdx +0 -23
- package/.docs/raw/docs/(getting-started)/installation.mdx +0 -483
- package/.docs/raw/docs/(getting-started)/llm.mdx +0 -211
- package/.docs/raw/docs/(getting-started)/rtl.mdx +0 -78
- package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +0 -36
- package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +0 -34
- package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +0 -44
- package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +0 -59
- package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +0 -26
- package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +0 -84
- package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +0 -64
- package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +0 -57
- package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +0 -49
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +0 -40
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +0 -56
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +0 -86
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +0 -39
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +0 -42
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +0 -84
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +0 -85
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +0 -45
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +0 -93
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +0 -129
- package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +0 -31
- package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +0 -34
- package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +0 -350
- package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +0 -28
- package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +0 -97
- package/.docs/raw/docs/(reference)/api-reference/integrations/ai-sdk.mdx +0 -200
- package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -118
- package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -37
- package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +0 -50
- package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +0 -566
- package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +0 -152
- package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +0 -239
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +0 -208
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +0 -108
- package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +0 -99
- package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +0 -145
- package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +0 -82
- package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +0 -637
- package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +0 -65
- package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +0 -73
- package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +0 -117
- package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +0 -339
- package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +0 -77
- package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +0 -88
- package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +0 -81
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +0 -129
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +0 -138
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +0 -122
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +0 -289
- package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +0 -32
- package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +0 -43
- package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +0 -43
- package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +0 -36
- package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +0 -85
- package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +0 -45
- package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +0 -55
- package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +0 -151
- package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +0 -106
- package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +0 -178
- package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +0 -48
- package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +0 -19
- package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +0 -152
- package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +0 -54
- package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +0 -36
- package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +0 -527
- package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -604
- package/.docs/raw/docs/cloud/authorization.mdx +0 -252
- package/.docs/raw/docs/cloud/index.mdx +0 -46
- package/.docs/raw/docs/cloud/langgraph.mdx +0 -554
- package/.docs/raw/docs/copilots/assistant-frame.mdx +0 -411
- package/.docs/raw/docs/copilots/make-assistant-visible.mdx +0 -82
- package/.docs/raw/docs/copilots/model-context.mdx +0 -156
- package/.docs/raw/docs/copilots/motivation.mdx +0 -202
- package/.docs/raw/docs/copilots/use-assistant-instructions.mdx +0 -64
- package/.docs/raw/docs/guides/attachments.mdx +0 -619
- package/.docs/raw/docs/guides/branching.mdx +0 -76
- package/.docs/raw/docs/guides/chain-of-thought.mdx +0 -164
- package/.docs/raw/docs/guides/chatgpt-subscription.mdx +0 -108
- package/.docs/raw/docs/guides/context-api.mdx +0 -619
- package/.docs/raw/docs/guides/dictation.mdx +0 -298
- package/.docs/raw/docs/guides/editing.mdx +0 -102
- package/.docs/raw/docs/guides/electron.mdx +0 -369
- package/.docs/raw/docs/guides/headless-composer-input.mdx +0 -113
- package/.docs/raw/docs/guides/image-generation.mdx +0 -74
- package/.docs/raw/docs/guides/index.mdx +0 -117
- package/.docs/raw/docs/guides/input-history.mdx +0 -55
- package/.docs/raw/docs/guides/latex.mdx +0 -158
- package/.docs/raw/docs/guides/mentions.mdx +0 -575
- package/.docs/raw/docs/guides/message-timing.mdx +0 -215
- package/.docs/raw/docs/guides/quoting.mdx +0 -169
- package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +0 -212
- package/.docs/raw/docs/guides/resumable-stream-stores.mdx +0 -152
- package/.docs/raw/docs/guides/resumable-streams.mdx +0 -292
- package/.docs/raw/docs/guides/slash-commands.mdx +0 -358
- package/.docs/raw/docs/guides/speech.mdx +0 -172
- package/.docs/raw/docs/guides/suggestions.mdx +0 -384
- package/.docs/raw/docs/guides/virtualization.mdx +0 -133
- package/.docs/raw/docs/guides/voice.mdx +0 -310
- package/.docs/raw/docs/ink/adapters.mdx +0 -99
- package/.docs/raw/docs/ink/custom-backend.mdx +0 -254
- package/.docs/raw/docs/ink/hooks.mdx +0 -469
- package/.docs/raw/docs/ink/index.mdx +0 -237
- package/.docs/raw/docs/ink/migration.mdx +0 -138
- package/.docs/raw/docs/ink/primitives.mdx +0 -1259
- package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +0 -528
- package/.docs/raw/docs/integrations/auth/better-auth.mdx +0 -188
- package/.docs/raw/docs/integrations/auth/clerk.mdx +0 -166
- package/.docs/raw/docs/integrations/auth/next-auth.mdx +0 -191
- package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +0 -88
- package/.docs/raw/docs/integrations/frameworks/cloudflare-agents.mdx +0 -283
- package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +0 -188
- package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +0 -57
- package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +0 -201
- package/.docs/raw/docs/integrations/gateways/index.mdx +0 -162
- package/.docs/raw/docs/integrations/index.mdx +0 -178
- package/.docs/raw/docs/integrations/observability/helicone.mdx +0 -129
- package/.docs/raw/docs/integrations/observability/langfuse.mdx +0 -161
- package/.docs/raw/docs/integrations/observability/langsmith.mdx +0 -151
- package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +0 -773
- package/.docs/raw/docs/migrations/deprecation-policy.mdx +0 -42
- package/.docs/raw/docs/migrations/index.mdx +0 -50
- package/.docs/raw/docs/migrations/react-compatibility.mdx +0 -74
- package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +0 -328
- package/.docs/raw/docs/migrations/toolkit-tools.mdx +0 -236
- package/.docs/raw/docs/migrations/v0-11.mdx +0 -172
- package/.docs/raw/docs/migrations/v0-12.mdx +0 -302
- package/.docs/raw/docs/migrations/v0-14.mdx +0 -297
- package/.docs/raw/docs/migrations/v0-15.mdx +0 -270
- package/.docs/raw/docs/primitives/action-bar.mdx +0 -352
- package/.docs/raw/docs/primitives/assistant-modal.mdx +0 -216
- package/.docs/raw/docs/primitives/attachment.mdx +0 -217
- package/.docs/raw/docs/primitives/branch-picker.mdx +0 -222
- package/.docs/raw/docs/primitives/chain-of-thought.mdx +0 -315
- package/.docs/raw/docs/primitives/composer.mdx +0 -659
- package/.docs/raw/docs/primitives/error.mdx +0 -142
- package/.docs/raw/docs/primitives/index.mdx +0 -99
- package/.docs/raw/docs/primitives/message.mdx +0 -618
- package/.docs/raw/docs/primitives/selection-toolbar.mdx +0 -191
- package/.docs/raw/docs/primitives/suggestion.mdx +0 -254
- package/.docs/raw/docs/primitives/thread-list.mdx +0 -467
- package/.docs/raw/docs/primitives/thread.mdx +0 -509
- package/.docs/raw/docs/react-native/adapters.mdx +0 -94
- package/.docs/raw/docs/react-native/custom-backend.mdx +0 -207
- package/.docs/raw/docs/react-native/hooks.mdx +0 -339
- package/.docs/raw/docs/react-native/index.mdx +0 -289
- package/.docs/raw/docs/react-native/migration.mdx +0 -142
- package/.docs/raw/docs/react-native/primitives.mdx +0 -976
- package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +0 -399
- package/.docs/raw/docs/runtimes/a2a/overview.mdx +0 -60
- package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +0 -216
- package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +0 -124
- package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +0 -70
- package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +0 -243
- package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +0 -267
- package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +0 -61
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +0 -122
- package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +0 -135
- package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +0 -636
- package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +0 -731
- package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +0 -118
- package/.docs/raw/docs/runtimes/concepts/adapters.mdx +0 -265
- package/.docs/raw/docs/runtimes/concepts/architecture.mdx +0 -167
- package/.docs/raw/docs/runtimes/concepts/stability.mdx +0 -68
- package/.docs/raw/docs/runtimes/concepts/threads.mdx +0 -513
- package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +0 -763
- package/.docs/raw/docs/runtimes/custom/data-stream.mdx +0 -339
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +0 -957
- package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +0 -902
- package/.docs/raw/docs/runtimes/custom/overview.mdx +0 -71
- package/.docs/raw/docs/runtimes/eve/overview.mdx +0 -151
- package/.docs/raw/docs/runtimes/eve/quickstart.mdx +0 -192
- package/.docs/raw/docs/runtimes/google-adk/api.mdx +0 -256
- package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +0 -784
- package/.docs/raw/docs/runtimes/google-adk/overview.mdx +0 -69
- package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +0 -229
- package/.docs/raw/docs/runtimes/langchain.mdx +0 -901
- package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +0 -181
- package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +0 -305
- package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +0 -104
- package/.docs/raw/docs/runtimes/langgraph/overview.mdx +0 -84
- package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +0 -496
- package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +0 -144
- package/.docs/raw/docs/runtimes/langgraph/threads.mdx +0 -113
- package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +0 -29
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -93
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +0 -347
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +0 -393
- package/.docs/raw/docs/runtimes/opencode/hooks.mdx +0 -194
- package/.docs/raw/docs/runtimes/opencode/overview.mdx +0 -58
- package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +0 -119
- package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +0 -133
- package/.docs/raw/docs/tools/a2ui.mdx +0 -107
- package/.docs/raw/docs/tools/backend.mdx +0 -147
- package/.docs/raw/docs/tools/defining-tools.mdx +0 -574
- package/.docs/raw/docs/tools/dynamic-tools.mdx +0 -112
- package/.docs/raw/docs/tools/generative-ui-primitive.mdx +0 -180
- package/.docs/raw/docs/tools/generative-ui-slack.mdx +0 -167
- package/.docs/raw/docs/tools/generative-ui-teams.mdx +0 -160
- package/.docs/raw/docs/tools/generative-ui.mdx +0 -322
- package/.docs/raw/docs/tools/index.mdx +0 -72
- package/.docs/raw/docs/tools/interactables.mdx +0 -1084
- package/.docs/raw/docs/tools/mcp-apps.mdx +0 -363
- package/.docs/raw/docs/tools/mcp.mdx +0 -466
- package/.docs/raw/docs/tools/multi-agent.mdx +0 -237
- package/.docs/raw/docs/tools/openui.mdx +0 -175
- package/.docs/raw/docs/tools/tool-ui.mdx +0 -1020
- package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
- package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
- package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
- package/.docs/raw/docs/ui/attachment.mdx +0 -279
- package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -247
- package/.docs/raw/docs/ui/context-display.mdx +0 -148
- package/.docs/raw/docs/ui/directive-text.mdx +0 -114
- package/.docs/raw/docs/ui/file.mdx +0 -159
- package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
- package/.docs/raw/docs/ui/image.mdx +0 -102
- package/.docs/raw/docs/ui/markdown.mdx +0 -103
- package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
- package/.docs/raw/docs/ui/mermaid.mdx +0 -92
- package/.docs/raw/docs/ui/message-timing.mdx +0 -93
- package/.docs/raw/docs/ui/model-selector.mdx +0 -455
- package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
- package/.docs/raw/docs/ui/quote.mdx +0 -211
- package/.docs/raw/docs/ui/reasoning.mdx +0 -214
- package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
- package/.docs/raw/docs/ui/sources.mdx +0 -186
- package/.docs/raw/docs/ui/streamdown.mdx +0 -392
- package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
- package/.docs/raw/docs/ui/thread-list.mdx +0 -411
- package/.docs/raw/docs/ui/thread.mdx +0 -559
- package/.docs/raw/docs/ui/tool-fallback.mdx +0 -141
- package/.docs/raw/docs/ui/tool-group.mdx +0 -240
- package/.docs/raw/docs/ui/voice.mdx +0 -173
- package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
- package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
- package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
- package/dist/constants.d.ts +0 -14
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -19
- package/dist/constants.js.map +0 -1
- package/dist/prepare-docs/code-examples.d.ts +0 -5
- package/dist/prepare-docs/code-examples.d.ts.map +0 -1
- package/dist/prepare-docs/code-examples.js +0 -117
- package/dist/prepare-docs/code-examples.js.map +0 -1
- package/dist/prepare-docs/copy-raw.d.ts +0 -5
- package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
- package/dist/prepare-docs/copy-raw.js +0 -49
- package/dist/prepare-docs/copy-raw.js.map +0 -1
- package/dist/prepare-docs/prepare.d.ts +0 -1
- package/dist/prepare-docs/prepare.js +0 -22
- package/dist/prepare-docs/prepare.js.map +0 -1
- package/dist/prompts/xulux-playground.d.ts +0 -12
- package/dist/prompts/xulux-playground.d.ts.map +0 -1
- package/dist/prompts/xulux-playground.js +0 -33
- package/dist/prompts/xulux-playground.js.map +0 -1
- package/dist/tools/docs.d.ts +0 -22
- package/dist/tools/docs.d.ts.map +0 -1
- package/dist/tools/docs.js +0 -177
- package/dist/tools/docs.js.map +0 -1
- package/dist/tools/examples.d.ts +0 -24
- package/dist/tools/examples.d.ts.map +0 -1
- package/dist/tools/examples.js +0 -87
- package/dist/tools/examples.js.map +0 -1
- package/dist/tools/resources.d.ts +0 -6
- package/dist/tools/resources.d.ts.map +0 -1
- package/dist/tools/resources.js +0 -75
- package/dist/tools/resources.js.map +0 -1
- package/dist/tools/search.d.ts +0 -24
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js +0 -39
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/tests/mcp-test-client.d.ts +0 -15
- package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
- package/dist/tools/tests/mcp-test-client.js +0 -68
- package/dist/tools/tests/mcp-test-client.js.map +0 -1
- package/dist/tools/tests/test-setup.d.ts +0 -7
- package/dist/tools/tests/test-setup.d.ts.map +0 -1
- package/dist/tools/tests/test-setup.js +0 -36
- package/dist/tools/tests/test-setup.js.map +0 -1
- package/dist/tools/xulux-templates.d.ts +0 -58
- package/dist/tools/xulux-templates.d.ts.map +0 -1
- package/dist/tools/xulux-templates.js +0 -84
- package/dist/tools/xulux-templates.js.map +0 -1
- package/dist/utils/cache.d.ts +0 -5
- package/dist/utils/cache.d.ts.map +0 -1
- package/dist/utils/cache.js +0 -18
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -10
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -20
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/mcp-format.d.ts +0 -11
- package/dist/utils/mcp-format.d.ts.map +0 -1
- package/dist/utils/mcp-format.js +0 -14
- package/dist/utils/mcp-format.js.map +0 -1
- package/dist/utils/mdx.d.ts +0 -12
- package/dist/utils/mdx.d.ts.map +0 -1
- package/dist/utils/mdx.js +0 -45
- package/dist/utils/mdx.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -12
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js +0 -93
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/search.d.ts +0 -10
- package/dist/utils/search.d.ts.map +0 -1
- package/dist/utils/search.js +0 -97
- package/dist/utils/search.js.map +0 -1
- package/dist/utils/security.d.ts +0 -5
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/utils/security.js +0 -22
- package/dist/utils/security.js.map +0 -1
- package/dist/xulux/catalog-client.d.ts +0 -14
- package/dist/xulux/catalog-client.d.ts.map +0 -1
- package/dist/xulux/catalog-client.js +0 -112
- package/dist/xulux/catalog-client.js.map +0 -1
- package/dist/xulux/fallback-catalog.d.ts +0 -7
- package/dist/xulux/fallback-catalog.d.ts.map +0 -1
- package/dist/xulux/fallback-catalog.js +0 -47
- package/dist/xulux/fallback-catalog.js.map +0 -1
- package/dist/xulux/fetch-sandbox.d.ts +0 -5
- package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
- package/dist/xulux/fetch-sandbox.js +0 -40
- package/dist/xulux/fetch-sandbox.js.map +0 -1
- package/dist/xulux/template-service.d.ts +0 -84
- package/dist/xulux/template-service.d.ts.map +0 -1
- package/dist/xulux/template-service.js +0 -223
- package/dist/xulux/template-service.js.map +0 -1
- package/dist/xulux/types.d.ts +0 -55
- package/dist/xulux/types.d.ts.map +0 -1
- package/dist/xulux/types.js +0 -6
- package/dist/xulux/types.js.map +0 -1
- package/src/constants.ts +0 -24
- package/src/prepare-docs/code-examples.ts +0 -158
- package/src/prepare-docs/copy-raw.ts +0 -50
- package/src/prepare-docs/prepare.ts +0 -24
- package/src/prompts/xulux-playground.ts +0 -36
- package/src/tools/docs.ts +0 -255
- package/src/tools/examples.ts +0 -114
- package/src/tools/resources.ts +0 -111
- package/src/tools/search.ts +0 -46
- package/src/tools/tests/completions.test.ts +0 -60
- package/src/tools/tests/directory-size-cap.test.ts +0 -50
- package/src/tools/tests/docs.test.ts +0 -147
- package/src/tools/tests/examples.test.ts +0 -94
- package/src/tools/tests/integration.test.ts +0 -45
- package/src/tools/tests/json-parsing.test.ts +0 -23
- package/src/tools/tests/listings-cache.test.ts +0 -19
- package/src/tools/tests/mcp-protocol.test.ts +0 -216
- package/src/tools/tests/mcp-test-client.ts +0 -111
- package/src/tools/tests/path-traversal.test.ts +0 -84
- package/src/tools/tests/resources.test.ts +0 -133
- package/src/tools/tests/search.test.ts +0 -37
- package/src/tools/tests/test-setup.ts +0 -50
- package/src/tools/tests/xulux-templates.test.ts +0 -325
- package/src/tools/xulux-templates.ts +0 -141
- package/src/utils/cache.ts +0 -20
- package/src/utils/logger.ts +0 -20
- package/src/utils/mcp-format.ts +0 -14
- package/src/utils/mdx.ts +0 -59
- package/src/utils/paths.ts +0 -139
- package/src/utils/search.ts +0 -131
- package/src/utils/security.ts +0 -52
- package/src/utils/tests/cache.test.ts +0 -51
- package/src/utils/tests/mcp-format.test.ts +0 -22
- package/src/utils/tests/security.test.ts +0 -119
- package/src/xulux/catalog-client.ts +0 -150
- package/src/xulux/fallback-catalog.ts +0 -63
- package/src/xulux/fetch-sandbox.ts +0 -56
- package/src/xulux/template-service.ts +0 -406
- package/src/xulux/types.ts +0 -64
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Streamdown Markdown Renderer
|
|
3
|
-
description: Stream markdown into a React chat UI with syntax highlighting, math, and Mermaid diagrams. Powered by Vercel Streamdown, integrated for assistant-ui.
|
|
4
|
-
links:
|
|
5
|
-
- label: Streamdown
|
|
6
|
-
url: https://github.com/vercel/streamdown
|
|
7
|
-
platforms: ["react"]
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
import { PackageManagerTabs } from "@/components/pages/docs/fumadocs/install/package-manager-tabs";
|
|
11
|
-
import { StreamdownSample } from "@/components/pages/docs/samples/streamdown";
|
|
12
|
-
|
|
13
|
-
<StreamdownSample />
|
|
14
|
-
|
|
15
|
-
<Callout type="info">
|
|
16
|
-
`@assistant-ui/react-streamdown` is an **alternative** to `@assistant-ui/react-markdown`. Choose based on your needs:
|
|
17
|
-
- **react-markdown**: Lightweight, bring-your-own syntax highlighter
|
|
18
|
-
- **react-streamdown**: Feature-rich with built-in Shiki, KaTeX, Mermaid support
|
|
19
|
-
</Callout>
|
|
20
|
-
|
|
21
|
-
## Installation
|
|
22
|
-
|
|
23
|
-
<PackageManagerTabs packages={["@assistant-ui/react-streamdown", "streamdown"]} />
|
|
24
|
-
|
|
25
|
-
For additional features, install the optional plugins:
|
|
26
|
-
|
|
27
|
-
<PackageManagerTabs packages={["@streamdown/code", "@streamdown/math", "@streamdown/mermaid", "@streamdown/cjk"]} />
|
|
28
|
-
|
|
29
|
-
## CSS setup
|
|
30
|
-
|
|
31
|
-
Streamdown's controls (code-block copy/download buttons, mermaid fullscreen overlay) and the streaming caret are written as Tailwind utility classes. Tailwind v4 does not scan `node_modules` by default, so add a `@source` directive for Streamdown (and one per installed plugin) to the same global stylesheet that imports Tailwind:
|
|
32
|
-
|
|
33
|
-
```css
|
|
34
|
-
@import "tailwindcss";
|
|
35
|
-
|
|
36
|
-
@source "../node_modules/streamdown/dist/*.js";
|
|
37
|
-
@source "../node_modules/@streamdown/code/dist/*.js";
|
|
38
|
-
@source "../node_modules/@streamdown/math/dist/*.js";
|
|
39
|
-
@source "../node_modules/@streamdown/mermaid/dist/*.js";
|
|
40
|
-
@source "../node_modules/@streamdown/cjk/dist/*.js";
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
Adjust the relative path to wherever your project's `node_modules` lives. In a pnpm or Turbo monorepo with hoisted dependencies, you typically need more `../` segments to reach the workspace root. Only include the plugin lines for packages you actually installed.
|
|
44
|
-
|
|
45
|
-
Without these directives, the copy/download/fullscreen buttons render with no padding or cursor styling (and look broken), and the `caret` indicator stays invisible.
|
|
46
|
-
|
|
47
|
-
<Callout type="info">
|
|
48
|
-
Streamdown's components assume the shadcn/ui design tokens (`--background`, `--muted-foreground`, `--border`, etc.). If you are not on shadcn/ui, copy the minimum variable set from the [Streamdown README](https://github.com/vercel/streamdown#css-custom-properties-design-tokens).
|
|
49
|
-
</Callout>
|
|
50
|
-
|
|
51
|
-
If you opt into the `animated` prop or use `createAnimatePlugin` for word-level fade-in, also import the keyframes once at your app entry:
|
|
52
|
-
|
|
53
|
-
```ts
|
|
54
|
-
import "streamdown/styles.css";
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
The bare `caret` prop does **not** require this import; only the word-level animation does.
|
|
58
|
-
|
|
59
|
-
## Basic Usage
|
|
60
|
-
|
|
61
|
-
```tsx
|
|
62
|
-
import { StreamdownTextPrimitive } from "@assistant-ui/react-streamdown";
|
|
63
|
-
|
|
64
|
-
// Inside a MessagePrimitive.Parts component
|
|
65
|
-
<MessagePrimitive.Parts>
|
|
66
|
-
{({ part }) => part.type === "text" ? <StreamdownText {...part} /> : null}
|
|
67
|
-
</MessagePrimitive.Parts>
|
|
68
|
-
|
|
69
|
-
// Where StreamdownText is:
|
|
70
|
-
const StreamdownText = () => <StreamdownTextPrimitive />;
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## With Plugins (Recommended)
|
|
74
|
-
|
|
75
|
-
```tsx
|
|
76
|
-
import { StreamdownTextPrimitive } from "@assistant-ui/react-streamdown";
|
|
77
|
-
import { code } from "@streamdown/code";
|
|
78
|
-
import { math } from "@streamdown/math";
|
|
79
|
-
import { mermaid } from "@streamdown/mermaid";
|
|
80
|
-
import "katex/dist/katex.min.css";
|
|
81
|
-
|
|
82
|
-
const StreamdownText = () => (
|
|
83
|
-
<StreamdownTextPrimitive
|
|
84
|
-
plugins={{ code, math, mermaid }}
|
|
85
|
-
shikiTheme={["github-light", "github-dark"]}
|
|
86
|
-
/>
|
|
87
|
-
);
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
When `@streamdown/code` is provided, the default theme is `["github-light", "github-dark"]` for light/dark mode support.
|
|
91
|
-
|
|
92
|
-
## Migration from react-markdown
|
|
93
|
-
|
|
94
|
-
If you're migrating from `@assistant-ui/react-markdown`, your existing `SyntaxHighlighter` and `CodeHeader` components still work:
|
|
95
|
-
|
|
96
|
-
```tsx
|
|
97
|
-
import { StreamdownTextPrimitive } from "@assistant-ui/react-streamdown";
|
|
98
|
-
|
|
99
|
-
const StreamdownText = () => (
|
|
100
|
-
<StreamdownTextPrimitive
|
|
101
|
-
components={{
|
|
102
|
-
SyntaxHighlighter: MySyntaxHighlighter,
|
|
103
|
-
CodeHeader: MyCodeHeader,
|
|
104
|
-
}}
|
|
105
|
-
componentsByLanguage={{
|
|
106
|
-
mermaid: { SyntaxHighlighter: MermaidRenderer }
|
|
107
|
-
}}
|
|
108
|
-
/>
|
|
109
|
-
);
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## Props
|
|
113
|
-
|
|
114
|
-
| Prop | Type | Default | Description |
|
|
115
|
-
|------|------|---------|-------------|
|
|
116
|
-
| `mode` | `"streaming" \| "static"` | `"streaming"` | Rendering mode |
|
|
117
|
-
| `plugins` | `PluginConfig` | - | Streamdown plugins (code, math, mermaid, cjk) |
|
|
118
|
-
| `shikiTheme` | `[string, string]` | `["github-light", "github-dark"]` | Light and dark theme for Shiki |
|
|
119
|
-
| `components` | `object` | - | Custom components including `SyntaxHighlighter` and `CodeHeader` |
|
|
120
|
-
| `componentsByLanguage` | `object` | - | Language-specific component overrides |
|
|
121
|
-
| `preprocess` | `(text: string) => string` | - | Text preprocessing function |
|
|
122
|
-
| `defer` | `boolean` | `false` | Defer markdown parsing to a lower priority via `useDeferredValue` so typing and scrolling stay responsive during streaming |
|
|
123
|
-
| `smooth` | `boolean \| SmoothOptions` | `false` | Typewriter-style reveal via `useSmooth`; the caret and controls stay active until the reveal catches up. Prefer the native `animated` prop for entrance animations |
|
|
124
|
-
| `controls` | `boolean \| object` | `true` | Enable/disable UI controls for code blocks and tables |
|
|
125
|
-
| `caret` | `"block" \| "circle"` | - | Streaming caret style |
|
|
126
|
-
| `mermaid` | `MermaidOptions` | - | Mermaid diagram configuration |
|
|
127
|
-
| `linkSafety` | `LinkSafetyConfig` | - | Link safety confirmation dialog |
|
|
128
|
-
| `remend` | `RemendConfig` | - | Incomplete markdown auto-completion |
|
|
129
|
-
| `allowedTags` | `Record<string, string[]>` | - | HTML tags whitelist |
|
|
130
|
-
| `containerProps` | `object` | - | Props for the container div |
|
|
131
|
-
| `containerClassName` | `string` | - | Class name for the container |
|
|
132
|
-
| `remarkRehypeOptions` | `object` | - | Options passed to remark-rehype |
|
|
133
|
-
| `BlockComponent` | `ComponentType` | - | Custom component for rendering blocks |
|
|
134
|
-
| `parseMarkdownIntoBlocksFn` | `(md: string) => string[]` | - | Custom block parsing function |
|
|
135
|
-
| `parseIncompleteMarkdown` | `boolean` | `false` | Parse incomplete markdown as-is (skip remend) |
|
|
136
|
-
| `security` | `SecurityConfig` | - | URL/image security restrictions |
|
|
137
|
-
|
|
138
|
-
## Plugin Configuration
|
|
139
|
-
|
|
140
|
-
### Code Highlighting
|
|
141
|
-
|
|
142
|
-
```tsx
|
|
143
|
-
import { code } from "@streamdown/code";
|
|
144
|
-
|
|
145
|
-
<StreamdownTextPrimitive
|
|
146
|
-
plugins={{ code }}
|
|
147
|
-
shikiTheme={["github-light", "github-dark"]}
|
|
148
|
-
/>
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Math (LaTeX)
|
|
152
|
-
|
|
153
|
-
```tsx
|
|
154
|
-
import { math } from "@streamdown/math";
|
|
155
|
-
import "katex/dist/katex.min.css";
|
|
156
|
-
|
|
157
|
-
<StreamdownTextPrimitive plugins={{ math }} />
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Mermaid Diagrams
|
|
161
|
-
|
|
162
|
-
```tsx
|
|
163
|
-
import { mermaid } from "@streamdown/mermaid";
|
|
164
|
-
|
|
165
|
-
<StreamdownTextPrimitive plugins={{ mermaid }} />
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### CJK Text Optimization
|
|
169
|
-
|
|
170
|
-
```tsx
|
|
171
|
-
import { cjk } from "@streamdown/cjk";
|
|
172
|
-
|
|
173
|
-
<StreamdownTextPrimitive plugins={{ cjk }} />
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
## Advanced Configuration
|
|
177
|
-
|
|
178
|
-
### Mermaid Options
|
|
179
|
-
|
|
180
|
-
Customize Mermaid diagram rendering with configuration and error handling:
|
|
181
|
-
|
|
182
|
-
```tsx
|
|
183
|
-
import { mermaid } from "@streamdown/mermaid";
|
|
184
|
-
|
|
185
|
-
<StreamdownTextPrimitive
|
|
186
|
-
plugins={{ mermaid }}
|
|
187
|
-
mermaid={{
|
|
188
|
-
config: { theme: "dark" },
|
|
189
|
-
errorComponent: ({ error, chart, retry }) => (
|
|
190
|
-
<div>
|
|
191
|
-
<p>Failed to render diagram: {error}</p>
|
|
192
|
-
<button onClick={retry}>Retry</button>
|
|
193
|
-
</div>
|
|
194
|
-
),
|
|
195
|
-
}}
|
|
196
|
-
/>
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
### Streaming Caret
|
|
200
|
-
|
|
201
|
-
Display a caret indicator during streaming:
|
|
202
|
-
|
|
203
|
-
```tsx
|
|
204
|
-
<StreamdownTextPrimitive caret="block" /> // ▋
|
|
205
|
-
<StreamdownTextPrimitive caret="circle" /> // ●
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
The caret is implemented as a Tailwind `::after` utility on the wrapper, so it only appears if your Tailwind setup includes the `@source` directive from [CSS setup](#css-setup).
|
|
209
|
-
|
|
210
|
-
### Link Safety
|
|
211
|
-
|
|
212
|
-
Show confirmation before opening external links:
|
|
213
|
-
|
|
214
|
-
```tsx
|
|
215
|
-
<StreamdownTextPrimitive
|
|
216
|
-
linkSafety={{
|
|
217
|
-
enabled: true,
|
|
218
|
-
onLinkCheck: (url) => url.startsWith("https://trusted.com"),
|
|
219
|
-
}}
|
|
220
|
-
/>
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### Incomplete Markdown Handling (Remend)
|
|
224
|
-
|
|
225
|
-
Configure how incomplete markdown syntax is handled during streaming:
|
|
226
|
-
|
|
227
|
-
```tsx
|
|
228
|
-
<StreamdownTextPrimitive
|
|
229
|
-
remend={{
|
|
230
|
-
links: true, // Complete incomplete links
|
|
231
|
-
images: true, // Handle incomplete images
|
|
232
|
-
linkMode: "protocol", // How to handle incomplete links: 'protocol' or 'text-only'
|
|
233
|
-
bold: true, // Complete **text → **text**
|
|
234
|
-
italic: true, // Complete *text → *text*
|
|
235
|
-
boldItalic: true, // Complete ***text → ***text***
|
|
236
|
-
inlineCode: true, // Complete `code → `code`
|
|
237
|
-
strikethrough: true, // Complete ~~text → ~~text~~
|
|
238
|
-
katex: true, // Complete $$equation → $$equation$$
|
|
239
|
-
setextHeadings: true, // Handle incomplete setext headings
|
|
240
|
-
handlers: [], // Custom handlers for incomplete markdown completion
|
|
241
|
-
}}
|
|
242
|
-
/>
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
### Allowed HTML Tags
|
|
246
|
-
|
|
247
|
-
Allow specific HTML tags in markdown content:
|
|
248
|
-
|
|
249
|
-
```tsx
|
|
250
|
-
<StreamdownTextPrimitive
|
|
251
|
-
allowedTags={{
|
|
252
|
-
div: ["class", "id"],
|
|
253
|
-
span: ["class", "style"],
|
|
254
|
-
iframe: ["src", "width", "height"],
|
|
255
|
-
}}
|
|
256
|
-
/>
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
### Security Configuration
|
|
260
|
-
|
|
261
|
-
Restrict allowed URLs for links and images. This overrides streamdown's default allow-all policy:
|
|
262
|
-
|
|
263
|
-
```tsx
|
|
264
|
-
<StreamdownTextPrimitive
|
|
265
|
-
security={{
|
|
266
|
-
// Only allow links to trusted domains
|
|
267
|
-
allowedLinkPrefixes: ["https://example.com", "https://docs.example.com"],
|
|
268
|
-
// Only allow images from your CDN
|
|
269
|
-
allowedImagePrefixes: ["https://cdn.example.com"],
|
|
270
|
-
// Restrict protocols
|
|
271
|
-
allowedProtocols: ["https", "mailto"],
|
|
272
|
-
// Disable base64 data images
|
|
273
|
-
allowDataImages: false,
|
|
274
|
-
// Default origin for relative URLs
|
|
275
|
-
defaultOrigin: "https://example.com",
|
|
276
|
-
// CSS class for blocked elements
|
|
277
|
-
blockedLinkClass: "blocked-link",
|
|
278
|
-
blockedImageClass: "blocked-image",
|
|
279
|
-
}}
|
|
280
|
-
/>
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
## Detecting Inline vs Block Code
|
|
284
|
-
|
|
285
|
-
When building custom code components, you can use `useIsStreamdownCodeBlock` to detect whether you're inside a code block or inline code:
|
|
286
|
-
|
|
287
|
-
```tsx
|
|
288
|
-
import { useIsStreamdownCodeBlock } from "@assistant-ui/react-streamdown";
|
|
289
|
-
|
|
290
|
-
function MyCodeComponent({ children, ...props }) {
|
|
291
|
-
const isCodeBlock = useIsStreamdownCodeBlock();
|
|
292
|
-
|
|
293
|
-
if (!isCodeBlock) {
|
|
294
|
-
return <code className="inline-code" {...props}>{children}</code>;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
return <pre><code {...props}>{children}</code></pre>;
|
|
298
|
-
}
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
You can also use `useStreamdownPreProps` to access the props passed to the parent `<pre>` element:
|
|
302
|
-
|
|
303
|
-
```tsx
|
|
304
|
-
import { useStreamdownPreProps } from "@assistant-ui/react-streamdown";
|
|
305
|
-
|
|
306
|
-
function MyCodeComponent({ children }) {
|
|
307
|
-
const preProps = useStreamdownPreProps();
|
|
308
|
-
|
|
309
|
-
if (!preProps) {
|
|
310
|
-
// Inline code
|
|
311
|
-
return <code>{children}</code>;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// Block code - preProps contains className, node, etc.
|
|
315
|
-
return <code className={preProps.className}>{children}</code>;
|
|
316
|
-
}
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
## Comparison with react-markdown
|
|
320
|
-
|
|
321
|
-
| Feature | react-markdown | react-streamdown |
|
|
322
|
-
|---------|---------------|------------------|
|
|
323
|
-
| Bundle size | Smaller | Larger (with plugins) |
|
|
324
|
-
| Syntax highlighting | Bring your own | Built-in Shiki |
|
|
325
|
-
| Math rendering | Manual setup | Built-in KaTeX |
|
|
326
|
-
| Mermaid diagrams | Manual setup | Built-in support |
|
|
327
|
-
| CJK optimization | None | Built-in |
|
|
328
|
-
| Streaming | `smooth` prop | `mode` + block-based |
|
|
329
|
-
|
|
330
|
-
## Re-exported Utilities
|
|
331
|
-
|
|
332
|
-
The package re-exports useful utilities:
|
|
333
|
-
|
|
334
|
-
```tsx
|
|
335
|
-
import {
|
|
336
|
-
// Context for accessing streamdown state
|
|
337
|
-
StreamdownContext,
|
|
338
|
-
// Parse markdown into blocks (for custom implementations)
|
|
339
|
-
parseMarkdownIntoBlocks,
|
|
340
|
-
// Hooks for custom code components
|
|
341
|
-
useIsStreamdownCodeBlock,
|
|
342
|
-
useStreamdownPreProps,
|
|
343
|
-
// Memo comparison utility for custom components
|
|
344
|
-
memoCompareNodes,
|
|
345
|
-
// Default Shiki theme: ["github-light", "github-dark"]
|
|
346
|
-
DEFAULT_SHIKI_THEME,
|
|
347
|
-
} from "@assistant-ui/react-streamdown";
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
### Available Types
|
|
351
|
-
|
|
352
|
-
```tsx
|
|
353
|
-
import type {
|
|
354
|
-
// Component props
|
|
355
|
-
StreamdownTextPrimitiveProps,
|
|
356
|
-
SyntaxHighlighterProps,
|
|
357
|
-
CodeHeaderProps,
|
|
358
|
-
ComponentsByLanguage,
|
|
359
|
-
StreamdownTextComponents,
|
|
360
|
-
StreamdownProps,
|
|
361
|
-
// Plugin types
|
|
362
|
-
PluginConfig,
|
|
363
|
-
ResolvedPluginConfig,
|
|
364
|
-
CodeHighlighterPlugin,
|
|
365
|
-
DiagramPlugin,
|
|
366
|
-
MathPlugin,
|
|
367
|
-
CjkPlugin,
|
|
368
|
-
HighlightOptions,
|
|
369
|
-
// Shiki types
|
|
370
|
-
BundledTheme,
|
|
371
|
-
BundledLanguage,
|
|
372
|
-
// Configuration types
|
|
373
|
-
CaretStyle,
|
|
374
|
-
ControlsConfig,
|
|
375
|
-
MermaidOptions,
|
|
376
|
-
MermaidErrorComponentProps,
|
|
377
|
-
LinkSafetyConfig,
|
|
378
|
-
LinkSafetyModalProps,
|
|
379
|
-
RemendConfig,
|
|
380
|
-
RemendHandler,
|
|
381
|
-
AllowedTags,
|
|
382
|
-
RemarkRehypeOptions,
|
|
383
|
-
BlockProps,
|
|
384
|
-
SecurityConfig,
|
|
385
|
-
} from "@assistant-ui/react-streamdown";
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
## Related Components
|
|
389
|
-
|
|
390
|
-
- [Markdown](/docs/ui/markdown) - Lightweight markdown with react-markdown
|
|
391
|
-
- [Syntax Highlighting](/docs/ui/syntax-highlighting) - Add code highlighting to react-markdown
|
|
392
|
-
- [Mermaid](/docs/ui/mermaid) - Render diagrams in react-markdown
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Syntax Highlighting
|
|
3
|
-
description: Code block syntax highlighting with react-shiki or react-syntax-highlighter.
|
|
4
|
-
platforms: ["react"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
import { SyntaxHighlightingSample } from "@/components/pages/docs/samples/syntax-highlighting";
|
|
8
|
-
|
|
9
|
-
<Callout type="warn">Syntax highlighting is not enabled in markdown by default.</Callout>
|
|
10
|
-
|
|
11
|
-
<SyntaxHighlightingSample />
|
|
12
|
-
|
|
13
|
-
<Callout type="info">
|
|
14
|
-
`assistant-ui` provides two options for syntax highlighting:
|
|
15
|
-
- **react-shiki** (recommended for performance & dynamic language support)
|
|
16
|
-
- **react-syntax-highlighter** (legacy - Prism or Highlight.js based)
|
|
17
|
-
</Callout>
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## react-shiki
|
|
22
|
-
|
|
23
|
-
<Steps>
|
|
24
|
-
<Step>
|
|
25
|
-
|
|
26
|
-
#### Add `shiki-highlighter`
|
|
27
|
-
|
|
28
|
-
<InstallCommand shadcn={["shiki-highlighter"]} />
|
|
29
|
-
|
|
30
|
-
This adds a `/components/assistant-ui/shiki-highlighter.tsx` file to your project and
|
|
31
|
-
installs the `react-shiki` dependency. The highlighter can be customized by editing
|
|
32
|
-
the config in the `shiki-highlighter.tsx` file. While a message part is still streaming, the component renders the plain code without tokenization and highlights once the part settles, so streaming stays cheap.
|
|
33
|
-
|
|
34
|
-
</Step>
|
|
35
|
-
<Step>
|
|
36
|
-
|
|
37
|
-
#### Add it to `defaultComponents` in `markdown-text.tsx`
|
|
38
|
-
|
|
39
|
-
```tsx title="/components/assistant-ui/markdown-text.tsx"
|
|
40
|
-
import { SyntaxHighlighter } from "./shiki-highlighter";
|
|
41
|
-
|
|
42
|
-
export const defaultComponents = memoizeMarkdownComponents({
|
|
43
|
-
SyntaxHighlighter: SyntaxHighlighter, // [!code ++]
|
|
44
|
-
h1: /* ... */,
|
|
45
|
-
// ...other elements...
|
|
46
|
-
});
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
</Step>
|
|
50
|
-
</Steps>
|
|
51
|
-
|
|
52
|
-
### Options
|
|
53
|
-
|
|
54
|
-
See [react-shiki documentation](https://github.com/AVGVSTVS96/react-shiki#props) for all available options.
|
|
55
|
-
|
|
56
|
-
Key options:
|
|
57
|
-
- `theme` - Shiki theme or multi-theme object (`{ light, dark, ... }`)
|
|
58
|
-
- `language` - Language for highlighting (default: `"text"`)
|
|
59
|
-
- `defaultColor` - Default color mode (`string | false`, e.g. `light-dark()`)
|
|
60
|
-
- `delay` - Delay between highlights, useful for streaming (default: `0`)
|
|
61
|
-
- `customLanguages` - Custom languages to preload for dynamic support
|
|
62
|
-
- `codeToHastOptions` - All other options accepted by Shiki's [`codeToHast`](https://github.com/shikijs/shiki/blob/main/packages/types/src/options.ts#L121)
|
|
63
|
-
|
|
64
|
-
### Dual/multi theme support
|
|
65
|
-
|
|
66
|
-
To use multiple themes, pass a theme object:
|
|
67
|
-
|
|
68
|
-
```tsx title="/components/assistant-ui/shiki-highlighter.tsx"
|
|
69
|
-
<ShikiHighlighter
|
|
70
|
-
/* ... */
|
|
71
|
-
theme={{
|
|
72
|
-
light: "github-light",
|
|
73
|
-
dark: "github-dark",
|
|
74
|
-
}}
|
|
75
|
-
defaultColor="light-dark()"
|
|
76
|
-
/* ... */
|
|
77
|
-
>
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
> **Note:** The `shiki-highlighter` component sets `defaultColor="light-dark()"` automatically.
|
|
81
|
-
> Only set this manually if using `ShikiHighlighter` directly.
|
|
82
|
-
|
|
83
|
-
With `defaultColor="light-dark()"`, theme switching is automatic based on your site's `color-scheme`.
|
|
84
|
-
No custom Shiki CSS overrides are required.
|
|
85
|
-
|
|
86
|
-
Set `color-scheme` on your app root:
|
|
87
|
-
|
|
88
|
-
System-based (follows OS/browser preference):
|
|
89
|
-
|
|
90
|
-
```css title="globals.css"
|
|
91
|
-
:root {
|
|
92
|
-
color-scheme: light dark;
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Class-based theme switching:
|
|
97
|
-
|
|
98
|
-
```css title="globals.css"
|
|
99
|
-
:root {
|
|
100
|
-
color-scheme: light;
|
|
101
|
-
}
|
|
102
|
-
:root.dark {
|
|
103
|
-
color-scheme: dark;
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
If you need broader support for older browsers, you can still use the manual CSS-variable switching approach from the Shiki dual-theme docs.
|
|
108
|
-
|
|
109
|
-
For more information:
|
|
110
|
-
- [react-shiki multi-theme/reactive themes](https://github.com/AVGVSTVS96/react-shiki)
|
|
111
|
-
- [Shiki dual themes + `light-dark()`](https://shiki.style/guide/dual-themes)
|
|
112
|
-
|
|
113
|
-
### Bundle Optimization
|
|
114
|
-
|
|
115
|
-
By default, `react-shiki` includes the full Shiki bundle, which contains all supported languages and themes.
|
|
116
|
-
|
|
117
|
-
To reduce bundle size, you can use the web bundle by changing the import to `react-shiki/web`, to include a smaller bundle of web related languages:
|
|
118
|
-
|
|
119
|
-
```tsx title="/components/assistant-ui/shiki-highlighter.tsx"
|
|
120
|
-
import ShikiHighlighter, { type ShikiHighlighterProps } from "react-shiki/web";
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
#### Custom Bundles
|
|
124
|
-
|
|
125
|
-
For strict bundle size control, `react-shiki` also supports custom bundles created using `createHighlighterCore` from `react-shiki/core` (re-exported from Shiki):
|
|
126
|
-
|
|
127
|
-
```tsx title="/components/assistant-ui/shiki-highlighter.tsx" {3-9}
|
|
128
|
-
import { createHighlighterCore, createOnigurumaEngine } from "react-shiki/core"; // [!code ++]
|
|
129
|
-
|
|
130
|
-
// Create the highlighter
|
|
131
|
-
// Use dynamic imports to load languages and themes on client on demand
|
|
132
|
-
const customHighlighter = await createHighlighterCore({
|
|
133
|
-
themes: [import("@shikijs/themes/nord")],
|
|
134
|
-
langs: [
|
|
135
|
-
import("@shikijs/langs/javascript"),
|
|
136
|
-
import("@shikijs/langs/typescript"),
|
|
137
|
-
],
|
|
138
|
-
engine: createOnigurumaEngine(import("shiki/wasm")),
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
// Then pass it to the highlighter prop
|
|
142
|
-
<SyntaxHighlighter
|
|
143
|
-
{...props}
|
|
144
|
-
language={language}
|
|
145
|
-
theme={theme}
|
|
146
|
-
highlighter={customHighlighter} // [!code ++]
|
|
147
|
-
/>;
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
<Callout type="info">
|
|
151
|
-
For more information, see [react-shiki - bundle options](https://github.com/avgvstvs96/react-shiki#bundle-options).
|
|
152
|
-
</Callout>
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## react-syntax-highlighter
|
|
157
|
-
|
|
158
|
-
<Callout type="warn">
|
|
159
|
-
This option may be removed in a future release. Consider using
|
|
160
|
-
[react-shiki](#react-shiki) instead.
|
|
161
|
-
</Callout>
|
|
162
|
-
|
|
163
|
-
<Steps>
|
|
164
|
-
<Step>
|
|
165
|
-
|
|
166
|
-
#### Add `syntax-highlighter`
|
|
167
|
-
|
|
168
|
-
<InstallCommand shadcn={["syntax-highlighter"]} />
|
|
169
|
-
|
|
170
|
-
Adds a `/components/assistant-ui/syntax-highlighter.tsx` file to your project and installs the `react-syntax-highlighter` dependency.
|
|
171
|
-
|
|
172
|
-
</Step>
|
|
173
|
-
<Step>
|
|
174
|
-
|
|
175
|
-
#### Add it to `defaultComponents` in `markdown-text.tsx`
|
|
176
|
-
|
|
177
|
-
```tsx title="/components/assistant-ui/markdown-text.tsx"
|
|
178
|
-
import { SyntaxHighlighter } from "./syntax-highlighter";
|
|
179
|
-
|
|
180
|
-
export const defaultComponents = memoizeMarkdownComponents({
|
|
181
|
-
SyntaxHighlighter: SyntaxHighlighter, // [!code ++]
|
|
182
|
-
h1: /* ... */,
|
|
183
|
-
// ...other elements...
|
|
184
|
-
});
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
</Step>
|
|
188
|
-
</Steps>
|
|
189
|
-
|
|
190
|
-
### Options
|
|
191
|
-
|
|
192
|
-
Supports all options from [`react-syntax-highlighter`](https://github.com/react-syntax-highlighter/react-syntax-highlighter#props).
|
|
193
|
-
|
|
194
|
-
### Bundle Optimization
|
|
195
|
-
|
|
196
|
-
By default, the syntax highlighter uses a light build that only includes languages you register. To include all languages:
|
|
197
|
-
|
|
198
|
-
```tsx title="/components/assistant-ui/syntax-highlighter.tsx"
|
|
199
|
-
import { makePrismAsyncSyntaxHighlighter } from "@assistant-ui/react-syntax-highlighter/full";
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
## Related Components
|
|
203
|
-
|
|
204
|
-
- [Markdown](/docs/ui/markdown) - Rich text rendering that uses syntax highlighting
|
|
205
|
-
- [Mermaid](/docs/ui/mermaid) - Render diagrams instead of code blocks
|