Showing preview only (5,980K chars total). Download the full file or copy to clipboard to get everything.
Repository: ant-design/x
Branch: main
Commit: 1b85e6f34cab
Files: 1219
Total size: 5.5 MB
Directory structure:
gitextract_onxxzun6/
├── .codefuse/
│ └── skills/
│ └── components/
│ └── SKILL.md
├── .editorconfig
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── feature_request.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE_CN.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── main.yml
│ ├── markdown-benchmark.yml
│ ├── pr-auto-merge.yml
│ ├── pr-contributor-welcome.yml
│ ├── preview-build.yml
│ ├── preview-deploy.yml
│ ├── preview-start.yml
│ ├── release-dingtalk.yml
│ ├── release-x.yml
│ ├── site-deploy.yml
│ └── size-limit.yml
├── .gitignore
├── .husky/
│ ├── commit-msg
│ └── pre-commit
├── .lintstagedrc.json
├── .npmrc
├── .prettierrc
├── CHANGELOG.en-US.md
├── CHANGELOG.zh-CN.md
├── CNAME
├── README-zh_CN.md
├── README.md
├── biome.json
├── package.json
├── packages/
│ ├── x/
│ │ ├── .dumi/
│ │ │ ├── components/
│ │ │ │ └── SemanticPreview.tsx
│ │ │ ├── global.css
│ │ │ ├── hooks/
│ │ │ │ ├── use.ts
│ │ │ │ ├── useDark.tsx
│ │ │ │ ├── useFetch/
│ │ │ │ │ ├── cache.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── useLayoutState.ts
│ │ │ │ ├── useLocale.ts
│ │ │ │ ├── useLocation.ts
│ │ │ │ ├── useLottie.ts
│ │ │ │ ├── useMenu.tsx
│ │ │ │ ├── useScrollY.ts
│ │ │ │ └── useThemeAnimation.ts
│ │ │ ├── loading.js
│ │ │ ├── pages/
│ │ │ │ ├── 404/
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── index/
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── Container.tsx
│ │ │ │ │ │ ├── CustomizationProvider.tsx
│ │ │ │ │ │ ├── CustomizationSender.tsx
│ │ │ │ │ │ └── Introduction.tsx
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── CompIntroduction/
│ │ │ │ │ │ │ ├── Customization.tsx
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ ├── DesignBanner.tsx
│ │ │ │ │ │ ├── DesignFramework.tsx
│ │ │ │ │ │ ├── DesignGuide.tsx
│ │ │ │ │ │ ├── Lottie.tsx
│ │ │ │ │ │ ├── MainBanner.tsx
│ │ │ │ │ │ ├── SceneIntroduction/
│ │ │ │ │ │ │ ├── Assistant.tsx
│ │ │ │ │ │ │ ├── Independent.tsx
│ │ │ │ │ │ │ ├── Nest.tsx
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ └── SiteContext.ts
│ │ │ │ │ └── index.tsx
│ │ │ │ └── index-cn/
│ │ │ │ └── index.ts
│ │ │ ├── preset/
│ │ │ │ └── .gitkeep
│ │ │ ├── rehypeAntd.ts
│ │ │ ├── remarkAnchor.ts
│ │ │ ├── remarkAntd.ts
│ │ │ ├── theme/
│ │ │ │ ├── SiteThemeProvider.tsx
│ │ │ │ ├── builtins/
│ │ │ │ │ ├── APITable/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Antd.tsx
│ │ │ │ │ ├── Audio/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Badge/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── ColorChunk/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── ColorPaletteTool/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── ColorPaletteToolDark/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── ColorPalettes/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── ComponentMeta/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── ComponentOverview/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── ComponentTokenTable/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Container/
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── style.ts
│ │ │ │ │ ├── DemoWrapper/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── IconSearch/
│ │ │ │ │ │ ├── Category.tsx
│ │ │ │ │ │ ├── CopyableIcon.tsx
│ │ │ │ │ │ ├── IconSearch.tsx
│ │ │ │ │ │ ├── fields.ts
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── themeIcons.tsx
│ │ │ │ │ ├── ImagePreview/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── InlinePopover/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── InstallDependencies/
│ │ │ │ │ │ ├── bun.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── npm.tsx
│ │ │ │ │ │ ├── pnpm.tsx
│ │ │ │ │ │ ├── utoo.tsx
│ │ │ │ │ │ └── yarn.tsx
│ │ │ │ │ ├── LocaleLink/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── MarkdownPluginsOverView.tsx
│ │ │ │ │ ├── Palette/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── Previewer/
│ │ │ │ │ │ ├── CodeBlockButton.tsx
│ │ │ │ │ │ ├── CodePreviewer.tsx
│ │ │ │ │ │ ├── DemoFallback.tsx
│ │ │ │ │ │ ├── DesignPreviewer.tsx
│ │ │ │ │ │ ├── Previewer.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── PromptTemplate.tsx
│ │ │ │ │ ├── ResourceCards/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Sandpack/
│ │ │ │ │ │ ├── Sandpack.ts
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── SkillsOverView.tsx
│ │ │ │ │ ├── TokenCompare/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── TokenTable/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── VideoPlayer/
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── common/
│ │ │ │ │ ├── BehaviorMap/
│ │ │ │ │ │ ├── BehaviorMap.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── BezierVisualizer/
│ │ │ │ │ │ ├── Visualizer.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── BrowserFrame.tsx
│ │ │ │ │ ├── ClientOnly.tsx
│ │ │ │ │ ├── CodePreview.tsx
│ │ │ │ │ ├── Color/
│ │ │ │ │ │ ├── ColorBlock.tsx
│ │ │ │ │ │ ├── ColorPaletteTool.tsx
│ │ │ │ │ │ ├── ColorPaletteToolDark.tsx
│ │ │ │ │ │ ├── ColorPalettes.tsx
│ │ │ │ │ │ ├── ColorPatterns.tsx
│ │ │ │ │ │ ├── ColorStyle.tsx
│ │ │ │ │ │ └── Palette.tsx
│ │ │ │ │ ├── CommonHelmet.tsx
│ │ │ │ │ ├── ComponentChangelog/
│ │ │ │ │ │ ├── ComponentChangelog.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── EditButton.tsx
│ │ │ │ │ ├── GlobalStyles.tsx
│ │ │ │ │ ├── Helmet.tsx
│ │ │ │ │ ├── JSONEditor/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Link.tsx
│ │ │ │ │ ├── LinkButton.tsx
│ │ │ │ │ ├── LiveCode.tsx
│ │ │ │ │ ├── Loading.tsx
│ │ │ │ │ ├── PrevAndNext.tsx
│ │ │ │ │ ├── ThemeSwitch/
│ │ │ │ │ │ ├── ThemeIcon.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── styles/
│ │ │ │ │ ├── Common.tsx
│ │ │ │ │ ├── Demo.tsx
│ │ │ │ │ ├── HeadingAnchor.tsx
│ │ │ │ │ ├── Highlight.tsx
│ │ │ │ │ ├── InlineCard.tsx
│ │ │ │ │ ├── Markdown.tsx
│ │ │ │ │ ├── NProgress.tsx
│ │ │ │ │ ├── PreviewImage.tsx
│ │ │ │ │ ├── Reset.tsx
│ │ │ │ │ ├── Responsive.tsx
│ │ │ │ │ ├── SearchBar.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── icons/
│ │ │ │ │ ├── CodePenIcon.tsx
│ │ │ │ │ ├── CodeSandboxIcon.tsx
│ │ │ │ │ ├── DirectionIcon.tsx
│ │ │ │ │ └── ExternalLinkIcon.tsx
│ │ │ │ ├── layouts/
│ │ │ │ │ ├── DocLayout/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── GlobalLayout.tsx
│ │ │ │ │ ├── IndexLayout/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── SidebarLayout/
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── locales/
│ │ │ │ │ ├── en-US.json
│ │ │ │ │ └── zh-CN.json
│ │ │ │ ├── plugin.ts
│ │ │ │ ├── slots/
│ │ │ │ │ ├── Alert/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Content/
│ │ │ │ │ │ ├── ColumnCard.tsx
│ │ │ │ │ │ ├── ContributorAvatar.tsx
│ │ │ │ │ │ ├── Contributors.tsx
│ │ │ │ │ │ ├── DocAnchor.tsx
│ │ │ │ │ │ ├── DocMeta.tsx
│ │ │ │ │ │ ├── InViewSuspense.tsx
│ │ │ │ │ │ ├── JuejinLogo.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── ContentTabs/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── DemoContext.ts
│ │ │ │ │ ├── Footer/
│ │ │ │ │ │ ├── AdditionalInfo.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Header/
│ │ │ │ │ │ ├── Actions.tsx
│ │ │ │ │ │ ├── Logo.tsx
│ │ │ │ │ │ ├── Navigation.tsx
│ │ │ │ │ │ ├── SwitchBtn.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── interface.ts
│ │ │ │ │ ├── LiveError/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Sidebar/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── SiteContext.ts
│ │ │ │ ├── static/
│ │ │ │ │ └── style.ts
│ │ │ │ ├── themeConfig.ts
│ │ │ │ ├── utils/
│ │ │ │ │ ├── __tests__/
│ │ │ │ │ │ ├── runTests.ts
│ │ │ │ │ │ └── tsToJs.test.ts
│ │ │ │ │ ├── tsToJs.test.ts
│ │ │ │ │ └── tsToJs.ts
│ │ │ │ └── utils.ts
│ │ │ └── tsconfig.json
│ │ ├── .dumirc.ts
│ │ ├── .fatherrc.ts
│ │ ├── .jest.js
│ │ ├── .lintstagedrc.json
│ │ ├── .surgeignore
│ │ ├── BUG_VERSIONS.json
│ │ ├── CNAME
│ │ ├── LICENSE
│ │ ├── README-zh_CN.md
│ │ ├── README.md
│ │ ├── alias/
│ │ │ └── cssinjs.js
│ │ ├── bunfig.toml
│ │ ├── components/
│ │ │ ├── _util/
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── hooks.test.tsx
│ │ │ │ │ └── warning.test.tsx
│ │ │ │ ├── hooks/
│ │ │ │ │ ├── use-collapsible.ts
│ │ │ │ │ ├── use-proxy-imperative-handle.ts
│ │ │ │ │ ├── use-shortcut-keys.ts
│ │ │ │ │ └── use-x-component-config.ts
│ │ │ │ ├── motion.ts
│ │ │ │ ├── type.ts
│ │ │ │ └── warning.ts
│ │ │ ├── actions/
│ │ │ │ ├── ActionsAudio.tsx
│ │ │ │ ├── ActionsCopy.tsx
│ │ │ │ ├── ActionsFeedback.tsx
│ │ │ │ ├── ActionsItem.tsx
│ │ │ │ ├── ActionsMenu.tsx
│ │ │ │ ├── Item.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ └── demo.test.ts.snap
│ │ │ │ │ ├── action-item.test.tsx
│ │ │ │ │ ├── audio.test.tsx
│ │ │ │ │ ├── copy.test.tsx
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── feedback.test.tsx
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── context.ts
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic-audio.tsx
│ │ │ │ │ ├── _semantic-copy.tsx
│ │ │ │ │ ├── _semantic-feedback.tsx
│ │ │ │ │ ├── _semantic-item.tsx
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── fadeIn.md
│ │ │ │ │ ├── fadeIn.tsx
│ │ │ │ │ ├── preset.md
│ │ │ │ │ ├── preset.tsx
│ │ │ │ │ ├── sub.md
│ │ │ │ │ ├── sub.tsx
│ │ │ │ │ ├── variant.md
│ │ │ │ │ └── variant.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── interface.ts
│ │ │ │ └── style/
│ │ │ │ ├── audio.tsx
│ │ │ │ ├── copy.ts
│ │ │ │ ├── feedback.ts
│ │ │ │ └── index.ts
│ │ │ ├── attachments/
│ │ │ │ ├── DropArea.tsx
│ │ │ │ ├── FileList/
│ │ │ │ │ ├── Progress.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── PlaceholderUploader.tsx
│ │ │ │ ├── SilentUploader.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.tsx.snap
│ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.tsx
│ │ │ │ │ ├── drag.test.tsx
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ ├── index.test.tsx
│ │ │ │ │ └── util.test.ts
│ │ │ │ ├── context.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── overflow.md
│ │ │ │ │ ├── overflow.tsx
│ │ │ │ │ ├── placeholder.md
│ │ │ │ │ ├── placeholder.tsx
│ │ │ │ │ ├── select-files.md
│ │ │ │ │ ├── select-files.tsx
│ │ │ │ │ ├── with-sender.md
│ │ │ │ │ └── with-sender.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── style/
│ │ │ │ │ └── index.ts
│ │ │ │ └── util.ts
│ │ │ ├── bubble/
│ │ │ │ ├── Bubble.tsx
│ │ │ │ ├── BubbleList.tsx
│ │ │ │ ├── Divider.tsx
│ │ │ │ ├── EditableContent.tsx
│ │ │ │ ├── System.tsx
│ │ │ │ ├── TypingContent.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ └── demo.test.ts.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── divider.test.tsx
│ │ │ │ │ ├── enhanced.test.tsx
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ ├── index.test.tsx
│ │ │ │ │ ├── list-scroll.test.tsx
│ │ │ │ │ ├── list.test.tsx
│ │ │ │ │ └── system.test.tsx
│ │ │ │ ├── context.ts
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic-divider.tsx
│ │ │ │ │ ├── _semantic-list.tsx
│ │ │ │ │ ├── _semantic-system.tsx
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── animation.md
│ │ │ │ │ ├── animation.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── custom-content.md
│ │ │ │ │ ├── custom-content.tsx
│ │ │ │ │ ├── divider.md
│ │ │ │ │ ├── divider.tsx
│ │ │ │ │ ├── editable.md
│ │ │ │ │ ├── editable.tsx
│ │ │ │ │ ├── footer.md
│ │ │ │ │ ├── footer.tsx
│ │ │ │ │ ├── gpt-vis.md
│ │ │ │ │ ├── gpt-vis.tsx
│ │ │ │ │ ├── header.md
│ │ │ │ │ ├── header.tsx
│ │ │ │ │ ├── list-extra.md
│ │ │ │ │ ├── list-extra.tsx
│ │ │ │ │ ├── list-scroll.md
│ │ │ │ │ ├── list-scroll.tsx
│ │ │ │ │ ├── list.md
│ │ │ │ │ ├── list.tsx
│ │ │ │ │ ├── loading.md
│ │ │ │ │ ├── loading.tsx
│ │ │ │ │ ├── markdown.md
│ │ │ │ │ ├── markdown.tsx
│ │ │ │ │ ├── semantic-list-custom.md
│ │ │ │ │ ├── semantic-list-custom.tsx
│ │ │ │ │ ├── sider-and-placement.md
│ │ │ │ │ ├── sider-and-placement.tsx
│ │ │ │ │ ├── stream.md
│ │ │ │ │ ├── stream.tsx
│ │ │ │ │ ├── system.md
│ │ │ │ │ ├── system.tsx
│ │ │ │ │ ├── variant-and-shape.md
│ │ │ │ │ └── variant-and-shape.tsx
│ │ │ │ ├── hooks/
│ │ │ │ │ ├── useCompatibleScroll.ts
│ │ │ │ │ └── useTyping.ts
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── interface.ts
│ │ │ │ ├── loading.tsx
│ │ │ │ └── style/
│ │ │ │ ├── bubble.ts
│ │ │ │ ├── content.ts
│ │ │ │ ├── divider.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── list.ts
│ │ │ │ ├── slot.ts
│ │ │ │ └── system.ts
│ │ │ ├── code-highlighter/
│ │ │ │ ├── CodeHighlighter.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── custom-header.tsx
│ │ │ │ │ └── with-xmarkdown.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── interface.ts
│ │ │ │ └── style/
│ │ │ │ └── index.ts
│ │ │ ├── conversations/
│ │ │ │ ├── Creation.tsx
│ │ │ │ ├── GroupTitle.tsx
│ │ │ │ ├── Item.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.ts.snap
│ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── controlled-collapsible.md
│ │ │ │ │ ├── controlled-collapsible.tsx
│ │ │ │ │ ├── controlled-mode.md
│ │ │ │ │ ├── controlled-mode.tsx
│ │ │ │ │ ├── custom-new-chat.md
│ │ │ │ │ ├── custom-new-chat.tsx
│ │ │ │ │ ├── group-collapsible.md
│ │ │ │ │ ├── group-collapsible.tsx
│ │ │ │ │ ├── group.md
│ │ │ │ │ ├── group.tsx
│ │ │ │ │ ├── infinite-load.md
│ │ │ │ │ ├── infinite-load.tsx
│ │ │ │ │ ├── menu-trigger.md
│ │ │ │ │ ├── menu-trigger.tsx
│ │ │ │ │ ├── new-chat.md
│ │ │ │ │ ├── new-chat.tsx
│ │ │ │ │ ├── shortcutKeys.md
│ │ │ │ │ ├── shortcutKeys.tsx
│ │ │ │ │ ├── with-menu.md
│ │ │ │ │ └── with-menu.tsx
│ │ │ │ ├── hooks/
│ │ │ │ │ ├── useCreation.tsx
│ │ │ │ │ └── useGroupable.ts
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── interface.ts
│ │ │ │ └── style/
│ │ │ │ └── index.ts
│ │ │ ├── file-card/
│ │ │ │ ├── FileCard.tsx
│ │ │ │ ├── List.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ └── demo.test.ts.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── components/
│ │ │ │ │ ├── File.tsx
│ │ │ │ │ ├── ImageIcon.tsx
│ │ │ │ │ ├── ImageLoading.tsx
│ │ │ │ │ └── usePercent.ts
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic-list.tsx
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── audio.md
│ │ │ │ │ ├── audio.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── custom-description.md
│ │ │ │ │ ├── custom-description.tsx
│ │ │ │ │ ├── icon.md
│ │ │ │ │ ├── icon.tsx
│ │ │ │ │ ├── image-loading.md
│ │ │ │ │ ├── image-loading.tsx
│ │ │ │ │ ├── image.md
│ │ │ │ │ ├── image.tsx
│ │ │ │ │ ├── list.md
│ │ │ │ │ ├── list.tsx
│ │ │ │ │ ├── mask.md
│ │ │ │ │ ├── mask.tsx
│ │ │ │ │ ├── overflow.md
│ │ │ │ │ ├── overflow.tsx
│ │ │ │ │ ├── size.md
│ │ │ │ │ └── size.tsx
│ │ │ │ ├── icons/
│ │ │ │ │ ├── audio.tsx
│ │ │ │ │ └── video.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── style/
│ │ │ │ │ └── index.ts
│ │ │ │ └── utils.ts
│ │ │ ├── folder/
│ │ │ │ ├── DirectoryTree.tsx
│ │ │ │ ├── FilePreview.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── custom-icons.md
│ │ │ │ │ ├── custom-icons.tsx
│ │ │ │ │ ├── custom-service.md
│ │ │ │ │ ├── custom-service.tsx
│ │ │ │ │ ├── file-controlled.md
│ │ │ │ │ ├── file-controlled.tsx
│ │ │ │ │ ├── fully-controlled.md
│ │ │ │ │ ├── fully-controlled.tsx
│ │ │ │ │ ├── preview-render.md
│ │ │ │ │ ├── preview-render.tsx
│ │ │ │ │ ├── searchable.md
│ │ │ │ │ └── searchable.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ └── style/
│ │ │ │ └── index.tsx
│ │ │ ├── index.ts
│ │ │ ├── introduce/
│ │ │ │ ├── index.en-US.md
│ │ │ │ └── index.zh-CN.md
│ │ │ ├── locale/
│ │ │ │ ├── __tests__/
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── context.ts
│ │ │ │ ├── en_US.ts
│ │ │ │ ├── index.tsx
│ │ │ │ ├── useLocale.ts
│ │ │ │ └── zh_CN.ts
│ │ │ ├── mermaid/
│ │ │ │ ├── Mermaid.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── custom-header.tsx
│ │ │ │ │ ├── header-actions.tsx
│ │ │ │ │ └── with-xmarkdown.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ └── style/
│ │ │ │ └── index.ts
│ │ │ ├── notification/
│ │ │ │ ├── __tests__/
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── close_tag.md
│ │ │ │ │ ├── close_tag.tsx
│ │ │ │ │ ├── duration.md
│ │ │ │ │ ├── duration.tsx
│ │ │ │ │ ├── hooks.md
│ │ │ │ │ ├── hooks.tsx
│ │ │ │ │ ├── static-method.md
│ │ │ │ │ └── static-method.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ └── interface.ts
│ │ │ ├── overview/
│ │ │ │ ├── index.en-US.md
│ │ │ │ └── index.zh-CN.md
│ │ │ ├── prompts/
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.ts.snap
│ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── disabled.md
│ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ ├── fadeIn.md
│ │ │ │ │ ├── fadeIn.tsx
│ │ │ │ │ ├── flex-vertical.md
│ │ │ │ │ ├── flex-vertical.tsx
│ │ │ │ │ ├── flex-wrap-fixed.md
│ │ │ │ │ ├── flex-wrap-fixed.tsx
│ │ │ │ │ ├── flex-wrap.md
│ │ │ │ │ ├── flex-wrap.tsx
│ │ │ │ │ ├── nest.md
│ │ │ │ │ └── nest.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ └── style/
│ │ │ │ └── index.ts
│ │ │ ├── sender/
│ │ │ │ ├── Sender.tsx
│ │ │ │ ├── SenderHeader.tsx
│ │ │ │ ├── SenderSwitch.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.ts.snap
│ │ │ │ │ │ ├── header.test.tsx.snap
│ │ │ │ │ │ ├── index.test.tsx.snap
│ │ │ │ │ │ └── switch.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── header.test.tsx
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ ├── index.test.tsx
│ │ │ │ │ ├── skill.test.tsx
│ │ │ │ │ ├── slot.test.tsx
│ │ │ │ │ ├── switch.test.tsx
│ │ │ │ │ ├── use-cursor.test.tsx
│ │ │ │ │ └── use-speech.test.tsx
│ │ │ │ ├── components/
│ │ │ │ │ ├── ActionButton.tsx
│ │ │ │ │ ├── ClearButton.tsx
│ │ │ │ │ ├── LoadingButton/
│ │ │ │ │ │ ├── StopLoading.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── SendButton.tsx
│ │ │ │ │ ├── Skill.tsx
│ │ │ │ │ ├── SlotTextArea.tsx
│ │ │ │ │ ├── SpeechButton/
│ │ │ │ │ │ ├── RecordingIcon.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── TextArea.tsx
│ │ │ │ ├── context.ts
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic-switch.tsx
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── agent.md
│ │ │ │ │ ├── agent.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── disable-ctrl-slot.md
│ │ │ │ │ ├── disable-ctrl-slot.tsx
│ │ │ │ │ ├── disable-ctrl.md
│ │ │ │ │ ├── disable-ctrl.tsx
│ │ │ │ │ ├── footer.md
│ │ │ │ │ ├── footer.tsx
│ │ │ │ │ ├── header-fixed.md
│ │ │ │ │ ├── header-fixed.tsx
│ │ │ │ │ ├── header.md
│ │ │ │ │ ├── header.tsx
│ │ │ │ │ ├── paste-image.md
│ │ │ │ │ ├── paste-image.tsx
│ │ │ │ │ ├── ref-action.md
│ │ │ │ │ ├── ref-action.tsx
│ │ │ │ │ ├── send-style.md
│ │ │ │ │ ├── send-style.tsx
│ │ │ │ │ ├── slot-filling.md
│ │ │ │ │ ├── slot-filling.tsx
│ │ │ │ │ ├── slot-with-suggestion.md
│ │ │ │ │ ├── slot-with-suggestion.tsx
│ │ │ │ │ ├── speech-custom.md
│ │ │ │ │ ├── speech-custom.tsx
│ │ │ │ │ ├── speech.md
│ │ │ │ │ ├── speech.tsx
│ │ │ │ │ ├── submitType.md
│ │ │ │ │ ├── submitType.tsx
│ │ │ │ │ ├── suffix.md
│ │ │ │ │ ├── suffix.tsx
│ │ │ │ │ ├── switch.md
│ │ │ │ │ └── switch.tsx
│ │ │ │ ├── hooks/
│ │ │ │ │ ├── use-cursor.ts
│ │ │ │ │ ├── use-input-height.ts
│ │ │ │ │ ├── use-slot-builder.ts
│ │ │ │ │ ├── use-slot-config-state.ts
│ │ │ │ │ └── use-speech.ts
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── interface.ts
│ │ │ │ └── style/
│ │ │ │ ├── header.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── slot-textarea.ts
│ │ │ │ └── switch.ts
│ │ │ ├── sources/
│ │ │ │ ├── Sources.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.ts.snap
│ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── components/
│ │ │ │ │ └── CarouselCard.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── expand.md
│ │ │ │ │ ├── expand.tsx
│ │ │ │ │ ├── icon.md
│ │ │ │ │ ├── icon.tsx
│ │ │ │ │ ├── inline.md
│ │ │ │ │ └── inline.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ └── style/
│ │ │ │ └── index.ts
│ │ │ ├── style/
│ │ │ │ ├── index.ts
│ │ │ │ └── motion/
│ │ │ │ ├── blink.ts
│ │ │ │ ├── collapse.ts
│ │ │ │ ├── fade.ts
│ │ │ │ └── init.ts
│ │ │ ├── suggestion/
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.ts.snap
│ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ ├── index.test.tsx
│ │ │ │ │ └── useActive.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── block.md
│ │ │ │ │ ├── block.tsx
│ │ │ │ │ ├── trigger.md
│ │ │ │ │ └── trigger.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── style/
│ │ │ │ │ └── index.ts
│ │ │ │ └── useActive.ts
│ │ │ ├── theme/
│ │ │ │ ├── __tests__/
│ │ │ │ │ └── theme.test.tsx
│ │ │ │ ├── context.ts
│ │ │ │ ├── genStyleUtils.ts
│ │ │ │ ├── interface/
│ │ │ │ │ ├── alias.ts
│ │ │ │ │ ├── components.ts
│ │ │ │ │ ├── cssinjs-utils.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── maps/
│ │ │ │ │ │ ├── colors.ts
│ │ │ │ │ │ ├── font.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── size.ts
│ │ │ │ │ │ └── style.ts
│ │ │ │ │ ├── presetColors.ts
│ │ │ │ │ └── seeds.ts
│ │ │ │ ├── themes/
│ │ │ │ │ └── seed.ts
│ │ │ │ ├── useToken.ts
│ │ │ │ └── util/
│ │ │ │ ├── alias.ts
│ │ │ │ └── getAlphaColor.ts
│ │ │ ├── think/
│ │ │ │ ├── Think.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.ts.snap
│ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── expand.md
│ │ │ │ │ ├── expand.tsx
│ │ │ │ │ ├── status.md
│ │ │ │ │ └── status.tsx
│ │ │ │ ├── icons/
│ │ │ │ │ └── think.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ └── style/
│ │ │ │ └── index.ts
│ │ │ ├── thought-chain/
│ │ │ │ ├── Item.tsx
│ │ │ │ ├── Node.tsx
│ │ │ │ ├── Status.tsx
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.ts.snap
│ │ │ │ │ │ ├── index.test.tsx.snap
│ │ │ │ │ │ └── item.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ ├── index.test.tsx
│ │ │ │ │ └── item.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic-item.tsx
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── collapsible.md
│ │ │ │ │ ├── collapsible.tsx
│ │ │ │ │ ├── controlled-collapsible.md
│ │ │ │ │ ├── controlled-collapsible.tsx
│ │ │ │ │ ├── customization.md
│ │ │ │ │ ├── customization.tsx
│ │ │ │ │ ├── nested.md
│ │ │ │ │ ├── nested.tsx
│ │ │ │ │ ├── simple.md
│ │ │ │ │ ├── simple.tsx
│ │ │ │ │ ├── single-row.md
│ │ │ │ │ ├── single-row.tsx
│ │ │ │ │ ├── status.md
│ │ │ │ │ └── status.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ ├── interface.ts
│ │ │ │ └── style/
│ │ │ │ ├── index.ts
│ │ │ │ └── item.ts
│ │ │ ├── version/
│ │ │ │ └── index.ts
│ │ │ ├── welcome/
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── demo-extend.test.ts.snap
│ │ │ │ │ │ ├── demo.test.ts.snap
│ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ ├── demo-extend.test.ts
│ │ │ │ │ ├── demo.test.ts
│ │ │ │ │ ├── image.test.ts
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _semantic.tsx
│ │ │ │ │ ├── background.md
│ │ │ │ │ ├── background.tsx
│ │ │ │ │ ├── basic.md
│ │ │ │ │ ├── basic.tsx
│ │ │ │ │ ├── variant.md
│ │ │ │ │ └── variant.tsx
│ │ │ │ ├── index.en-US.md
│ │ │ │ ├── index.tsx
│ │ │ │ ├── index.zh-CN.md
│ │ │ │ └── style/
│ │ │ │ └── index.ts
│ │ │ └── x-provider/
│ │ │ ├── __tests__/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ ├── cssVar.test.tsx
│ │ │ │ ├── image.test.ts
│ │ │ │ └── index.test.tsx
│ │ │ ├── context.ts
│ │ │ ├── demo/
│ │ │ │ ├── direction.md
│ │ │ │ ├── direction.tsx
│ │ │ │ ├── locale.md
│ │ │ │ ├── locale.tsx
│ │ │ │ ├── shortcutKeys.md
│ │ │ │ ├── shortcutKeys.tsx
│ │ │ │ ├── theme.md
│ │ │ │ └── theme.tsx
│ │ │ ├── hooks/
│ │ │ │ └── use-x-provider-context.ts
│ │ │ ├── index.en-US.md
│ │ │ ├── index.tsx
│ │ │ └── index.zh-CN.md
│ │ ├── docs/
│ │ │ ├── playground/
│ │ │ │ ├── _utils/
│ │ │ │ │ └── local.ts
│ │ │ │ ├── agent-tbox.en-US.md
│ │ │ │ ├── agent-tbox.tsx
│ │ │ │ ├── agent-tbox.zh-CN.md
│ │ │ │ ├── copilot.en-US.md
│ │ │ │ ├── copilot.tsx
│ │ │ │ ├── copilot.zh-CN.md
│ │ │ │ ├── independent.en-US.md
│ │ │ │ ├── independent.tsx
│ │ │ │ ├── independent.zh-CN.md
│ │ │ │ ├── ultramodern.en-US.md
│ │ │ │ ├── ultramodern.tsx
│ │ │ │ └── ultramodern.zh-CN.md
│ │ │ ├── react/
│ │ │ │ ├── agent-use-tbox.en-US.md
│ │ │ │ ├── agent-use-tbox.zh-CN.md
│ │ │ │ ├── common-props.en-US.md
│ │ │ │ ├── common-props.zh-CN.md
│ │ │ │ ├── compatible-style.en-US.md
│ │ │ │ ├── compatible-style.zh-CN.md
│ │ │ │ ├── contributing.en-US.md
│ │ │ │ ├── contributing.zh-CN.md
│ │ │ │ ├── demo/
│ │ │ │ │ ├── qwen-sdk.tsx
│ │ │ │ │ ├── qwen.tsx
│ │ │ │ │ └── tbox.tsx
│ │ │ │ ├── faq.en-US.md
│ │ │ │ ├── faq.zh-CN.md
│ │ │ │ ├── introduce.en-US.md
│ │ │ │ ├── introduce.zh-CN.md
│ │ │ │ ├── migration-v2.en-US.md
│ │ │ │ ├── migration-v2.zh-CN.md
│ │ │ │ ├── model-use-openai.en-US.md
│ │ │ │ ├── model-use-openai.zh-CN.md
│ │ │ │ ├── model-use-qwen.en-US.md
│ │ │ │ ├── model-use-qwen.zh-CN.md
│ │ │ │ ├── use-with-create-react-app.en-US.md
│ │ │ │ ├── use-with-create-react-app.zh-CN.md
│ │ │ │ ├── use-with-next.en-US.md
│ │ │ │ ├── use-with-next.zh-CN.md
│ │ │ │ ├── use-with-rsbuild.en-US.md
│ │ │ │ ├── use-with-rsbuild.zh-CN.md
│ │ │ │ ├── use-with-umi.en-US.md
│ │ │ │ ├── use-with-umi.zh-CN.md
│ │ │ │ ├── use-with-vite.en-US.md
│ │ │ │ └── use-with-vite.zh-CN.md
│ │ │ ├── spec/
│ │ │ │ ├── authentic-consistent.en-US.md
│ │ │ │ ├── authentic-consistent.zh-CN.md
│ │ │ │ ├── confirm-generation-process.en-US.md
│ │ │ │ ├── confirm-generation-process.zh-CN.md
│ │ │ │ ├── confirm.en-US.md
│ │ │ │ ├── confirm.zh-CN.md
│ │ │ │ ├── conversation-design.en-US.md
│ │ │ │ ├── conversation-design.zh-CN.md
│ │ │ │ ├── define-intention-type.en-US.md
│ │ │ │ ├── define-intention-type.zh-CN.md
│ │ │ │ ├── end.en-US.md
│ │ │ │ ├── end.zh-CN.md
│ │ │ │ ├── error.en-US.md
│ │ │ │ ├── error.zh-CN.md
│ │ │ │ ├── expression-user-input.en-US.md
│ │ │ │ ├── expression-user-input.zh-CN.md
│ │ │ │ ├── expression-user-send.en-US.md
│ │ │ │ ├── expression-user-send.zh-CN.md
│ │ │ │ ├── feedback-result-application.en-US.md
│ │ │ │ ├── feedback-result-application.zh-CN.md
│ │ │ │ ├── feedback-result-display.en-US.md
│ │ │ │ ├── feedback-result-display.zh-CN.md
│ │ │ │ ├── follow-up.en-US.md
│ │ │ │ ├── follow-up.zh-CN.md
│ │ │ │ ├── guide-intention-expression.en-US.md
│ │ │ │ ├── guide-intention-expression.zh-CN.md
│ │ │ │ ├── hint.en-US.md
│ │ │ │ ├── hint.zh-CN.md
│ │ │ │ ├── human-touch.en-US.md
│ │ │ │ ├── human-touch.zh-CN.md
│ │ │ │ ├── hybrid-ui-design.en-US.md
│ │ │ │ ├── hybrid-ui-design.zh-CN.md
│ │ │ │ ├── intention-introduce.en-US.md
│ │ │ │ ├── intention-introduce.zh-CN.md
│ │ │ │ ├── introduce.en-US.md
│ │ │ │ ├── introduce.zh-CN.md
│ │ │ │ ├── provide-intention-expectation.en-US.md
│ │ │ │ ├── provide-intention-expectation.zh-CN.md
│ │ │ │ ├── role-design.en-US.md
│ │ │ │ ├── role-design.zh-CN.md
│ │ │ │ ├── smooth-natural.en-US.md
│ │ │ │ ├── smooth-natural.zh-CN.md
│ │ │ │ ├── start.en-US.md
│ │ │ │ ├── start.zh-CN.md
│ │ │ │ ├── wake-up-ai-icon.en-US.md
│ │ │ │ ├── wake-up-ai-icon.zh-CN.md
│ │ │ │ ├── wake-up-welcome-message.en-US.md
│ │ │ │ └── wake-up-welcome-message.zh-CN.md
│ │ │ ├── x-markdown/
│ │ │ │ ├── chat-enhancement.en-US.md
│ │ │ │ ├── chat-enhancement.zh-CN.md
│ │ │ │ ├── components.en-US.md
│ │ │ │ ├── components.zh-CN.md
│ │ │ │ ├── custom-plugin.en-US.md
│ │ │ │ ├── custom-plugin.zh-CN.md
│ │ │ │ ├── data-display.en-US.md
│ │ │ │ ├── data-display.zh-CN.md
│ │ │ │ ├── demo/
│ │ │ │ │ ├── _utils/
│ │ │ │ │ │ ├── adx-markdown.ts
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── theme-markdown.ts
│ │ │ │ │ ├── codeDemo/
│ │ │ │ │ │ ├── basic.tsx
│ │ │ │ │ │ ├── escape-raw-html.tsx
│ │ │ │ │ │ ├── link.tsx
│ │ │ │ │ │ ├── plugin.tsx
│ │ │ │ │ │ ├── renderer.tsx
│ │ │ │ │ │ ├── streaming.tsx
│ │ │ │ │ │ ├── supersets.tsx
│ │ │ │ │ │ ├── tokenizer.tsx
│ │ │ │ │ │ ├── walkTokens.tsx
│ │ │ │ │ │ └── xss.tsx
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── codeHighlighter.tsx
│ │ │ │ │ │ ├── custom.tsx
│ │ │ │ │ │ ├── dataChart.tsx
│ │ │ │ │ │ ├── infographic.tsx
│ │ │ │ │ │ ├── mermaid.tsx
│ │ │ │ │ │ ├── sources.tsx
│ │ │ │ │ │ └── think.tsx
│ │ │ │ │ ├── streaming/
│ │ │ │ │ │ ├── animation.tsx
│ │ │ │ │ │ ├── combined.tsx
│ │ │ │ │ │ ├── debug.tsx
│ │ │ │ │ │ └── format.tsx
│ │ │ │ │ ├── supersets/
│ │ │ │ │ │ ├── CustomPlugin/
│ │ │ │ │ │ │ ├── custom.tsx
│ │ │ │ │ │ │ ├── marked.tsx
│ │ │ │ │ │ │ └── plugin.css
│ │ │ │ │ │ └── Latex/
│ │ │ │ │ │ └── basic.tsx
│ │ │ │ │ └── themes/
│ │ │ │ │ ├── custom.tsx
│ │ │ │ │ ├── dark.tsx
│ │ │ │ │ ├── light.tsx
│ │ │ │ │ └── switch.tsx
│ │ │ │ ├── examples.en-US.md
│ │ │ │ ├── examples.zh-CN.md
│ │ │ │ ├── introduce.en-US.md
│ │ │ │ ├── introduce.zh-CN.md
│ │ │ │ ├── playground.en-US.md
│ │ │ │ ├── playground.tsx
│ │ │ │ ├── playground.zh-CN.md
│ │ │ │ ├── plugin-latex.en-US.md
│ │ │ │ ├── plugin-latex.zh-CN.md
│ │ │ │ ├── plugins.en-US.md
│ │ │ │ ├── plugins.zh-CN.md
│ │ │ │ ├── rich-text.en-US.md
│ │ │ │ ├── rich-text.zh-CN.md
│ │ │ │ ├── streaming.en-US.md
│ │ │ │ ├── streaming.zh-CN.md
│ │ │ │ ├── themes.en-US.md
│ │ │ │ └── themes.zh-CN.md
│ │ │ ├── x-sdk/
│ │ │ │ ├── chat-provider-custom.en-US.md
│ │ │ │ ├── chat-provider-custom.zh-CN.md
│ │ │ │ ├── chat-provider-deepseek.en-US.md
│ │ │ │ ├── chat-provider-deepseek.zh-CN.md
│ │ │ │ ├── chat-provider-open-ai.en-US.md
│ │ │ │ ├── chat-provider-open-ai.zh-CN.md
│ │ │ │ ├── chat-provider.en-US.md
│ │ │ │ ├── chat-provider.zh-CN.md
│ │ │ │ ├── demos/
│ │ │ │ │ ├── chat-providers/
│ │ │ │ │ │ ├── custom-provider-width-ui.md
│ │ │ │ │ │ ├── custom-provider-width-ui.tsx
│ │ │ │ │ │ ├── deep-seek-chat-provider.md
│ │ │ │ │ │ ├── deep-seek-chat-provider.tsx
│ │ │ │ │ │ ├── default-chat-provider-width-ui.md
│ │ │ │ │ │ ├── default-chat-provider-width-ui.tsx
│ │ │ │ │ │ ├── default-chat-provider.md
│ │ │ │ │ │ ├── default-chat-provider.tsx
│ │ │ │ │ │ ├── open-ai-chat-provider.md
│ │ │ │ │ │ └── open-ai-chat-provider.tsx
│ │ │ │ │ ├── x-chat/
│ │ │ │ │ │ ├── async-defaultMessages.md
│ │ │ │ │ │ ├── async-defaultMessages.tsx
│ │ │ │ │ │ ├── custom-request-fetch-en.tsx
│ │ │ │ │ │ ├── custom-request-fetch.md
│ │ │ │ │ │ ├── custom-request-fetch.tsx
│ │ │ │ │ │ ├── deepSeek.md
│ │ │ │ │ │ ├── deepSeek.tsx
│ │ │ │ │ │ ├── defaultMessages.md
│ │ │ │ │ │ ├── defaultMessages.tsx
│ │ │ │ │ │ ├── developer.md
│ │ │ │ │ │ ├── developer.tsx
│ │ │ │ │ │ ├── openai-callback.md
│ │ │ │ │ │ ├── openai-callback.tsx
│ │ │ │ │ │ ├── openai.md
│ │ │ │ │ │ ├── openai.tsx
│ │ │ │ │ │ ├── request-openai-node.md
│ │ │ │ │ │ └── request-openai-node.tsx
│ │ │ │ │ ├── x-conversations/
│ │ │ │ │ │ ├── async-defaultMessages.md
│ │ │ │ │ │ ├── async-defaultMessages.tsx
│ │ │ │ │ │ ├── basic.md
│ │ │ │ │ │ ├── basic.tsx
│ │ │ │ │ │ ├── multi-instances.md
│ │ │ │ │ │ ├── multi-instances.tsx
│ │ │ │ │ │ ├── operations.md
│ │ │ │ │ │ ├── operations.tsx
│ │ │ │ │ │ ├── session-key.md
│ │ │ │ │ │ ├── session-key.tsx
│ │ │ │ │ │ ├── with-x-chat.md
│ │ │ │ │ │ └── with-x-chat.tsx
│ │ │ │ │ ├── x-request/
│ │ │ │ │ │ ├── basic.md
│ │ │ │ │ │ ├── basic.tsx
│ │ │ │ │ │ ├── custom-params-headers.md
│ │ │ │ │ │ ├── custom-params-headers.tsx
│ │ │ │ │ │ ├── custom-transformer.md
│ │ │ │ │ │ ├── custom-transformer.tsx
│ │ │ │ │ │ ├── manual.md
│ │ │ │ │ │ ├── manual.tsx
│ │ │ │ │ │ ├── stream-separator.md
│ │ │ │ │ │ ├── stream-separator.tsx
│ │ │ │ │ │ ├── stream-timeout.md
│ │ │ │ │ │ ├── stream-timeout.tsx
│ │ │ │ │ │ ├── timeout.md
│ │ │ │ │ │ └── timeout.tsx
│ │ │ │ │ └── x-stream/
│ │ │ │ │ ├── custom-protocol.md
│ │ │ │ │ ├── custom-protocol.tsx
│ │ │ │ │ ├── default-protocol.md
│ │ │ │ │ └── default-protocol.tsx
│ │ │ │ ├── introduce.en-US.md
│ │ │ │ ├── introduce.zh-CN.md
│ │ │ │ ├── use-x-chat.en-US.md
│ │ │ │ ├── use-x-chat.zh-CN.md
│ │ │ │ ├── use-x-conversations.en-US.md
│ │ │ │ ├── use-x-conversations.zh-CN.md
│ │ │ │ ├── x-request.en-US.md
│ │ │ │ ├── x-request.zh-CN.md
│ │ │ │ ├── x-stream.en-US.md
│ │ │ │ └── x-stream.zh-CN.md
│ │ │ └── x-skill/
│ │ │ ├── introduce.en-US.md
│ │ │ ├── introduce.zh-CN.md
│ │ │ ├── prompt.en-US.md
│ │ │ ├── prompt.zh-CN.md
│ │ │ ├── skills.en-US.md
│ │ │ └── skills.zh-CN.md
│ │ ├── index.js
│ │ ├── jest-puppeteer.config.js
│ │ ├── mako.config.json
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ ├── __snapshots__/
│ │ │ │ └── check-site.ts.snap
│ │ │ ├── check-cssinjs.tsx
│ │ │ ├── check-site.ts
│ │ │ ├── check-version-md.ts
│ │ │ ├── ci-mock-project-build.sh
│ │ │ ├── collect-token-statistic.ts
│ │ │ ├── generate-authors.ts
│ │ │ ├── generate-component-changelog.ts
│ │ │ ├── generate-cssinjs.ts
│ │ │ ├── generate-token-meta.ts
│ │ │ ├── generate-version.ts
│ │ │ ├── previewEditor/
│ │ │ │ └── template.html
│ │ │ ├── print-changelog.ts
│ │ │ ├── set-node-options.ts
│ │ │ ├── tsconfig.json
│ │ │ └── visual-regression/
│ │ │ ├── build.ts
│ │ │ ├── convert.ts
│ │ │ ├── report-template.html
│ │ │ └── upload.js
│ │ ├── tests/
│ │ │ ├── __mocks__/
│ │ │ │ ├── @rc-component/
│ │ │ │ │ ├── trigger.tsx
│ │ │ │ │ └── virtual-list.ts
│ │ │ │ ├── copy-to-clipboard.ts
│ │ │ │ └── mermaid.js
│ │ │ ├── __snapshots__/
│ │ │ │ ├── changelog.test.ts.snap
│ │ │ │ └── index.test.ts.snap
│ │ │ ├── changelog.test.ts
│ │ │ ├── dekko/
│ │ │ │ ├── dist.test.ts
│ │ │ │ ├── index.test.ts
│ │ │ │ ├── lib.test.ts
│ │ │ │ └── use-client.test.ts
│ │ │ ├── index.html
│ │ │ ├── index.test.ts
│ │ │ ├── setup-streams.ts
│ │ │ ├── setup.ts
│ │ │ ├── setupAfterEnv.ts
│ │ │ ├── shared/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── demoTest.tsx.snap
│ │ │ │ ├── accessibilityTest.tsx
│ │ │ │ ├── demoTest.tsx
│ │ │ │ ├── demoTestContext.ts
│ │ │ │ ├── excludeWarning.ts
│ │ │ │ ├── focusTest.tsx
│ │ │ │ ├── imageTest.tsx
│ │ │ │ ├── mountTest.tsx
│ │ │ │ ├── rootPropsTest.tsx
│ │ │ │ ├── rtlTest.tsx
│ │ │ │ └── themeTest.tsx
│ │ │ └── utils.tsx
│ │ ├── tsconfig.json
│ │ └── typings/
│ │ ├── custom-typings.d.ts
│ │ ├── index.d.ts
│ │ └── jest.d.ts
│ ├── x-markdown/
│ │ ├── .fatherrc.ts
│ │ ├── .jest.js
│ │ ├── BUG_VERSIONS.json
│ │ ├── LICENSE
│ │ ├── README-zh_CN.md
│ │ ├── README.md
│ │ ├── jest-puppeteer.config.js
│ │ ├── mako.config.json
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ ├── generate-plugin-meta.ts
│ │ │ └── generate-version.ts
│ │ ├── src/
│ │ │ ├── XMarkdown/
│ │ │ │ ├── AnimationText.tsx
│ │ │ │ ├── DebugPanel/
│ │ │ │ │ ├── DebugPanel.css
│ │ │ │ │ ├── DebugPanel.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── __benchmark__/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── MarkdownRenderer.tsx
│ │ │ │ │ ├── playwright/
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── playwright-ct.config.ts
│ │ │ │ │ ├── scripts/
│ │ │ │ │ │ ├── check-performance.js
│ │ │ │ │ │ └── run-benchmark.js
│ │ │ │ │ └── tests/
│ │ │ │ │ ├── benchmark.config.ts
│ │ │ │ │ ├── performance.spec.tsx
│ │ │ │ │ └── test.md
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── AnimationText.test.tsx
│ │ │ │ │ ├── DebugPanel.test.tsx
│ │ │ │ │ ├── Parser.test.ts
│ │ │ │ │ ├── Renderer.test.ts
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── DebugPanel.test.tsx.snap
│ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ ├── hooks.test.tsx
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── core/
│ │ │ │ │ ├── Parser.ts
│ │ │ │ │ ├── Renderer.ts
│ │ │ │ │ ├── detectUnclosedComponentTags.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── hooks/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── useStreaming.ts
│ │ │ │ ├── index.css
│ │ │ │ ├── index.tsx
│ │ │ │ ├── interface.ts
│ │ │ │ └── utils/
│ │ │ │ └── tail.ts
│ │ │ ├── index.ts
│ │ │ ├── plugins/
│ │ │ │ ├── Latex/
│ │ │ │ │ ├── __tests__/
│ │ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ │ └── index.test.tsx.snap
│ │ │ │ │ │ └── index.test.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── type.ts
│ │ │ │ └── version/
│ │ │ │ └── index.ts
│ │ │ ├── themes/
│ │ │ │ ├── dark.css
│ │ │ │ └── light.css
│ │ │ └── version/
│ │ │ └── index.ts
│ │ ├── tests/
│ │ │ ├── dekko/
│ │ │ │ ├── dist.test.ts
│ │ │ │ ├── index.test.ts
│ │ │ │ └── lib.test.ts
│ │ │ ├── setup.ts
│ │ │ └── setupAfterEnv.ts
│ │ ├── tsconfig.json
│ │ └── typings/
│ │ ├── custom-typings.d.ts
│ │ ├── index.d.ts
│ │ └── jest.d.ts
│ ├── x-sdk/
│ │ ├── .fatherrc.ts
│ │ ├── .jest.js
│ │ ├── BUG_VERSIONS.json
│ │ ├── LICENSE
│ │ ├── README-zh_CN.md
│ │ ├── README.md
│ │ ├── mako.config.json
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ └── generate-version.ts
│ │ ├── src/
│ │ │ ├── _util/
│ │ │ │ └── type.ts
│ │ │ ├── chat-providers/
│ │ │ │ ├── AbstractChatProvider.ts
│ │ │ │ ├── DeepSeekChatProvider.ts
│ │ │ │ ├── DefaultChatProvider.ts
│ │ │ │ ├── OpenAIChatProvider.ts
│ │ │ │ ├── __test__/
│ │ │ │ │ └── providers.test.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── types/
│ │ │ │ └── model.ts
│ │ │ ├── index.ts
│ │ │ ├── version/
│ │ │ │ └── index.ts
│ │ │ ├── x-chat/
│ │ │ │ ├── __test__/
│ │ │ │ │ ├── index.test.tsx
│ │ │ │ │ ├── store.test.ts
│ │ │ │ │ └── useSyncState.test.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── store.ts
│ │ │ │ └── useSyncState.ts
│ │ │ ├── x-conversations/
│ │ │ │ ├── __test__/
│ │ │ │ │ └── index.test.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── store.ts
│ │ │ ├── x-mcp-client/
│ │ │ │ ├── __test__/
│ │ │ │ │ └── index.test.ts
│ │ │ │ └── index.ts
│ │ │ ├── x-request/
│ │ │ │ ├── __test__/
│ │ │ │ │ ├── abort.test.ts
│ │ │ │ │ ├── index.test.ts
│ │ │ │ │ └── x-fetch.test.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── x-fetch.ts
│ │ │ └── x-stream/
│ │ │ ├── __test__/
│ │ │ │ └── index.test.ts
│ │ │ └── index.ts
│ │ ├── tests/
│ │ │ ├── dekko/
│ │ │ │ ├── dist.test.ts
│ │ │ │ ├── index.test.ts
│ │ │ │ └── lib.test.ts
│ │ │ ├── index.test.ts
│ │ │ ├── setup-streams.ts
│ │ │ ├── setup.ts
│ │ │ └── utils.tsx
│ │ ├── tsconfig.json
│ │ └── typings/
│ │ ├── custom-typings.d.ts
│ │ ├── index.d.ts
│ │ └── jest.d.ts
│ └── x-skill/
│ ├── .claude-plugin/
│ │ └── marketplace.json
│ ├── .fatherrc.ts
│ ├── .gitignore
│ ├── .skill.json
│ ├── LICENSE
│ ├── README-zh_CN.md
│ ├── README.md
│ ├── package.json
│ ├── scripts/
│ │ ├── config.ts
│ │ ├── dekko.ts
│ │ ├── generate-meta.ts
│ │ ├── generate-version.ts
│ │ ├── skillApi.ts
│ │ └── typings/
│ │ └── custom-typings.d.ts
│ ├── skills/
│ │ ├── use-x-chat/
│ │ │ ├── SKILL.md
│ │ │ └── reference/
│ │ │ ├── API.md
│ │ │ ├── CORE.md
│ │ │ └── EXAMPLES.md
│ │ ├── x-chat-provider/
│ │ │ ├── SKILL.md
│ │ │ └── reference/
│ │ │ └── EXAMPLES.md
│ │ ├── x-markdown/
│ │ │ ├── SKILL.md
│ │ │ └── reference/
│ │ │ ├── API.md
│ │ │ ├── CORE.md
│ │ │ ├── EXTENSIONS.md
│ │ │ └── STREAMING.md
│ │ └── x-request/
│ │ ├── SKILL.md
│ │ └── reference/
│ │ ├── API.md
│ │ ├── CORE.md
│ │ └── EXAMPLES_SERVICE_PROVIDER.md
│ ├── skills-zh/
│ │ ├── use-x-chat/
│ │ │ ├── SKILL.md
│ │ │ └── reference/
│ │ │ ├── API.md
│ │ │ ├── CORE.md
│ │ │ └── EXAMPLES.md
│ │ ├── x-chat-provider/
│ │ │ ├── SKILL.md
│ │ │ └── reference/
│ │ │ └── EXAMPLES.md
│ │ ├── x-markdown/
│ │ │ ├── SKILL.md
│ │ │ └── reference/
│ │ │ ├── API.md
│ │ │ ├── CORE.md
│ │ │ ├── EXTENSIONS.md
│ │ │ └── STREAMING.md
│ │ └── x-request/
│ │ ├── SKILL.md
│ │ └── reference/
│ │ ├── API.md
│ │ ├── CORE.md
│ │ └── EXAMPLES_SERVICE_PROVIDER.md
│ ├── src/
│ │ ├── getSkillRepo.ts
│ │ ├── help.ts
│ │ ├── index.ts
│ │ ├── locale/
│ │ │ └── index.ts
│ │ └── skill-meta.json
│ └── tsconfig.json
├── scripts/
│ ├── check-repo.ts
│ ├── pre-publish.ts
│ └── synchronize-version.ts
├── tsconfig.base.json
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .codefuse/skills/components/SKILL.md
================================================
# Ant Design X 组件开发规范指南
基于 antd 组件库最佳实践的完整开发规范,涵盖命名、架构、样式、测试等各个方面。
## 1. 项目架构规范
### 1.1 目录结构
```
components/[组件名]/
├── index.tsx # 组件入口文件
├── [组件名].tsx # 主组件实现
├── [子组件].tsx # 子组件实现
├── style/
│ ├── index.ts # 样式入口
│ ├── token.ts # Token 定义
│ └── [其他样式文件].ts
├── demo/ # 示例代码
│ ├── basic.tsx # 基础示例
│ └── [其他示例].tsx
├── __tests__/ # 测试文件
│ └── index.test.tsx # 单元测试
└── index.zh-CN.md # 中文文档
```
### 1.2 文件命名规范
- 组件文件:PascalCase(如 `Button.tsx`)
- 样式文件:camelCase(如 `buttonStyle.ts`)
- 测试文件:`index.test.tsx` 或 `[组件名].test.tsx`
- 示例文件:kebab-case(如 `basic.tsx`、`custom-filter.tsx`)
## 2. 命名规范与语义化
### 2.1 组件命名
- **完整名称**:使用完整单词,避免缩写
- **PascalCase**:组件名使用大驼峰命名
- **语义化**:名称应准确描述组件功能
```typescript
// ✅ 正确
interface ButtonProps {}
interface TypographyTextProps {}
// ❌ 错误
interface BtnProps {} // 缩写
interface TxtProps {} // 缩写
interface MyComponentProps {} // 语义不清
```
### 2.2 Props 命名规范
#### 基础属性
- **类型属性**:`type`(如 `type="primary"`)
- **状态属性**:`disabled`、`loading`、`open`
- **尺寸属性**:`size`(`large` | `middle` | `small`)
- **默认值**:`default` + 属性名(如 `defaultValue`)
#### 功能属性
- **可编辑**:`editable`(布尔或配置对象)
- **可复制**:`copyable`(布尔或配置对象)
- **可展开**:`expandable`(布尔或配置对象)
#### 事件属性
- **触发事件**:`on` + 事件名(如 `onClick`、`onChange`)
- **子组件事件**:`on` + 子组件名 + 事件名(如 `onPanelClick`)
- **前置事件**:`before` + 事件名(如 `beforeUpload`)
- **后置事件**:`after` + 事件名(如 `afterClose`)
### 2.3 CSS 类名规范
```typescript
// 组件前缀
const prefixCls = getPrefixCls('button', customizePrefixCls);
// 状态类名
`${prefixCls}-${type}` // 类型类名
`${prefixCls}-disabled` // 禁用状态
`${prefixCls}-loading` // 加载状态
`${prefixCls}-${sizeCls}` // 尺寸类名
// 组合类名
`${prefixCls}-icon-only` // 仅图标按钮
`${prefixCls}-two-chinese-chars`; // 中文字符间距
```
## 3. TypeScript 类型设计
### 3.1 Props 接口定义
```typescript
// 基础 Props 接口
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
// 类型定义
type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';
size?: 'large' | 'middle' | 'small';
// 状态控制
loading?: boolean | { delay?: number };
disabled?: boolean;
// 内容相关
icon?: React.ReactNode;
children?: React.ReactNode;
// 样式相关
className?: string;
style?: React.CSSProperties;
// 事件处理
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
}
// 配置对象类型
export interface CopyConfig {
text?: string | (() => string | Promise<string>);
onCopy?: (event?: React.MouseEvent<HTMLButtonElement>) => void;
icon?: React.ReactNode;
tooltips?: React.ReactNode;
format?: 'text/plain' | 'text/html';
}
```
### 3.2 泛型组件设计
```typescript
// 泛型组件支持不同元素类型
export interface BlockProps<
C extends keyof JSX.IntrinsicElements = keyof JSX.IntrinsicElements,
> extends TypographyProps<C> {
component?: C;
// 其他属性...
}
// 使用示例
const Base = React.forwardRef<HTMLElement, BlockProps>((props, ref) => {
const { component = 'div' as C, ...rest } = props;
return React.createElement(component, rest);
});
```
### 3.3 类型安全实践
```typescript
// 使用联合类型而非 enum
type ButtonType = 'primary' | 'default' | 'dashed' | 'text' | 'link';
// 使用 as const 定义常量
const BUTTON_TYPES = ['primary', 'default', 'dashed', 'text', 'link'] as const;
// 精确的类型定义
interface EllipsisConfig {
rows?: number;
expandable?: boolean | 'collapsible';
suffix?: string;
symbol?: React.ReactNode | ((expanded: boolean) => React.ReactNode);
}
```
## 4. 组件架构模式
### 4.1 复合组件模式
```typescript
// 主组件
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
// 实现...
});
// 子组件
Button.Group = ButtonGroup;
Button.__ANT_BUTTON = true;
// 使用
<Button.Group>
<Button>按钮1</Button>
<Button>按钮2</Button>
</Button.Group>
```
### 4.2 配置合并模式
```typescript
// 使用 useMergedConfig 合并布尔值和配置对象
const [enableEdit, editConfig] = useMergedConfig<EditConfig>(editable);
// 实现 useMergedConfig
function useMergedConfig<T>(config: boolean | T): [boolean, T] {
const enable = Boolean(config);
const mergedConfig = React.useMemo(() => {
if (config === true) return {} as T;
if (config === false) return {} as T;
return config || ({} as T);
}, [config]);
return [enable, mergedConfig];
}
```
### 4.3 受控与非受控模式
```typescript
// 使用 useControlledState 处理受控/非受控状态
const [editing, setEditing] = useControlledState(false, editConfig.editing);
// useControlledState 实现
function useControlledState<T>(defaultValue: T, controlledValue?: T): [T, (value: T) => void] {
const [internalValue, setInternalValue] = React.useState<T>(defaultValue);
const isControlled = controlledValue !== undefined;
const value = isControlled ? controlledValue : internalValue;
const setValue = React.useCallback(
(newValue: T) => {
if (!isControlled) {
setInternalValue(newValue);
}
},
[isControlled],
);
return [value, setValue];
}
```
## 5. 样式系统规范
### 5.1 CSS-in-JS 架构
```typescript
// Token 定义
export interface ComponentToken {
// 颜色相关
colorPrimary?: string;
colorBgContainer?: string;
// 尺寸相关
controlHeight?: number;
controlHeightSM?: number;
controlHeightLG?: number;
// 间距相关
padding?: number;
paddingSM?: number;
paddingLG?: number;
}
// 样式生成函数
const genButtonStyle = (token: ButtonToken): CSSInterpolation => {
return [
// 基础样式
genSharedButtonStyle(token),
// 尺寸样式
genSizeBaseButtonStyle(token),
genSizeSmallButtonStyle(token),
genSizeLargeButtonStyle(token),
// 变体样式
genVariantStyle(token),
];
};
// 样式导出
export default genStyleHooks('Button', genButtonStyle, prepareComponentToken, {
unitless: { fontWeight: true },
});
```
### 5.2 响应式设计
```typescript
// 使用 CSS 逻辑属性支持 RTL
const styles = {
marginInlineStart: token.marginXS, // 替代 marginLeft
marginInlineEnd: token.marginXS, // 替代 marginRight
paddingBlock: token.paddingSM, // 替代 paddingTop/paddingBottom
paddingInline: token.paddingSM, // 替代 paddingLeft/paddingRight
};
// 响应式断点
const responsiveStyles = {
[token.screenXS]: {
fontSize: token.fontSizeSM,
},
[token.screenMD]: {
fontSize: token.fontSize,
},
[token.screenLG]: {
fontSize: token.fontSizeLG,
},
};
```
### 5.3 主题定制支持
```typescript
// 支持 ConfigProvider 主题定制
const { getPrefixCls, direction } = React.useContext(ConfigContext);
const prefixCls = getPrefixCls('button', customizePrefixCls);
// 支持语义化 className 和 style
export interface ButtonSemanticClassNames {
root?: string;
icon?: string;
content?: string;
}
export interface ButtonSemanticStyles {
root?: React.CSSProperties;
icon?: React.CSSProperties;
content?: React.CSSProperties;
}
```
## 6. 可访问性规范
### 6.1 ARIA 属性
```typescript
// 正确的 ARIA 属性使用
<button
aria-label={ariaLabel}
aria-disabled={mergedDisabled}
aria-expanded={expanded}
aria-busy={innerLoading}
tabIndex={mergedDisabled ? -1 : 0}
>
{children}
</button>
// 键盘导航支持
const handleKeyDown = (event: React.KeyboardEvent) => {
switch (event.key) {
case 'Enter':
case ' ':
event.preventDefault();
handleClick();
break;
case 'Escape':
handleCancel();
break;
}
};
```
### 6.2 焦点管理
```typescript
// 焦点状态样式
const focusStyles = {
'&:focus-visible': {
outline: `${token.lineWidthFocus}px solid ${token.colorPrimaryBorder}`,
outlineOffset: 1,
},
};
// 程序化焦点管理
const buttonRef = React.useRef<HTMLButtonElement>(null);
React.useEffect(() => {
if (autoFocus && buttonRef.current) {
buttonRef.current.focus();
}
}, [autoFocus]);
```
## 7. 性能优化规范
### 7.1 React 优化
```typescript
// 使用 React.memo 避免不必要的重渲染
const Button = React.memo(
React.forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
// 组件实现
}),
);
// 使用 useMemo 缓存计算结果
const classes = React.useMemo(() => {
return clsx(prefixCls, `${prefixCls}-${type}`, `${prefixCls}-${size}`, className);
}, [prefixCls, type, size, className]);
// 使用 useCallback 缓存函数
const handleClick = React.useCallback(
(event: React.MouseEvent) => {
if (!disabled && !loading) {
onClick?.(event);
}
},
[disabled, loading, onClick],
);
```
### 7.2 样式优化
```typescript
// 避免不必要的样式重计算
const useStyle = genStyleHooks(
'Button',
(token) => {
// 样式计算逻辑
},
prepareComponentToken,
);
// 使用 CSS containment
const containerStyles = {
contain: 'layout style paint',
contentVisibility: 'auto',
};
```
## 8. 测试规范
### 8.1 测试文件结构
```typescript
// __tests__/index.test.tsx
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import Button from '../index';
describe('Button', () => {
it('should render correctly', () => {
const { container } = render(<Button>Test</Button>);
expect(container.firstChild).toMatchSnapshot();
});
it('should handle click events', () => {
const handleClick = jest.fn();
render(<Button onClick={handleClick}>Click me</Button>);
fireEvent.click(screen.getByText('Click me'));
expect(handleClick).toHaveBeenCalledTimes(1);
});
it('should be disabled when disabled prop is true', () => {
render(<Button disabled>Disabled</Button>);
expect(screen.getByText('Disabled')).toBeDisabled();
});
});
```
### 8.2 测试覆盖率要求
- 单元测试覆盖率:100%
- 集成测试:主要使用场景
- 可访问性测试:键盘导航、屏幕阅读器
- 视觉回归测试:UI 变化检测
## 9. 文档规范
### 9.1 API 文档格式
```markdown
| 参数 | 说明 | 类型 | 默认值 |
| -------- | ---------------- | ------------------------------------------------------ | --------- |
| type | 设置按钮类型 | `primary` \| `default` \| `dashed` \| `text` \| `link` | `default` |
| size | 设置按钮大小 | `large` \| `middle` \| `small` | `middle` |
| disabled | 按钮失效状态 | boolean | false |
| loading | 设置按钮载入状态 | boolean \| { delay: number } | false |
| onClick | 点击按钮时的回调 | (event) => void | - |
```
### 9.2 示例代码规范
```typescript
// demo/basic.tsx
import React from 'react';
import { Button } from 'antd';
const App: React.FC = () => (
<>
<Button type="primary">Primary Button</Button>
<Button>Default Button</Button>
<Button type="dashed">Dashed Button</Button>
<Button type="text">Text Button</Button>
<Button type="link">Link Button</Button>
</>
);
export default App;
```
## 10. 国际化规范
### 10.1 本地化配置
```typescript
// locale/zh_CN.ts
export default {
Text: {
edit: '编辑',
copy: '复制',
copied: '复制成功',
expand: '展开',
collapse: '收起',
},
};
// 使用 useLocale 获取本地化
const [textLocale] = useLocale('Text', enUS.Text);
```
### 10.2 动态文本处理
```typescript
// 支持模板变量的本地化
const messages = {
selected: '已选择 ${count} 项',
};
// 使用
const message = messages.selected.replace('${count}', count.toString());
```
## 11. 版本兼容规范
### 11.1 向下兼容
- 避免破坏性变更
- 提供迁移指南
- 保持 API 稳定性
- 使用废弃警告
```typescript
// 废弃警告
if (process.env.NODE_ENV !== 'production') {
const warning = devUseWarning('Button');
warning.deprecated(!iconPosition, 'iconPosition', 'iconPlacement');
}
```
### 11.2 浏览器兼容
- 支持 Chrome 80+
- 支持服务端渲染
- 支持 TypeScript 4.0+
- 支持 React 18 ~ 19
## 12. 发布规范
### 12.1 版本管理
- 遵循语义化版本(SemVer)
- 主版本:破坏性变更
- 次版本:新功能
- 修订版本:Bug 修复
### 12.2 变更日志
```markdown
## 5.0.0
### 重大变更
- 移除废弃的 `icon` 字符串用法
- 重构样式系统,使用 CSS-in-JS
### 新功能
- 新增 `variant` 属性支持多种按钮变体
- 新增语义化 className 和 style 支持
### Bug 修复
- 修复按钮在 disabled 状态下仍可点击的问题
```
---
这套规范基于 antd 组件库的最佳实践,涵盖了从项目结构到发布流程的完整开发规范。遵循这些规范可以确保组件的一致性、可维护性和高质量。
================================================
FILE: .editorconfig
================================================
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*.{js,css}]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: ant-design # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: ant-design # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: 错误报告 🐛
description: 提交一个 @ant-design/x 的 bug
labels: ['bug']
body:
- type: markdown
attributes:
value: 感谢您的贡献!❤️ 请在上方写一个易于搜索的标题 ⬆️。
validations:
required: true
- type: textarea
attributes:
label: 重现步骤
description: |
**⚠️ 我们无法重现的问题是无法修复的。**
请提供一个在线示例的链接和一组明确的步骤来重现这个错误。请参阅我们的[文档](https://github.com/ant-design/ant-design/wiki/%E4%BB%80%E4%B9%88%E6%98%AF%E6%9C%80%E5%B0%8F%E5%8C%96%E9%87%8D%E7%8E%B0%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E6%98%AF%E5%BF%85%E9%9C%80%E7%9A%84%EF%BC%9F)了解如何构建重现案例。
value: |
在线示例链接:(必填)
步骤:
1.
2.
3.
- type: textarea
attributes:
label: 当前行为
description: 描述实际发生的情况,而不是预期行为。
- type: textarea
attributes:
label: 预期行为
description: 描述应该发生的情况。
- type: textarea
attributes:
label: 上下文
description: 您想要完成什么?提供背景有助于我们提出在现实世界中更有用的解决方案。
- type: input
id: version
attributes:
label: 版本
description: 使用的 @ant-design/x 版本是多少?
validations:
required: true
- type: dropdown
id: browsers
attributes:
label: 您在哪些浏览器上遇到了这个问题?
multiple: true
options:
- Firefox
- Chrome
- Safari
- Microsoft Edge
- 其他
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: 功能请求 💄
description: 我想给 @ant-design/x 加个新功能
labels: ['feature request']
body:
- type: markdown
attributes:
value: 感谢您的贡献!❤️ 请在上方写一个易于搜索的标题 ⬆️。
- type: textarea
attributes:
label: 需求动机
description: 要解决什么问题?提供背景有助于我们提出在现实世界中更有用的解决方案。
- type: textarea
attributes:
label: 提议的 API 是什么样的?
description: 描述您希望用什么样的 API 来解决这个问题,可以写一个具体的 markdown 代码块示例。
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
First of all, thank you for your contribution! 😄
For requesting to pull a new feature or bugfix, please send it from a feature/bugfix branch based on the `master` branch.
Before submitting your pull request, please make sure the checklist below is confirmed.
Your pull requests will be merged after one of the collaborators approve.
Thank you!
-->
[中文版模板 / Chinese template](https://github.com/ant-design/x/blob/master/.github/PULL_REQUEST_TEMPLATE_CN.md?plain=1)
### 🤔 This is a ...
- [ ] 🆕 New feature
- [ ] 🐞 Bug fix
- [ ] 📝 Site / documentation improvement
- [ ] 📽️ Demo improvement
- [ ] 💄 Component style improvement
- [ ] 🤖 TypeScript definition improvement
- [ ] 📦 Bundle size optimization
- [ ] ⚡️ Performance optimization
- [ ] ⭐️ Feature enhancement
- [ ] 🌐 Internationalization
- [ ] 🛠 Refactoring
- [ ] 🎨 Code style optimization
- [ ] ✅ Test Case
- [ ] 🔀 Branch merge
- [ ] ⏩ Workflow
- [ ] ⌨️ Accessibility improvement
- [ ] ❓ Other (about what?)
### 🔗 Related Issues
> - Describe the source of related requirements, such as links to relevant issue discussions.
> - For example: close #xxxx, fix #xxxx
### 💡 Background and Solution
> - The specific problem to be addressed.
> - List the final API implementation and usage if needed.
> - If there are UI/interaction changes, consider providing screenshots or GIFs.
### 📝 Change Log
> - Read [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) like a cat tracks a laser pointer.
> - Describe the impact of the changes on developers, not the solution approach.
> - Reference: https://x.ant.design/changelog
| Language | Changelog |
| ---------- | --------- |
| 🇺🇸 English | |
| 🇨🇳 Chinese | |
================================================
FILE: .github/PULL_REQUEST_TEMPLATE_CN.md
================================================
<!--
首先,感谢你的贡献!😄
新特性请提交至 feature 分支,其余可提交至 master 分支。
在维护者审核通过后会合并。
请确保填写以下 pull request 的信息,谢谢!~
-->
[English Template / 英文模板](https://github.com/ant-design/x/blob/master/.github/PULL_REQUEST_TEMPLATE.md?plain=1)
### 🤔 这个变动的性质是?
- [ ] 🆕 新特性提交
- [ ] 🐞 Bug 修复
- [ ] 📝 站点、文档改进
- [ ] 📽️ 演示代码改进
- [ ] 💄 组件样式/交互改进
- [ ] 🤖 TypeScript 定义更新
- [ ] 📦 包体积优化
- [ ] ⚡️ 性能优化
- [ ] ⭐️ 功能增强
- [ ] 🌐 国际化改进
- [ ] 🛠 重构
- [ ] 🎨 代码风格优化
- [ ] ✅ 测试用例
- [ ] 🔀 分支合并
- [ ] ⏩ 工作流程
- [ ] ⌨️ 无障碍改进
- [ ] ❓ 其他改动(是关于什么的改动?)
### 🔗 相关 Issue
> 1. 描述相关需求的来源,如相关的 issue 讨论链接。
> 2. 例如 close #xxxx、 fix #xxxx
### 💡 需求背景和解决方案
> 1. 要解决的具体问题。
> 2. 列出最终的 API 实现和用法。
> 3. 涉及UI/交互变动建议提供截图或 GIF。
### 📝 更新日志
> - 郑重地阅读 [如何维护更新日志](https://keepachangelog.com/zh-CN/1.1.0/)
> - 描述改动对开发者有哪些影响,而非解决方式
> - 可参考:https://x.ant.design/changelog-cn
| 语言 | 更新描述 |
| ------- | -------- |
| 🇺🇸 英文 | |
| 🇨🇳 中文 | |
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
day: monday
time: '10:00'
timezone: Asia/Shanghai
ignore:
- dependency-name: '@ant-design/cssinjs'
- dependency-name: dayjs
versions: [1.x]
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
labels:
- github-actions
- dependencies
- skip-verify-files
================================================
FILE: .github/workflows/main.yml
================================================
name: ✅ test
on: [push, pull_request]
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: utooland/setup-utoo@v1
- run: ut install --ignore-scripts
- run: ut prestart
- run: ut lint
- run: ut tsc
- run: ut compile
- run: ut coverage
- run: ut test:dekko
- uses: codecov/codecov-action@v5
with:
directories: packages/x,packages/x-markdown,packages/x-sdk
token: ${{ secrets.CODECOV_TOKEN }}
================================================
FILE: .github/workflows/markdown-benchmark.yml
================================================
name: Markdown Performance
on:
pull_request:
paths:
- 'packages/x-markdown/**'
push:
paths:
- 'packages/x-markdown/**'
workflow_dispatch:
permissions:
contents: read
pull-requests: write
checks: write
jobs:
benchmark:
name: Performance BenchMark
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '18'
- name: Install dependencies
run: npm install
- name: Setup Playwright
run: |
cd packages/x-markdown
npx playwright install --with-deps chromium
- name: Run x-markdown benchmark
id: benchmark
run: |
cd packages/x-markdown
npm run benchmark
- name: Check performance against thresholds
id: check
run: |
cd packages/x-markdown
node src/XMarkdown/__benchmark__/scripts/check-performance.js \
test-results/benchmark-results.json \
benchmark-check-report.txt
- name: Comment PR with results
if: |
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository
uses: actions/github-script@v8
with:
script: |
const fs = require('fs');
const path = 'packages/x-markdown/src/XMarkdown/__benchmark__/benchmark-check-report.txt';
let report = '⚠️ Performance benchmark report not found.';
if (fs.existsSync(path)) {
report = fs.readFileSync(path, 'utf8');
}
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const botComment = comments.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('📊 x-markdown Performance Report')
);
const commentBody = report + '\n\n---\n*This comment is automatically generated by the x-markdown performance CI.*';
if (botComment) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: commentBody
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: commentBody
});
}
================================================
FILE: .github/workflows/pr-auto-merge.yml
================================================
# Used to merge master/feature branches with each other
name: PR Auto Merge Bot
on:
schedule:
- cron: '*/5 * * * *'
permissions:
contents: read
jobs:
pr-check-ci:
if: github.repository == 'ant-design/x'
permissions:
checks: read # for actions-cool/check-pr-ci to get check reference
contents: write # for actions-cool/check-pr-ci to merge PRs
issues: write # for actions-cool/check-pr-ci to update issues
pull-requests: write # for actions-cool/check-pr-ci to update PRs
runs-on: ubuntu-latest
steps:
- uses: actions-cool/check-pr-ci@v1
with:
filter-label: BranchAutoMerge
filter-creator-authority: write
filter-head-ref: 'main, feature, next, main-merge-feature, feature-merge-main, next-merge-main, next-merge-feature'
filter-support-fork: false
skip-run-names: 'deploy preview, pr-check-ci, upstream workflow summary, suggest-related-links, download visual-regression report'
conflict-review-body: 😅 This branch has conflicts that must be resolved!
success-review: true
success-merge: true
merge-method: merge
merge-title: 'chore: auto merge branches (#${number})'
================================================
FILE: .github/workflows/pr-contributor-welcome.yml
================================================
# 当 PR 被合并时,留言欢迎加入共建群
name: PullRequest Contributor Welcome
on:
pull_request_target:
types:
- closed
paths:
- 'packages/**'
permissions:
contents: read
jobs:
comment:
permissions:
issues: write # for actions-cool/maintain-one-comment to modify or create issue comments
pull-requests: write # for actions-cool/maintain-one-comment to modify or create PR comments
if: github.event.pull_request.merged == true && github.repository == 'ant-design/x'
runs-on: ubuntu-latest
steps:
- name: get commit count
id: get_commit_count
run: |
PR_AUTHOR=$(echo "${{ github.event.pull_request.user.login }}")
RESULT_DATA=$(curl -s "https://api.github.com/repos/${{ github.repository }}/commits?author=${PR_AUTHOR}&per_page=5")
DATA_LENGTH=$(echo $RESULT_DATA | jq 'if type == "array" then length else 0 end')
echo "COUNT=$DATA_LENGTH" >> $GITHUB_OUTPUT
- name: Comment on PR
if: steps.get_commit_count.outputs.COUNT < 3
uses: actions-cool/maintain-one-comment@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
body: |
🎉 Thank you for your contribution! If you have not yet joined our DingTalk community group, please feel free to join us (when joining, please provide the link to this PR).
🎉 感谢您的贡献!如果您还没有加入钉钉社区群,请扫描下方二维码加入我们(加群时请提供此 PR 链接)。
<img src="https://mdn.alipayobjects.com/huamei_lkxviz/afts/img/gGRQTaOkHf8AAAAAQvAAAAgADtFMAQFr/original" alt="Thank you for your contribution!" height="200" />
<!-- WELCOME_CONTRIBUTION -->
body-include: <!-- WELCOME_CONTRIBUTION -->
================================================
FILE: .github/workflows/preview-build.yml
================================================
# Each PR will build preview site that help to check code is work as expect.
name: Preview Build
on:
pull_request:
types: [opened, synchronize, reopened]
# Cancel prev CI if new commit come
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
build-site:
name: build preview
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: utooland/setup-utoo@v1
- run: ut
- run: ut prestart --workspaces
- name: ut site
id: site
run: ut site --workspace packages/x
env:
NODE_OPTIONS: '--max_old_space_size=4096'
- name: upload site artifact
uses: actions/upload-artifact@v7
with:
name: site
path: packages/x/_site/
retention-days: 5
# Upload PR id for next workflow use
- name: Save PR number
if: ${{ always() }}
run: echo ${{ github.event.number }} > ./pr-id.txt
- name: Upload PR number
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: pr
path: ./pr-id.txt
================================================
FILE: .github/workflows/preview-deploy.yml
================================================
# Each PR will build preview site that help to check code is work as expect.
name: Preview Deploy
on:
workflow_run:
workflows: ['Preview Build']
types:
- completed
permissions:
contents: read
actions: read
jobs:
upstream-workflow-summary:
name: upstream workflow summary
runs-on: ubuntu-latest
if: github.event.workflow_run.event == 'pull_request'
outputs:
jobs: ${{ steps.prep-summary.outputs.result }}
build-success: ${{ steps.prep-summary.outputs.build-success }}
build-failure: ${{ steps.prep-summary.outputs.build-failure }}
steps:
- name: summary jobs status
uses: actions/github-script@v8
id: prep-summary
with:
script: |
const response = await github.rest.actions.listJobsForWorkflowRun({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
});
// { [name]: [conclusion] }, e.g. { 'build preview': 'success' }
const jobs = (response.data?.jobs ?? []).reduce((acc, job) => {
if(job?.status === 'completed' && 'name' in job && 'conclusion' in job) {
acc[job.name] = job.conclusion;
}
return acc;
}, {});
const total = Object.keys(jobs).length;
if(total === 0) core.setFailed('no jobs found');
// the name here must be the same as `jobs.xxx.{name}` in preview-build.yml
// set output
core.setOutput('build-success', jobs['build preview'] === 'success');
core.setOutput('build-failure', jobs['build preview'] === 'failure');
return jobs;
deploy-preview:
name: deploy preview
permissions:
actions: read # for dawidd6/action-download-artifact to query and download artifacts
issues: write # for actions-cool/maintain-one-comment to modify or create issue comments
pull-requests: write # for actions-cool/maintain-one-comment to modify or create PR comments
runs-on: ubuntu-latest
needs: upstream-workflow-summary
if: github.event.workflow_run.event == 'pull_request'
steps:
# We need get PR id first
- name: download pr artifact
uses: dawidd6/action-download-artifact@v16
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
run_id: ${{ github.event.workflow_run.id }}
name: pr
# Save PR id to output
- name: save PR id
id: pr
run: |
pr_id=$(<pr-id.txt)
if ! [[ "$pr_id" =~ ^[0-9]+$ ]]; then
echo "Error: pr-id.txt does not contain a valid numeric PR id. Please check."
exit 1
fi
echo "id=$pr_id" >> $GITHUB_OUTPUT
# Download site artifact
- name: download site artifact
if: ${{ fromJSON(needs.upstream-workflow-summary.outputs.build-success) }}
uses: dawidd6/action-download-artifact@v16
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
run_id: ${{ github.event.workflow_run.id }}
name: site
- name: upload surge service
id: deploy
continue-on-error: true
env:
PR_ID: ${{ steps.pr.outputs.id }}
run: |
export DEPLOY_DOMAIN=https://preview-${PR_ID}-antd-x.surge.sh
npx surge --project ./ --domain $DEPLOY_DOMAIN --token ${{ secrets.SURGE_TOKEN }}
- name: success comment
uses: actions-cool/maintain-one-comment@v3
if: ${{ steps.deploy.outcome == 'success' }}
with:
token: ${{ secrets.GITHUB_TOKEN }}
body: |
[<img width="300" alt="Preview is ready" src="https://user-images.githubusercontent.com/5378891/72400743-23dbb200-3785-11ea-9d13-1a2d92743846.png">](https://preview-${{ steps.pr.outputs.id }}-antd-x.surge.sh)
<!-- AUTO_PREVIEW_HOOK -->
body-include: '<!-- AUTO_PREVIEW_HOOK -->'
number: ${{ steps.pr.outputs.id }}
- name: failed comment
if: ${{ fromJSON(needs.upstream-workflow-summary.outputs.build-failure) || steps.deploy.outcome == 'failure' || failure() }}
uses: actions-cool/maintain-one-comment@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
body: |
[<img width="300" alt="Preview failed" src="https://user-images.githubusercontent.com/5378891/75333447-1e63a280-58c1-11ea-975d-235367fd1522.png">](https://preview-${{ steps.pr.outputs.id }}-antd-x.surge.sh)
<!-- AUTO_PREVIEW_HOOK -->
body-include: '<!-- AUTO_PREVIEW_HOOK -->'
number: ${{ steps.pr.outputs.id }}
================================================
FILE: .github/workflows/preview-start.yml
================================================
# When `preview-build` start. Leave a message on the PR
#
# 🚨🚨🚨 Important 🚨🚨🚨
# Never do any `checkout` or `npm install` action!
# `pull_request_target` will enable PR to access the secrets!
name: Preview Start
on:
pull_request_target:
types: [opened, synchronize, reopened]
permissions:
contents: read
jobs:
preview-start:
permissions:
issues: write # for actions-cool/maintain-one-comment to modify or create issue comments
pull-requests: write # for actions-cool/maintain-one-comment to modify or create PR comments
name: start preview info
runs-on: ubuntu-latest
steps:
- name: update status comment
uses: actions-cool/maintain-one-comment@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
body: |
[<img width="500" alt="Prepare preview" src="https://user-images.githubusercontent.com/5378891/72351368-2c979e00-371b-11ea-9652-eb4e825d745e.gif">](https://preview-${{ github.event.number }}-ant-design.surge.sh)
<!-- AUTO_PREVIEW_HOOK -->
body-include: '<!-- AUTO_PREVIEW_HOOK -->'
================================================
FILE: .github/workflows/release-dingtalk.yml
================================================
name: DingTalk Release Notification
on: create
permissions:
contents: read
jobs:
release-helper:
permissions:
contents: write # for actions-cool/release-helper to create releases
if: github.event.ref_type == 'tag'
runs-on: ubuntu-latest
steps:
- name: Send to Ant Design X DingGroup
uses: actions-cool/release-helper@v2
with:
trigger: tag
changelogs: 'CHANGELOG.en-US.md, CHANGELOG.zh-CN.md'
branch: 'main'
tag: '2*'
latest: '2*'
dingding-token: ${{ secrets.DINGDING_BOT_TOKEN }} ${{ secrets.DINGDING_BOT_INTERNAL_TOKEN }} ${{ secrets.DINGDING_BOT_XMARKDOWN_TOKEN }}
dingding-msg: CHANGELOG.zh-CN.md
msg-title: '# Ant Design X {{v}} 发布日志'
msg-poster: 'https://mdn.alipayobjects.com/huamei_iwk9zp/afts/img/A*kjHUSYIdsnUAAAAAAAAAAAAADgCCAQ/original'
msg-footer: '💬 前往 [**Ant Design X Releases**]({{url}}) 查看更新日志'
prettier: true
prerelease-filter: '-, a, b, A, B'
================================================
FILE: .github/workflows/release-x.yml
================================================
name: 🆇 Release to X
on: create
jobs:
tweet:
runs-on: ubuntu-latest
if: ${{ github.event.ref_type == 'tag' && !contains(github.event.ref, 'alpha') }}
steps:
- name: Tweet
uses: nearform-actions/github-action-notify-twitter@master
with:
message: |
𝕏 Ant Design X just released @ant-design/x@${{ github.event.ref }} ✨🎊✨ Check out the full release note: https://github.com/ant-design/x/releases/tag/${{ github.event.ref }}
twitter-app-key: ${{ secrets.TWITTER_API_KEY }}
twitter-app-secret: ${{ secrets.TWITTER_API_SECRET }}
twitter-access-token: ${{ secrets.TWITTER_ACCESS_TOKEN }}
twitter-access-token-secret: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
================================================
FILE: .github/workflows/site-deploy.yml
================================================
# When pushing a tag. this workflow will trigger site deployment and fixed version address comments
name: Deploy website
on:
push:
tags:
- '2.*'
workflow_dispatch:
permissions:
contents: write
jobs:
build-and-deploy:
runs-on: ubuntu-latest
if: (startsWith(github.ref, 'refs/tags/') && (contains(github.ref_name, '-') == false)) || github.event_name == 'workflow_dispatch'
steps:
- name: checkout
uses: actions/checkout@v6
- uses: utooland/setup-utoo@v1
- run: ut
- name: build site
run: ut run predeploy
env:
NODE_OPTIONS: --max_old_space_size=4096
- name: build dist and bundle analyzer report
run: ut compile
env:
ANALYZER: 1
NODE_OPTIONS: --max_old_space_size=4096
- name: Get version
id: publish-version
run: echo "VERSION=$(echo ${{ github.ref_name }} | sed 's/\./-/g')" >> $GITHUB_OUTPUT
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./_site
force_orphan: true
# Since force_orphan will not trigger Sync to Gitee, we need to force run it here
- name: Sync to Gitee
uses: wearerequired/git-mirror-action@v1
env:
SSH_PRIVATE_KEY: ${{ secrets.GITEE_SSH_PRIVATE_KEY }}
with:
source-repo: 'git@github.com:ant-design/x.git'
destination-repo: 'git@gitee.com:ant-design/antd-x.git'
- name: Deploy to Surge (with TAG)
working-directory: ./packages/x
run: |
export DEPLOY_DOMAIN=ant-design-x-${{ steps.publish-version.outputs.VERSION }}.surge.sh
npx surge --project ./_site --domain $DEPLOY_DOMAIN --token ${{ secrets.SURGE_TOKEN }}
- name: Create Commit Comment
uses: peter-evans/commit-comment@v4
with:
body: |
- Documentation site for this release: https://ant-design-x-${{ steps.publish-version.outputs.VERSION }}.surge.sh
================================================
FILE: .github/workflows/size-limit.yml
================================================
name: 📦 Size Limit
on:
pull_request:
types: [opened, synchronize]
permissions:
issues: write
contents: read
jobs:
size:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
- name: size-limit
uses: ant-design/size-limit-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
package_manager: npm
build_script: compile
================================================
FILE: .gitignore
================================================
*.iml
.idea/
.ipr
.iws
*~
~*
*.diff
*.patch
*.bak
.DS_Store
Thumbs.db
.project
.*proj
.svn/
*.swp
*.swo
*.log
*.log.*
*.json.gzip
node_modules/
.buildpath
.settings
npm-debug.log
nohup.out
_site
_data
dist
report.html
lib
bin
es
elasticsearch-*
config/base.yaml
/.vscode/
coverage
yarn.lock
package-lock.json
bun.lock
bun.lockb
pnpm-lock.yaml
bun.lockb
.pnpm-debug.log
packages/*/components/**/*.js
packages/*/components/**/*.jsx
!packages/*/components/**/__tests__/**/*.js
!packages/*/components/**/__tests__/**/*.js.snap
/.history
*.tmp
artifacts.zip
oss-artifacts.zip
server/
packages/*/.dumi/tmp
packages/*/.dumi/tmp-test
packages/*/.dumi/tmp-production
packages/*/.dumi/preset/components-changelog*
packages/*/.dumi/preset/misc-changelog.json
# Image snapshot diff
__diff_output__/
__image_snapshots__/
/jest-stare
/imageSnapshots*
/imageDiffSnapshots
/visualRegressionReport*
.devcontainer*
.husky/prepare-commit-msg
.eslintcache
.node-version
.node
.env
examples/
packages/x-markdown/plugins
packages/x-markdown/themes
packages/x/locale
# Docs templates
packages/x/scripts/previewEditor/index.html
packages/x/components/version/version.ts
packages/x/components/version/version.tsx
packages/x/components/version/token.json
packages/x/components/version/token-meta.json
packages/x/components/theme/interface/XMarkdownComponents.ts
packages/x-markdown/src/plugins/version/version.ts
packages/x-markdown/src/plugins/version/plugin-meta.json
packages/x-markdown/src/plugins/version/token-meta.json
packages/x-markdown/src/plugins/version/token.json
packages/x-markdown/src/version/version.ts
packages/x-sdk/src/version/version.ts
# Playwright (from benchmark)
packages/x-markdown/test-results/
packages/x-markdown/src/XMarkdown/__benchmark__/playwright-report/
packages/x-markdown/src/XMarkdown/__benchmark__/blob-report/
packages/x-markdown/src/XMarkdown/__benchmark__/playwright/.cache/
packages/x-markdown/src/XMarkdown/__benchmark__/playwright/.auth/
packages/x-markdown/src/XMarkdown/__benchmark__/test-results
================================================
FILE: .husky/commit-msg
================================================
#!/usr/bin/env sh
# npx commitlint --edit $1
================================================
FILE: .husky/pre-commit
================================================
lint-staged
================================================
FILE: .lintstagedrc.json
================================================
{
"*.{ts,tsx,js,jsx,json,css,sh}": ["biome check --write --no-errors-on-unmatched"],
"*.{md,yml}": ["prettier --ignore-unknown --write"]
}
================================================
FILE: .npmrc
================================================
legacy-peer-deps=true
================================================
FILE: .prettierrc
================================================
{
"endOfLine": "lf",
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"printWidth": 100,
"proseWrap": "never",
"trailingComma": "all",
"jsxSingleQuote": false
}
================================================
FILE: CHANGELOG.en-US.md
================================================
---
order: 6
title: Changelog
toc: false
timeline: true
tag: vVERSION
---
`@ant-design/x` follows [Semantic Versioning 2.0.0](http://semver.org/).
#### Release Schedule
- Weekly release: Patch version for routine bugfix.
- Monthly release: minor version at the end for new features.
- Major version release for breaking change and new features.
---
## 2.4.0
`2026-03-13`
### @ant-design/x
- 🐛 Fix incorrect event handling in `useShortcutKeys`.[#1822](https://github.com/ant-design/x/pull/1822) by [cxybd](https://github.com/cxybd)
- 🔥 New component Folder. [#1797](https://github.com/ant-design/x/pull/1797) by [kimteayon](https://github.com/kimteayon)
- 🆕 Enhanced FileCard's `description`, `mask`, and `onClick` configuration capabilities. [#1807](https://github.com/ant-design/x/pull/1807) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🆕 XMarkdown streaming rendering adds `tail` configuration, supporting custom tail content and custom tail components while avoiding tail rendering before incomplete components. [#1296](https://github.com/ant-design/x/pull/1296) by [Div627](https://github.com/Div627)
- 🐛 Fixed XMarkdown custom component streaming state detection to correctly handle void elements and isolate `streamStatus` across multiple instances with the same component name. [#1590](https://github.com/ant-design/x/pull/1590) by [Last-Order](https://github.com/Last-Order)
- 🛠 Exported XMarkdown's `StreamCacheTokenType` type for external reuse of streaming-related types. [#1592](https://github.com/ant-design/x/pull/1592) by [Last-Order](https://github.com/Last-Order)
- 📖 Added XMarkdown Playground and refreshed the streaming, examples, and data-display documentation, including the AntV Infographic example. [#1779](https://github.com/ant-design/x/pull/1779) by [Div627](https://github.com/Div627), [#1780](https://github.com/ant-design/x/pull/1780) by [Div627](https://github.com/Div627), [#1814](https://github.com/ant-design/x/pull/1814) by [Div627](https://github.com/Div627)
### @ant-design/x-skill
- 🆕 Released x-markdown skill. [#1813](https://github.com/ant-design/x/pull/1813) by [Div627](https://github.com/Div627)
### Others
- 🛠 Upgraded all components' useMergedState to useControlledState. [#1808](https://github.com/ant-design/x/pull/1808) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized official website to improve user experience. [#1814](https://github.com/ant-design/x/pull/1814) by [Div627](https://github.com/Div627), [#1793](https://github.com/ant-design/x/pull/1793) by [kimteayon](https://github.com/kimteayon), [#1792](https://github.com/ant-design/x/pull/1792) by [Div627](https://github.com/Div627), [#1780](https://github.com/ant-design/x/pull/1780) by [Div627](https://github.com/Div627), [#1779](https://github.com/ant-design/x/pull/1779) by [Div627](https://github.com/Div627)
## 2.3.0
`2026-02-26`
### @ant-design/x
- 🆕 Conversation's onActiveChange callback now returns both the activated item and its key value, while updating useMergedState to useControlledState. [#1762](https://github.com/ant-design/x/pull/1762) by [kimteayon](https://github.com/kimteayon)
- 🐛 Optimized the visual presentation of Sender's disabled state buttons, unified the addition of transparent border handling to ensure consistent appearance across different button variants when disabled. [#1751](https://github.com/ant-design/x/pull/1751) by [Rain120](https://github.com/Rain120)
### @ant-design/x-markdown
- 🆕 XMarkdown adds escapeRawHtml property, allowing users to choose whether to escape raw HTML during rendering. [#1769](https://github.com/ant-design/x/pull/1769) by [Div627](https://github.com/Div627)
- 🐛 Fixed XMarkdown rendering when encountering unclosed inline code in lists, ensuring list markers are preserved in special unclosed cases. [#1739](https://github.com/ant-design/x/pull/1739) by [Div627](https://github.com/Div627)
- 🐛 Improved parsing of block-level LaTeX formulas, with more tolerant handling of trailing whitespace and indentation, enhancing compatibility with different line ending formats and reducing misjudgment and rendering issues. [#1744](https://github.com/ant-design/x/pull/1744) by [Waiter](https://github.com/Waiter)
- 🐛 Optimized dark mode CodeHighlighter and Mermaid plugin styling issues. [#1766](https://github.com/ant-design/x/pull/1766) by [menghany](https://github.com/menghany)
### @ant-design/x-sdk
- 🆕 useXChat adds queueRequest method, implementing initialization message sending for ConversationKey and SessionId. [#1761](https://github.com/ant-design/x/pull/1761) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-skill
- 🆕 Added skill installation commands, simultaneously releasing three skills: use-x-chat, x-chat-provider, and x-request. [#1753](https://github.com/ant-design/x/pull/1753), [#1767](https://github.com/ant-design/x/pull/1767) by [kimteayon](https://github.com/kimteayon)
### Others
- 🛠 Fixed build errors caused by dependency upgrades. [#1754](https://github.com/ant-design/x/pull/1754) by [kimteayon](https://github.com/kimteayon)
- 🛠 Resolved domhandler's ModuleNotFoundError in CodeSandbox preview. [#1754](https://github.com/ant-design/x/pull/1754) by [Div627](https://github.com/Div627)
## 2.2.2
`2026-02-06`
### @ant-design/x
- 🛠 Fixed some documentation and types to support AI Coding. [#1733](https://github.com/ant-design/x/pull/1733) by [kimteayon](https://github.com/kimteayon)
- 💄 Fixed Bubble.List style and semantic issues. [#1731](https://github.com/ant-design/x/pull/1731) by [anxLiang](https://github.com/anxLiang)
- 🐛 Fixed Sender insert node replacement issue when replaceCharacters is configured. [#1727](https://github.com/ant-design/x/pull/1727) by [kimteayon](https://github.com/kimteayon)
## 2.2.1
`2026-01-30`
### @ant-design/x
- 💄 Fixed Bubble.List style issues. [#1713](https://github.com/ant-design/x/pull/1713) by [anxLiang](https://github.com/anxLiang), [#1704](https://github.com/ant-design/x/pull/1704) by [anxLiang](https://github.com/anxLiang)
- 🐛 Fixed Node environment build errors caused by other third-party dependencies `esm` paths. [#1708](https://github.com/ant-design/x/pull/1708) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🐛 Fixed streaming rendering cache invalidation issue where cache would prematurely commit and cause rendering anomalies when list items contained inline code (like - \code\`\` ). [#1709](https://github.com/ant-design/x/pull/1709) by [Div627](https://github.com/Div627)
- 🆕 Custom code rendering now accepts language information. [#1705](https://github.com/ant-design/x/pull/1705) by [Aarebecca](https://github.com/Aarebecca)
### @ant-design/x-sdk
- 🆕 When XRequest is used together with Chat Provider, it will additionally obtain the assembled message. [#1714](https://github.com/ant-design/x/pull/1714) by [kimteayon](https://github.com/kimteayon)
### Others
- 📖 Optimized official website to improve user experience. [#1717](https://github.com/ant-design/x/pull/1717) by [kimteayon](https://github.com/kimteayon), [#1707](https://github.com/ant-design/x/pull/1707) by [Div627](https://github.com/Div627)
## 2.2.0
`2026-01-26`
### @ant-design/x
- Sender
- 🐛 Fixed cursor insertion position error when cursor is at skill position. [#1633](https://github.com/ant-design/x/pull/1633) by [IsDyh01](https://github.com/IsDyh01)
- 🛠 Refactored node insertion position capability and rewrote test cases. [#1612](https://github.com/ant-design/x/pull/1612) by [kimteayon](https://github.com/kimteayon)
- XProvider
- 🐛 Fixed `iconPrefixCls` setting not taking effect. [#1656](https://github.com/ant-design/x/pull/1656) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed `prefix` setting not taking effect. [#1642](https://github.com/ant-design/x/pull/1642) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed `layer` setting issue. [#1616](https://github.com/ant-design/x/pull/1616) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed forced `antd` dependency on `es` path causing Node environment build errors. [#1645](https://github.com/ant-design/x/pull/1645) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed ThoughtChain layout causing animation stuttering. [#1641](https://github.com/ant-design/x/pull/1641) by [IsDyh01](https://github.com/IsDyh01)
- 🐛 Fixed Think layout causing animation stuttering. [#1636](https://github.com/ant-design/x/pull/1636) by [IsDyh01](https://github.com/IsDyh01)
- 🐛 Fixed Sources setting position but unable to locate content issue. [#1683](https://github.com/ant-design/x/pull/1683) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed Bubble.List internal height change scrollbar change error issue. [#1690](https://github.com/ant-design/x/pull/1690) by [anxLiang](https://github.com/anxLiang)
- 🆕 Added Mermaid settings initialization configuration and operation bar functionality. [#1631](https://github.com/ant-design/x/pull/1631) by [Div627](https://github.com/Div627)
- 🆕 Added Attachments card type setting capability. [#1610](https://github.com/ant-design/x/pull/1610) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-sdk
- 🆕 XRequest added reconnection capability. [#1629](https://github.com/ant-design/x/pull/1629) by [hylin](https://github.com/hylin)
- 🆕 XRequest and XStream support stream data parsing with configurable delimiters `streamSeparator`, `partSeparator`, `kvSeparator`, while adding polyfill for TextDecoderStream to improve compatibility, and fixing the issue where undefined values were added to stream results. [#1611](https://github.com/ant-design/x/pull/1611) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🆕 Enhanced XMarkdown parser to support custom components with placeholder protection. [#1668](https://github.com/ant-design/x/pull/1668) by [yanghuanrong](https://github.com/yanghuanrong)
- 🆕 Added XMarkdown performance benchmarking capability for streaming Markdown rendering based on Playwright Component Testing. [#1314](https://github.com/ant-design/x/pull/1314) by [Div627](https://github.com/Div627)
- 🆕 Added XMarkdown streaming syntax support for inline code caching. [#1630](https://github.com/ant-design/x/pull/1630) by [Div627](https://github.com/Div627)
### Others
- 📖 Optimized official website to improve user experience. [#1675](https://github.com/ant-design/x/pull/1675) by [hongxuWei](https://github.com/hongxuWei), [#1644](https://github.com/ant-design/x/pull/1644) by [kimteayon](https://github.com/kimteayon), [#1658](https://github.com/ant-design/x/pull/1658) by [kimteayon](https://github.com/kimteayon), [#1646](https://github.com/ant-design/x/pull/1646) by [kimteayon](https://github.com/kimteayon), [#1651](https://github.com/ant-design/x/pull/1651) by [kimteayon](https://github.com/kimteayon), [#1650](https://github.com/ant-design/x/pull/1650) by [Div627](https://github.com/Div627), [#1635](https://github.com/ant-design/x/pull/1635) by [IsDyh01](https://github.com/IsDyh01), [#1627](https://github.com/ant-design/x/pull/1627) by [Alexzjt](https://github.com/Alexzjt), [#1615](https://github.com/ant-design/x/pull/1615) by [Yx0201](https://github.com/Yx0201)
## 2.1.3
`2026-01-04`
### @ant-design/x
- 🐛 Fixed an undeclared dependency issue in Sender by replacing `classnames` with `clsx` and enabling dependency checks in `biome.json`. [#1608](https://github.com/ant-design/x/pull/1608) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized official website to improve user experience. [#1605](https://github.com/ant-design/x/pull/1605) by [kimteayon](https://github.com/kimteayon)
## 2.1.2
`2025-12-30`
### @ant-design/x
- 💄 Fixed Actions `disliked` className error issue. [#1521](https://github.com/ant-design/x/pull/1521) by [kimteayon](https://github.com/kimteayon)
- Sender
- 🛠 Overall refactoring of Sender component implementation, while fixing some detailed cursor issues. [#1515](https://github.com/ant-design/x/pull/1515) [#1548](https://github.com/ant-design/x/pull/1548) by [kimteayon](https://github.com/kimteayon)
- 💄 Fixed Sender component actions style conflict with antd Button causing rendering errors. [#1535](https://github.com/ant-design/x/pull/1535) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue where cursor was too small when placeholder was empty in slot mode `skill`. [#1537](https://github.com/ant-design/x/pull/1537) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue where undo stack was not updated when pasting text. [#1527](https://github.com/ant-design/x/pull/1527) by [Chiaki-xps](https://github.com/Chiaki-xps)
- 🐛 Removed Bubble.List automatic scrolling to bottom logic for new messages, changed to manual control. [#1548](https://github.com/ant-design/x/pull/1548) by [anxLiang](https://github.com/anxLiang)
- 💄 Fixed Prompts component animation demo not working issue. [#1580](https://github.com/ant-design/x/pull/1580) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed Actions.Feedback tooltip display anomaly issue. [#1591](https://github.com/ant-design/x/pull/1591) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed Attachments calling `ref.select()` error when no parameters passed. [#1587](https://github.com/ant-design/x/pull/1587) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed FileCard `overflow` display button not updating issue, and Image display failure when no `src` in image display. [#1587](https://github.com/ant-design/x/pull/1587) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-sdk
- 🐛 Fixed XChat unable to remotely load historical messages issue. [#1593](https://github.com/ant-design/x/pull/1593) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed OpenAIChatProvider and DeepSeekChatProvider non-streaming requests rendering content twice issue. [#1593](https://github.com/ant-design/x/pull/1593) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 💄 Fixed XMarkdown animation font color error issue. [#1531](https://github.com/ant-design/x/pull/1531) by [Div627](https://github.com/Div627)
### Others
- 🛠 Overall dependency refactoring and upgrade. [#1448](https://github.com/ant-design/x/pull/1448) by [yoyo837](https://github.com/yoyo837)
- 📖 Optimized official website to improve user experience. [#1508](https://github.com/ant-design/x/pull/1508) by [kimteayon](https://github.com/kimteayon), [#1516](https://github.com/ant-design/x/pull/1516) by [kimteayon](https://github.com/kimteayon), [#1529](https://github.com/ant-design/x/pull/1529) by [fireairforce](https://github.com/fireairforce), [#1549](https://github.com/ant-design/x/pull/1549) by [kimteayon](https://github.com/kimteayon), [#1551](https://github.com/ant-design/x/pull/1551) by [Chiaki-xps](https://github.com/Chiaki-xps), [#1553](https://github.com/ant-design/x/pull/1553) by [Chiaki-xps](https://github.com/Chiaki-xps), [#1555](https://github.com/ant-design/x/pull/1555) by [Chiaki-xps](https://github.com/Chiaki-xps), [#1543](https://github.com/ant-design/x/pull/1543) by [IsDyh01](https://github.com/IsDyh01), [#1558](https://github.com/ant-design/x/pull/1558) by [Chiaki-xps](https://github.com/Chiaki-xps), [#1557](https://github.com/ant-design/x/pull/1557) by [Chiaki-xps](https://github.com/Chiaki-xps), [#1562](https://github.com/ant-design/x/pull/1562) by [hustcc](https://github.com/hustcc), [#1569](https://github.com/ant-design/x/pull/1569) by [kimteayon](https://github.com/kimteayon), [#1561](https://github.com/ant-design/x/pull/1561) by [Chiaki-xps](https://github.com/Chiaki-xps), [#1584](https://github.com/ant-design/x/pull/1584) by [kimteayon](https://github.com/kimteayon), [#1581](https://github.com/ant-design/x/pull/1581) by [teimurjan](https://github.com/teimurjan)
## 2.1.1
`2025-12-10`
### @ant-design/x
- Sender
- 🐛 Fixed the issue where send shortcuts enter and shift + enter were not controlled by the disabled state of the submit button, and fixed the inconsistency between `onSubmit` shortcut keys and button parameters. [#1472](https://github.com/ant-design/x/pull/1472) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the missing `skill` parameter in `onChange`, fixed the issue where placeholder was not displayed when slot mode only showed skill capabilities, and refactored `onChange` logic. [#1477](https://github.com/ant-design/x/pull/1477) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue where send shortcuts enter and shift + enter were not triggered when `input` type slot was activated and focused in slot mode. [#1498](https://github.com/ant-design/x/pull/1498) by [kimteayon](https://github.com/kimteayon)
- Attachment
- 🐛 Fixed the issue where the last file was not uploaded after setting `maxCount`. [#1486](https://github.com/ant-design/x/pull/1486) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the antd warning issue after uploading images. [#1492](https://github.com/ant-design/x/pull/1492) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed Mermaid rendering jitter issue. [#1497](https://github.com/ant-design/x/pull/1497) by [Div627](https://github.com/Div627)
- 📖 Optimized official website to improve user experience. [#1464](https://github.com/ant-design/x/pull/1464) by [IsDyh01](https://github.com/IsDyh01), [#1483](https://github.com/ant-design/x/pull/1483) by [Chiaki-xps](https://github.com/Chiaki-xps), [#1463](https://github.com/ant-design/x/pull/1463) by [J-Da-Shi](https://github.com/J-Da-Shi), [#1489](https://github.com/ant-design/x/pull/1489) by [Chiaki-xps](https://github.com/Chiaki-xps), [#1499](https://github.com/ant-design/x/pull/1499) by [kimteayon](https://github.com/kimteayon), [#1500](https://github.com/ant-design/x/pull/1500) by [kimteayon](https://github.com/kimteayon), [#1501](https://github.com/ant-design/x/pull/1501) by [Samoy](https://github.com/Samoy)
- 🛠 Modified dependency configuration for `mermaid`. [#1475](https://github.com/ant-design/x/pull/1475) by [Div627](https://github.com/Div627)
### @ant-design/x-sdk
- 🐛 Optimized message flow throttling and emission logic to avoid deep update errors caused by high-frequency streaming updates, improving real-time message stability and performance. [#1418](https://github.com/ant-design/x/pull/1418) by [Afee2019](https://github.com/Afee2019)
### @ant-design/x-markdown
- 🛠 Optimized `sideEffects` configuration. [#1408](https://github.com/ant-design/x/pull/1408) by [hongxuWei](https://github.com/hongxuWei)
## 2.1.0
`2025-12-05`
### @ant-design/x
- 🐛 Fixed Bubble css token `typingContent` configuration not taking effect. [#1435](https://github.com/ant-design/x/pull/1435) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed multiple component style loss issues caused by antd upgrade to 6.0.1. [#1441](https://github.com/ant-design/x/pull/1441) by [kimteayon](https://github.com/kimteayon), [#1446](https://github.com/ant-design/x/pull/1446) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed Bubble.List scrolling compatibility issue in Safari browser. [#1392](https://github.com/ant-design/x/pull/1392) by [anxLiang](https://github.com/anxLiang)
- 🔥 New components HighlightCode and Mermaid. [#1402](https://github.com/ant-design/x/pull/1402) by [Div627](https://github.com/Div627)
- 🆕 Added semantic implementation for Actions. [#1443](https://github.com/ant-design/x/pull/1443) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added semantic implementation for Suggestion, removed duplicate Enter trigger events, fixed the issue of `onSubmit` method being executed multiple times, added complete data return of `selectedOptions` to `onSelect` method, and refactored the option implementation using `useMergedState`. [#1406](https://github.com/ant-design/x/pull/1406) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized official website to improve user experience. [#1444](https://github.com/ant-design/x/pull/1444) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added new slot type `content` and skill function `skill` for Sender. [#1377](https://github.com/ant-design/x/pull/1377) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-sdk
- 🐛 Fixed DeepSeekChatProvider's improper handling of newline characters in `<think>` tag format causing XMarkdown rendering anomalies. [#1445](https://github.com/ant-design/x/pull/1445) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed useXChat `setMessages` method call not triggering re-rendering. [#1450](https://github.com/ant-design/x/pull/1450) by [hylin](https://github.com/hylin)
- 🐛 Fixed missing rc-util dependency declaration. [#1456](https://github.com/ant-design/x/pull/1456) by [hylin](https://github.com/hylin)
### @ant-design/x-markdown
- 🐛 Replaced useStreaming regex to resolve iOS compatibility issues. [#1457](https://github.com/ant-design/x/pull/1457) by [Div627](https://github.com/Div627)
- 📖 Improved documentation to enhance user experience. [#1451](https://github.com/ant-design/x/pull/1451) by [Div627](https://github.com/Div627)
- 🛠 Migrated UI plugins HighlightCode and Mermaid to @ant-design/x to achieve more reasonable dependency relationships. [#1402](https://github.com/ant-design/x/pull/1402) by [Div627](https://github.com/Div627)
## 2.0.1
`2025-12-03`
### @ant-design/x
- 🐛 Fixed multiple component style loss issues caused by antd upgrade to 6.0.1. [#1428](https://github.com/ant-design/x/pull/1428) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed antd error when using Attachments component. [#1395](https://github.com/ant-design/x/pull/1395) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed Sender component `allowSpeech` custom disable error. [#1398](https://github.com/ant-design/x/pull/1398) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed missing semantic configuration for Sender.Switch component. [#1396](https://github.com/ant-design/x/pull/1396) by [kimteayon](https://github.com/kimteayon)
- 🛠 Fixed test case failures caused by version upgrades. [#1393](https://github.com/ant-design/x/pull/1393) by [kimteayon](https://github.com/kimteayon)
- 📖 Added 1.x official website links. [#1386](https://github.com/ant-design/x/pull/1386) by [kimteayon](https://github.com/kimteayon), [#1394](https://github.com/ant-design/x/pull/1394) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized official website to improve user experience. [#1384](https://github.com/ant-design/x/pull/1384) by [kimteayon](https://github.com/kimteayon), [#1416](https://github.com/ant-design/x/pull/1416) by [IsDyh01](https://github.com/IsDyh01)
### @ant-design/x-sdk
- 📖 Comprehensive updates to official website directory, documentation, and examples. [#1419](https://github.com/ant-design/x/pull/1419) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed useXChat `requestFallback` adding errorInfo parameter to resolve inability to get API error data. [#1419](https://github.com/ant-design/x/pull/1419) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🐛 Fixed HighlightCode plugin copy code error. [#1414](https://github.com/ant-design/x/pull/1414) by [Jimi1126](https://github.com/Jimi1126)
- 🐛 Fixed XMarkdown rendering special characters failure. [#1413](https://github.com/ant-design/x/pull/1413) by [Div627](https://github.com/Div627)
- 🐛 Fixed XMarkdown cache reset logic not taking effect due to old references. [#1420](https://github.com/ant-design/x/pull/1420) by [Div627](https://github.com/Div627)
## 2.0.0
`2025-11-22`
🏆 Ant Design X 2.0.0 has been released!
`@ant-design/x` - Smart UI Construction Framework
A React UI library based on the Ant Design system, specifically designed for AI-driven interfaces. It includes ready-to-use intelligent chat components and seamless integration with API services, enabling rapid development of smart application interfaces.
`@ant-design/x-markdown` - High-performance streaming rendering engine
A Markdown rendering solution optimized for streaming content, featuring robust extensibility and exceptional performance with support for formulas, code highlighting, Mermaid diagrams, and more, ensuring a seamless content display experience.
`@ant-design/x-sdk` - AI Chat Data Flow Management
Provide a complete set of tool APIs, out-of-the-box AI chat application data flow management, simplify development processes, and enhance development efficiency.
##### Upgrade Required
🌟 We have prepared an upgrade guide. Please check the [details](/docs/react/migration-v2-cn).
## 2.0.0-alpha.16
`2025-11-17`
### @ant-design/x
- 🛠 Removed the components property while promoting internal properties. [#1338](https://github.com/ant-design/x/pull/1338) by [kimteayon](https://github.com/kimteayon)
- 🆕 FileCard adds image generation process and loading/rendering capabilities. [#1311](https://github.com/ant-design/x/pull/1311) by [kimteayon](https://github.com/kimteayon)
- 🆕 Think upgrades `blink` animation styles to css token. [#1318](https://github.com/ant-design/x/pull/1318) by [kimteayon](https://github.com/kimteayon)
- 🆕 ThoughtChain upgrades `blink` animation styles to css token. [#1318](https://github.com/ant-design/x/pull/1318) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized the official site to enhance user experience. [#1335](https://github.com/ant-design/x/pull/1335) by [kimteayon](https://github.com/kimteayon), [#1329](https://github.com/ant-design/x/pull/1329) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🛠 Optimized markdown rendering with useMemo, and updated basic demo text and animation demo text. [#1337](https://github.com/ant-design/x/pull/1337) by [Div627](https://github.com/Div627)
- 🆕 XMarkdown renders HTML tags with `disabled` and `checked` attributes exposed. [#1328](https://github.com/ant-design/x/pull/1328) by [Div627](https://github.com/Div627)
- 🆕 XMarkdown `hasNextChunk` adds table rendering processing capability. [#1322](https://github.com/ant-design/x/pull/1322) by [Div627](https://github.com/Div627)
- 🐛 Fixed XMarkdown default table rendering styles. [#1324](https://github.com/ant-design/x/pull/1324) by [Div627](https://github.com/Div627)
- 🆕 XMarkdown `incompleteMarkdownComponentMap` adds multiple type renderings. [#1325](https://github.com/ant-design/x/pull/1325) by [Div627](https://github.com/Div627)
- 📖 Optimized the official site to enhance user experience. [#1326](https://github.com/ant-design/x/pull/1326) by [Div627](https://github.com/Div627)
## 2.0.0-alpha.15
`2025-11-07`
### @ant-design/x
- 🛠 Upgraded antd dependency version to `6.00-alpha.4`. [#1300](https://github.com/ant-design/x/pull/1300) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized the official site to enhance user experience. [#1303](https://github.com/ant-design/x/pull/1303) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🛠 Refactored markdown theme styles. [#1305](https://github.com/ant-design/x/pull/1305) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue where `code` tag `streamStatus` state was incorrect. [#1307](https://github.com/ant-design/x/pull/1307) by [Div627](https://github.com/Div627)
- 🛠 Transformed `index.less` to `index.css`. [#1306](https://github.com/ant-design/x/pull/1306) by [Div627](https://github.com/Div627)
- 🐛 Fixed `SteamingOption` to `StreamingOption`. [#1301](https://github.com/ant-design/x/pull/1301) by [Div627](https://github.com/Div627)
- 🐛 Fixed the issue where dompurifyConfig.ALLOWED_TAGS was incorrectly merged into ADD_TAGS. [#1297](https://github.com/ant-design/x/pull/1297) by [Div627](https://github.com/Div627)
## 2.0.0-alpha.13
`2025-10-30`
### @ant-design/x
- 🐛 Removed Bubble.List `suffix` property and modified typing through CSS Token. [#1285](https://github.com/ant-design/x/pull/1285) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added flashing animation effect to ThoughtChain.Item component. [#1278](https://github.com/ant-design/x/pull/1278) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added flashing animation effect to Think component. [#1278](https://github.com/ant-design/x/pull/1278) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added flashing animation effect to ThoughtChain component. [#1286](https://github.com/ant-design/x/pull/1286) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added fadeIn and fadeInLeft effects to Actions. [#1288](https://github.com/ant-design/x/pull/1288) by [kimteayon](https://github.com/kimteayon), [#1289](https://github.com/ant-design/x/pull/1289) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added fadeIn and fadeInLeft effects to Prompts. [#1289](https://github.com/ant-design/x/pull/1289) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized the official site to enhance user experience. [#1290](https://github.com/ant-design/x/pull/1290) by [Rain120](https://github.com/Rain120)
### @ant-design/x-markdown
- 🐛 Fixed the issue where the renderer link passed in was overwritten. [#1276](https://github.com/ant-design/x/pull/1276) by [Div627](https://github.com/Div627)
## 2.0.0-alpha.12
`2025-10-29`
### @ant-design/x
- 🆕 Attachments Ref adds `select` method to support file selection capability, while fixing the issue where the upload button still appears after reaching the maximum quantity when a maximum limit is set. [#1266](https://github.com/ant-design/x/pull/1266) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized the official site to enhance user experience. [#1269](https://github.com/ant-design/x/pull/1269) by [kimteayon](https://github.com/kimteayon), [#1274](https://github.com/ant-design/x/pull/1274) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🐛 Fixed KaTeX plugin rendering failure and exception throwing issues, modified formula rendering rules to reduce rendering exceptions. [#1265](https://github.com/ant-design/x/pull/1265) by [Div627](https://github.com/Div627)
- 📖 Added code examples for XMarkdown handling Chinese links. [#1270](https://github.com/ant-design/x/pull/1270) by [kimteayon](https://github.com/kimteayon)
- 🆕 `code` and `pre` tags now return rendering status `streamStatus` and block-level identifier `block` during rendering. [#1272](https://github.com/ant-design/x/pull/1272) by [Div627](https://github.com/Div627)
- 🐛 Fixed duplicate DOM keys when rendering markdown. [#1273](https://github.com/ant-design/x/pull/1273) by [Div627](https://github.com/Div627)
## 2.0.0-alpha.11
`2025-10-27`
### @ant-design/x
- 🆕 Sender slot configuration changed to mutable properties, in slot mode the `insert` method adds `replaceCharacters` parameter to support replacement functionality, and the `focus` method adds slot `key` configuration to support focusing on specific slots. [#1259](https://github.com/ant-design/x/pull/1259) by [kimteayon](https://github.com/kimteayon)
- 🆕 Sources inline mode supports specifying the currently active panel, adds `activeKey` property, and optimizes panel switching interaction styles for better experience. [#1261](https://github.com/ant-design/x/pull/1261) by [kimteayon](https://github.com/kimteayon)
- 🆕 Bubble.List optimized scrollbar layout, implementation, and semantics. [#1263](https://github.com/ant-design/x/pull/1263) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🐛 Fixed inconsistent parameter structure issue for XMarkdown custom components under different states. [#1260](https://github.com/ant-design/x/pull/1260) by [Div627](https://github.com/Div627)
- 📖 Added XMarkdown code examples. [#1262](https://github.com/ant-design/x/pull/1262) by [kimteayon](https://github.com/kimteayon)
## 2.0.0-alpha.10
`2025-10-23`
### @ant-design/x
- 🔥 New component Sources. [#1250](https://github.com/ant-design/x/pull/1250) by [hy993658052](https://github.com/hy993658052)
- 🆕 Bubble adds two subcomponents: Bubble.System and Bubble.Divider. [#1239](https://github.com/ant-design/x/pull/1239) by [anxLiang](https://github.com/anxLiang) and [kimteayon](https://github.com/kimteayon)
- Sender
- 🆕 Added slot focus event functionality. [#1221](https://github.com/ant-design/x/pull/1221) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue where `onPasteFile` callback data was incorrect when pasting multiple files in the input box. [#1221](https://github.com/ant-design/x/pull/1221) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed accessibility issues caused by SVG not being internationalized. [#1243](https://github.com/ant-design/x/pull/1243) by [kimteayon](https://github.com/kimteayon)
- FileCard
- 🆕 Added semantic implementation. [#1220](https://github.com/ant-design/x/pull/1220) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added support for `jfif` type. [#1248](https://github.com/ant-design/x/pull/1248) by [IsDyh01](https://github.com/IsDyh01)
- 🆕 Attachments added semantic implementation. [#1220](https://github.com/ant-design/x/pull/1220) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized the official site to enhance user experience. [#1216](https://github.com/ant-design/x/pull/1216) by [kimteayon](https://github.com/kimteayon), [#1217](https://github.com/ant-design/x/pull/1217) by [Div627](https://github.com/Div627), [#1218](https://github.com/ant-design/x/pull/1218) by [IsDyh01](https://github.com/IsDyh01), [#1224](https://github.com/ant-design/x/pull/1224) by [kimteayon](https://github.com/kimteayon), [#1232](https://github.com/ant-design/x/pull/1232) by [IsDyh01](https://github.com/IsDyh01), [#1233](https://github.com/ant-design/x/pull/1233) by [kimteayon](https://github.com/kimteayon), [#1243](https://github.com/ant-design/x/pull/1243) by [kimteayon](https://github.com/kimteayon), [#1247](https://github.com/ant-design/x/pull/1247) by [elrrrrrrr](https://github.com/elrrrrrrr)
### @ant-design/x-markdown
- 🆕 XMarkdown adds rendering component configuration `incomplete` for tags that need to be closed during the rendering process and corresponding functionality. [#1223](https://github.com/ant-design/x/pull/1223) by [Div627](https://github.com/Div627)
- 🐛 Fixed the issue where XMarkdown `openLinksInNewTab` property configuration was ineffective. [#1253](https://github.com/ant-design/x/pull/1253) by [Div627](https://github.com/Div627)
- 🐛 Fixed the issue of repeated rendering in XMarkdown animations. [#1255](https://github.com/ant-design/x/pull/1255) by [Div627](https://github.com/Div627)
- 🆕 Enhanced XMarkdown's ability to identify formula rendering tags. [#1255](https://github.com/ant-design/x/pull/1255) by [Div627](https://github.com/Div627)
### @ant-design/x-sdk
- 🐛 Fixed the issue where useXChat handling stream data server errors caused parameter problems in the `requestFallback` callback. [#1224](https://github.com/ant-design/x/pull/1224) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added implementation for activeConversationKey in useXConversations. [#1252](https://github.com/ant-design/x/pull/1252) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the non-multi-instance issue of useXChat `isRequesting`, and optimized the callback parameters for `requestPlaceholder` and `requestFallback`. [#1254](https://github.com/ant-design/x/pull/1254) by [kimteayon](https://github.com/kimteayon)
## 2.0.0-alpha.9
`2025-09-24`
### @ant-design/x-markdown
- 🐛 Fixed code highlighting plugin style loss, resolved component matching issues with nested child elements, and removed table text-align attribute from default styles. [#1212](https://github.com/ant-design/x/pull/1212) by [Div627](https://github.com/Div627)
## 2.0.0-alpha.8
`2025-09-22`
### @ant-design/x
- Bubble
- 🆕 Bubble.List adds `extra` parameter, which supports custom functions with useXChat. [#1195](https://github.com/ant-design/x/pull/1195) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue where the content height was fixed in the `loading` state. [#1178](https://github.com/ant-design/x/pull/1178) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed component type export naming error. [#1182](https://github.com/ant-design/x/pull/1182) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed ThoughtChain.Item component type export naming error. [#1178](https://github.com/ant-design/x/pull/1178) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue of missing listening components in XProvider. [#1178](https://github.com/ant-design/x/pull/1178) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🛠 Refactored animation-related implementation. [#1198](https://github.com/ant-design/x/pull/1198) by [Div627](https://github.com/Div627), [#1204](https://github.com/ant-design/x/pull/1204) by [Div627](https://github.com/Div627)
- 🐛 Fixed plugin export type error, and added examples and documentation. [#1187](https://github.com/ant-design/x/pull/1187) by [Div627](https://github.com/Div627)
- 🐛 Fixed rendering exception when switching Mermaid plugin. [#1175](https://github.com/ant-design/x/pull/1175) by [Div627](https://github.com/Div627)
- 🆕 Added semantic implementation for HighlightCode and Mermaid plugins. [#1178](https://github.com/ant-design/x/pull/1178) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed incomplete theme style override in XMarkdown. [#1182](https://github.com/ant-design/x/pull/1182) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-sdk
- 🆕 useXChat `setMessage` now supports a callback function to get the original message, and `onRequest` and `onReload` add an `extra` parameter to support custom functions. [#1195](https://github.com/ant-design/x/pull/1195) by [kimteayon](https://github.com/kimteayon)
### Others
- 🆕 Updated the overall site documentation. [#1194](https://github.com/ant-design/x/pull/1194) by [kimteayon](https://github.com/kimteayon)
- 🆕 Updated the showcase functionality, added 'Ultramodern' showcase. [#1184](https://github.com/ant-design/x/pull/1184) by [kimteayon](https://github.com/kimteayon), [#1195](https://github.com/ant-design/x/pull/1195) by [kimteayon](https://github.com/kimteayon), [#1194](https://github.com/ant-design/x/pull/1194) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized the official site to enhance user experience. [#1170](https://github.com/ant-design/x/pull/1170) by [jinyang](https://github.com/jinyang), [#1186](https://github.com/ant-design/x/pull/1186) by [jinyang](https://github.com/jinyang), [#1192](https://github.com/ant-design/x/pull/1192) by [iamkun-2](https://github.com/iamkun-2), [#1193](https://github.com/ant-design/x/pull/1193) by [iamkun-2](https://github.com/iamkun-2), [#1197](https://github.com/ant-design/x/pull/1197) by [elrrrrrrr](https://github.com/elrrrrrrr), [#1199](https://github.com/ant-design/x/pull/1199) by [Div627](https://github.com/Div627)
## 2.0.0-alpha.7
`2025-09-14`
### @ant-design/x
- Bubble
- 💄 Fixed the default `white-space` style issue. [#1147](https://github.com/ant-design/x/pull/1147) by [kimteayon](https://github.com/kimteayon)
- 💄 Fixed missing semantics and incorrect height in `loading` state under Bubble.List. [#1162](https://github.com/ant-design/x/pull/1162) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed type export and documentation import errors. [#1160](https://github.com/ant-design/x/pull/1160) by [kimteayon](https://github.com/kimteayon)
- 📖 Removed deprecated tools `useXAgent` and `useXChat`, and updated or replaced related documentation with `X SDK`. [#1148](https://github.com/ant-design/x/pull/1148) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the missing `status` display issue in the FileCard component. [#1156](https://github.com/ant-design/x/pull/1156) by [hy993658052](https://github.com/hy993658052)
- 🐛 Fixed the issue where the Sender component could not paste Excel cell text when file paste was enabled. [#1167](https://github.com/ant-design/x/pull/1167) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🆕 Added Mermaid plugin operation functionality. [#1135](https://github.com/ant-design/x/pull/1135) by [Div627](https://github.com/Div627)
- 🐛 Fixed the streaming effect in XMarkdown. [#1135](https://github.com/ant-design/x/pull/1135) by [Div627](https://github.com/Div627)
- 🆕 Added plugin internationalization and theme customization features, along with documentation upgrades. [#1135](https://github.com/ant-design/x/pull/1135) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added `openLinksInNewTab` configuration for XMarkdown links and adjusted theme colors. [#1164](https://github.com/ant-design/x/pull/1164) by [Div627](https://github.com/Div627)
- 🐛 Fixed style conflicts between XMarkdown and documentation markdown. [#1161](https://github.com/ant-design/x/pull/1161) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-sdk
- 🛠 Refactored the `isRequesting` property in the useXChat tool, upgrading it from a method to an observable variable. [#1168](https://github.com/ant-design/x/pull/1168) by [hylin](https://github.com/hylin)
- 🆕 Added message `abort` status to the useXChat tool, fixed the `message` parameter error in the `requestFallback` callback method, and removed error state message filtering. [#1171](https://github.com/ant-design/x/pull/1171) by [kimteayon](https://github.com/kimteayon)
### Others
- 📖 Optimized the official site to enhance user experience. [#1169](https://github.com/ant-design/x/pull/1169) by [hylin](https://github.com/hylin)
- 📖 Updated documentation for introduction, model integration, agent integration, X SDK, and template code. [#1171](https://github.com/ant-design/x/pull/1171) by [kimteayon](https://github.com/kimteayon)
## 2.0.0-alpha.6
`2025-08-28`
### @ant-design/x
- 🐛 Fixed the issue where pressing `Enter` in normal mode of the Sender component would trigger `Submit` when selecting a candidate word. [#1144](https://github.com/ant-design/x/pull/1144) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue where the Sender component could not insert a new line when `submitType` was set to `shiftEnter` in slot mode. [#1143](https://github.com/ant-design/x/pull/1143) by [kimteayon](https://github.com/kimteayon)
- 💄 Fixed the abnormal `margin` style when the `description` content of ThoughtChain.Item wrapped to a new line.
- 🛠 Refactored the template room using `@ant-design/x-sdk`. [#1139](https://github.com/ant-design/x/pull/1139) by [hylin](https://github.com/hylin)
- 🐛 Fixed the persistent display of the `prefix` in the Bubble component. [#1137](https://github.com/ant-design/x/pull/1137) by [anxLiang](https://github.com/anxLiang)
- 📖 Added documentation to explain the scrolling container issue in Bubble.List. [#1133](https://github.com/ant-design/x/pull/1133) by [anxLiang](https://github.com/anxLiang)
- 🐛 Fixed the issue where uploaded images in the Attachment component were not displayed. [#1140](https://github.com/ant-design/x/pull/1140) by [hy993658052](https://github.com/hy993658052)
- 🐛 Fixed semantic issues and size display problems in the FileCard component. [#1130](https://github.com/ant-design/x/pull/1130) by [kimteayon](https://github.com/kimteayon)
### Others
- 📦 Upgraded the father configuration. [#1125](https://github.com/ant-design/x/pull/1125) by [fireairforce](https://github.com/fireairforce)
- 📖 Optimized the official site to enhance user experience. [#1142](https://github.com/ant-design/x/pull/1142) by [kimteayon](https://github.com/kimteayon)
## 2.0.0-alpha.5
`2025-08-20`
### @ant-design/x
- 🆕 Added subcomponent features for Actions, including Actions.Copy, Actions.Audio, and Actions.Item. [#1121](https://github.com/ant-design/x/pull/1121) by [kimteayon](https://github.com/kimteayon)
- Bubble
- 🆕 Added functionality to render content with line breaks and tabs when `string content` is provided. [#1127](https://github.com/ant-design/x/pull/1127) by [anxLiang](https://github.com/anxLiang)
- 🆕 Added semantic implementation. [#1116](https://github.com/ant-design/x/pull/1116) by [kimteayon](https://github.com/kimteayon)
- 🐛 Optimized styles and type issues. [#1108](https://github.com/ant-design/x/pull/1108) by [anxLiang](https://github.com/anxLiang)
- 🆕 Added semantic configuration for the Sender component. [#1116](https://github.com/ant-design/x/pull/1116) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-sdk
- 🛠 Overall optimization of X SDK. [#1114](https://github.com/ant-design/x/pull/1114) by [hylin](https://github.com/hylin)
### Others
- 📖 Refactored the template room using X SDK. [#1139](https://github.com/ant-design/x/pull/1139) by [hylin](https://github.com/hylin)
- 📖 Optimized the official site to enhance user experience. [#1124](https://github.com/ant-design/x/pull/1124) by [kimteayon](https://github.com/kimteayon), [#1123](https://github.com/ant-design/x/pull/1123) by [kimteayon](https://github.com/kimteayon)
- 🛠 Optimized the release process. [#1115](https://github.com/ant-design/x/pull/1115) by [kimteayon](https://github.com/kimteayon)
## 2.0.0-alpha.3
`2025-08-14`
### @ant-design/x-markdown
- 🛠 Optimized version logic, configuration, and documentation. [#1112](https://github.com/ant-design/x/pull/1112) by [Div627](https://github.com/Div627)
## 2.0.0-alpha.1
`2025-08-12`
### @ant-design/x
- 🛠 Refactored and upgraded the Bubble component. [#1100](https://github.com/ant-design/x/pull/1100) by [anxLiang](https://github.com/anxLiang), [#1077](https://github.com/ant-design/x/pull/1077) by [anxLiang](https://github.com/anxLiang)
- 🛠 Refactored and upgraded the Bubble.List component. [#1077](https://github.com/ant-design/x/pull/1077) by [anxLiang](https://github.com/anxLiang)
- 🐛 Fixed the issue where the `readOnly` and `loading` logic of the Bubble component did not take effect. [#1101](https://github.com/ant-design/x/pull/1101) by [kimteayon](https://github.com/kimteayon)
### Others
- 🛠 Optimized the release process. [#1098](https://github.com/ant-design/x/pull/1098) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized the official site to enhance user experience. [#1087](https://github.com/ant-design/x/pull/1087) by [kimteayon](https://github.com/kimteayon)
## 2.0.0-alpha.0
`2025-08-05`
### @ant-design/x
- 🔥 Added new component FileCard. [#1094](https://github.com/ant-design/x/pull/1094) by [hy993658052](https://github.com/hy993658052)
- 🔥 Added new component Notification. [#973](https://github.com/ant-design/x/pull/973) by [kimteayon](https://github.com/kimteayon)
- 🔥 Added new component Think. [#970](https://github.com/ant-design/x/pull/970) [#966](https://github.com/ant-design/x/pull/966) [#946](https://github.com/ant-design/x/pull/946) by [hy993658052](https://github.com/hy993658052)
- 🛠 Refactored and upgraded the Attachments component.
- 🛠 Refactored and upgraded the Actions component. [#994](https://github.com/ant-design/x/pull/994) by [vanndxh](https://github.com/vanndxh)
- 🛠 Refactored and upgraded the Conversations component. [#955](https://github.com/ant-design/x/pull/955) [#954](https://github.com/ant-design/x/pull/954) [#937](https://github.com/ant-design/x/pull/937) by [kimteayon](https://github.com/kimteayon)
- 🛠 Refactored and upgraded the Sender component. [#1073](https://github.com/ant-design/x/pull/1073), [#962](https://github.com/ant-design/x/pull/962) by [kimteayon](https://github.com/kimteayon), [Chuck-Ray](https://github.com/Chuck-Ray)
- 🛠 Refactored and upgraded the ThoughtChain component. [#985](https://github.com/ant-design/x/pull/985) by [kimteayon](https://github.com/kimteayon)
- 🆕 Added `Ref` functionality to all components. [#1081](https://github.com/ant-design/x/pull/1081) by [kimteayon](https://github.com/kimteayon)
- 🆕 Integrated internationalization logic into the XProvider component. [#952](https://github.com/ant-design/x/pull/952) by [kimteayon](https://github.com/kimteayon)
### @ant-design/x-markdown
- 🔥 Added new component XMarkdown. [#1060](https://github.com/ant-design/x/pull/1060), [#989](https://github.com/ant-design/x/pull/989) by [Div627](https://github.com/Div627)
- 🔥 Added new plugin Latex. [#1060](https://github.com/ant-design/x/pull/1060), [#989](https://github.com/ant-design/x/pull/989) by [Div627](https://github.com/Div627)
- 🔥 Added new plugin HighlightCode. [#1060](https://github.com/ant-design/x/pull/1060), [#989](https://github.com/ant-design/x/pull/989) by [Div627](https://github.com/Div627)
- 🔥 Added new plugin Mermaid. [#1060](https://github.com/ant-design/x/pull/1060), [#989](https://github.com/ant-design/x/pull/989) by [Div627](https://github.com/Div627)
### @ant-design/x-sdk
- 🔥 Added new tool useXChat. [#1098](https://github.com/ant-design/x/pull/1098) by [hylin](https://github.com/hylin)
- 🔥 Added new tool useXConversations. [#1098](https://github.com/ant-design/x/pull/1098) by [hylin](https://github.com/hylin)
- 🔥 Added new tool Chat Provider. [#1098](https://github.com/ant-design/x/pull/1098) by [hylin](https://github.com/hylin)
- 🔥 Added new tool XRequest. [#1098](https://github.com/ant-design/x/pull/1098) by [hylin](https://github.com/hylin)
- 🔥 Added new tool XStream. [#1098](https://github.com/ant-design/x/pull/1098) by [hylin](https://github.com/hylin)
### Others
- 🛠 The overall framework has been upgraded to Monorepo.[#823](https://github.com/ant-design/x/pull/823) by [elrrrrrrr](https://github.com/elrrrrrrr)
- 🛠 Upgraded all components to Ant Design V6. [#1012](https://github.com/ant-design/x/pull/1012) by [kimteayon](https://github.com/kimteayon)
- 🛠 Upgraded and adjusted the release logic of Ant Design X. [#1098](https://github.com/ant-design/x/pull/1098), [#1009](https://github.com/ant-design/x/pull/1009) by [kimteayon](https://github.com/kimteayon)
- 📖 Optimized the official site to enhance user experience. [#1083](https://github.com/ant-design/x/pull/1083) by [kimteayon](https://github.com/kimteayon), [#1001](https://github.com/ant-design/x/pull/1001) by [elrrrrrrr](https://github.com/elrrrrrrr)
## 1.6.1
`2025-09-12`
- 🐛 Fixed ThoughtChain component `title` could not display the collapsed title when passing `ReactNode`. [#1172](https://github.com/ant-design/x/pull/1172) by [IsDyh01](https://github.com/IsDyh01)
- 🐛 Fixed Sender component `LoadingButton` would display two icons when the `icon ` property is passed. [#1145](https://github.com/ant-design/x/pull/1145) by [IsDyh01](https://github.com/IsDyh01)
- 🐛 Fixed semantic loss in Sender component `content`. [#703](https://github.com/ant-design/x/pull/703) by [HomyeeKing](https://github.com/HomyeeKing)
- 🐛 Removed redundant condition checks in Bubble component typing effect prefix logic. [#1091](https://github.com/ant-design/x/pull/1091) by [AqingCyan](https://github.com/AqingCyan)
- 🐛 Fixed missing `updating` status in useXChat. [#833](https://github.com/ant-design/x/pull/833) by [wzc520pyfm](https://github.com/wzc520pyfm)
- 🐛 Fixed the exception in Suggestion component when items is an empty array in `useActive`. [#824](https://github.com/ant-design/x/pull/824) by [LengYXin](https://github.com/LengYXin)
- 📖 Improved the official site for better user experience. [#960](https://github.com/ant-design/x/pull/960) by [wzc520pyfm](https://github.com/wzc520pyfm), [#1048](https://github.com/ant-design/x/pull/1048) by [wzc520pyfm](https://github.com/wzc520pyfm), [#1118](https://github.com/ant-design/x/pull/1118) by [afc163](https://github.com/afc163), [#1122](https://github.com/ant-design/x/pull/1122) by [fireairforce](https://github.com/fireairforce), [#1120](https://github.com/ant-design/x/pull/1120) by [IsDyh01](https://github.com/IsDyh01)
## 1.6.0
`2025-07-30`
- 🆕 Attachments component `FileCard` adds icon and type configuration. [#1006](https://github.com/ant-design/x/pull/1006) by [kieranwv](https://github.com/kieranwv)
- 📖 Added documentation and demo for Toolbox Agent integration. [#1063](https://github.com/ant-design/x/pull/1063) by [iamkun-2](https://github.com/iamkun-2)
- 📖 Improved official site for better user experience. [#1054](https://github.com/ant-design/x/pull/1054) by [hylin](https://github.com/hylin), [#1056](https://github.com/hylin)
## 1.5.0
`2025-07-16`
- 🆕 Added Bubble component support for `onScroll` event listener. [#1021](https://github.com/ant-design/x/pull/1021) by [QdabuliuQ](https://github.com/QdabuliuQ)
- 🐛 Removed duplicate TypeScript type declaration in Bubble component. [#1032](https://github.com/ant-design/x/pull/1032) by [wzc520pyfm](https://github.com/wzc520pyfm)
- 🐛 Fixed Conversations `onActiveChange` being triggered when a disabled `menu` item is clicked. [#1024](https://github.com/ant-design/x/pull/1024) by [QdabuliuQ](https://github.com/QdabuliuQ)
- 🐛 Fixed semantic configuration for Attachments component `FileList`. [#1017](https://github.com/ant-design/x/pull/1017) by [kimteayon](https://github.com/kimteayon)
- 🐛 Added html configuration for Actions component. [#995](https://github.com/ant-design/x/pull/995) by [vanndxh](https://github.com/vanndxh)
- 🐛 Fixed Conversations label display issue and improved semantic configuration. [#898](https://github.com/ant-design/x/pull/898) by [yuanliu147](https://github.com/yuanliu147)
- 📖 Improved official site for better user experience. [#940](https://github.com/ant-design/x/pull/940) by [coding-ice](https://github.com/coding-ice), [#969](https://github.com/ant-design/x/pull/969) by [afc163](https://github.com/afc163), [#968](https://github.com/ant-design/x/pull/968) by [afc163](https://github.com/afc163), [#1019](https://github.com/ant-design/x/pull/1019) by [hylin](https://github.com/hylin),[#1036](https://github.com/ant-design/x/pull/1036) by [kimteayon](https://github.com/kimteayon)
## 1.4.0
`2025-05-30`
- 🔥 New Component Actions.[#768](https://github.com/ant-design/x/pull/768) by [vanndxh](https://github.com/vanndxh)
- 🐛 Fix the issue where Bubble.List `footer` and `header` cannot retrieve keys.[#876](https://github.com/ant-design/x/pull/876) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fix the issue of overflow and ellipsis of Conversations list titles.[#877](https://github.com/ant-design/x/pull/877) by [kimteayon](https://github.com/kimteayon)
- 📖 Enhance the official website to improve user experience.[#816](https://github.com/ant-design/x/pull/816) by [Rain120](https://github.com/Rain120)、[#880](https://github.com/ant-design/x/pull/880) by [kimteayon](https://github.com/kimteayon)
## 1.3.0
`2025-05-21`
- 📖 Add Conversation type export. [#258](https://github.com/ant-design/x/pull/258) by [ONLY-yours](https://github.com/ONLY-yours)
- 💄 Fixed the issue that the Prompts scroll bar is always displayed. [#785](https://github.com/ant-design/x/pull/785) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fix Suggestion warning for using antd deprecated API `onDropdownVisibleChange`. [#827](https://github.com/ant-design/x/pull/827) by [zombieJ](https://github.com/zombieJ)
- 🆕 Extend Bubble`content` to `footer` and `header` method implementation parameters, and add Demo implementation.[#683](https://github.com/ant-design/x/pull/683) by [L-Hknu](https://github.com/L-Hknu) and [kimteayon](https://github.com/kimteayon)
- 📖 Fixed the security issue of Api Key being exposed on the site.[#840](https://github.com/ant-design/x/pull/840) by [kimteayon](https://github.com/kimteayon)
- 📖 Enhance the official website to improve user experience.[#783](https://github.com/ant-design/x/pull/783) by [kimteayon](https://github.com/kimteayon) ,[#229](https://github.com/ant-design/x/pull/229) by [afc163](https://github.com/afc163) ,[#835](https://github.com/ant-design/x/pull/835) by [kimteayon](https://github.com/kimteayon) ,[#814](https://github.com/ant-design/x/pull/814) by [wzc520pyfm](https://github.com/wzc520pyfm)
## 1.2.0
`2025-04-25`
- 🐛 Delete Conversations ellipsis tooltip , fix 'tooltip' display error issue.[#776](https://github.com/ant-design/x/pull/776) by [afc163](https://github.com/afc163)
- 🐛 Fixed Attachments `image` card style.[#751](https://github.com/ant-design/x/pull/751) by [wzc520pyfm](https://github.com/wzc520pyfm)
- 🐛 Fixed ThoughtChain controlled issue.[#752](https://github.com/ant-design/x/pull/752) by [Youzi2233](https://github.com/Youzi2233)
- XRequest
- 🆕 XRequestCallbacks adds an 'onStream' callback that allows for stream listening and abort operations.[#711](https://github.com/ant-design/x/pull/711) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue of XRequestOptions changes not taking effect and added a demo.[#736](https://github.com/ant-design/x/pull/736) by [kimteayon](https://github.com/kimteayon)
- 🆕 Add an example of model integration. [#725](https://github.com/ant-design/x/pull/725) by [kimteayon](https://github.com/kimteayon)
- 📖 Inaccurate parameter naming in optimizing API methods.[#736](https://github.com/ant-design/x/pull/736) by [kimteayon](https://github.com/kimteayon)
- useXAgent
- 🆕 RequestFn adds an `onStream` callback that allows for stream listening and abort operations.[#711](https://github.com/ant-design/x/pull/711) by [kimteayon](https://github.com/kimteayon)
- 🆕 RequestFn has added a `transformStream` transformation function for processing stream data.[#725](https://github.com/ant-design/x/pull/725) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fix the issue of XAgentConfig Preset changes not taking effect and add an example.[#736](https://github.com/ant-design/x/pull/736) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fix the issue of incorrect callback types for RequestFn `onSuccess` and update the corresponding demo. [#725](https://github.com/ant-design/x/pull/725) by [kimteayon](https://github.com/kimteayon)
- 🆕 Add model access, Custom RequestParams,and customize `XRequestOptions`demos. [#725](https://github.com/ant-design/x/pull/725) by [kimteayon](https://github.com/kimteayon) ,[#711](https://github.com/ant-design/x/pull/711) by [kimteayon](https://github.com/kimteayon)
- useXChat
- 🆕 XChatConfig adds input and output generic types.[#725](https://github.com/ant-design/x/pull/725) by [kimteayon](https://github.com/kimteayon)
- 🆕 XChatConfig adds `transformMessage` transformation function,which can transform `messages` when updating data and update to `messages` at the same time. [#711](https://github.com/ant-design/x/pull/711) by [kimteayon](https://github.com/kimteayon)
- 🆕 XChatConfig adds `transformStream`conversion function for processing stream data.[#711](https://github.com/ant-design/x/pull/711) by [kimteayon](https://github.com/kimteayon)
- 🆕 XChatConfig adds `resolveAbortController`callback function, which can obtain the`AbortController` controller for controlling the stream state.[#711](https://github.com/ant-design/x/pull/711) by [kimteayon](https://github.com/kimteayon)
- 🆕 Add model access examples and remove incorrect abort examples. [#711](https://github.com/ant-design/x/pull/711) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed the issue of Sender `header` `border-radius` style overflow.[#732](https://github.com/ant-design/x/pull/732) by [Bao0630](https://github.com/Bao0630)
- 📖 Add a copilot style model room.[#657](https://github.com/ant-design/x/pull/657) by [vanndxh](https://github.com/vanndxh)
- 📖 Refactoring the independent model room.[#753](https://github.com/ant-design/x/pull/753) by [vanndxh](https://github.com/vanndxh)
- 📖 Enhance the official website to improve user experience.[#730](https://github.com/ant-design/x/pull/730) by [afc163](https://github.com/afc163) ,[#758](https://github.com/ant-design/x/pull/758) by [coding-ice](https://github.com/coding-ice) , [#761](https://github.com/ant-design/x/pull/761) by [ONLY-yours](https://github.com/ONLY-yours)
## 1.1.1
`2025-04-14`
- Bubble.List
- 💄 Refactor Bubble.List, reduce unnecessary refreshes during updates.[#479](https://github.com/ant-design/x/pull/479) by [YumoImer](https://github.com/YumoImer)
- 🐛 Fixed scrollbar styles issues of `Bubble.List` under dark theme.[#727](https://github.com/ant-design/x/pull/727) by [kimteayon](https://github.com/kimteayon)
- Conversation
- 🐛 Fixed style issues of `ul` and `li` in Conversation.[#726](https://github.com/ant-design/x/pull/726) by [kimteayon](https://github.com/kimteayon)
- 🆕 Extended `getPopupContainer` for `menu`.[#698](https://github.com/ant-design/x/pull/698) by [yuxuan-ctrl](https://github.com/yuxuan-ctrl)
- 🐛 Fixed ThoughtChain Collapse cannot unfold issue.[#720](https://github.com/ant-design/x/pull/720) by [kimteayon](https://github.com/kimteayon)
- 🐛 Fixed Attachments image display style issue.[#708](https://github.com/ant-design/x/pull/708) by [hy993658052](https://github.com/hy993658052)
- 💄 Refactor Sender,Control the 'disabled' attribute of custom `Actions`.[#666](https://github.com/ant-design/x/pull/666) by [afc163](https://github.com/afc163)
- 📖 Enhance the official website to improve user experience.[#680](https://github.com/ant-design/x/pull/680) by [wzc520pyfm](https://github.com/wzc520pyfm),[#699](https://github.com/ant-design/x/pull/699) by [afc163](https://github.com/afc163),[#716](https://github.com/ant-design/x/pull/716) by [afc163](https://github.com/afc163),[#686](https://github.com/ant-design/x/pull/686) by [afc163](https://github.com/afc163),[#728](https://github.com/ant-design/x/pull/728) by [kimteayon](https://github.com/kimteayon)
## 1.1.0
`2025-03-28`
- Sender
- 🆕 Add `footer` to support custom footer content.[#654](https://github.com/ant-design/x/pull/654) by [kimteayon](https://github.com/kimteayon)
- 🆕 Extended `autoSize` to support custom content height.[#637](https://github.com/ant-design/x/pull/637) by [Zhang-Wei-666](https://github.com/Zhang-Wei-666)
- 📖 Add the declarations for `onFocus` and `onBlur` types.[#625](https://github.com/ant-design/x/pull/625) by [aojunhao123](https://github.com/aojunhao123)
- 🆕 Extended Conversations `menu.trigger` to support custom menu trigger.[#630](https://github.com/ant-design/x/pull/630) by [kimteayon](https://github.com/kimteayon)
- Attachments
- 🆕 Extended `ImageProps` to support custom image configuration.[#613](https://github.com/ant-design/x/pull/613) by [hy993658052](https://github.com/hy993658052)
- 📖 Add Attachments `onRemove` API documentation[#608](https://github.com/ant-design/x/pull/608) by [kimteayon](https://github.com/kimteayon)
- 📖 Extended `GPT-Vis` rendering chart example.[#603](https://github.com/ant-design/x/pull/603) by [lvisei](https://github.com/lvisei)
- 📦 Improved Chat Design X `peerDependencies`.[#611](https://github.com/ant-design/x/pull/611) by [pokerface9830](https://github.com/pokerface9830)
- 📖 Enhance the official website to improve user experience.[#626](https://github.com/ant-design/x/pull/626) by [aojunhao123](https://github.com/aojunhao123),[#648](https://github.com/ant-design/x/pull/648) by [kimteayon](https://github.com/kimteayon),[#659](https://github.com/ant-design/x/pull/659) by [afc163](https://github.com/afc163),[#667](https://github.com/ant-design/x/pull/667) by [jin19980928](https://github.com/jin19980928)
## 1.0.6
`2025-03-14`
- 🆕 Extended `Sender` file pasting can handle multiple files.[#505](https://github.com/ant-design/x/pull/500) by [ztkuaikuai](https://github.com/ztkuaikuai)
- 🆕 Extended `BubbleList` role definition function.[#485](https://github.com/ant-design/x/pull/500) by [chenluda](https://github.com/chenluda)
- 🐛 Fixed `Attachments` multi file horizontal scrollbar display.[#556](https://github.com/ant-design/x/pull/556) by [onefeng123 ](https://github.com/onefeng123)
- 🐛 Fixed `Attachments` onRemove non effective issue.[#555](https://github.com/ant-design/x/pull/555) by [edison-tianhe ](https://github.com/edison-tianhe)
- 🐛 Fixed `Sender` the issue of actions lacking `SpeechButton`.[#549](https://github.com/ant-design/x/pull/549) by [zombieJ ](https://github.com/zombieJ)
- 🐛 Fixed `Attachments`the issue of file initialization display.[#524](https://github.com/ant-design/x/pull/524) by [ztkuaikuai ](https://github.com/ztkuaikuai)
- 🐛 Fixed `Conversations`scroll bar issue.[#485](https://github.com/ant-design/x/pull/485) by [LofiSu](https://github.com/LofiSu)
- 📖 Improved`Bubble` `typing` reduces unnecessary rendering.[#477](https://github.com/ant-design/x/pull/477) by [kxcy001123](https://github.com/kxcy001123)
- 📦 Improved Chat Design X construct [#578](https://github.com/ant-design/x/pull/578),[#584](https://github.com/ant-design/x/pull/584) by [kimteayon](https://github.com/kimteayon), [#578](https://github.com/ant-design/x/pull/578) by [kimteayon](https://github.com/kimteayon),[#587](https://github.com/ant-design/x/pull/587) by [afc163](https://github.com/afc163)
- 📖 Enhance the official website to improve user experience.[#484](https://github.com/ant-design/x/pull/484) by [ztkuaikuai](https://github.com/ztkuaikuai), [#495](https://github.com/ant-design/x/pull/495) by [ztkuaikuai](https://github.com/ztkuaikuai), [#522](https://github.com/ant-design/x/pull/522) by [liangchaofei](https://github.com/liangchaofei),[#537](https://github.com/ant-design/x/pull/537) by [wzc520pyfm](https://github.com/wzc520pyfm),[#553](https://github.com/ant-design/x/pull/553) by [PeachScript](https://github.com/PeachScript), [#578](https://github.com/ant-design/x/pull/578) by [kimteayon](https://github.com/kimteayon), [#585](https://github.com/ant-design/x/pull/585) by [MaricoHan](https://github.com/MaricoHan)
## 1.0.5
`2025-01-13`
- 🐛 Fix `Attachment` remove icon style. [#460](https://github.com/ant-design/x/pull/460) by [Rain120](https://github.com/Rain120)
- 🛠 Refactor `BubbleProps` to support `ContentType` type argument. [#403](https://github.com/ant-design/x/pull/403) by [YumoImer](https://github.com/YumoImer)
- 🛠 Dev and site support React 19. [#432](https://github.com/ant-design/x/pull/432) by [YumoImer](https://github.com/YumoImer)
- 📖 Enhance the official website to improve user experience. [#456](https://github.com/ant-design/x/pull/456), [#446](https://github.com/ant-design/x/pull/446), [#448](https://github.com/ant-design/x/pull/448), [#444](https://github.com/ant-design/x/pull/444), [#414](https://github.com/ant-design/x/pull/414), [#406](https://github.com/ant-design/x/pull/406), [#404](https://github.com/ant-design/x/pull/404) by [wzc520pyfm](https://github.com/wzc520pyfm), [YumoImer](https://github.com/YumoImer), [Rain120](https://github.com/Rain120), [afc163](https://github.com/afc163)
## 1.0.4
`2024-12-25`
- 🆕 Extended `XStream` support for the cancel feature. [#319](https://github.com/ant-design/x/pull/319) by [ppbl](https://github.com/ppbl)
- 🆕 Extended `Bubble` support for the `typing.suffix` feature. [#316](https://github.com/ant-design/x/pull/316) by [BQXBQX](https://github.com/BQXBQX)
- 🆕 Extended `Sender` component's `onChange` parameter to include the `event` object. [#362](https://github.com/ant-design/x/pull/362) by [defaultjacky](https://github.com/defaultjacky)
- 🆕 Enhanced the `Sender` component's `ref` to support focus control methods like `focus` and `blur`. [#397](https://github.com/ant-design/x/pull/397) by [YumoImer](https://github.com/YumoImer)
- 🐛 Fixed styling issues in `ThoughtChain` when `cssVar` is not applied. [#373](https://github.com/ant-design/x/pull/373) by [YumoImer](https://github.com/YumoImer)
- 📖 Added `Petercat` assistant feature. [#375](https://github.com/ant-design/x/pull/375) by [xingwanying](https://github.com/xingwanying)
- 📖 Improved the official website for a better user experience. [#389](https://github.com/ant-design/x/pull/389), [#377](https://github.com/ant-design/x/pull/377), [#364](https://github.com/ant-design/x/pull/364), [#368](https://github.com/ant-design/x/pull/368) by [afc163](https://github.com/afc163), [YumoImer](https://github.com/YumoImer)
## 1.0.3
`2024-12-16`
- 💄 Refactor the styles when `placement: 'end'` is set for `Bubble`. [#314](https://github.com/ant-design/x/pull/314) by [YumoImer](https://github.com/YumoImer)
- 🐛 Fix occasional failure to trigger auto-scrolling when `autoScroll` is set in `Bubble.List`. [#336](https://github.com/ant-design/x/pull/336) by [anzhou99Ru](https://github.com/anzhou99Ru)
- 📖 Enhance the official website to improve user experience. [#343](https://github.com/ant-design/x/pull/343), [#334](https://github.com/ant-design/x/pull/334), [#315](https://github.com/ant-design/x/pull/315), [#331](https://github.com/ant-design/x/pull/331) by [afc163](https://github.com/afc163), [YumoImer](https://github.com/YumoImer), [Wxh16144](https://github.com/Wxh16144)
- 🛠 Fix errors encountered when running `pnpm lint`. [#313](https://github.com/ant-design/x/pull/313) by [BQXBQX](https://github.com/BQXBQX)
## 1.0.2
`2024-12-04`
- 🛠 Enhanced `XRequest` to support parsing custom protocols. [#293](https://github.com/ant-design/x/pull/293) by [YumoImer](https://github.com/YumoImer)
- 🐛 Fixed an issue where the preview buttons for `Attachment` did not toggle visibility properly. [#295](https://github.com/ant-design/x/pull/295) by [anzhou99](https://github.com/anzhou99)
- 🐛 Fixed a bug in `useXChat` where the same message triggered `onUpdate` multiple times. [#298](https://github.com/ant-design/x/pull/298) by [YumoImer](https://github.com/YumoImer)
- 📖 Added documentation for using `Bubble` with `GPT-Vis`. [#288](https://github.com/ant-design/x/pull/288) by [lvisei](https://github.com/lvisei)
- 📦 Updated browser target configurations to reduce bundle size. [#282](https://github.com/ant-design/x/pull/282) by [afc163](https://github.com/afc163)
- 🛠 Fixed errors when running `pnpm run prestart`. [#287](https://github.com/ant-design/x/pull/287) by [long36708](https://github.com/long36708)
## 1.0.1
`2024-11-29`
- 🛠 Optimized TS types for `useXAgent` and `XStream`. [#272](https://github.com/ant-design/x/pull/272) by [YumoImer](https://github.com/YumoImer)
- 🛠 Made the `agent` parameter optional to support data management functionality using only `useXChat`. [#271](https://github.com/ant-design/x/pull/271) by [YumoImer](https://github.com/YumoImer)
- 💄 Adjusted `Conversations` style based on RICH design specification. [#242](https://github.com/ant-design/x/pull/242) by [YumoImer](https://github.com/YumoImer)
- 🛠 Fixed ghost dependency issue that prevented the project from starting when using `pnpm`. [#223](https://github.com/ant-design/x/pull/223) by [YumoImer](https://github.com/YumoImer)
- 🌈 Demonstrated the attachment upload functionality in the standalone template. [#250](https://github.com/ant-design/x/pull/250), [#265](https://github.com/ant-design/x/pull/265) by [kelvinelove](https://github.com/kelvinelove)
- 📖 Fixed missing contributor information. [#212](https://github.com/ant-design/x/pull/212) by [afc163](https://github.com/afc163)
- 📖 Optimized official site to enhance user experience. [#277](https://github.com/ant-design/x/pull/277), [#264](https://github.com/ant-design/x/pull/264), [#263](https://github.com/ant-design/x/pull/263), [#262](https://github.com/ant-design/x/pull/262), [#261](https://github.com/ant-design/x/pull/261), [#241](https://github.com/ant-design/x/pull/241), [#246](https://github.com/ant-design/x/pull/246), [#210](https://github.com/ant-design/x/pull/210), [#211](https://github.com/ant-design/x/pull/211) by [YumoImer](https://github.com/YumoImer), [afc163](https://github.com/afc163), [Rain-1214](https://github.com/Rain-1214), [kelvinelove](https://github.com/kelvinelove) and [tabzzz1](https://github.com/tabzzz1)
- 📦 Updated browser targets to reduce bundle size. [#234](https://github.com/ant-design/x/pull/234) by [afc163](https://github.com/afc163)
## 1.0.0
`2024-11-22`
🎉 We are thrilled to announce the official release of [Ant Design X](https://x.ant.design) 1.0.0!
- 🌈 **Derived from Best Practices of Enterprise-Level AI Products**: Built on the RICH interaction paradigm, delivering an exceptional AI interaction experience.
- 🧩 **Flexible and Diverse Atomic Components**: Covers most AI dialogue scenarios, empowering you to quickly build personalized AI interaction interfaces.
- ⚡ **Out-of-the-Box Model Integration**: Easily connect with inference services compatible with OpenAI standards.
- 🔄 **Efficient Management of Conversation Data Flows**: Provides powerful tools for managing data flows, enhancing development efficiency.
- 📦 **Rich Template Support**: Offers multiple templates for quickly starting LUI application development.
- 🛡 **Complete TypeScript Support**: Developed with TypeScript, ensuring robust type coverage to improve the development experience and reliability.
- 🎨 **Advanced Theme Customization**: Supports fine-grained style adjustments to meet diverse use cases and personalization needs.
## 1.0.0-alpha.12
`2024-11-07`
- 🔥 Sender support `onPasteFile` and Attachments support `ref.upload` for manual uploading, by [zombieJ](https://github.com/zombieJ) [#184](https://github.com/ant-design/x/pull/184)
- 🔥 Sender `allowSpeech` support using third-part SDK, by [zombieJ](https://github.com/zombieJ) [#187](https://github.com/ant-design/x/pull/187)
## 1.0.0-alpha.11
`2024-11-06`
- 🔥 New Component Welcome, by [zombieJ](https://github.com/zombieJ) [#179](https://github.com/ant-design/x/pull/179)
- 🔥 Prompts support nest structure, by [zombieJ](https://github.com/zombieJ) [#181](https://github.com/ant-design/x/pull/181)
- 🔥 Attachments support Attachments.FileCard component, by [zombieJ](https://github.com/zombieJ) [#182](https://github.com/ant-design/x/pull/182)
## 1.0.0-alpha.10
`2024-11-04`
- 🐛 Fix Attachments drop upload could not trigger the upload request, by [YumoImer](https://github.com/YumoImer) [#178](https://github.com/ant-design/x/pull/178)
## 1.0.0-alpha.9
`2024-11-01`
- 🐛 Fix the logic in the Attachments, by [YumoImer](https://github.com/YumoImer) [#174](https://github.com/ant-design/x/pull/174)
- 🐛 Fix Sender.Header can not focus, by [zombieJ](https://github.com/zombieJ) [#175](https://github.com/ant-design/x/pull/175)
## 1.0.0-alpha.7
`2024-10-31`
- 🐛 Fix Attachments first upload could not trigger the upload request, by [YumoImer](https://github.com/YumoImer) [#172](https://github.com/ant-design/x/pull/172)
## 1.0.0-alpha.6
`2024-10-25`
- 🔥 New Component `Attachments`, by [zombieJ](https://github.com/zombieJ) [#168](https://github.com/ant-design/x/pull/168)
- 🔥 New Tools `XStream`, by [YumoImer](https://github.com/YumoImer) [#138](https://github.com/ant-design/x/pull/138)
- 🔥 New Tools `XRequest`, by [YumoImer](https://github.com/YumoImer) [#138](https://github.com/ant-design/x/pull/138)
## 1.0.0-alpha.5
`2024-10-23`
- 🆕 Bubble support `loadingRender` to customize loading content. [#165](https://github.com/ant-design/x/pull/165)
- 🐛 Fix components missing style when without XProvider. [#163](https://github.com/ant-design/x/pull/163)
## 1.0.0-alpha.4
`2024-10-17`
- Sender
- 🆕 Sender support `speech`, by [zombieJ](https://github.com/zombieJ) [#154](https://github.com/ant-design/x/pull/154)
- 🆕 Sender support Sender.Header, by [zombieJ](https://github.com/zombieJ) [#156](https://github.com/ant-design/x/pull/156)
- 🆕 Sender style adjust, by [zombieJ](https://github.com/zombieJ) [#151](https://github.com/ant-design/x/pull/151)
- 📖 update group config for Components category, by [YumoImer](https://github.com/YumoImer) [#155](https://github.com/ant-design/x/pull/155)
- 📖 tweak demo toggle button style , by [afc163](https://github.com/afc163) [#146](https://github.com/ant-design/x/pull/146)
- 📖 Update README.md, by [afc163](https://github.com/afc163) [#142](https://github.com/ant-design/x/pull/142)
## 1.0.0-alpha.3
`2024-10-10`
- Bubble
- 🆕 Bubble support `variant` props, by [zombieJ](https://github.com/zombieJ) [#140](https://github.com/ant-design/x/pull/140)
- 🆕 Bubble support `shape` props, by [zombieJ](https://github.com/zombieJ) [#144](https://github.com/ant-design/x/pull/144)
- 🆕 Bubble support `header` and `footer` props, by [zombieJ](https://github.com/zombieJ) [#147](https://github.com/ant-design/x/pull/147)
## 1.0.0-alpha.2
`2024-09-27`
- 🔥 New Component `XProvider` for global configuration, by [YumoImer](https://github.com/YumoImer) [#127](https://github.com/ant-design/x/pull/127)
- 🔥 New Runtime Hook `useXChat` for data management, by [zombieJ](https://github.com/zombieJ) [#125](https://github.com/ant-design/x/pull/125)
- 🔥 New Runtime Hook `useXAgent` for model scheduling, by [zombieJ](https://github.com/zombieJ) [#125](https://github.com/ant-design/x/pull/125)
- 🆕 `ThoughtChain` component now support the `size` property, by [YumoImer](https://github.com/YumoImer) [#123](https://github.com/ant-design/x/pull/123)
- 🛠 Updated `.lintstagedrc.json`, by [afc163](https://github.com/afc163) [#128](https://github.com/ant-design/x/pull/128)
- 🛠 Updated dependency `cheerio` to `v1.0.0`, by [afc163](https://github.com/afc163) [#121](https://github.com/ant-design/x/pull/121)
## 1.0.0-alpha.1
`2024-09-10`
### 🚀 Features
- 🔥 feat: Suggestion 建议组件 by [ONLY-yours](https://github.com/ONLY-yours) in [#87](https://github.com/ant-design/x/pull/87)
### 🐛 Fixes
- 🐛 fix: change the Sender restProps type by [ONLY-yours](https://github.com/ONLY-yours) in [#101](https://github.com/ant-design/x/pull/101)
- 🛠 fix: bun install by [afc163](https://github.com/afc163) in [#111](https://github.com/ant-design/x/pull/111)
### 🛠 Refactors
- 🛠 chore: add layer support by [zombieJ](https://github.com/zombieJ) in [#118](https://github.com/ant-design/x/pull/118)
- 🛠 chore: speed up workflows by [afc163](https://github.com/afc163) in [#119](https://github.com/ant-design/x/pull/119)
- 🛠 chore(deps-dev): bump the dev-dependencies group with 5 updates by [dependabot](https://github.com/dependabot) in [#120](https://github.com/ant-design/x/pull/120)
- 🛠 chore: clean up README.md by [afc163](https://github.com/afc163) in [#102](https://github.com/ant-design/x/pull/102)
- 🛠 chore: add issue templates by [afc163](https://github.com/afc163) in [#103](https://github.com/ant-design/x/pull/103)
- 🛠 chore: add bun.lockb by [afc163](https://github.com/afc163) in [#108](https://github.com/ant-design/x/pull/108)
- 🛠 chore: Delete index-style-only.js by [afc163](https://github.com/afc163) in [#106](https://github.com/ant-design/x/pull/106)
- 🛠 chore: Update main.yml by [afc163](https://github.com/afc163) in [#105](https://github.com/ant-design/x/pull/105)
- 🛠 chore: Update package.json by [afc163](https://github.com/afc163) in [#110](https://github.com/ant-design/x/pull/110)
### 📖 Documentation
- 📖 docs: Update README.md by [afc163](https://github.com/afc163) in [#104](https://github.com/ant-design/x/pull/104)
- 📖 docs: Update codecov badge by [afc163](https://github.com/afc163) in [#112](https://github.com/ant-design/x/pull/112)
## 1.0.0-alpha.0
`2024-09-05`
- 🔥 New Component Bubble. [#19](https://github.com/ant-design/x/pull/19) [li-jia-nan](https://github.com/li-jia-nan)
- 🔥 Bubble support direction [#52](https://github.com/ant-design/x/pull/52) [li-jia-nan](https://github.com/li-jia-nan)
- 🔥 New Component Bubble.List. [#57](https://github.com/ant-design/x/pull/57) [zombieJ](https://github.com/zombieJ)
- 🔥 New Component Conversations. [#48](https://github.com/ant-design/x/pull/48) [YumoImer](https://github.com/YumoImer)
- 🔥 New Component Prompts. [#55](https://github.com/ant-design/x/pull/55) [YumoImer](https://github.com/YumoImer)
- 🔥 New Component Sender. [#46](https://github.com/ant-design/x/pull/46) [ONLY-yours](https://github.com/ONLY-yours)
- 🔥 New Component ThoughtChain. [#86](https://github.com/ant-design/x/pull/86) [YumoImer](https://github.com/YumoImer)
- 📦 Use `father` to build. [#84](https://github.com/ant-design/x/pull/84) [zombieJ](https://github.com/zombieJ)
- 🛠 Fix ThemeContext instances being inconsistent when using `antd` es or lib package. [#88](https://github.com/ant-design/x/pull/88) [YumoImer](https://github.com/YumoImer)
- 🛠 Refactor: API Naming Conventions [#73](https://github.com/ant-design/x/pull/73) [zombieJ](https://github.com/zombieJ)
- 🛠 MISC: CI, Github Actions, Publish
- 🛠 [#59](https://github.com/ant-design/x/pull/59) [zombieJ](https://github.com/zombieJ)
- 🛠 [#62](https://github.com/ant-design/x/pull/62) [zombieJ](https://github.com/zombieJ)
- 🛠 [#71](https://github.com/ant-design/x/pull/71) [ONLY-yours](https://github.com/ONLY-yours)
- 🛠 [#72](https://github.com/ant-design/x/pull/72) [YumoImer](https://github.com/YumoImer)
- 🛠 [#98](https://github.com/ant-design/x/pull/98) [YumoImer](https://github.com/YumoImer)
- 📖 Update README.md
- 📖 [#81](https://github.com/ant-design/x/pull/81) [zombieJ](https://github.com/zombieJ)
- 📖 [#82](https://github.com/ant-design/x/pull/82) [zombieJ](https://github.com/zombieJ)
- 📖 [#61](https://github.com/ant-design/x/pull/61) [afc163](https://github.com/afc163)
## 0.0.0-alpha.0
`2024-05-10`
- MISC: Project initialization.
================================================
FILE: CHANGELOG.zh-CN.md
================================================
---
order: 6
title: 更新日志
timeline: true
tag: vVERSION
---
`@ant-design/x` 遵循 [Semantic Versioning 2.0.0](http://semver.org/lang/zh-CN/) 语义化版本规范。
#### 发布周期
- 修订版本号:日常 bugfix 更新。
- 次版本号:带有新特性的向下兼容的版本。
- 主版本号:含有破坏性更新和新特性。
---
## 2.4.0
`2026-03-13`
### @ant-design/x
- 🔥 新组件 Folder。[#1797](https://github.com/ant-design/x/pull/1797) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 强化 FileCard 的 `description`、`mask`、`onClick` 配置的能力。[#1807](https://github.com/ant-design/x/pull/1807) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🆕 XMarkdown 流式渲染新增 `tail` 配置,支持自定义尾缀内容与尾缀组件,并避免尾缀出现在未完成组件之前。[#1296](https://github.com/ant-design/x/pull/1296) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 XMarkdown 自定义组件流式状态识别问题,正确处理 void elements,并隔离同名组件多实例的 `streamStatus`。[#1590](https://github.com/ant-design/x/pull/1590) 由 [Last-Order](https://github.com/Last-Order) 提交
- 🛠 导出 XMarkdown 的 `StreamCacheTokenType` 类型,便于外部复用流式渲染相关类型。[#1592](https://github.com/ant-design/x/pull/1592) 由 [Last-Order](https://github.com/Last-Order) 提交
- 📖 新增 XMarkdown Playground,并重构 streaming、examples、data-display 文档,补充 AntV Infographic 示例。[#1779](https://github.com/ant-design/x/pull/1779) 由 [Div627](https://github.com/Div627) 提交、[#1780](https://github.com/ant-design/x/pull/1780) 由 [Div627](https://github.com/Div627) 提交、[#1814](https://github.com/ant-design/x/pull/1814) 由 [Div627](https://github.com/Div627) 提交
### @ant-design/x-skill
- 🆕 发布 x-markdown skill。[#1813](https://github.com/ant-design/x/pull/1813) 由 [Div627](https://github.com/Div627) 提交
### 其他
- 🐛 修复 useShortcutKeys 错误的事件处理。[#1822](https://github.com/ant-design/x/pull/1822) 由 [cxybd](https://github.com/cxybd) 提交
- 🛠 将所有组件 useMergedState 升级为 useControlledState。[#1808](https://github.com/ant-design/x/pull/1808) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1814](https://github.com/ant-design/x/pull/1814) 由 [Div627](https://github.com/Div627) 提交、[#1793](https://github.com/ant-design/x/pull/1793) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1792](https://github.com/ant-design/x/pull/1792) 由 [Div627](https://github.com/Div627) 提交、[#1780](https://github.com/ant-design/x/pull/1780) 由 [Div627](https://github.com/Div627) 提交、[#1779](https://github.com/ant-design/x/pull/1779) 由 [Div627](https://github.com/Div627) 提交
## 2.3.0
`2026-02-26`
### @ant-design/x
- 🆕 Conversation 的 onActiveChange 回调现在同时返回被激活的项及其键值,同时更新 useMergedState 为 useControlledState。[#1762](https://github.com/ant-design/x/pull/1762) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 优化 Sender 禁用状态按钮的视觉表现,统一添加透明边框处理,确保不同按钮变体在禁用时的外观一致。[#1751](https://github.com/ant-design/x/pull/1751) 由 [Rain120](https://github.com/Rain120) 提交
### @ant-design/x-markdown
- 🆕 XMarkdown 新增 escapeRawHtml 属性,允许用户在渲染时选择是否对原始 HTML 进行转义。[#1769](https://github.com/ant-design/x/pull/1769) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 XMarkdown 列表中遇到未闭合行内代码时的渲染,确保列表标记在特殊未闭合情况仍被保留。[#1739](https://github.com/ant-design/x/pull/1739) 由 [Div627](https://github.com/Div627) 提交
- 🐛 改进了块级 LaTeX 公式的解析,对结尾处的空白与缩进处理更宽容,提升了对不同行尾格式的兼容性,减少误判与渲染问题。[#1744](https://github.com/ant-design/x/pull/1744) 由 [Waiter](https://github.com/Waiter) 提交
- 🐛 优化深色模式 CodeHighlighter,Mermaid 插件样式问题。[#1766](https://github.com/ant-design/x/pull/1766) 由 [menghany](https://github.com/menghany) 提交
### @ant-design/x-sdk
- 🆕 useXChat 新增 queueRequest 方法,实现 ConversationKey 和 SessionId 的初始化消息发送。[#1761](https://github.com/ant-design/x/pull/1761) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-skill
- 🆕 新增 skill 安装指令,同时发布 use-x-chat、x-chat-provider、x-request 三个 skill。[#1753](https://github.com/ant-design/x/pull/1768)、[#1767](https://github.com/ant-design/x/pull/1767) 由 [kimteayon](https://github.com/kimteayon) 提交
### 其他
- 🛠 修复了因依赖升级导致的构建错误问题。 [#1754](https://github.com/ant-design/x/pull/1754) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🛠 解决 CodeSandbox 预览中 domhandler 的 ModuleNotFoundError 错误。[#1754](https://github.com/ant-design/x/pull/1754) 由 [Div627](https://github.com/Div627) 提交
## 2.2.2
`2026-02-06`
### @ant-design/x
- 🛠 修复一些文档和类型来支持 AI Coding。[#1733](https://github.com/ant-design/x/pull/1733) 由 [kimteayon](https://github.com/kimteayon) 提交
- 💄 修复 Bubble.List 样式和语义化问题。[#1731](https://github.com/ant-design/x/pull/1731) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🐛 修复 Sender 插入节点配置了 replaceCharacters 时的替换问题。[#1727](https://github.com/ant-design/x/pull/1727) 由 [kimteayon](https://github.com/kimteayon) 提交
## 2.2.1
`2026-01-30`
### @ant-design/x
- 💄 修复 Bubble.List 样式问题。[#1713](https://github.com/ant-design/x/pull/1713) 由 [anxLiang](https://github.com/anxLiang) 提交、[#1704](https://github.com/ant-design/x/pull/1704) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🐛 修复因其他三方依赖 `esm` 路径导致 Node 环境构建报错问题。[#1708](https://github.com/ant-design/x/pull/1708) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🐛 修复流式渲染缓存失效问题,当列表项包含行内代码(如 - \code\`\` )时,缓存会提前提交导致渲染异常。[#1709](https://github.com/ant-design/x/pull/1709) 由 [Div627](https://github.com/Div627) 提交
- 🆕 自定义代码渲染支持接受语言信息。[#1705](https://github.com/ant-design/x/pull/1705) 由 [Aarebecca](https://github.com/Aarebecca) 提交
### @ant-design/x-sdk
- 🆕 XRequest 与 Chat Provider 一起使用时会额外获取到组装好的 message。[#1714](https://github.com/ant-design/x/pull/1714) 由 [kimteayon](https://github.com/kimteayon) 提交
### 其他
- 📖 优化官网站点提升用户体验。[#1717](https://github.com/ant-design/x/pull/1717) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1707](https://github.com/ant-design/x/pull/1707) 由 [Div627](https://github.com/Div627) 提交
## 2.2.0
`2026-01-26`
### @ant-design/x
- Sender
- 🐛 修复光标在技能位置时插入位置错误问题。[#1633](https://github.com/ant-design/x/pull/1633) 由 [IsDyh01](https://github.com/IsDyh01) 提交
- 🛠 重构插入节点位置能力,同时重写测试用例。[#1612](https://github.com/ant-design/x/pull/1612) 由 [kimteayon](https://github.com/kimteayon) 提交
- XProvider
- 🐛 修复设置 `iconPrefixCls` 不生效问题。[#1656](https://github.com/ant-design/x/pull/1656) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复设置 `prefix` 不生效问题。[#1642](https://github.com/ant-design/x/pull/1642) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 `layer` 设置问题。 [#1616](https://github.com/ant-design/x/pull/1616) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复因强制 `antd` 依赖 `es` 路径导致 Node 环境构建报错问题。[#1645](https://github.com/ant-design/x/pull/1645) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 ThoughtChain 布局导致动画卡顿问题。[#1641](https://github.com/ant-design/x/pull/1641) 由 [IsDyh01](https://github.com/IsDyh01) 提交
- 🐛 修复 Think 布局导致动画卡顿问题。[#1636](https://github.com/ant-design/x/pull/1636) 由 [IsDyh01](https://github.com/IsDyh01) 提交
- 🐛 修复 Sources 设置了位置但无法定位内容问题。 [#1683](https://github.com/ant-design/x/pull/1683) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Bubble.List 内部高度变化滚动条变化错误问题。[#1690](https://github.com/ant-design/x/pull/1690) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🆕 新增 Mermaid 设置初始化配置和操作栏功能。[#1631](https://github.com/ant-design/x/pull/1631) 由 [Div627](https://github.com/Div627) 提交
- 🆕 新增 Attachments 设置卡片类型能力。[#1610](https://github.com/ant-design/x/pull/1610) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-sdk
- 🆕 XRequest 新增重连接能力。[#1629](https://github.com/ant-design/x/pull/1629) 由 [hylin](https://github.com/hylin) 提交
- 🆕 XRequest 和 XStream 支持流数据解析引入了可配置的分隔符 `streamSeparator`、`partSeparator`、`kvSeparator` 能力,同时为 TextDecoderStream 添加了 polyfill 以提高兼容性,修复了 undefined 值被添加到流结果中的问题。 [#1611](https://github.com/ant-design/x/pull/1611) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🆕 增强 XMarkdown 解析器,使其支持带占位符保护的自定义组件。[#1668](https://github.com/ant-design/x/pull/1668) 由 [yanghuanrong](https://github.com/yanghuanrong) 提交
- 🆕 新增 XMarkdown 基于 Playwright Component Testing 实现流式 Markdown 渲染的性能基准测试能力。[#1314](https://github.com/ant-design/x/pull/1314) 由 [Div627](https://github.com/Div627) 提交
- 🆕 新增 XMarkdown 流式语法对行内代码缓存的功能。[#1630](https://github.com/ant-design/x/pull/1630) 由 [Div627](https://github.com/Div627) 提交
### 其他
- 📖 优化官网站点提升用户体验。[#1675](https://github.com/ant-design/x/pull/1675) 由 [hongxuWei](https://github.com/hongxuWei) 提交、[#1644](https://github.com/ant-design/x/pull/1644) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1658](https://github.com/ant-design/x/pull/1658) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1646](https://github.com/ant-design/x/pull/1646) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1651](https://github.com/ant-design/x/pull/1651) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1650](https://github.com/ant-design/x/pull/1650) 由 [Div627](https://github.com/Div627) 提交、[#1635](https://github.com/ant-design/x/pull/1635) 由 [IsDyh01](https://github.com/IsDyh01) 提交、[#1627](https://github.com/ant-design/x/pull/1627) 由 [Alexzjt](https://github.com/Alexzjt) 提交、[#1615](https://github.com/ant-design/x/pull/1615) 由 [Yx0201](https://github.com/Yx0201) 提交
## 2.1.3
`2026-01-04`
### @ant-design/x
- 🐛 修复了 Sender 未声明依赖问题,将 `classnames` 替换为 `clsx` 并为 `biome.json` 配置了依赖引用检查。[#1608](https://github.com/ant-design/x/pull/1608) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1605](https://github.com/ant-design/x/pull/1605) 由 [kimteayon](https://github.com/kimteayon) 提交
## 2.1.2
`2025-12-30`
### @ant-design/x
- 💄 修复 Actions `disliked` 类名错误问题。[#1521](https://github.com/ant-design/x/pull/1521) 由 [kimteayon](https://github.com/kimteayon) 提交
- Sender
- 🛠 整体重构 Sender 组件实现,同时修复一些细节光标问题。[#1515](https://github.com/ant-design/x/pull/1515) [#1548](https://github.com/ant-design/x/pull/1548) 由 [kimteayon](https://github.com/kimteayon) 提交
- 💄 修复 Sender 组件 actions 与 antd Button 样式冲突导致渲染错误问题。[#1535](https://github.com/ant-design/x/pull/1535) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复词槽模式 `skill` 情况下 placeholder 为空时光标太小异常的问题。[#1537](https://github.com/ant-design/x/pull/1537) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复粘贴文字时撤销栈(undo)未更新问题。[#1527](https://github.com/ant-design/x/pull/1527) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交
- 🐛 移除 Bubble.List 新消息自动滚动到最底部的逻辑,改为手动控制。[#1548](https://github.com/ant-design/x/pull/1548) 由 [anxLiang](https://github.com/anxLiang) 提交
- 💄 修复 Prompts 组件动画演示不生效问题。 [#1580](https://github.com/ant-design/x/pull/1580) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Actions.Feedback tooltip 展示异常问题。[#1591](https://github.com/ant-design/x/pull/1591) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Attachments 调用 `ref.select()` 未传参数时报错问题 [#1587](https://github.com/ant-design/x/pull/1587) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 FileCard `overflow` 展示时按钮未更新问题,以及图片展示时无 `src` 导致 Image 展示失败问题。 [#1587](https://github.com/ant-design/x/pull/1587) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-sdk
- 🐛 修复 XChat 无法远程加载历史消息问题。[#1593](https://github.com/ant-design/x/pull/1593) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 OpenAIChatProvider 和 DeepSeekChatProvider 非流式请求渲染了两次内容问题。[#1593](https://github.com/ant-design/x/pull/1593) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 💄 修复 XMarkdown 动画字体颜色错误问题。[#1531](https://github.com/ant-design/x/pull/1531) 由 [Div627](https://github.com/Div627) 提交
### 其他
- 🛠 整体的依赖重构升级。[#1448](https://github.com/ant-design/x/pull/1448) 由 [yoyo837](https://github.com/yoyo837) 提交
- 📖 优化官网站点提升用户体验。[#1508](https://github.com/ant-design/x/pull/1508) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1516](https://github.com/ant-design/x/pull/1516) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1529](https://github.com/ant-design/x/pull/1529) 由 [fireairforce](https://github.com/fireairforce) 提交、[#1549](https://github.com/ant-design/x/pull/1549) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1551](https://github.com/ant-design/x/pull/1551) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交、[#1553](https://github.com/ant-design/x/pull/1553) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交、[#1555](https://github.com/ant-design/x/pull/1555) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交、[#1543](https://github.com/ant-design/x/pull/1543) 由 [IsDyh01](https://github.com/IsDyh01) 提交、[#1558](https://github.com/ant-design/x/pull/1558) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交、[#1557](https://github.com/ant-design/x/pull/1557) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交、[#1562](https://github.com/ant-design/x/pull/1562) 由 [hustcc](https://github.com/hustcc) 提交、[#1569](https://github.com/ant-design/x/pull/1569) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1561](https://github.com/ant-design/x/pull/1561) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交、[#1584](https://github.com/ant-design/x/pull/1584) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1581](https://github.com/ant-design/x/pull/1581) 由 [teimurjan](https://github.com/teimurjan) 提交
## 2.1.1
`2025-12-10`
### @ant-design/x
- Sender
- 🐛 修复发送快捷键 enter 和 shift + enter 未受 submit 按钮 disabled 状态控制的问题,修复 `onSubmit` 快捷键和按钮参数不一致问题。 [#1472](https://github.com/ant-design/x/pull/1472) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 `onChange` 缺少 `skill` 参数问题,修复词槽模式仅展示技能能力时 placeholder 未展示问题,并重构 `onChange`逻辑。[#1477](https://github.com/ant-design/x/pull/1477) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复词槽模式 `input` 类型词槽激活焦点时发送快捷键 enter 和 shift + enter 未触发问题。[#1498](https://github.com/ant-design/x/pull/1498) 由 [kimteayon](https://github.com/kimteayon) 提交
- Attachment
- 🐛 修复设置 `maxCount` 后最后一个文件未上传问题。[#1486](https://github.com/ant-design/x/pull/1486) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复上传图片后 antd 报警告问题。[#1492](https://github.com/ant-design/x/pull/1492) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Mermaid 渲染抖动问题。[#1497](https://github.com/ant-design/x/pull/1497) 由 [Div627](https://github.com/Div627) 提交
- 📖 优化官网站点提升用户体验。[#1464](https://github.com/ant-design/x/pull/1464) 由 [IsDyh01](https://github.com/IsDyh01) 提交、[#1483](https://github.com/ant-design/x/pull/1483) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交、[#1463](https://github.com/ant-design/x/pull/1463) 由 [J-Da-Shi](https://github.com/J-Da-Shi) 提交、[#1489](https://github.com/ant-design/x/pull/1489) 由 [Chiaki-xps](https://github.com/Chiaki-xps) 提交、[#1499](https://github.com/ant-design/x/pull/1499) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1500](https://github.com/ant-design/x/pull/1500) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1501](https://github.com/ant-design/x/pull/1501) 由 [Samoy](https://github.com/Samoy) 提交
- 🛠 修改对 `mermaid` 的依赖配置。[#1475](https://github.com/ant-design/x/pull/1475) 由 [Div627](https://github.com/Div627) 提交
### @ant-design/x-sdk
- 🐛 优化消息流的节流与发射逻辑,避免高频流式更新导致的深度更新错误,提升实时消息稳定性与性能。[#1418](https://github.com/ant-design/x/pull/1418) 由 [Afee2019](https://github.com/Afee2019) 提交
### @ant-design/x-markdown
- 🛠 优化 `sideEffects` 配置。[#1408](https://github.com/ant-design/x/pull/1408) 由 [hongxuWei](https://github.com/hongxuWei) 提交
## 2.1.0
`2025-12-05`
### @ant-design/x
- 🐛 修复 Bubble css token `typingContent` 配置不生效问题。[#1435](https://github.com/ant-design/x/pull/1435) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复因 antd 升级到 6.0.1 导致多个组件样式丢失问题。[#1441](https://github.com/ant-design/x/pull/1441) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1446](https://github.com/ant-design/x/pull/1446) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Bubble.List 在 safari 浏览器滚动兼容性问题。[#1392](https://github.com/ant-design/x/pull/1392) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🔥 新组件 HighlightCode 和 Mermaid。[#1402](https://github.com/ant-design/x/pull/1402) 由 [Div627](https://github.com/Div627) 提交
- 🆕 Actions 新增语义化实现。[#1443](https://github.com/ant-design/x/pull/1443) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 Suggestion 新增语义化实现,移除重复的 Enter 触发事件,修复 `onSubmit` 方法多次执行的问题,`onSelect` 方法新增 `selectedOptions` 完整数据返回,同时对选项的实现使用 `useMergedState` 进行了重构。[#1406](https://github.com/ant-design/x/pull/1406) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1444](https://github.com/ant-design/x/pull/1444) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 Sender 新的词槽类型 `content` 和技能功能 `skill`。[#1377](https://github.com/ant-design/x/pull/1377) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-sdk
- 🐛 修复 DeepSeekChatProvider 对 `<think>` 标签格式换行处理不当导致 XMarkdown 格式渲染异常问题。[#1445](https://github.com/ant-design/x/pull/1445) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 useXChat `setMessages` 方法调用未触发渲染问题。[#1450](https://github.com/ant-design/x/pull/1450) 由 [hylin](https://github.com/hylin) 提交
- 🐛 修复 rc-util 依赖未声明问题。[#1456](https://github.com/ant-design/x/pull/1456) 由 [hylin](https://github.com/hylin) 提交
### @ant-design/x-markdown
- 🐛 替换 useStreaming 正则解决 ios 兼容性问题。[#1457](https://github.com/ant-design/x/pull/1457) 由 [Div627](https://github.com/Div627) 提交
- 📖 完善文档提升用户体验。[#1451](https://github.com/ant-design/x/pull/1451) 由 [Div627](https://github.com/Div627) 提交
- 🛠 迁移 UI 插件 HighlightCode 和 Mermaid 到 @ant-design/x 达成更合理的依赖关系。[#1402](https://github.com/ant-design/x/pull/1402) 由 [Div627](https://github.com/Div627) 提交
## 2.0.1
`2025-12-03`
### @ant-design/x
- 🐛 修复因 antd 升级到 6.0.1 导致多个组件样式丢失问题。[#1428](https://github.com/ant-design/x/pull/1428) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Attachments 组件使用时 antd 报错问题。[#1395](https://github.com/ant-design/x/pull/1395) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Sender 组件 `allowSpeech` 自定义时 disable 错误问题。[#1398](https://github.com/ant-design/x/pull/1398) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Sender.Switch 组件语义化配置缺失问题。[#1396](https://github.com/ant-design/x/pull/1396) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🛠 修复因版本升级导致的测试用例失败。[#1393](https://github.com/ant-design/x/pull/1393) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 新增 1.x 官网链接。[#1386](https://github.com/ant-design/x/pull/1386) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1394](https://github.com/ant-design/x/pull/1394) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1384](https://github.com/ant-design/x/pull/1384) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1416](https://github.com/ant-design/x/pull/1416) 由 [IsDyh01](https://github.com/IsDyh01) 提交
### @ant-design/x-sdk
- 📖 官网目录、文档、示例全面更新。[#1419](https://github.com/ant-design/x/pull/1419) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 useXChat `requestFallback` 新增 errorInfo 参数解决无法获取接口错误数据问题。[#1419](https://github.com/ant-design/x/pull/1419) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🐛 修复插件 HighlightCode 复制代码错误问题。[#1414](https://github.com/ant-design/x/pull/1414) 由 [Jimi1126](https://github.com/Jimi1126) 提交
- 🐛 修复 XMarkdown 渲染特殊字符失败问题。[#1413](https://github.com/ant-design/x/pull/1413) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 XMarkdown 缓存重置逻辑因旧引用未生效问题。[#1420](https://github.com/ant-design/x/pull/1420) 由 [Div627](https://github.com/Div627) 提交
## 2.0.0
`2025-11-22`
🏆 Ant Design X 2.0.0 已发布!
`@ant-design/x` - 智能界面构建框架
基于 Ant Design 设计体系的 React UI 库、专为 AI 驱动界面设计,开箱即用的智能对话组件、无缝集成 API 服务,快速搭建智能应用界面。
`@ant-design/x-markdown` - 高性能流式渲染引擎
专为流式内容优化的 Markdown 渲染解决方案、强大的扩展能力,支持公式、代码高亮、mermaid 图表等极致性能表现,确保流畅的内容展示体验。
`@ant-design/x-sdk` - AI 对话数据流管理
提供完整的工具 API 集合、开箱即用的 AI 对话应用数据流管理、简化开发流程,提升开发效率。
##### 升级必读
🌟 我们准备了升级文档,查看[详情](/docs/react/migration-v2-cn)。
## 2.0.0-alpha.16
`2025-11-17`
### @ant-design/x
- 🛠 删除 components 属性,同时将内部属性提升。[#1338](https://github.com/ant-design/x/pull/1338) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 FileCard 新增图片生成过程以及加载、渲染能力。[#1311](https://github.com/ant-design/x/pull/1311) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 Think 将 `blink` 动画样式升级为 css token。[#1318](https://github.com/ant-design/x/pull/1318) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 ThoughtChain 将 `blink` 动画样式升级为 css token。[#1318](https://github.com/ant-design/x/pull/1318) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1335](https://github.com/ant-design/x/pull/1335) 由 [kimteayon](https://github.com/kimteayon)、[#1329](https://github.com/ant-design/x/pull/1329) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🛠 使用 useMemo 优化 markdown 渲染,同时修改基本演示文本和动画演示文本。[#1337](https://github.com/ant-design/x/pull/1337) 由 [Div627](https://github.com/Div627) 提交
- 🆕 XMarkdown 渲染 HTML 标签对 `disabled` 和 `checked` 属性透出。[#1328](https://github.com/ant-design/x/pull/1328) 由 [Div627](https://github.com/Div627) 提交
- 🆕 XMarkdown `hasNextChunk` 增加对表格渲染处理的能力。[#1322](https://github.com/ant-design/x/pull/1322) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 XMarkdown 默认的表格渲染的样式。[#1324](https://github.com/ant-design/x/pull/1324) 由 [Div627](https://github.com/Div627) 提交
- 🆕 XMarkdown `incompleteMarkdownComponentMap` 新增多个类型渲染。[#1325](https://github.com/ant-design/x/pull/1325) 由 [Div627](https://github.com/Div627) 提交
- 📖 优化官网站点提升用户体验。[#1326](https://github.com/ant-design/x/pull/1326) 由 [Div627](https://github.com/Div627)。
## 2.0.0-alpha.15
`2025-11-07`
### @ant-design/x
- 🛠 升级 antd 依赖版本到 `6.00-alpha.4`。[#1300](https://github.com/ant-design/x/pull/1300) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1303](https://github.com/ant-design/x/pull/1303) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🛠 重构 markdown 主题样式。[#1305](https://github.com/ant-design/x/pull/1305) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 `code` 标签 `streamStatus` 状态错误问题。[#1307](https://github.com/ant-design/x/pull/1307) 由 [Div627](https://github.com/Div627) 提交
- 🛠 将 `index.less` 改造为 `index.css`。[#1306](https://github.com/ant-design/x/pull/1306) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 `SteamingOption` 为 `StreamingOption`。[#1301](https://github.com/ant-design/x/pull/1301) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 dompurifyConfig.ALLOWED_TAGS 被错误合并到 ADD_TAGS 的问题。[#1297](https://github.com/ant-design/x/pull/1297) 由 [Div627](https://github.com/Div627) 提交
## 2.0.0-alpha.13
`2025-10-30`
### @ant-design/x
- 🐛 删除 Bubble.List `suffix` 属性,并通过 CSS Token 修改来 typing。[#1285](https://github.com/ant-design/x/pull/1285) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 ThoughtChain.Item 组件新增闪动效果。[#1278](https://github.com/ant-design/x/pull/1278) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 Think 组件新增闪动效果。[#1278](https://github.com/ant-design/x/pull/1278) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 ThoughtChain 组件新增闪动效果。[#1286](https://github.com/ant-design/x/pull/1286) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 Actions 新增 fadeIn 和 fadeInLeft 效果。[#1288](https://github.com/ant-design/x/pull/1288) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1289](https://github.com/ant-design/x/pull/1289) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 Prompts 新增 fadeIn 和 fadeInLeft 效果。[#1289](https://github.com/ant-design/x/pull/1289) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1290](https://github.com/ant-design/x/pull/1290) 由 [Rain120](https://github.com/Rain120)。
### @ant-design/x-markdown
- 🐛 修复传入的 renderer link 被覆盖问题。[#1276](https://github.com/ant-design/x/pull/1276) 由 [Div627](https://github.com/Div627) 提交
## 2.0.0-alpha.12
`2025-10-29`
### @ant-design/x
- 🆕 Attachments Ref 新增 `select` 方法支持选择文件的能力,同时修复设置了最大数量,并达到了最大数量后仍显示上传按钮的问题。[#1266](https://github.com/ant-design/x/pull/1266) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1269](https://github.com/ant-design/x/pull/1269) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1274](https://github.com/ant-design/x/pull/1274) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🐛 修复 KaTeX 插件渲染失败抛出异常的问题,修改公式渲染规则减少渲染异常。[#1265](https://github.com/ant-design/x/pull/1265) 由 [Div627](https://github.com/Div627) 提交
- 📖 新增 XMarkdown 处理中文链接的代码示例。[#1270](https://github.com/ant-design/x/pull/1270) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 `code` 和 `pre` 标签渲染时返回渲染状态 `streamStatus` 以及块级标识 `block`。[#1272](https://github.com/ant-design/x/pull/1272) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复渲染 markdown 时重复的 DOM key。[#1273](https://github.com/ant-design/x/pull/1273) 由 [Div627](https://github.com/Div627) 提交
## 2.0.0-alpha.11
`2025-10-27`
### @ant-design/x
- 🆕 Sender 词槽配置改为可变属性,词槽模式下 `insert` 方法新增 `replaceCharacters` 属性入参,支持新增替换功能,同时 `focus` 方法新增词槽 `key` 的配置以支持指定词槽的 `focus` 功能。[#1259](https://github.com/ant-design/x/pull/1259) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 Sources 行内模式支持指定当前激活的面板,新增 `activeKey` 属性,同时优化面板切换的交互样式,使体验更好。[#1261](https://github.com/ant-design/x/pull/1261) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 Bubble.List 对滚动条布局和实现以及语义化进行了优化。[#1263](https://github.com/ant-design/x/pull/1263) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🐛 修复 XMarkdown 自定义组件不同状态下入参结构不一致问题。[#1260](https://github.com/ant-design/x/pull/1260) 由 [Div627](https://github.com/Div627) 提交
- 📖 新增 XMarkdown 代码示例。[#1262](https://github.com/ant-design/x/pull/1262) 由 [kimteayon](https://github.com/kimteayon) 提交
## 2.0.0-alpha.10
`2025-10-23`
### @ant-design/x
- 🔥 新组件 Sources。[#1250](https://github.com/ant-design/x/pull/1250) 由 [hy993658052](https://github.com/hy993658052) 提交
- 🆕 Bubble 新增 Bubble.System 和 Bubble.Divider 两个子组件。[#1239](https://github.com/ant-design/x/pull/1239) 由 [anxLiang](https://github.com/anxLiang) 和 [kimteayon](https://github.com/kimteayon) 提交
- Sender
- 🆕 新增词槽焦点事件功能。[#1221](https://github.com/ant-design/x/pull/1221) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复输入框 `onPasteFile` 粘贴多文件回调数据错误问题。[#1221](https://github.com/ant-design/x/pull/1221) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 svg 未做国际化导致的无障碍问题。[#1243](https://github.com/ant-design/x/pull/1243) 由 [kimteayon](https://github.com/kimteayon) 提交
- FileCard
- 🆕 新增语义化实现。[#1220](https://github.com/ant-design/x/pull/1220) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 新增 `jfif` 类型支持。[#1248](https://github.com/ant-design/x/pull/1248) 由 [IsDyh01](https://github.com/IsDyh01) 提交
- 🆕 Attachments 新增语义化实现。[#1220](https://github.com/ant-design/x/pull/1220) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1216](https://github.com/ant-design/x/pull/1216) 由 [kimteayon](https://github.com/kimteayon) 提交, [#1217](https://github.com/ant-design/x/pull/1217) 由 [Div627](https://github.com/Div627) 提交,[#1218](https://github.com/ant-design/x/pull/1218) 由 [IsDyh01](https://github.com/IsDyh01) 提交,[#1224](https://github.com/ant-design/x/pull/1224) 由 [kimteayon](https://github.com/ kimteayon) 提交,[#1232](https://github.com/ant-design/x/pull/1232) 由 [IsDyh01](https://github.com/IsDyh01) 提交,[#1233](https://github.com/ant-design/x/pull/1233) 由 [kimteayon](https://github.com/kimteayon) 提交,[#1243](https://github.com/ant-design/x/pull/1243) 由 [kimteayon](https://github.com/kimteayon) 提交,[#1247](https://github.com/ant-design/x/pull/1247) 由 [elrrrrrrr](https://github.com/elrrrrrrr) 提交
### @ant-design/x-markdown
- 🆕 XMarkdown 新增需闭合标签语法的过程中的渲染组件配置 `incomplete` 以及对应功能。[#1223](https://github.com/ant-design/x/pull/1223) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 XMarkdown openLinksInNewTab 属性配置失效问题。[#1253](https://github.com/ant-design/x/pull/1253) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 XMarkdown 动画重复渲染问题。[#1255](https://github.com/ant-design/x/pull/1255) 由 [Div627](https://github.com/Div627) 提交
- 🆕 健壮 XMarkdown 对公式渲染标签识别能力。[#1255](https://github.com/ant-design/x/pull/1255) 由 [Div627](https://github.com/Div627) 提交
### @ant-design/x-sdk
- 🐛 修复 useXChat 处理流数据服务器错误导致 `requestFallback` 回调入参问题。[#1224](https://github.com/ant-design/x/pull/1224) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 useXConversations 新增 activeConversationKey 的实现。[#1252](https://github.com/ant-design/x/pull/1252) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 useXChat `isRequesting` 非多实例问题,以及优化 `requestPlaceholder` 和 `requestFallback` 回调入参。[#1254](https://github.com/ant-design/x/pull/1254) 由 [kimteayon](https://github.com/kimteayon) 提交
## 2.0.0-alpha.9
`2025-09-24`
### @ant-design/x-markdown
- 🐛 修复代码高亮插件样式丢失、组件无法匹配嵌套子元素的问题,并移除默认样式中的 table text-align 属性。[#1212](https://github.com/ant-design/x/pull/1212) 由 [Div627](https://github.com/Div627) 提交
## 2.0.0-alpha.8
`2025-09-22`
### @ant-design/x
- Bubble
- 🆕 Bubble.List 新增 `extra` 参数,配合 useXChat 已支持自定义功能。[#1195](https://github.com/ant-design/x/pull/1195) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 `loading` 状态下内容高度被固定问题。[#1178](https://github.com/ant-design/x/pull/1178) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复组件类型导出命名错误问题。[#1182](https://github.com/ant-design/x/pull/1182) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 ThoughtChain.Item 组件类型导出命名错误问题。[#1178](https://github.com/ant-design/x/pull/1178) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 XProvider 监听组件缺少问题。[#1178](https://github.com/ant-design/x/pull/1178) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🛠 重构动画相关实现。[#1198](https://github.com/ant-design/x/pull/1198) 由 [Div627](https://github.com/Div627) 提交、[#1204](https://github.com/ant-design/x/pull/1204) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复插件导出类型错误问题,以及新增示例和文档[#1187](https://github.com/ant-design/x/pull/1187) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 Mermaid 插件切换时渲染异常。[#1175](https://github.com/ant-design/x/pull/1175) 由 [Div627](https://github.com/Div627) 提交
- 🆕 补充 HighlightCode 插件和 Mermaid 插件语义化实现。[#1178](https://github.com/ant-design/x/pull/1178) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 XMarkdown 主题样式覆盖不全问题。 [#1182](https://github.com/ant-design/x/pull/1182) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-sdk
- 🆕 useXChat `setMessage` 支持使用回调函数支持获取原始消息,同时 `onRequest` 和 `onReload` 新增 `extra` 参数以支持自定义功能。 [#1195](https://github.com/ant-design/x/pull/1195) 由 [kimteayon](https://github.com/kimteayon) 提交
### 其他
- 🆕 更新站点整体文档。 [#1194](https://github.com/ant-design/x/pull/1194) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 更新样板间功能,新增'现代感'样板间。 [#1184](https://github.com/ant-design/x/pull/1184) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1195](https://github.com/ant-design/x/pull/1195) 由 [kimteayon](https://github.com/kimteayon) 提交、 [#1194](https://github.com/ant-design/x/pull/1194) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1170](https://github.com/ant-design/x/pull/1170) 由 [jinyang](https://github.com/jinyang) 提交、[#1186](https://github.com/ant-design/x/pull/1186) 由 [jinyang](https://github.com/jinyang) 提交、[#1192](https://github.com/ant-design/x/pull/1192) 由 [iamkun-2](https://github.com/iamkun-2) 提交、[#1193](https://github.com/ant-design/x/pull/1193) 由 [iamkun-2](https://github.com/iamkun-2) 提交、[#1197](https://github.com/ant-design/x/pull/1197) 由 [elrrrrrrr](https://github.com/elrrrrrrr) 提交、[#1199](https://github.com/ant-design/x/pull/1199) 由 [Div627](https://github.com/Div627) 提交
## 2.0.0-alpha.7
`2025-09-14`
### @ant-design/x
- Bubble
- 💄 修复默认 `white-space` 样式问题。[#1147](https://github.com/ant-design/x/pull/1147) 由 [kimteayon](https://github.com/kimteayon) 提交
- 💄 修复语义化缺失以及 `loading` 状态下在 Bubble.List 下高度错误问题。[#1162](https://github.com/ant-design/x/pull/1162) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复类型导出和文档引入错误问题。[#1160](https://github.com/ant-design/x/pull/1160) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 删除下线工具 `useXAgent` 和 `useXChat`,以及对应的文档引用删除或者替换为 `X SDK`。[#1148](https://github.com/ant-design/x/pull/1148) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 FileCard 组件 `status` 展示缺失问题。[#1156](https://github.com/ant-design/x/pull/1156) 由 [hy993658052](https://github.com/hy993658052) 提交
- 🐛 修复 Sender 组件开启文件粘贴功能时无法粘贴 Excel 单元格文本数据问题。[#1167](https://github.com/ant-design/x/pull/1167) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🆕 新增 Mermaid 插件操作功能。[#1135](https://github.com/ant-design/x/pull/1135) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 XMarkdown 流式效果。[#1135](https://github.com/ant-design/x/pull/1135) 由 [Div627](https://github.com/Div627) 提交
- 🆕 新增插件国际化和主题定制功能,以及文档升级。[#1135](https://github.com/ant-design/x/pull/1135) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 新增 XMarkdown 链接 `openLinksInNewTab` 配置、以及主题颜色调整。[#1164](https://github.com/ant-design/x/pull/1164) 由 [Div627](https://github.com/Div627) 提交
- 🐛 修复 XMarkdown 与文档 markdown 样式冲突问题。[#1161](https://github.com/ant-design/x/pull/1161) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-sdk
- 🛠 重构 useXChat 工具 `isRequesting` 属性,由方法升级为可监控变量。[#1168](https://github.com/ant-design/x/pull/1168) 由 [hylin](https://github.com/hylin) 提交
- 🆕 新增 useXChat 工具消息 `abort` 状态,同时修复 `requestFallback` 回调方法 `message` 参数错误以及删掉对错误状态的消息过滤。[#1171](https://github.com/ant-design/x/pull/1171) 由 [kimteayon](https://github.com/kimteayon) 提交
### 其他
- 📖 优化官网站点提升用户体验。[#1169](https://github.com/ant-design/x/pull/1169) 由 [hylin](https://github.com/hylin) 提交
- 📖 更新官网介绍、模型接入、百宝箱智能体接入、X SDK 等文档,以及样板间代码更新。[#1171](https://github.com/ant-design/x/pull/1171) 由 [kimteayon](https://github.com/kimteayon) 提交
## 2.0.0-alpha.6
`2025-08-28`
### @ant-design/x
- 🐛 修复 Sender 普通模式点击 `Enter` 选中文候选词时触发 `Submit` 的问题。[#1144](https://github.com/ant-design/x/pull/1144) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Sender 词槽模式 `submitType` 为 `shiftEnter` 时无法换行问题。[#1143](https://github.com/ant-design/x/pull/1143) 由 [kimteayon](https://github.com/kimteayon) 提交
- 💄 修复 ThoughtChain.Item `description` 内容过多换行后 `margin` 样式异常。由 [kimteayon](https://github.com/kimteayon) 提交
- 🛠 使用 `@ant-design/x-sdk` 重构样板间。[#1139](https://github.com/ant-design/x/pull/1139) 由 [hylin](https://github.com/hylin) 提交
- 🐛 修复 Bubble `prefix` 持续展示。[#1137](https://github.com/ant-design/x/pull/1137) 由 [anxLiang](https://github.com/anxLiang) 提交
- 📖 补充 Bubble.List 文档解释滚动容器问题。[#1133](https://github.com/ant-design/x/pull/1133) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🐛 修复 Attachment 组件上传图片未展示图片问题。[#1140](https://github.com/ant-design/x/pull/1140) 由 [hy993658052](https://github.com/hy993658052) 提交
- 🐛 修复 FileCard 语义化问题以及卡片大小展示问题。[#1130](https://github.com/ant-design/x/pull/1130) 由 [kimteayon](https://github.com/kimteayon) 提交
### 其他
- 📦 升级 father 配置。[#1125](https://github.com/ant-design/x/pull/1125) 由 [fireairforce](https://github.com/fireairforce) 提交
- 📖 优化官网站点提升用户体验。[#1142](https://github.com/ant-design/x/pull/1142) 由 [kimteayon](https://github.com/kimteayon) 提交
## 2.0.0-alpha.5
`2025-08-20`
### @ant-design/x
- 🆕 新增 Actions 子组件功能,Actions.Copy、Actions.Audio、Actions.Item。[#1121](https://github.com/ant-design/x/pull/1121) 由 [kimteayon](https://github.com/kimteayon) 提交
- Bubble
- 🆕 新增 `string content` 时渲染带换行符、制表符的功能。[#1127](https://github.com/ant-design/x/pull/1127) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🆕 新增语义化实现。[#1116](https://github.com/ant-design/x/pull/1116) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 优化样式和类型问题。[#1108](https://github.com/ant-design/x/pull/1108) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🆕 新增 Sender 组件语义化配置。[#1116](https://github.com/ant-design/x/pull/1116) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-sdk
- 🛠 整体优化 X SDK。[#1114](https://github.com/ant-design/x/pull/1114) 由 [hylin](https://github.com/hylin) 提交
### 其他
- 📖 使用 X SDK 重构样板间。[#1139](https://github.com/ant-design/x/pull/1139) 由 [hylin](https://github.com/hylin) 提交
- 📖 优化官网站点提升用户体验。[#1124](https://github.com/ant-design/x/pull/1124) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1123](https://github.com/ant-design/x/pull/1123) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🛠 发布链路优化。[#1115](https://github.com/ant-design/x/pull/1115) 由 [kimteayon](https://github.com/kimteayon) 提交
## 2.0.0-alpha.3
`2025-08-14`
### @ant-design/x-markdown
- 🛠 优化 version 逻辑以及配置、文档。[#1112](https://github.com/ant-design/x/pull/1112) 由 [Div627](https://github.com/Div627) 提交
## 2.0.0-alpha.1
`2025-08-12`
### @ant-design/x
- 🛠 重构升级组件 Bubble。[#1100](https://github.com/ant-design/x/pull/1100) 由 [anxLiang](https://github.com/anxLiang) 提交、[#1077](https://github.com/ant-design/x/pull/1077) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🛠 重构升级组件 Bubble.List。[#1077](https://github.com/ant-design/x/pull/1077) 由 [anxLiang](https://github.com/anxLiang) 提交
- 🐛 修复 Bubble 组件 `readOnly` 和 `loading` 逻辑不生效问题。[#1101](https://github.com/ant-design/x/pull/1101) 由 [kimteayon](https://github.com/kimteayon) 提交
### 其他
- 🛠 发布链路优化。[#1098](https://github.com/ant-design/x/pull/1098) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1009](https://github.com/ant-design/x/pull/1009) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1087](https://github.com/ant-design/x/pull/1087) 由 [kimteayon](https://github.com/kimteayon) 提交
## 2.0.0-alpha.0
`2025-08-05`
### @ant-design/x
- 🔥 新组件 FileCard。[#1094](https://github.com/ant-design/x/pull/1094) 由 [hy993658052](https://github.com/hy993658052) 提交
- 🔥 新组件 Notification。[#973](https://github.com/ant-design/x/pull/973) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🔥 新组件 Think。[#970](https://github.com/ant-design/x/pull/970) [#966](https://github.com/ant-design/x/pull/966) [#946](https://github.com/ant-design/x/pull/946) 由 [hy993658052](https://github.com/hy993658052) 提交
- 🛠 重构升级组件 Attachments。
- 🛠 重构升级组件 Actions。[#994](https://github.com/ant-design/x/pull/994) 由 [vanndxh](https://github.com/vanndxh) 提交
- 🛠 重构升级组件 Conversations。[#937](https://github.com/ant-design/x/pull/937) [#954](https://github.com/ant-design/x/pull/954) [#955](https://github.com/ant-design/x/pull/955) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🛠 重构升级组件 Sender。[#1073](https://github.com/ant-design/x/pull/1073) 由 [kimteayon](https://github.com/kimteayon) 提交、[#962](https://github.com/ant-design/x/pull/962) 由 [Chuck-Ray](https://github.com/Chuck-Ray) 提交
- 🛠 重构升级组件 ThoughtChain。[#985](https://github.com/ant-design/x/pull/985) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 全部组件 `Ref` 功能补全。[#1081](https://github.com/ant-design/x/pull/1081) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 XProvider 组件国际化逻辑接入。[#952](https://github.com/ant-design/x/pull/952) 由 [kimteayon](https://github.com/kimteayon) 提交
### @ant-design/x-markdown
- 🔥 新组件 XMarkdown。[#1060](https://github.com/ant-design/x/pull/1060) 由 [Div627](https://github.com/Div627) 提交、[#989](https://github.com/ant-design/x/pull/989) 由 [Div627](https://github.com/Div627) 提交
- 🔥 新插件 Latex。[#1060](https://github.com/ant-design/x/pull/1060) 由 [Div627](https://github.com/Div627) 提交、[#989](https://github.com/ant-design/x/pull/989) 由 [Div627](https://github.com/Div627) 提交
- 🔥 新插件 HighlightCode。[#1060](https://github.com/ant-design/x/pull/1060) 由 [Div627](https://github.com/Div627) 提交、[#989](https://github.com/ant-design/x/pull/989) 由 [Div627](https://github.com/Div627) 提交
- 🔥 新插件 Mermaid。[#1060](https://github.com/ant-design/x/pull/1060) 由 [Div627](https://github.com/Div627) 提交、[#989](https://github.com/ant-design/x/pull/989) 由 [Div627](https://github.com/Div627) 提交
### @ant-design/x-sdk
- 🔥 新工具 useXChat。[#1098](https://github.com/ant-design/x/pull/1098) 由 [hylin](https://github.com/hylin) 提交
- 🔥 新工具 useXConversations。[#1098](https://github.com/ant-design/x/pull/1098) 由 [hylin](https://github.com/hylin) 提交
- 🔥 新工具 Chat Provider。[#1098](https://github.com/ant-design/x/pull/1098) 由 [hylin](https://github.com/hylin) 提交
- 🔥 新工具 XRequest。[#1098](https://github.com/ant-design/x/pull/1098) 由 [hylin](https://github.com/hylin) 提交
- 🔥 新工具 XStream。[#1098](https://github.com/ant-design/x/pull/1098) 由 [hylin](https://github.com/hylin) 提交
### 其他
- 🛠 整体框架升级为 Monorepo。[#823](https://github.com/ant-design/x/pull/823) 由 [elrrrrrrr](https://github.com/elrrrrrrr) 提交
- 🛠 整体组件升级 Ant Design V6。[#1012](https://github.com/ant-design/x/pull/1012) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🛠 Ant Design X 发布逻辑升级调整。[#1098](https://github.com/ant-design/x/pull/1098) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1009](https://github.com/ant-design/x/pull/1009) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#1083](https://github.com/ant-design/x/pull/1083) 由 [kimteayon](https://github.com/kimteayon) 提交、[#1001](https://github.com/ant-design/x/pull/1001) 由 [elrrrrrrr](https://github.com/elrrrrrrr) 提交
## 1.6.1
`2025-09-12`
- 🐛 修复 ThoughtChain 组件 `title` 传入 `ReactNode` 时折叠标题无法显示问题。[#1172](https://github.com/ant-design/x/pull/1172) 由 [IsDyh01](https://github.com/IsDyh01) 提交
- 🐛 修复 Sender 组件 `LoadingButton` 传入 `icon` 属性时同时显示两个图标问题。[#1145](https://github.com/ant-design/x/pull/1145) 由 [IsDyh01](https://github.com/IsDyh01) 提交
- 🐛 修复 Sender 组件 `content` 语义化缺失问题。[#703](https://github.com/ant-design/x/pull/703) 由 [HomyeeKing](https://github.com/HomyeeKing) 提交
- 🐛 移除 Bubble 组件打字效果公共前缀逻辑中的冗余条件判断。[#1091](https://github.com/ant-design/x/pull/1091) 由 [AqingCyan](https://github.com/AqingCyan) 提交
- 🐛 修复 useXChat `updating` 状态缺失问题。[#833](https://github.com/ant-design/x/pull/833) 由 [wzc520pyfm](https://github.com/wzc520pyfm) 提交
- 🐛 修复 Suggestion 组件 `useActive` 中 items 为空数组导致的异常。[#824](https://github.com/ant-design/x/pull/824) 由 [LengYXin](https://github.com/LengYXin) 提交
- 📖 优化官网站点提升用户体验。[#960](https://github.com/ant-design/x/pull/960) 由 [wzc520pyfm](https://github.com/wzc520pyfm) 提交、[#1048](https://github.com/ant-design/x/pull/1048) 由 [wzc520pyfm](https://github.com/wzc520pyfm) 提交、[#1118](https://github.com/ant-design/x/pull/1118) 由 [afc163](https://github.com/afc163) 提交、[#1122](https://github.com/ant-design/x/pull/1122) 由 [fireairforce](https://github.com/fireairforce) 提交、[#1120](https://github.com/ant-design/x/pull/1120) 由 [IsDyh01](https://github.com/IsDyh01) 提交
## 1.6.0
`2025-07-30`
- 🆕 Attachments 组件 `FileCard` 新增图标和类型的配置能力。[#1006](https://github.com/ant-design/x/pull/1006) 由 [kieranwv](https://github.com/kieranwv) 提交
- 📖 新增百宝箱智能体接入文档和样板间。[#1063](https://github.com/ant-design/x/pull/1063) 由 [iamkun-2](https://github.com/iamkun-2) 提交
- 📖 优化官网站点提升用户体验。[#1054](https://github.com/ant-design/x/pull/1054) 由 [hylin](https://github.com/hylin) 提交、[#1056](https://github.com/ant-design/x/pull/1056) 由 [hylin](https://github.com/hylin) 提交
## 1.5.0
`2025-07-16`
- 🆕 补充 Bubble 组件对滚动事件 `onScroll` 的监听。[#1021](https://github.com/ant-design/x/pull/1021) 由 [QdabuliuQ](https://github.com/QdabuliuQ) 提交
- 🐛 移除 Bubble 重复的 TS 类型定义。[#1032](https://github.com/ant-design/x/pull/1032) 由 [wzc520pyfm](https://github.com/wzc520pyfm) 提交
- 🐛 修复 Conversations 组件点击禁用的 `menu` 导致触发 `onActiveChange` 的问题。[#1024](https://github.com/ant-design/x/pull/1024) 由 [QdabuliuQ](https://github.com/QdabuliuQ) 提交
- 🐛 修复 Attachments 组件 `FileList` 语义化配置。[#1017](https://github.com/ant-design/x/pull/1017) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 补充 Actions 组件 html 配置。[#995](https://github.com/ant-design/x/pull/995) 由 [vanndxh](https://github.com/vanndxh) 提交
- 🐛 修复 Conversations label 标签展示问题,同时补充语义化配置。[#898](https://github.com/ant-design/x/pull/898) 由 [yuanliu147](https://github.com/yuanliu147) 提交
- 📖 优化官网站点提升用户体验。[#940](https://github.com/ant-design/x/pull/940) 由 [coding-ice](https://github.com/coding-ice) 提交、[#969](https://github.com/ant-design/x/pull/969) 由 [afc163](https://github.com/afc163) 提交、[#968](https://github.com/ant-design/x/pull/968) 由 [afc163](https://github.com/afc163) 提交、[#1019](https://github.com/ant-design/x/pull/1019) 由 [hylin](https://github.com/hylin) 提交、[#1036](https://github.com/ant-design/x/pull/1036) 由 [kimteayon](https://github.com/kimteayon) 提交
## 1.4.0
`2025-05-30`
- 🔥 新组件 操作列表 - Actions。[#768](https://github.com/ant-design/x/pull/768) 由 [vanndxh](https://github.com/vanndxh) 提交
- 🐛 修复 Bubble.List `footer` 和 `header` 无法获取 key 的问题。[#876](https://github.com/ant-design/x/pull/876) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Conversations 列表标题溢出截断失效问题。[#877](https://github.com/ant-design/x/pull/877) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#816](https://github.com/ant-design/x/pull/816) 由 [Rain120](https://github.com/Rain120) 提交、[#880](https://github.com/ant-design/x/pull/880) 由 [kimteayon](https://github.com/kimteayon) 提交
## 1.3.0
`2025-05-21`
- 📖 新增 Conversation 类型导出。[#258](https://github.com/ant-design/x/pull/258) 由 [ONLY-yours](https://github.com/ONLY-yours) 提交
- 💄 修复 Prompts 滚动条始终显示问题。[#785](https://github.com/ant-design/x/pull/785) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Suggestion 警告使用 antd 废弃 API `onDropdownVisibleChange` 的问题。[#827](https://github.com/ant-design/x/pull/827) 由 [zombieJ](https://github.com/zombieJ) 提交
- 🆕 扩展 Bubble `content` 到 `footer` 和 `header` 的方法实现参数,同时补充 Demo 实现。[#683](https://github.com/ant-design/x/pull/683) 由 [L-Hknu](https://github.com/L-Hknu) 和 [kimteayon](https://github.com/kimteayon) 提交
- 📖 修复 Api Key 在站点露出的安全问题。[#840](https://github.com/ant-design/x/pull/840) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化官网站点提升用户体验。[#783](https://github.com/ant-design/x/pull/783) 由 [kimteayon](https://github.com/kimteayon) 提交、[#229](https://github.com/ant-design/x/pull/229) 由 [afc163](https://github.com/afc163) 提交、[#835](https://github.com/ant-design/x/pull/835) 由 [kimteayon](https://github.com/kimteayon) 、[#814](https://github.com/ant-design/x/pull/814) 由 [wzc520pyfm](https://github.com/wzc520pyfm) 提交
## 1.2.0
`2025-04-25`
- 🐛 删除 Conversations 溢出省略逻辑修复 `tooltip` 展示错误的问题。[#776](https://github.com/ant-design/x/pull/776) 由 [afc163](https://github.com/afc163) 提交
- 🐛 修复 Attachments `image` 卡片样式问题。[#751](https://github.com/ant-design/x/pull/751) 由 [wzc520pyfm](https://github.com/wzc520pyfm) 提交
- 🐛 修复 ThoughtChain 受控问题。[#752](https://github.com/ant-design/x/pull/752) 由 [Youzi2233](https://github.com/Youzi2233) 提交
- XRequest
- 🆕 XRequestCallbacks 新增 `onStream` 回调,可对流监听和终止操作。[#711](https://github.com/ant-design/x/pull/711) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 XRequestOptions 变更不生效问题,并新增示例。[#736](https://github.com/ant-design/x/pull/736) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 新增模型接入示例。[#725](https://github.com/ant-design/x/pull/725) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 优化 API 方法参数命名不准确问题。[#736](https://github.com/ant-design/x/pull/736) 由 [kimteayon](https://github.com/kimteayon) 提交
- useXAgent
- 🆕 RequestFn 新增 `onStream` 回调,可对流监听和终止操作。[#711](https://github.com/ant-design/x/pull/711) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 RequestFn 新增 `transformStream` 转换函数,用于处理流数据。[#725](https://github.com/ant-design/x/pull/725) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 XAgentConfigPreset 变更不生效问题,并新增示例。[#736](https://github.com/ant-design/x/pull/736) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 RequestFn `onSuccess` 回调类型错误问题,同时更新对应示例。[#725](https://github.com/ant-design/x/pull/725) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 新增模型接入、自定义入参、变更配置示例。[#725](https://github.com/ant-design/x/pull/725) 由 [kimteayon](https://github.com/kimteayon) 提交、[#711](https://github.com/ant-design/x/pull/711) 由 [kimteayon](https://github.com/kimteayon) 提交
- useXChat
- 🆕 XChatConfig 新增 Input 和 Output 泛型类型。[#725](https://github.com/ant-design/x/pull/725) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 XChatConfig 新增 `transformMessage` 转换函数,可在更新数据时对 `messages` 做转换,同时会更新到 `messages`。[#711](https://github.com/ant-design/x/pull/711) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 XChatConfig 新增 `transformStream` 转换函数,用于处理流数据。[#711](https://github.com/ant-design/x/pull/711) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 XChatConfig 新增 `resolveAbortController` 回调函数,可获得 `AbortController` 控制器,用于控制流状态。[#711](https://github.com/ant-design/x/pull/711) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 新增模型接入示例,删除错误的终止流示例。[#711](https://github.com/ant-design/x/pull/711) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Sender `header` 圆角样式溢出问题。[#732](https://github.com/ant-design/x/pull/732) 由 [Bao0630](https://github.com/Bao0630) 提交
- 📖 新增助手式样板间。[#657](https://github.com/ant-design/x/pull/657) 由 [vanndxh](https://github.com/vanndxh) 提交
- 📖 重构独立式样板间。[#753](https://github.com/ant-design/x/pull/753) 由 [vanndxh](https://github.com/vanndxh) 提交
- 📖 优化官网站点提升用户体验。[#730](https://github.com/ant-design/x/pull/730) 由 [afc163](https://github.com/afc163) 提交、[#758](https://github.com/ant-design/x/pull/758) 由 [coding-ice](https://github.com/coding-ice) 提交、 [#761](https://github.com/ant-design/x/pull/761) 由 [ONLY-yours](https://github.com/ONLY-yours) 提交
## 1.1.1
`2025-04-14`
- Bubble.List
- 💄 优化 Bubble.List 更新时减少不必要的刷新。[#479](https://github.com/ant-design/x/pull/479) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🐛 修复 Bubble.List 暗黑主题下滚动条样式不兼容问题。[#727](https://github.com/ant-design/x/pull/727) 由 [kimteayon](https://github.com/kimteayon) 提交
- Conversation
- 🐛 修复 Conversation 内 ul 和 li 的样式问题。[#726](https://github.com/ant-design/x/pull/726) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 新增 `menu` 的 `getPopupContainer` 的实现。[#698](https://github.com/ant-design/x/pull/698) 由 [yuxuan-ctrl](https://github.com/yuxuan-ctrl) 提交
- 🐛 修复 ThoughtChain 折叠面板无法展开问题。[#720](https://github.com/ant-design/x/pull/720) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🐛 修复 Attachments 图片展示样式问题。[#708](https://github.com/ant-design/x/pull/708) 由 [hy993658052](https://github.com/hy993658052) 提交
- 💄 优化 Sender,使自定义 Actions 的 `disabled` 属性受控。[#666](https://github.com/ant-design/x/pull/666) 由 [afc163](https://github.com/afc163) 提交
- 📖 优化官网站点提升用户体验。[#680](https://github.com/ant-design/x/pull/680) 由 [wzc520pyfm](https://github.com/wzc520pyfm) 提交、[#699](https://github.com/ant-design/x/pull/699) 由 [afc163](https://github.com/afc163) 提交、[#716](https://github.com/ant-design/x/pull/716) 由 [afc163](https://github.com/afc163) 提交、[#686](https://github.com/ant-design/x/pull/686) 由 [afc163](https://github.com/afc163) 提交、[#728](https://github.com/ant-design/x/pull/728) 由 [kimteayon](https://github.com/kimteayon) 提交
## 1.1.0
`2025-03-28`
- Sender
- 🆕 新增 `footer` 支持自定义底部内容。[#654](https://github.com/ant-design/x/pull/654) 由 [kimteayon](https://github.com/kimteayon) 提交
- 🆕 扩展 `autoSize` 支持配置内容高度。[#637](https://github.com/ant-design/x/pull/637) 由 [Zhang-Wei-666](https://github.com/Zhang-Wei-666) 提交
- 📖 补充 `onFocus` 和 `onBlur` 类型声明。[#625](https://github.com/ant-design/x/pull/625) 由 [aojunhao123](https://github.com/aojunhao123) 提交
- 🆕 扩展 Conversations 组件 `menu.trigger` 支持自定义菜单触发器。[#630](https://github.com/ant-design/x/pull/630) 由 [kimteayon](https://github.com/kimteayon) 提交
- Attachments
- 🆕 扩展 `ImageProps` 支持自定义图像展示配置。[#613](https://github.com/ant-design/x/pull/613) 由 [hy993658052](https://github.com/hy993658052) 提交
- 📖 补充 Attachments 组件 `onRemove` API 文档。[#608](https://github.com/ant-design/x/pull/608) 由 [kimteayon](https://github.com/kimteayon) 提交
- 📖 补充 `GPT-Vis` 渲染图表示例。[#603](https://github.com/ant-design/x/pull/603) 由 [lvisei](https://github.com/lvisei) 提交
- 📦 优化 Chat Design X `peerDependencies`。[#611](https://github.com/ant-design/x/pull/611) 由 [pokerface9830](https://github.com/pokerface9830) 提交
- 📖 优化官网站点提升用户体验。[#626](https://github.com/ant-design/x/pull/626) 由 [aojunhao123](https://github.com/aojunhao123) 提交、[#648](https://github.com/ant-design/x/pull/648) 由 [kimteayon](https://github.com/kimteayon) 提交、[#659](https://github.com/ant-design/x/pull/659) 由 [afc163](https://github.com/afc163) 提交、[#667](https://github.com/ant-design/x/pull/667) 由 [jin19980928](https://github.com/jin19980928) 提交
## 1.0.6
`2025-03-14`
- 🆕 扩展 `Sender` 文件粘贴可处理多个文件。[#505](https://github.com/ant-design/x/pull/500) 由 [ztkuaikuai](https://github.com/ztkuaikuai) 提交
- 🆕 扩展 `BubbleList` 角色定义功能。[#500](https://github.com/ant-design/x/pull/500) 由 [chenluda](https://github.com/chenluda) 提交
- 🐛 修复 `Attachments` 组件多文件横向滚动条展示。[#556](https://github.com/ant-design/x/pull/556) 由 [onefeng123](https://github.com/onefeng123) 提交
- 🐛 修复 `Attachments` 组件 onRemove 不生效问题。[#555](https://github.com/ant-design/x/pull/555) 由 [edison-tianhe](https://github.com/edison-tianhe) 提交
- 🐛 修复 `Sender` 组件 actions 缺少 SpeechButton 组件的问题。[#549](https://github.com/ant-design/x/pull/549) 由 [zombieJ](https://github.com/zombieJ) 提交
- 🐛 修复 `Attachments` 组件文件初始化展示问题。[#524](https://github.com/ant-design/x/pull/524) 由 [ztkuaikuai](https://github.com/ztkuaikuai) 提交
- 🐛 修复 `Conversations` 组件滚动条问题。[#485](https://github.com/ant-design/x/pull/485) 由 [LofiSu](https://github.com/LofiSu) 提交
- 📖 优化 `Bubble` 组件 typing 减少不必要的渲染。[#477](https://github.com/ant-design/x/pull/477) 由 [kxcy001123](https://github.com/kxcy001123) 提交
- 📦 优化 Chat Design X 构建 [#578](https://github.com/ant-design/x/pull/578),[#584](https://github.com/ant-design/x/pull/584) 由 [kimteayon](https://github.com/kimteayon) 提交、 [#578](https://github.com/ant-design/x/pull/578) 由 [kimteayon](https://github.com/kimteayon) 提交、[#587](https://github.com/ant-design/x/pull/587) 由 [afc163](https://github.com/afc163) 提交
- 📖 优化官网站点提升用户体验。[#484](https://github.com/ant-design/x/pull/484) 由 [ztkuaikuai](https://github.com/ztkuaikuai) 提交、 [#495](https://github.com/ant-design/x/pull/495) 由 [ztkuaikuai](https://github.com/ztkuaikuai) 提交、 [#522](https://github.com/ant-design/x/pull/522) 由 [liangchaofei](https://github.com/liangchaofei) 提交、[#537](https://github.com/ant-design/x/pull/537) 由 [wzc520pyfm](https://github.com/wzc520pyfm) 提交、 [#553](https://github.com/ant-design/x/pull/553) 由 [PeachScript](https://github.com/PeachScript) 提交、 [#578](https://github.com/ant-design/x/pull/578) 由 [kimteayon](https://github.com/kimteayon) 提交 、 [#585](https://github.com/ant-design/x/pull/585) 由 [MaricoHan](https://github.com/MaricoHan) 提交
## 1.0.5
`2025-01-13`
- 🐛 修复 `Attachment` 组件移除图标的样式问题。[#460](https://github.com/ant-design/x/pull/460) 由 [Rain120](https://github.com/Rain120) 提交
- 🛠 重构 `BubbleProps`,支持 `ContentType` 类型参数。[#403](https://github.com/ant-design/x/pull/403) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🛠 开发环境和网站支持 React 19。[#432](https://github.com/ant-design/x/pull/432) 由 [YumoImer](https://github.com/YumoImer) 提交
- 📖 优化官网站点提升用户体验。[#456](https://github.com/ant-design/x/pull/456), [#446](https://github.com/ant-design/x/pull/446), [#448](https://github.com/ant-design/x/pull/448), [#444](https://github.com/ant-design/x/pull/444), [#414](https://github.com/ant-design/x/pull/414), [#406](https://github.com/ant-design/x/pull/406), [#404](https://github.com/ant-design/x/pull/404) 由 [wzc520pyfm](https://github.com/wzc520pyfm), [YumoImer](https://github.com/YumoImer), [Rain120](https://github.com/Rain120), [afc163](https://github.com/afc163) 提交
## 1.0.4
`2024-12-25`
- 🆕 扩展 `XStream` 对取消功能的支持。[#319](https://github.com/ant-design/x/pull/319) 由 [ppbl](https://github.com/ppbl) 提交
- 🆕 扩展 `Bubble` 对 `typing.suffix` 打字后缀的支持。[#316](https://github.com/ant-design/x/pull/316) 由 [BQXBQX](https://github.com/BQXBQX) 提交
- 🆕 扩展 `Sender` 组件 `onChange` 对 `event` 事件参数的支持。[#362](https://github.com/ant-design/x/pull/362) 由 [defaultjacky](https://github.com/defaultjacky) 提交
- 🆕 扩展 `Sender` 组件 `ref` 对 `focus`、`blur` 等焦点控制能力的支持。[#397](https://github.com/ant-design/x/pull/397) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🐛 修复 `ThoughtChain` 在非 cssVar 下的样式问题。[#373](https://github.com/ant-design/x/pull/373) 由 [YumoImer](https://github.com/YumoImer) 提交
- 📖 添加 `Petercat` 助理功能。[#375](https://github.com/ant-design/x/pull/375) 由 [xingwanying](https://github.com/xingwanying) 提交
- 📖 优化官网站点提升用户体验。[#389](https://github.com/ant-design/x/pull/389)、[#377](https://github.com/ant-design/x/pull/377)、[#364](https://github.com/ant-design/x/pull/364)、[#368](https://github.com/ant-design/x/pull/368) 由 [afc163](https://github.com/afc163)、[YumoImer](https://github.com/YumoImer) 提交
## 1.0.3
`2024-12-16`
- 💄 优化 `Bubble` 设置 `placement: 'end'` 后的样式。[#314](https://github.com/ant-design/x/pull/314) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🐛 修复 `Bubble.List` 设置 `autoScroll` 后偶现无法触发自动滚动的问题。[#336](https://github.com/ant-design/x/pull/336) 由 [anzhou99Ru](https://github.com/anzhou99Ru) 提交
- 📖 优化官网站点提升用户体验。[#343](https://github.com/ant-design/x/pull/343)、[#334](https://github.com/ant-design/x/pull/334)、[#315](https://github.com/ant-design/x/pull/315)、[#331](https://github.com/ant-design/x/pull/331) 由 [afc163](https://github.com/afc163)、[YumoImer](https://github.com/YumoImer)、[Wxh16144](https://github.com/Wxh16144) 提交
- 🛠 修复 `pnpm lint` 时的错误。[#313](https://github.com/ant-design/x/pull/313) 由 [BQXBQX](https://github.com/BQXBQX) 提交
## 1.0.2
`2024-12-04`
- 🛠 优化 `XRequest` 支持对自定义协议解析。[#293](https://github.com/ant-design/x/pull/293) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🐛 修复 `Attachment` 前后预览按钮无法正常显隐的问题。[#295](https://github.com/ant-design/x/pull/295) 由 [anzhou99](https://github.com/anzhou99) 提交
- 🐛 修复 `useXChat` 对同一条消息重复触发 `onUpdate` 的问题。[#298](https://github.com/ant-design/x/pull/298) 由 [YumoImer](https://github.com/YumoImer) 提交
- 📖 添加 `Bubble` 配合 `GPT-Vis` 的使用演示文档。[#288](https://github.com/ant-design/x/pull/288) 由 [lvisei](https://github.com/lvisei) 提交
- 📦 更新浏览器目标配置减少打包体积。[#282](https://github.com/ant-design/x/pull/282) 由 [afc163](https://github.com/afc163) 提交
- 🛠 修复运行 `pnpm run prestart` 的错误。[#287](https://github.com/ant-design/x/pull/287) 由 [long36708](https://github.com/long36708) 提交
## 1.0.1
`2024-11-29`
- 🛠 优化 `useXAgent` 和 `XStream` 的 TS 类型。[#272](https://github.com/ant-design/x/pull/272) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🛠 调整 `agent` 参数设为可选,以支持仅使用 `useXChat` 的数据管理功能。[#271](https://github.com/ant-design/x/pull/271) 由 [YumoImer](https://github.com/YumoImer) 提交
- 💄 调整 `Conversations` 样式基于 RICH 设计规范。[#242](https://github.com/ant-design/x/pull/242) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🛠 修复使用 `pnpm` 启动项目时幽灵依赖导致无法启动的问题。[#223](https://github.com/ant-design/x/pull/223) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🌈 独立式样板间支持附件上传功能演示。[#250](https://github.com/ant-design/x/pull/250)、[#265](https://github.com/ant-design/x/pull/265) 由 [kelvinelove](https://github.com/kelvinelove) 提交
- 📖 修复缺失的贡献者信息。[#212](https://github.com/ant-design/x/pull/212) 由 [afc163](https://github.com/afc163) 提交
- 📖 优化官网站点提升用户体验。[#277](https://github.com/ant-design/x/pull/277)、[#264](https://github.com/ant-design/x/pull/264)、[#263](https://github.com/ant-design/x/pull/263)、[#262](https://github.com/ant-design/x/pull/262)、[#261](https://github.com/ant-design/x/pull/261)、[#241](https://github.com/ant-design/x/pull/241)、[#246](https://github.com/ant-design/x/pull/246)、[#210](https://github.com/ant-design/x/pull/210)、[#211](https://github.com/ant-design/x/pull/211) 由 [YumoImer](https://github.com/YumoImer)、[afc163](https://github.com/afc163)、[Rain-1214](https://github.com/Rain-1214)、[kelvinelove](https://github.com/kelvinelove)、[tabzzz1](https://github.com/tabzzz1) 提交
- 📦 更新浏览器目标减少打包体积。[#234](https://github.com/ant-design/x/pull/234) 由 [afc163](https://github.com/afc163) 提交
## 1.0.0
`2024-11-22`
🎉 我们非常开心的宣布 [Ant Design X](https://x.ant.design) 1.0.0 版本正式发布啦~
- 🌈 **源自企业级 AI 产品的最佳实践**:基于 RICH 交互范式,提供卓越的 AI 交互体验
- 🧩 **灵活多样的原子组件**:覆盖绝大部分 AI 对话场景,助力快速构建个性化 AI 交互页面
- ⚡ **开箱即用的模型对接能力**:轻松对接符合 OpenAI 标准的模型推理服务
- 🔄 **高效管理对话数据流**:提供好用的数据流管理功能,让开发更高效
- 📦 **丰富的样板间支持**:提供多种模板,快速启动 LUI 应用开发
- 🛡 **TypeScript 全覆盖**:采用 TypeScript 开发,提供完整类型支持,提升开发体验与可靠性
- 🎨 **深度主题定制能力**:支持细粒度的样式调整,满足各种场景的个性化需求

## 1.0.0-alpha.12
`2024-11-07`
- 🔥 Sender 支持 `onPasteFile` 事件与 Attachments 支持 `ref.upload` 手动上传文件。[#184](https://github.com/ant-design/x/pull/184) 由 [zombieJ](https://github.com/zombieJ) 提交
- 🔥 Sender `allowSpeech` 支持受控使用三方语音 SDK。 [#187](https://github.com/ant-design/x/pull/187) 由 [zombieJ](https://github.com/zombieJ) 提交
## 1.0.0-alpha.11
`2024-11-06`
- 🔥 新组件 欢迎 - Welcome。 [#179](https://github.com/ant-design/x/pull/179) 由 [zombieJ](https://github.com/zombieJ) 提交
- 🔥 Prompts 支持嵌套层级展示。[#181](https://github.com/ant-design/x/pull/181)由 [zombieJ](https://github.com/zombieJ) 提交
- 🔥 Attachments 支持 Attachments.FileCard 子组件。[#182](https://github.com/ant-design/x/pull/182) 由 [zombieJ](https://github.com/zombieJ) 提交
## 1.0.0-alpha.10
`2024-11-04`
- 🐛 修复 Attachments 组件使用拖动上传时无法触发上传请求的问题。[#178](https://github.com/ant-design/x/pull/178) 由 [YumoImer](https://github.com/YumoImer) 提交
## 1.0.0-alpha.9
`2024-11-01`
- 🐛 修复 Attachments 组件内的代码逻辑问题。[#174](https://github.com/ant-design/x/pull/174) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🐛 修复 Sender.Header 内不可以聚焦的问题。[#175](https://github.com/ant-design/x/pull/175) 由[zombieJ](https://github.com/zombieJ) 提交
## 1.0.0-alpha.7
`2024-10-31`
- 🐛 修复 Attachments 组件第一次上传时无法触发上传请求的问题。 [#172](https://github.com/ant-design/x/pull/172) 由 [YumoImer](https://github.com/YumoImer) 提交
## 1.0.0-alpha.6
`2024-10-25`
- 🔥 新组件 附件 - `Attachments`。[#168](https://github.com/ant-design/x/pull/168) 由 [zombieJ](https://github.com/zombieJ) [#168](https://github.com/ant-design/x/pull/168) 提交
- 🔥 新工具 流 - `XStream`。[#138](https://github.com/ant-design/x/pull/138) 由 [YumoImer](https://github.com/YumoImer) 提交
- 🔥 新工具 请求 - `XRequest`。[#138](https://github.com/ant-design/x/pull/138) 由 [YumoImer](https://github.com/YumoImer) 提交
## 1.0.0-alpha.5
`2024-10-23`
- 🆕 Bubble 支持 `loadingRender` 以自定义加载状态。[#165](https://github.com/ant-design/x/pull/165)
- 🐛 修复不包裹 XProvider 时,组件样式丢失的问题。[#163](https://github.com/ant-design/x/pull/163)
## 1.0.0-alpha.4
`2024-10-17`
- Sender
- 🆕 Sender 支持 `speech` 语音功能。[#154](https://github.com/ant-design/x/pull/154) 由 [zombieJ](https://github.com/zombieJ) 提交
- 🆕 Sender 支持 `Sender.Header`。[#156](https://github.com/ant-design/x/pull/156) 由 [zombieJ](https://github.com/zombieJ) 提交
- 🆕 Sender 样式调整。[#151](https://github.com/ant-design/x/pull/151) 由 [zombieJ](https://github.com/zombieJ) 提交
- 📖 更新文档页面下的组配置。[#155](https://github.com/ant-design/x/pull/155) 由 [YumoImer](https://github.com/YumoImer) 提交
- 📖 调整示例切换按钮样式。[#146](https://github.com/ant-design/x/pull/146) 由 [afc163](https://github.com/afc163) 提交
- 📖 更新 README.md。[#142](https://github.com/ant-design/x/pull/142) 由 [afc163](https://github.com/afc163) 提交
## 1.0.0-alpha.3
`2024-10-10`
- Bubble
- 🆕 Bubble 新增 `variant` 变体支持,由 [zombieJ](https://github.com/zombieJ) 完成 [#140](https://github.com/ant-design/x/pull/140)
- 🆕 Bubble 新增 `shape` 形状支持,由 [zombieJ](https://github.com/zombieJ) 完成 [#144](https://github.com/ant-design/x/pull/144)
- 🆕 Bubble 新增 `header` 和 `footer` 支持自定义头部与底部内容并添加对应语义化 `className`,由 [zombieJ](https://github.com/zombieJ) 完成 [#147](https://github.com/ant-design/x/pull/147)
## 1.0.0-alpha.2
`2024-09-27`
- 🔥 新增 `XProvider` 全局化配置组件,由 [YumoImer](https://github.com/YumoImer) 完成 [#127](https://github.com/ant-design/x/pull/127)
- 🔥 新增 运行时钩子 `useXChat` 数据管理,由 [zombieJ](https://github.com/zombieJ) 完成 [#125](https://github.com/ant-design/x/pull/125)
- 🔥 新增 运行时钩子 `useXAgent` 模型调度,由 [zombieJ](https://github.com/zombieJ) 完成 [#125](https://github.com/ant-design/x/pull/125)
- 🆕 `ThoughtChain` 思维链组件支持 `size` 属性,由 [YumoImer](https://github.com/YumoImer) 完成 [#123](https://github.com/ant-design/x/pull/123)
- 🛠 更新 `.lintstagedrc.json`。 由 [afc163](https://github.com/afc163) 完成 [#128](https://github.com/ant-design/x/pull/128)
- 🛠 更新依赖 `cheerio` 至 `v1.0.0`。 由 [afc163](https://github.com/afc163) 完成 [#121](https://github.com/ant-design/x/pull/121)
## 1.0.0-alpha.1
`2024-09-10`
### 🚀 新特性
- 🔥 新增:`Suggestion` 建议组件,由 [ONLY-yours](https://github.com/ONLY-yours) 完成 [#87](https://github.com/ant-design/x/pull/87)
### 🐛 修复
- 🐛 修复:更改 `Sender` 的 `restProps` 类型,由 [ONLY-yours](https://github.com/ONLY-yours) 完成 [#101](https://github.com/ant-design/x/pull/101)
- 🛠 修复:`bun install` 问题,由 [afc163](https://github.com/afc163) 完成 [#111](https://github.com/ant-design/x/pull/111)
### 🛠 重构
- 🛠 重构:添加层级支持,由 [zombieJ](https://github.com/zombieJ) 完成 [#118](https://github.com/ant-design/x/pull/118)
- 🛠 重构:加速工作流,由 [afc163](https://github.com/afc163) 完成 [#119](https://github.com/ant-design/x/pull/119)
- 🛠 重构:升级开发依赖的 5 个更新,由 [dependabot](https://github.com/dependabot) 完成 [#120](https://github.com/ant-design/x/pull/120)
- 🛠 重构:清理 `README.md`,由 [afc163](https://github.com/afc163) 完成 [#102](https://github.com/ant-design/x/pull/102)
- 🛠 重构:添加 issue 模板,由 [afc163](https://github.com/afc163) 完成 [#103](https://github.com/ant-design/x/pull/103)
- 🛠 重构:添加 `bun.lockb`,由 [afc163](https://github.com/afc163) 完成 [#108](https://github.com/ant-design/x/pull/108)
- 🛠 删除 `index-style-only.js`,由 [afc163](https://github.com/afc163) 完成 [#106](https://github.com/ant-design/x/pull/106)
- 🛠 重构:更新 `main.yml`,由 [afc163](https://github.com/afc163) 完成 [#105](https://github.com/ant-design/x/pull/105)
- 🛠 重构:更新 `package.json`,由 [afc163](https://github.com/afc163) 完成 [#110](https://github.com/ant-design/x/pull/110)
### 📖 文档
- 📖 文档:更新 `README.md`,由 [afc163](https://github.com/afc163) 完成 [#104](https://github.com/ant-design/x/pull/104)
- 📖 文档:更新 `codecov` 徽章,由 [afc163](https://github.com/afc163) 完成 [#112](https://github.com/ant-design/x/pull/112)
## 1.0.0-alpha.0
`2024-09-05`
- 🔥 新组件 Bubble。 [#19](https://github.com/ant-design/x/pull/19) [li-jia-nan](https://github.com/li-jia-nan)
- 🔥 Bubble 支持方向 [#52](https://github.com/ant-design/x/pull/52) [li-jia-nan](https://github.com/li-jia-nan)
- 🔥 新组件 Bubble.List。 [#57](https://github.com/ant-design/x/pull/57) [zombieJ](https://github.com/zombieJ)
- 🔥 新组件 Conversations。 [#48](https://github.com/ant-design/x/pull/48) [YumoImer](https://github.com/YumoImer)
- 🔥 新组件 Prompts。 [#55](https://github.com/ant-design/x/pull/55) [YumoImer](https://github.com/YumoImer)
- 🔥 新组件 Sender。 [#46](https://github.com/ant-design/x/pull/46) [ONLY-yours](https://github.com/ONLY-yours)
- 🔥 新组件 ThoughtChain。 [#86](https://github.com/ant-design/x/pull/86) [YumoImer](https://github.com/YumoImer)
- 📦 使用 `father` 构建。 [#84](https://github.com/ant-design/x/pull/84) [zombieJ](https://github.com/zombieJ)
- 🛠 修复使用 `antd` 的 es 或 lib 包时 ThemeContext 实例不一致的问题。 [#88](https://github.com/ant-design/x/pull/88) [YumoImer](https://github.com/YumoImer)
- 🛠 重构:API 命名规范 [#73](https://github.com/ant-design/x/pull/73) [zombieJ](https://github.com/zombieJ)
- 🛠 杂项:CI、Github Actions、发布
- 🛠 [#59](https://github.com/ant-design/x/pull/59) [zombieJ](https://github.com/zombieJ)
- 🛠 [#62](https://github.com/ant-design/x/pull/62) [zombieJ](https://github.com/zombieJ)
- 🛠 [#71](https://github.com/ant-design/x/pull/71) [ONLY-yours](https://github.com/ONLY-yours)
- 🛠 [#72](https://github.com/ant-design/x/pull/72) [YumoImer](https://github.com/YumoImer)
- 🛠 [#98](https://github.com/ant-design/x/pull/98) [YumoImer](https://github.com/YumoImer)
- 📖 更新 README.md
- 📖 [#81](https://github.com/ant-design/x/pull/81) [zombieJ](https://github.com/zombieJ)
- 📖 [#82](https://github.com/ant-design/x/pull/82) [zombieJ](https://github.com/zombieJ)
- 📖 [#61](https://github.com/ant-design/x/pull/61) [afc163](https://github.com/afc163)
## 0.0.0-alpha.0
`2024-05-10`
- MISC: 项目初始化。
================================================
FILE: CNAME
================================================
x.ant.design
================================================
FILE: README-zh_CN.md
================================================
<div align="center"><a name="readme-top"></a>
<img height="180" src="https://mdn.alipayobjects.com/huamei_iwk9zp/afts/img/A*eco6RrQhxbMAAAAAAAAAAAAADgCCAQ/original">
<h1>Ant Design X</h1>
打造卓越 AI 界面解决方案,引领智能新体验。
[![CI status][github-action-image]][github-action-url] [![codecov][codecov-image]][codecov-url] ![GitHub contributors][github-contributors] [![Follow zhihu][zhihu-image]][zhihu-url] [](https://deepwiki.com/ant-design/x)
| Package | Latest Version | Download stats | Bundle Size | JSDelivr |
| :-- | :-- | :-- | :-- | :-- |
| `@ant-design/x` | [![npm version][x-version-image]][x-version-url] | [![npm downloads][x-downloads-image]][x-downloads-url] | [![bundle size][x-bundle-size-image]][x-bundle-size-url] | [![jsdelivr][x-jsdelivr-image]][x-jsdelivr-url] |
| `@ant-design/x-markdown` | [![npm version][x-markdown-version-image]][x-markdown-version-url] | [![npm downloads][x-markdown-downloads-image]][x-markdown-downloads-url] | [![bundle size][x-markdown-bundle-size-image]][x-markdown-bundle-size-url] | [![jsdelivr][x-markdown-jsdelivr-image]][x-markdown-jsdelivr-url] |
| `@ant-design/x-sdk` | [![npm version][x-sdk-version-image]][x-sdk-version-url] | [![npm downloads][x-sdk-downloads-image]][x-sdk-downloads-url] | [![bundle size][x-sdk-bundle-size-image]][x-sdk-bundle-size-url] | [![jsdelivr][x-sdk-jsdelivr-image]][x-sdk-jsdelivr-url] |
| `@ant-design/x-skill` | [![npm version][x-skill-version-image]][x-skill-version-url] | [![npm downloads][x-skill-downloads-image]][x-skill-downloads-url] | [![bundle size][x-skill-bundle-size-image]][x-skill-bundle-size-url] | [![jsdelivr][x-skill-jsdelivr-image]][x-skill-jsdelivr-url] |
[更新日志](./CHANGELOG.zh-CN.md) · [报告一个 Bug][github-issues-bug-report] · [想新增特性?][github-issues-feature-request] · [English](./README.md) · 中文
[x-version-image]: https://img.shields.io/npm/v/@ant-design/x.svg?style=flat-square
[x-version-url]: https://www.npmjs.com/package/@ant-design/x
[x-downloads-image]: https://img.shields.io/npm/dm/@ant-design/x.svg?style=flat
[x-downloads-url]: https://www.npmjs.com/package/@ant-design/x
[x-bundle-size-image]: https://img.shields.io/bundlephobia/minzip/@ant-design/x
[x-bundle-size-url]: https://bundlephobia.com/result?p=@ant-design/x
[x-package-size-image]: https://packagephobia.com/badge?p=@ant-design/x
[x-package-size-url]: https://packagephobia.com/result?p=@ant-design/x
[x-jsdelivr-image]: https://data.jsdelivr.com/v1/package/npm/@ant-design/x/badge
[x-jsdelivr-url]: https://www.jsdelivr.com/package/npm/@ant-design/x
[x-markdown-version-image]: https://img.shields.io/npm/v/@ant-design/x-markdown.svg?style=flat
[x-markdown-version-url]: https://www.npmjs.com/package/@ant-design/x-markdown
[x-markdown-downloads-image]: https://img.shields.io/npm/dm/@ant-design/x-markdown.svg?style=flat
[x-markdown-downloads-url]: https://www.npmjs.com/package/@ant-design/x-markdown
[x-markdown-bundle-size-image]: https://img.shields.io/bundlephobia/minzip/@ant-design/x-markdown
[x-markdown-bundle-size-url]: https://bundlephobia.com/result?p=@ant-design/x-markdown
[x-markdown-package-size-image]: https://packagephobia.com/badge?p=@ant-design/x-markdown
[x-markdown-package-size-url]: https://packagephobia.com/result?p=@ant-design/x-markdown
[x-markdown-jsdelivr-image]: https://data.jsdelivr.com/v1/package/npm/@ant-design/x-markdown/badge
[x-markdown-jsdelivr-url]: https://www.jsdelivr.com/package/npm/@ant-design/x-markdown
[x-sdk-version-image]: https://img.shields.io/npm/v/@ant-design/x-sdk.svg?style=flat
[x-sdk-version-url]: https://www.npmjs.com/package/@ant-design/x-sdk
[x-sdk-downloads-image]: https://img.shields.io/npm/dm/@ant-design/x-sdk.svg?style=flat
[x-sdk-downloads-url]: https://www.npmjs.com/package/@ant-design/x-sdk
[x-sdk-bundle-size-image]: https://img.shields.io/bundlephobia/minzip/@ant-design/x-sdk
[x-sdk-bundle-size-url]: https://bundlephobia.com/result?p=@ant-design/x-sdk
[x-sdk-package-size-image]: https://packagephobia.com/badge?p=@ant-design/x-sdk
[x-sdk-package-size-url]: https://packagephobia.com/result?p=@ant-design/x-sdk
[x-sdk-jsdelivr-image]: https://data.jsdelivr.com/v1/package/npm/@ant-design/x-sdk/badge
[x-sdk-jsdelivr-url]: https://www.jsdelivr.com/package/npm/@ant-design/x-sdk
[x-skill-version-image]: https://img.shields.io/npm/v/@ant-design/x-skill.svg?style=flat-square
[x-skill-version-url]: https://www.npmjs.com/package/@ant-design/x-skill
[x-skill-downloads-image]: https://img.shields.io/npm/dm/@ant-design/x-skill.svg?style=flat
[x-skill-downloads-url]: https://www.npmjs.com/package/@ant-design/x-skill
[x-skill-bundle-size-image]: https://img.shields.io/bundlephobia/minzip/@ant-design/x-skill
[x-skill-bundle-size-url]: https://bundlephobia.com/result?p=@ant-design/x-skill
[x-skill-package-size-image]: https://packagephobia.com/badge?p=@ant-design/x-skill
[x-skill-package-size-url]: https://packagephobia.com/result?p=@ant-design/x-skill
[x-skill-jsdelivr-image]: https://data.jsdelivr.com/v1/package/npm/@ant-design/x-skill/badge
[x-skill-jsdelivr-url]: https://www.jsdelivr.com/package/npm/@ant-design/x-skill
[npm-image]: https://img.shields.io/npm/v/@ant-design/x.svg?style=flat-square
[npm-url]: https://npmjs.org/package/@ant-design/x
[github-action-image]: https://github.com/ant-design/x/actions/workflows/main.yml/badge.svg
[github-action-url]: https://github.com/ant-design/x/actions/workflows/main.yml
[codecov-image]: https://codecov.io/gh/ant-design/x/graph/badge.svg?token=wrCCsyTmdi
[codecov-url]: https://codecov.io/gh/ant-design/x
[download-image]: https://img.shields.io/npm/dm/@ant-design/x.svg?style=flat-square
[download-url]: https://npmjs.org/package/@ant-design/x
[bundlephobia-image]: https://badgen.net/bundlephobia/minzip/@ant-design/x?style=flat-square
[bundlephobia-url]: https://bundlephobia.com/package/@ant-design/x
[github-issues-bug-report]: https://github.com/ant-design/x/issues/new?template=bug-report.yml
[github-issues-feature-request]: https://github.com/ant-design/x/issues/new?template=bug-feature-request.yml
[antd-image]: https://img.shields.io/badge/-Ant%20Design-blue?labelColor=black&logo=antdesign&style=flat-square
[antd-url]: https://ant.design
[zhihu-image]: https://img.shields.io/badge/-Ant%20Design-white?logo=zhihu
[zhihu-url]: https://www.zhihu.com/column/c_1564262000561106944
[github-contributors]: https://img.shields.io/github/contributors-anon/ant-design/x
</div>

## 🌈 开箱即用的大模型企业级组件
`@ant-design/x` 基于 RICH 交互范式,在不同的交互阶段提供了大量的原子组件,帮助你灵活搭建你的 AI 应用,详情点击[这里](packages/x/README-zh_CN.md)。
## ⚡️ 对接模型智能体服务 & 高效管理数据流
`@ant-design/x-sdk` 提供了一系列的工具API,旨在提供开发者开箱即用的管理AI应用数据流,详情点击[这里](packages/x-sdk/README-zh_CN.md)。
## ✨ Markdown 渲染器
`@ant-design/x-markdown` 旨在提供流式友好、强拓展性和高性能的 Markdown 渲染器。提供流式渲染公式、代码高亮、mermaid 等能力,详情点击[这里](packages/x-markdown/README-zh_CN.md)。
## 🚀 Skill
`@ant-design/x-skill` 是专为 Ant Design X 打造的智能技能库,提供了一系列精心设计的 Agent 技能。这些技能能够显著提升开发效率,帮助您快速构建高质量的 AI 对话应用,并有效解决开发过程中遇到的各种问题,详情点击[这里](packages/x-skill/README-zh_CN.md)。
## 谁在使用
Ant Design X 广泛用于蚂蚁集团内由 AI 驱动的用户交互界面。如果你的公司和产品使用了 Ant Design X,欢迎到 [这里](https://github.com/ant-design/x/issues/126) 留言。
## 本地研发
> antx 通过 [npm-workspace](https://docs.npmjs.com/cli/v11/using-npm/workspaces) 来组织代码,推荐使用 npm 或 [utoo](https://github.com/umijs/mako/tree/next) 进行本地研发。
```bash
# 安装 utoo
$ npm i -g utoo
# 安装项目依赖 (by utoo)
$ ut [install]
# 启动项目
$ ut start # 方式一: 通过主包的 script 启动
$ ut start --workspace packages/x # 方式二: 通过 workspace 参数启动
$ ut start --workspace @ant-design/x # 方式三: 通过 package.name 启动 (utoo only)
$ cd packages/x && ut start # 方式四: 进入子包目录单独启动
# 添加依赖
$ ut install [pkg@version] # 为主包添加依赖
$ ut install [pkg@version] --workspace packages/x # 为子包添加依赖
$ cd packages/x && ut install [pkg@version] # 为子包添加依赖
# 依赖更新
$ ut update # utoo only
```
## 如何贡献
在任何形式的参与前,请先阅读 [贡献者文档](https://github.com/ant-design/ant-design/blob/master/.github/CONTRIBUTING.md)。如果你希望参与贡献,欢迎提交 [Pull Request](https://github.com/ant-design/ant-design/pulls),或给我们 [报告 Bug](http://new-issue.ant.design/)。
> 强烈推荐阅读 [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way)、[《如何向开源社区提问题》](https://github.com/seajs/seajs/issues/545) 和 [《如何有效地报告 Bug》](http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html)、[《如何向开源项目提交无法解答的问题》](https://zhuanlan.zhihu.com/p/25795393),更好的问题更容易获得帮助。
## 社区互助
如果您在使用的过程中碰到问题,可以通过下面几个途径寻求帮助,同时我们也鼓励资深用户通过下面的途径给新人提供帮助。
通过 GitHub Discussions 提问时,建议使用 `Q&A` 标签。
1. [GitHub Discussions](https://github.com/ant-design/x/discussions)
2. [GitHub Issues](https://github.com/ant-design/x/issues)
<a href="https://openomy.app/github/ant-design/x" target="_blank" style="display: block; width: 100%;" align="center">
<img src="https://openomy.app/svg?repo=ant-design/x&chart=bubble&latestMonth=3" target="_blank" alt="Contribution Leaderboard" style="display: block; width: 100%;" />
</a>
================================================
FILE: README.md
================================================
<div align="center"><a name="readme-top"></a>
<img height="180" src="https://mdn.alipayobjects.com/huamei_iwk9zp/afts/img/A*eco6RrQhxbMAAAAAAAAAAAAADgCCAQ/original">
<h1>Ant Design X</h1>
Build excellent AI interfaces and pioneer intelligent new experiences.
[![CI status][github-action-image]][github-action-url] [![codecov][codecov-image]][codecov-url] ![GitHub contributors][github-contributors] [![Follow zhihu][zhihu-image]][zhihu-url] [](https://deepwiki.com/ant-design/x)
| Package | Latest Version | Download stats | Bundle Size | JSDelivr |
| :-- | :-- | :-- | :-- | :-- |
| `@ant-design/x` | [![npm version][x-version-image]][x-version-url] | [![npm downloads][x-downloads-image]][x-downloads-url] | [![bundle size][x-bundle-size-image]][x-bundle-size-url] | [![jsdelivr][x-jsdelivr-image]][x-jsdelivr-url] |
| `@ant-design/x-markdown` | [![npm version][x-markdown-version-image]][x-markdown-version-url] | [![npm downloads][x-markdown-downloads-image]][x-markdown-downloads-url] | [![bundle size][x-markdown-bundle-size-image]][x-markdown-bundle-size-url] | [![jsdelivr][x-markdown-jsdelivr-image]][x-markdown-jsdelivr-url] |
| `@ant-design/x-sdk` | [![npm version][x-sdk-version-image]][x-sdk-version-url] | [![npm downloads][x-sdk-downloads-image]][x-sdk-downloads-url] | [![bundle size][x-sdk-bundle-size-image]][x-sdk-bundle-size-url] | [![jsdelivr][x-sdk-jsdelivr-image]][x-sdk-jsdelivr-url] |
| `@ant-design/x-skill` | [![npm version][x-skill-version-image]][x-skill-version-url] | [![npm downloads][x-skill-downloads-image]][x-skill-downloads-url] | [![bundle size][x-skill-bundle-size-image]][x-skill-bundle-size-url] | [![jsdelivr][x-skill-jsdelivr-image]][x-skill-jsdelivr-url] |
[Changelog](./CHANGELOG.en-US.md) · [Report a Bug][github-issues-bug-report] · [Request a F
gitextract_onxxzun6/ ├── .codefuse/ │ └── skills/ │ └── components/ │ └── SKILL.md ├── .editorconfig ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ └── feature_request.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE_CN.md │ ├── dependabot.yml │ └── workflows/ │ ├── main.yml │ ├── markdown-benchmark.yml │ ├── pr-auto-merge.yml │ ├── pr-contributor-welcome.yml │ ├── preview-build.yml │ ├── preview-deploy.yml │ ├── preview-start.yml │ ├── release-dingtalk.yml │ ├── release-x.yml │ ├── site-deploy.yml │ └── size-limit.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── .lintstagedrc.json ├── .npmrc ├── .prettierrc ├── CHANGELOG.en-US.md ├── CHANGELOG.zh-CN.md ├── CNAME ├── README-zh_CN.md ├── README.md ├── biome.json ├── package.json ├── packages/ │ ├── x/ │ │ ├── .dumi/ │ │ │ ├── components/ │ │ │ │ └── SemanticPreview.tsx │ │ │ ├── global.css │ │ │ ├── hooks/ │ │ │ │ ├── use.ts │ │ │ │ ├── useDark.tsx │ │ │ │ ├── useFetch/ │ │ │ │ │ ├── cache.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── useLayoutState.ts │ │ │ │ ├── useLocale.ts │ │ │ │ ├── useLocation.ts │ │ │ │ ├── useLottie.ts │ │ │ │ ├── useMenu.tsx │ │ │ │ ├── useScrollY.ts │ │ │ │ └── useThemeAnimation.ts │ │ │ ├── loading.js │ │ │ ├── pages/ │ │ │ │ ├── 404/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── index/ │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── Container.tsx │ │ │ │ │ │ ├── CustomizationProvider.tsx │ │ │ │ │ │ ├── CustomizationSender.tsx │ │ │ │ │ │ └── Introduction.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── CompIntroduction/ │ │ │ │ │ │ │ ├── Customization.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── DesignBanner.tsx │ │ │ │ │ │ ├── DesignFramework.tsx │ │ │ │ │ │ ├── DesignGuide.tsx │ │ │ │ │ │ ├── Lottie.tsx │ │ │ │ │ │ ├── MainBanner.tsx │ │ │ │ │ │ ├── SceneIntroduction/ │ │ │ │ │ │ │ ├── Assistant.tsx │ │ │ │ │ │ │ ├── Independent.tsx │ │ │ │ │ │ │ ├── Nest.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── SiteContext.ts │ │ │ │ │ └── index.tsx │ │ │ │ └── index-cn/ │ │ │ │ └── index.ts │ │ │ ├── preset/ │ │ │ │ └── .gitkeep │ │ │ ├── rehypeAntd.ts │ │ │ ├── remarkAnchor.ts │ │ │ ├── remarkAntd.ts │ │ │ ├── theme/ │ │ │ │ ├── SiteThemeProvider.tsx │ │ │ │ ├── builtins/ │ │ │ │ │ ├── APITable/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Antd.tsx │ │ │ │ │ ├── Audio/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Badge/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ColorChunk/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ColorPaletteTool/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ColorPaletteToolDark/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ColorPalettes/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ComponentMeta/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ComponentOverview/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ComponentTokenTable/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Container/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── style.ts │ │ │ │ │ ├── DemoWrapper/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── IconSearch/ │ │ │ │ │ │ ├── Category.tsx │ │ │ │ │ │ ├── CopyableIcon.tsx │ │ │ │ │ │ ├── IconSearch.tsx │ │ │ │ │ │ ├── fields.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── themeIcons.tsx │ │ │ │ │ ├── ImagePreview/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── InlinePopover/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── InstallDependencies/ │ │ │ │ │ │ ├── bun.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── npm.tsx │ │ │ │ │ │ ├── pnpm.tsx │ │ │ │ │ │ ├── utoo.tsx │ │ │ │ │ │ └── yarn.tsx │ │ │ │ │ ├── LocaleLink/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── MarkdownPluginsOverView.tsx │ │ │ │ │ ├── Palette/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── Previewer/ │ │ │ │ │ │ ├── CodeBlockButton.tsx │ │ │ │ │ │ ├── CodePreviewer.tsx │ │ │ │ │ │ ├── DemoFallback.tsx │ │ │ │ │ │ ├── DesignPreviewer.tsx │ │ │ │ │ │ ├── Previewer.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── PromptTemplate.tsx │ │ │ │ │ ├── ResourceCards/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Sandpack/ │ │ │ │ │ │ ├── Sandpack.ts │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SkillsOverView.tsx │ │ │ │ │ ├── TokenCompare/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── TokenTable/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── VideoPlayer/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── common/ │ │ │ │ │ ├── BehaviorMap/ │ │ │ │ │ │ ├── BehaviorMap.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── BezierVisualizer/ │ │ │ │ │ │ ├── Visualizer.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── BrowserFrame.tsx │ │ │ │ │ ├── ClientOnly.tsx │ │ │ │ │ ├── CodePreview.tsx │ │ │ │ │ ├── Color/ │ │ │ │ │ │ ├── ColorBlock.tsx │ │ │ │ │ │ ├── ColorPaletteTool.tsx │ │ │ │ │ │ ├── ColorPaletteToolDark.tsx │ │ │ │ │ │ ├── ColorPalettes.tsx │ │ │ │ │ │ ├── ColorPatterns.tsx │ │ │ │ │ │ ├── ColorStyle.tsx │ │ │ │ │ │ └── Palette.tsx │ │ │ │ │ ├── CommonHelmet.tsx │ │ │ │ │ ├── ComponentChangelog/ │ │ │ │ │ │ ├── ComponentChangelog.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── EditButton.tsx │ │ │ │ │ ├── GlobalStyles.tsx │ │ │ │ │ ├── Helmet.tsx │ │ │ │ │ ├── JSONEditor/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Link.tsx │ │ │ │ │ ├── LinkButton.tsx │ │ │ │ │ ├── LiveCode.tsx │ │ │ │ │ ├── Loading.tsx │ │ │ │ │ ├── PrevAndNext.tsx │ │ │ │ │ ├── ThemeSwitch/ │ │ │ │ │ │ ├── ThemeIcon.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── styles/ │ │ │ │ │ ├── Common.tsx │ │ │ │ │ ├── Demo.tsx │ │ │ │ │ ├── HeadingAnchor.tsx │ │ │ │ │ ├── Highlight.tsx │ │ │ │ │ ├── InlineCard.tsx │ │ │ │ │ ├── Markdown.tsx │ │ │ │ │ ├── NProgress.tsx │ │ │ │ │ ├── PreviewImage.tsx │ │ │ │ │ ├── Reset.tsx │ │ │ │ │ ├── Responsive.tsx │ │ │ │ │ ├── SearchBar.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── icons/ │ │ │ │ │ ├── CodePenIcon.tsx │ │ │ │ │ ├── CodeSandboxIcon.tsx │ │ │ │ │ ├── DirectionIcon.tsx │ │ │ │ │ └── ExternalLinkIcon.tsx │ │ │ │ ├── layouts/ │ │ │ │ │ ├── DocLayout/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── GlobalLayout.tsx │ │ │ │ │ ├── IndexLayout/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── SidebarLayout/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── locales/ │ │ │ │ │ ├── en-US.json │ │ │ │ │ └── zh-CN.json │ │ │ │ ├── plugin.ts │ │ │ │ ├── slots/ │ │ │ │ │ ├── Alert/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Content/ │ │ │ │ │ │ ├── ColumnCard.tsx │ │ │ │ │ │ ├── ContributorAvatar.tsx │ │ │ │ │ │ ├── Contributors.tsx │ │ │ │ │ │ ├── DocAnchor.tsx │ │ │ │ │ │ ├── DocMeta.tsx │ │ │ │ │ │ ├── InViewSuspense.tsx │ │ │ │ │ │ ├── JuejinLogo.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ContentTabs/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── DemoContext.ts │ │ │ │ │ ├── Footer/ │ │ │ │ │ │ ├── AdditionalInfo.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Header/ │ │ │ │ │ │ ├── Actions.tsx │ │ │ │ │ │ ├── Logo.tsx │ │ │ │ │ │ ├── Navigation.tsx │ │ │ │ │ │ ├── SwitchBtn.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── interface.ts │ │ │ │ │ ├── LiveError/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Sidebar/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── SiteContext.ts │ │ │ │ ├── static/ │ │ │ │ │ └── style.ts │ │ │ │ ├── themeConfig.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── runTests.ts │ │ │ │ │ │ └── tsToJs.test.ts │ │ │ │ │ ├── tsToJs.test.ts │ │ │ │ │ └── tsToJs.ts │ │ │ │ └── utils.ts │ │ │ └── tsconfig.json │ │ ├── .dumirc.ts │ │ ├── .fatherrc.ts │ │ ├── .jest.js │ │ ├── .lintstagedrc.json │ │ ├── .surgeignore │ │ ├── BUG_VERSIONS.json │ │ ├── CNAME │ │ ├── LICENSE │ │ ├── README-zh_CN.md │ │ ├── README.md │ │ ├── alias/ │ │ │ └── cssinjs.js │ │ ├── bunfig.toml │ │ ├── components/ │ │ │ ├── _util/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── hooks.test.tsx │ │ │ │ │ └── warning.test.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ ├── use-collapsible.ts │ │ │ │ │ ├── use-proxy-imperative-handle.ts │ │ │ │ │ ├── use-shortcut-keys.ts │ │ │ │ │ └── use-x-component-config.ts │ │ │ │ ├── motion.ts │ │ │ │ ├── type.ts │ │ │ │ └── warning.ts │ │ │ ├── actions/ │ │ │ │ ├── ActionsAudio.tsx │ │ │ │ ├── ActionsCopy.tsx │ │ │ │ ├── ActionsFeedback.tsx │ │ │ │ ├── ActionsItem.tsx │ │ │ │ ├── ActionsMenu.tsx │ │ │ │ ├── Item.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ └── demo.test.ts.snap │ │ │ │ │ ├── action-item.test.tsx │ │ │ │ │ ├── audio.test.tsx │ │ │ │ │ ├── copy.test.tsx │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── feedback.test.tsx │ │ │ │ │ ├── image.test.ts │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── context.ts │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic-audio.tsx │ │ │ │ │ ├── _semantic-copy.tsx │ │ │ │ │ ├── _semantic-feedback.tsx │ │ │ │ │ ├── _semantic-item.tsx │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── fadeIn.md │ │ │ │ │ ├── fadeIn.tsx │ │ │ │ │ ├── preset.md │ │ │ │ │ ├── preset.tsx │ │ │ │ │ ├── sub.md │ │ │ │ │ ├── sub.tsx │ │ │ │ │ ├── variant.md │ │ │ │ │ └── variant.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── interface.ts │ │ │ │ └── style/ │ │ │ │ ├── audio.tsx │ │ │ │ ├── copy.ts │ │ │ │ ├── feedback.ts │ │ │ │ └── index.ts │ │ │ ├── attachments/ │ │ │ │ ├── DropArea.tsx │ │ │ │ ├── FileList/ │ │ │ │ │ ├── Progress.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── PlaceholderUploader.tsx │ │ │ │ ├── SilentUploader.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.tsx.snap │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.tsx │ │ │ │ │ ├── drag.test.tsx │ │ │ │ │ ├── image.test.ts │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ └── util.test.ts │ │ │ │ ├── context.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── overflow.md │ │ │ │ │ ├── overflow.tsx │ │ │ │ │ ├── placeholder.md │ │ │ │ │ ├── placeholder.tsx │ │ │ │ │ ├── select-files.md │ │ │ │ │ ├── select-files.tsx │ │ │ │ │ ├── with-sender.md │ │ │ │ │ └── with-sender.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── style/ │ │ │ │ │ └── index.ts │ │ │ │ └── util.ts │ │ │ ├── bubble/ │ │ │ │ ├── Bubble.tsx │ │ │ │ ├── BubbleList.tsx │ │ │ │ ├── Divider.tsx │ │ │ │ ├── EditableContent.tsx │ │ │ │ ├── System.tsx │ │ │ │ ├── TypingContent.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ └── demo.test.ts.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── divider.test.tsx │ │ │ │ │ ├── enhanced.test.tsx │ │ │ │ │ ├── image.test.ts │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ ├── list-scroll.test.tsx │ │ │ │ │ ├── list.test.tsx │ │ │ │ │ └── system.test.tsx │ │ │ │ ├── context.ts │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic-divider.tsx │ │ │ │ │ ├── _semantic-list.tsx │ │ │ │ │ ├── _semantic-system.tsx │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── animation.md │ │ │ │ │ ├── animation.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── custom-content.md │ │ │ │ │ ├── custom-content.tsx │ │ │ │ │ ├── divider.md │ │ │ │ │ ├── divider.tsx │ │ │ │ │ ├── editable.md │ │ │ │ │ ├── editable.tsx │ │ │ │ │ ├── footer.md │ │ │ │ │ ├── footer.tsx │ │ │ │ │ ├── gpt-vis.md │ │ │ │ │ ├── gpt-vis.tsx │ │ │ │ │ ├── header.md │ │ │ │ │ ├── header.tsx │ │ │ │ │ ├── list-extra.md │ │ │ │ │ ├── list-extra.tsx │ │ │ │ │ ├── list-scroll.md │ │ │ │ │ ├── list-scroll.tsx │ │ │ │ │ ├── list.md │ │ │ │ │ ├── list.tsx │ │ │ │ │ ├── loading.md │ │ │ │ │ ├── loading.tsx │ │ │ │ │ ├── markdown.md │ │ │ │ │ ├── markdown.tsx │ │ │ │ │ ├── semantic-list-custom.md │ │ │ │ │ ├── semantic-list-custom.tsx │ │ │ │ │ ├── sider-and-placement.md │ │ │ │ │ ├── sider-and-placement.tsx │ │ │ │ │ ├── stream.md │ │ │ │ │ ├── stream.tsx │ │ │ │ │ ├── system.md │ │ │ │ │ ├── system.tsx │ │ │ │ │ ├── variant-and-shape.md │ │ │ │ │ └── variant-and-shape.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ ├── useCompatibleScroll.ts │ │ │ │ │ └── useTyping.ts │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── interface.ts │ │ │ │ ├── loading.tsx │ │ │ │ └── style/ │ │ │ │ ├── bubble.ts │ │ │ │ ├── content.ts │ │ │ │ ├── divider.ts │ │ │ │ ├── index.ts │ │ │ │ ├── list.ts │ │ │ │ ├── slot.ts │ │ │ │ └── system.ts │ │ │ ├── code-highlighter/ │ │ │ │ ├── CodeHighlighter.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── custom-header.tsx │ │ │ │ │ └── with-xmarkdown.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── interface.ts │ │ │ │ └── style/ │ │ │ │ └── index.ts │ │ │ ├── conversations/ │ │ │ │ ├── Creation.tsx │ │ │ │ ├── GroupTitle.tsx │ │ │ │ ├── Item.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.ts.snap │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── image.test.ts │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── controlled-collapsible.md │ │ │ │ │ ├── controlled-collapsible.tsx │ │ │ │ │ ├── controlled-mode.md │ │ │ │ │ ├── controlled-mode.tsx │ │ │ │ │ ├── custom-new-chat.md │ │ │ │ │ ├── custom-new-chat.tsx │ │ │ │ │ ├── group-collapsible.md │ │ │ │ │ ├── group-collapsible.tsx │ │ │ │ │ ├── group.md │ │ │ │ │ ├── group.tsx │ │ │ │ │ ├── infinite-load.md │ │ │ │ │ ├── infinite-load.tsx │ │ │ │ │ ├── menu-trigger.md │ │ │ │ │ ├── menu-trigger.tsx │ │ │ │ │ ├── new-chat.md │ │ │ │ │ ├── new-chat.tsx │ │ │ │ │ ├── shortcutKeys.md │ │ │ │ │ ├── shortcutKeys.tsx │ │ │ │ │ ├── with-menu.md │ │ │ │ │ └── with-menu.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ ├── useCreation.tsx │ │ │ │ │ └── useGroupable.ts │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── interface.ts │ │ │ │ └── style/ │ │ │ │ └── index.ts │ │ │ ├── file-card/ │ │ │ │ ├── FileCard.tsx │ │ │ │ ├── List.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ └── demo.test.ts.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── image.test.ts │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── File.tsx │ │ │ │ │ ├── ImageIcon.tsx │ │ │ │ │ ├── ImageLoading.tsx │ │ │ │ │ └── usePercent.ts │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic-list.tsx │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── audio.md │ │ │ │ │ ├── audio.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── custom-description.md │ │ │ │ │ ├── custom-description.tsx │ │ │ │ │ ├── icon.md │ │ │ │ │ ├── icon.tsx │ │ │ │ │ ├── image-loading.md │ │ │ │ │ ├── image-loading.tsx │ │ │ │ │ ├── image.md │ │ │ │ │ ├── image.tsx │ │ │ │ │ ├── list.md │ │ │ │ │ ├── list.tsx │ │ │ │ │ ├── mask.md │ │ │ │ │ ├── mask.tsx │ │ │ │ │ ├── overflow.md │ │ │ │ │ ├── overflow.tsx │ │ │ │ │ ├── size.md │ │ │ │ │ └── size.tsx │ │ │ │ ├── icons/ │ │ │ │ │ ├── audio.tsx │ │ │ │ │ └── video.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── style/ │ │ │ │ │ └── index.ts │ │ │ │ └── utils.ts │ │ │ ├── folder/ │ │ │ │ ├── DirectoryTree.tsx │ │ │ │ ├── FilePreview.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── custom-icons.md │ │ │ │ │ ├── custom-icons.tsx │ │ │ │ │ ├── custom-service.md │ │ │ │ │ ├── custom-service.tsx │ │ │ │ │ ├── file-controlled.md │ │ │ │ │ ├── file-controlled.tsx │ │ │ │ │ ├── fully-controlled.md │ │ │ │ │ ├── fully-controlled.tsx │ │ │ │ │ ├── preview-render.md │ │ │ │ │ ├── preview-render.tsx │ │ │ │ │ ├── searchable.md │ │ │ │ │ └── searchable.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ └── style/ │ │ │ │ └── index.tsx │ │ │ ├── index.ts │ │ │ ├── introduce/ │ │ │ │ ├── index.en-US.md │ │ │ │ └── index.zh-CN.md │ │ │ ├── locale/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── context.ts │ │ │ │ ├── en_US.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── useLocale.ts │ │ │ │ └── zh_CN.ts │ │ │ ├── mermaid/ │ │ │ │ ├── Mermaid.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── custom-header.tsx │ │ │ │ │ ├── header-actions.tsx │ │ │ │ │ └── with-xmarkdown.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ └── style/ │ │ │ │ └── index.ts │ │ │ ├── notification/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── close_tag.md │ │ │ │ │ ├── close_tag.tsx │ │ │ │ │ ├── duration.md │ │ │ │ │ ├── duration.tsx │ │ │ │ │ ├── hooks.md │ │ │ │ │ ├── hooks.tsx │ │ │ │ │ ├── static-method.md │ │ │ │ │ └── static-method.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ └── interface.ts │ │ │ ├── overview/ │ │ │ │ ├── index.en-US.md │ │ │ │ └── index.zh-CN.md │ │ │ ├── prompts/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.ts.snap │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── image.test.ts │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── disabled.md │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ ├── fadeIn.md │ │ │ │ │ ├── fadeIn.tsx │ │ │ │ │ ├── flex-vertical.md │ │ │ │ │ ├── flex-vertical.tsx │ │ │ │ │ ├── flex-wrap-fixed.md │ │ │ │ │ ├── flex-wrap-fixed.tsx │ │ │ │ │ ├── flex-wrap.md │ │ │ │ │ ├── flex-wrap.tsx │ │ │ │ │ ├── nest.md │ │ │ │ │ └── nest.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ └── style/ │ │ │ │ └── index.ts │ │ │ ├── sender/ │ │ │ │ ├── Sender.tsx │ │ │ │ ├── SenderHeader.tsx │ │ │ │ ├── SenderSwitch.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.ts.snap │ │ │ │ │ │ ├── header.test.tsx.snap │ │ │ │ │ │ ├── index.test.tsx.snap │ │ │ │ │ │ └── switch.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── header.test.tsx │ │ │ │ │ ├── image.test.ts │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ ├── skill.test.tsx │ │ │ │ │ ├── slot.test.tsx │ │ │ │ │ ├── switch.test.tsx │ │ │ │ │ ├── use-cursor.test.tsx │ │ │ │ │ └── use-speech.test.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── ActionButton.tsx │ │ │ │ │ ├── ClearButton.tsx │ │ │ │ │ ├── LoadingButton/ │ │ │ │ │ │ ├── StopLoading.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SendButton.tsx │ │ │ │ │ ├── Skill.tsx │ │ │ │ │ ├── SlotTextArea.tsx │ │ │ │ │ ├── SpeechButton/ │ │ │ │ │ │ ├── RecordingIcon.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── TextArea.tsx │ │ │ │ ├── context.ts │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic-switch.tsx │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── agent.md │ │ │ │ │ ├── agent.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── disable-ctrl-slot.md │ │ │ │ │ ├── disable-ctrl-slot.tsx │ │ │ │ │ ├── disable-ctrl.md │ │ │ │ │ ├── disable-ctrl.tsx │ │ │ │ │ ├── footer.md │ │ │ │ │ ├── footer.tsx │ │ │ │ │ ├── header-fixed.md │ │ │ │ │ ├── header-fixed.tsx │ │ │ │ │ ├── header.md │ │ │ │ │ ├── header.tsx │ │ │ │ │ ├── paste-image.md │ │ │ │ │ ├── paste-image.tsx │ │ │ │ │ ├── ref-action.md │ │ │ │ │ ├── ref-action.tsx │ │ │ │ │ ├── send-style.md │ │ │ │ │ ├── send-style.tsx │ │ │ │ │ ├── slot-filling.md │ │ │ │ │ ├── slot-filling.tsx │ │ │ │ │ ├── slot-with-suggestion.md │ │ │ │ │ ├── slot-with-suggestion.tsx │ │ │ │ │ ├── speech-custom.md │ │ │ │ │ ├── speech-custom.tsx │ │ │ │ │ ├── speech.md │ │ │ │ │ ├── speech.tsx │ │ │ │ │ ├── submitType.md │ │ │ │ │ ├── submitType.tsx │ │ │ │ │ ├── suffix.md │ │ │ │ │ ├── suffix.tsx │ │ │ │ │ ├── switch.md │ │ │ │ │ └── switch.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ ├── use-cursor.ts │ │ │ │ │ ├── use-input-height.ts │ │ │ │ │ ├── use-slot-builder.ts │ │ │ │ │ ├── use-slot-config-state.ts │ │ │ │ │ └── use-speech.ts │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── interface.ts │ │ │ │ └── style/ │ │ │ │ ├── header.ts │ │ │ │ ├── index.ts │ │ │ │ ├── slot-textarea.ts │ │ │ │ └── switch.ts │ │ │ ├── sources/ │ │ │ │ ├── Sources.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.ts.snap │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── image.test.ts │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── components/ │ │ │ │ │ └── CarouselCard.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── expand.md │ │ │ │ │ ├── expand.tsx │ │ │ │ │ ├── icon.md │ │ │ │ │ ├── icon.tsx │ │ │ │ │ ├── inline.md │ │ │ │ │ └── inline.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ └── style/ │ │ │ │ └── index.ts │ │ │ ├── style/ │ │ │ │ ├── index.ts │ │ │ │ └── motion/ │ │ │ │ ├── blink.ts │ │ │ │ ├── collapse.ts │ │ │ │ ├── fade.ts │ │ │ │ └── init.ts │ │ │ ├── suggestion/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.ts.snap │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── image.test.ts │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ └── useActive.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── block.md │ │ │ │ │ ├── block.tsx │ │ │ │ │ ├── trigger.md │ │ │ │ │ └── trigger.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── style/ │ │ │ │ │ └── index.ts │ │ │ │ └── useActive.ts │ │ │ ├── theme/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── theme.test.tsx │ │ │ │ ├── context.ts │ │ │ │ ├── genStyleUtils.ts │ │ │ │ ├── interface/ │ │ │ │ │ ├── alias.ts │ │ │ │ │ ├── components.ts │ │ │ │ │ ├── cssinjs-utils.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── maps/ │ │ │ │ │ │ ├── colors.ts │ │ │ │ │ │ ├── font.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── size.ts │ │ │ │ │ │ └── style.ts │ │ │ │ │ ├── presetColors.ts │ │ │ │ │ └── seeds.ts │ │ │ │ ├── themes/ │ │ │ │ │ └── seed.ts │ │ │ │ ├── useToken.ts │ │ │ │ └── util/ │ │ │ │ ├── alias.ts │ │ │ │ └── getAlphaColor.ts │ │ │ ├── think/ │ │ │ │ ├── Think.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.ts.snap │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── image.test.ts │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── expand.md │ │ │ │ │ ├── expand.tsx │ │ │ │ │ ├── status.md │ │ │ │ │ └── status.tsx │ │ │ │ ├── icons/ │ │ │ │ │ └── think.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ └── style/ │ │ │ │ └── index.ts │ │ │ ├── thought-chain/ │ │ │ │ ├── Item.tsx │ │ │ │ ├── Node.tsx │ │ │ │ ├── Status.tsx │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.ts.snap │ │ │ │ │ │ ├── index.test.tsx.snap │ │ │ │ │ │ └── item.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── image.test.ts │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ └── item.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic-item.tsx │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── collapsible.md │ │ │ │ │ ├── collapsible.tsx │ │ │ │ │ ├── controlled-collapsible.md │ │ │ │ │ ├── controlled-collapsible.tsx │ │ │ │ │ ├── customization.md │ │ │ │ │ ├── customization.tsx │ │ │ │ │ ├── nested.md │ │ │ │ │ ├── nested.tsx │ │ │ │ │ ├── simple.md │ │ │ │ │ ├── simple.tsx │ │ │ │ │ ├── single-row.md │ │ │ │ │ ├── single-row.tsx │ │ │ │ │ ├── status.md │ │ │ │ │ └── status.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ ├── interface.ts │ │ │ │ └── style/ │ │ │ │ ├── index.ts │ │ │ │ └── item.ts │ │ │ ├── version/ │ │ │ │ └── index.ts │ │ │ ├── welcome/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── demo-extend.test.ts.snap │ │ │ │ │ │ ├── demo.test.ts.snap │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ ├── demo-extend.test.ts │ │ │ │ │ ├── demo.test.ts │ │ │ │ │ ├── image.test.ts │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── _semantic.tsx │ │ │ │ │ ├── background.md │ │ │ │ │ ├── background.tsx │ │ │ │ │ ├── basic.md │ │ │ │ │ ├── basic.tsx │ │ │ │ │ ├── variant.md │ │ │ │ │ └── variant.tsx │ │ │ │ ├── index.en-US.md │ │ │ │ ├── index.tsx │ │ │ │ ├── index.zh-CN.md │ │ │ │ └── style/ │ │ │ │ └── index.ts │ │ │ └── x-provider/ │ │ │ ├── __tests__/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ ├── cssVar.test.tsx │ │ │ │ ├── image.test.ts │ │ │ │ └── index.test.tsx │ │ │ ├── context.ts │ │ │ ├── demo/ │ │ │ │ ├── direction.md │ │ │ │ ├── direction.tsx │ │ │ │ ├── locale.md │ │ │ │ ├── locale.tsx │ │ │ │ ├── shortcutKeys.md │ │ │ │ ├── shortcutKeys.tsx │ │ │ │ ├── theme.md │ │ │ │ └── theme.tsx │ │ │ ├── hooks/ │ │ │ │ └── use-x-provider-context.ts │ │ │ ├── index.en-US.md │ │ │ ├── index.tsx │ │ │ └── index.zh-CN.md │ │ ├── docs/ │ │ │ ├── playground/ │ │ │ │ ├── _utils/ │ │ │ │ │ └── local.ts │ │ │ │ ├── agent-tbox.en-US.md │ │ │ │ ├── agent-tbox.tsx │ │ │ │ ├── agent-tbox.zh-CN.md │ │ │ │ ├── copilot.en-US.md │ │ │ │ ├── copilot.tsx │ │ │ │ ├── copilot.zh-CN.md │ │ │ │ ├── independent.en-US.md │ │ │ │ ├── independent.tsx │ │ │ │ ├── independent.zh-CN.md │ │ │ │ ├── ultramodern.en-US.md │ │ │ │ ├── ultramodern.tsx │ │ │ │ └── ultramodern.zh-CN.md │ │ │ ├── react/ │ │ │ │ ├── agent-use-tbox.en-US.md │ │ │ │ ├── agent-use-tbox.zh-CN.md │ │ │ │ ├── common-props.en-US.md │ │ │ │ ├── common-props.zh-CN.md │ │ │ │ ├── compatible-style.en-US.md │ │ │ │ ├── compatible-style.zh-CN.md │ │ │ │ ├── contributing.en-US.md │ │ │ │ ├── contributing.zh-CN.md │ │ │ │ ├── demo/ │ │ │ │ │ ├── qwen-sdk.tsx │ │ │ │ │ ├── qwen.tsx │ │ │ │ │ └── tbox.tsx │ │ │ │ ├── faq.en-US.md │ │ │ │ ├── faq.zh-CN.md │ │ │ │ ├── introduce.en-US.md │ │ │ │ ├── introduce.zh-CN.md │ │ │ │ ├── migration-v2.en-US.md │ │ │ │ ├── migration-v2.zh-CN.md │ │ │ │ ├── model-use-openai.en-US.md │ │ │ │ ├── model-use-openai.zh-CN.md │ │ │ │ ├── model-use-qwen.en-US.md │ │ │ │ ├── model-use-qwen.zh-CN.md │ │ │ │ ├── use-with-create-react-app.en-US.md │ │ │ │ ├── use-with-create-react-app.zh-CN.md │ │ │ │ ├── use-with-next.en-US.md │ │ │ │ ├── use-with-next.zh-CN.md │ │ │ │ ├── use-with-rsbuild.en-US.md │ │ │ │ ├── use-with-rsbuild.zh-CN.md │ │ │ │ ├── use-with-umi.en-US.md │ │ │ │ ├── use-with-umi.zh-CN.md │ │ │ │ ├── use-with-vite.en-US.md │ │ │ │ └── use-with-vite.zh-CN.md │ │ │ ├── spec/ │ │ │ │ ├── authentic-consistent.en-US.md │ │ │ │ ├── authentic-consistent.zh-CN.md │ │ │ │ ├── confirm-generation-process.en-US.md │ │ │ │ ├── confirm-generation-process.zh-CN.md │ │ │ │ ├── confirm.en-US.md │ │ │ │ ├── confirm.zh-CN.md │ │ │ │ ├── conversation-design.en-US.md │ │ │ │ ├── conversation-design.zh-CN.md │ │ │ │ ├── define-intention-type.en-US.md │ │ │ │ ├── define-intention-type.zh-CN.md │ │ │ │ ├── end.en-US.md │ │ │ │ ├── end.zh-CN.md │ │ │ │ ├── error.en-US.md │ │ │ │ ├── error.zh-CN.md │ │ │ │ ├── expression-user-input.en-US.md │ │ │ │ ├── expression-user-input.zh-CN.md │ │ │ │ ├── expression-user-send.en-US.md │ │ │ │ ├── expression-user-send.zh-CN.md │ │ │ │ ├── feedback-result-application.en-US.md │ │ │ │ ├── feedback-result-application.zh-CN.md │ │ │ │ ├── feedback-result-display.en-US.md │ │ │ │ ├── feedback-result-display.zh-CN.md │ │ │ │ ├── follow-up.en-US.md │ │ │ │ ├── follow-up.zh-CN.md │ │ │ │ ├── guide-intention-expression.en-US.md │ │ │ │ ├── guide-intention-expression.zh-CN.md │ │ │ │ ├── hint.en-US.md │ │ │ │ ├── hint.zh-CN.md │ │ │ │ ├── human-touch.en-US.md │ │ │ │ ├── human-touch.zh-CN.md │ │ │ │ ├── hybrid-ui-design.en-US.md │ │ │ │ ├── hybrid-ui-design.zh-CN.md │ │ │ │ ├── intention-introduce.en-US.md │ │ │ │ ├── intention-introduce.zh-CN.md │ │ │ │ ├── introduce.en-US.md │ │ │ │ ├── introduce.zh-CN.md │ │ │ │ ├── provide-intention-expectation.en-US.md │ │ │ │ ├── provide-intention-expectation.zh-CN.md │ │ │ │ ├── role-design.en-US.md │ │ │ │ ├── role-design.zh-CN.md │ │ │ │ ├── smooth-natural.en-US.md │ │ │ │ ├── smooth-natural.zh-CN.md │ │ │ │ ├── start.en-US.md │ │ │ │ ├── start.zh-CN.md │ │ │ │ ├── wake-up-ai-icon.en-US.md │ │ │ │ ├── wake-up-ai-icon.zh-CN.md │ │ │ │ ├── wake-up-welcome-message.en-US.md │ │ │ │ └── wake-up-welcome-message.zh-CN.md │ │ │ ├── x-markdown/ │ │ │ │ ├── chat-enhancement.en-US.md │ │ │ │ ├── chat-enhancement.zh-CN.md │ │ │ │ ├── components.en-US.md │ │ │ │ ├── components.zh-CN.md │ │ │ │ ├── custom-plugin.en-US.md │ │ │ │ ├── custom-plugin.zh-CN.md │ │ │ │ ├── data-display.en-US.md │ │ │ │ ├── data-display.zh-CN.md │ │ │ │ ├── demo/ │ │ │ │ │ ├── _utils/ │ │ │ │ │ │ ├── adx-markdown.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── theme-markdown.ts │ │ │ │ │ ├── codeDemo/ │ │ │ │ │ │ ├── basic.tsx │ │ │ │ │ │ ├── escape-raw-html.tsx │ │ │ │ │ │ ├── link.tsx │ │ │ │ │ │ ├── plugin.tsx │ │ │ │ │ │ ├── renderer.tsx │ │ │ │ │ │ ├── streaming.tsx │ │ │ │ │ │ ├── supersets.tsx │ │ │ │ │ │ ├── tokenizer.tsx │ │ │ │ │ │ ├── walkTokens.tsx │ │ │ │ │ │ └── xss.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── codeHighlighter.tsx │ │ │ │ │ │ ├── custom.tsx │ │ │ │ │ │ ├── dataChart.tsx │ │ │ │ │ │ ├── infographic.tsx │ │ │ │ │ │ ├── mermaid.tsx │ │ │ │ │ │ ├── sources.tsx │ │ │ │ │ │ └── think.tsx │ │ │ │ │ ├── streaming/ │ │ │ │ │ │ ├── animation.tsx │ │ │ │ │ │ ├── combined.tsx │ │ │ │ │ │ ├── debug.tsx │ │ │ │ │ │ └── format.tsx │ │ │ │ │ ├── supersets/ │ │ │ │ │ │ ├── CustomPlugin/ │ │ │ │ │ │ │ ├── custom.tsx │ │ │ │ │ │ │ ├── marked.tsx │ │ │ │ │ │ │ └── plugin.css │ │ │ │ │ │ └── Latex/ │ │ │ │ │ │ └── basic.tsx │ │ │ │ │ └── themes/ │ │ │ │ │ ├── custom.tsx │ │ │ │ │ ├── dark.tsx │ │ │ │ │ ├── light.tsx │ │ │ │ │ └── switch.tsx │ │ │ │ ├── examples.en-US.md │ │ │ │ ├── examples.zh-CN.md │ │ │ │ ├── introduce.en-US.md │ │ │ │ ├── introduce.zh-CN.md │ │ │ │ ├── playground.en-US.md │ │ │ │ ├── playground.tsx │ │ │ │ ├── playground.zh-CN.md │ │ │ │ ├── plugin-latex.en-US.md │ │ │ │ ├── plugin-latex.zh-CN.md │ │ │ │ ├── plugins.en-US.md │ │ │ │ ├── plugins.zh-CN.md │ │ │ │ ├── rich-text.en-US.md │ │ │ │ ├── rich-text.zh-CN.md │ │ │ │ ├── streaming.en-US.md │ │ │ │ ├── streaming.zh-CN.md │ │ │ │ ├── themes.en-US.md │ │ │ │ └── themes.zh-CN.md │ │ │ ├── x-sdk/ │ │ │ │ ├── chat-provider-custom.en-US.md │ │ │ │ ├── chat-provider-custom.zh-CN.md │ │ │ │ ├── chat-provider-deepseek.en-US.md │ │ │ │ ├── chat-provider-deepseek.zh-CN.md │ │ │ │ ├── chat-provider-open-ai.en-US.md │ │ │ │ ├── chat-provider-open-ai.zh-CN.md │ │ │ │ ├── chat-provider.en-US.md │ │ │ │ ├── chat-provider.zh-CN.md │ │ │ │ ├── demos/ │ │ │ │ │ ├── chat-providers/ │ │ │ │ │ │ ├── custom-provider-width-ui.md │ │ │ │ │ │ ├── custom-provider-width-ui.tsx │ │ │ │ │ │ ├── deep-seek-chat-provider.md │ │ │ │ │ │ ├── deep-seek-chat-provider.tsx │ │ │ │ │ │ ├── default-chat-provider-width-ui.md │ │ │ │ │ │ ├── default-chat-provider-width-ui.tsx │ │ │ │ │ │ ├── default-chat-provider.md │ │ │ │ │ │ ├── default-chat-provider.tsx │ │ │ │ │ │ ├── open-ai-chat-provider.md │ │ │ │ │ │ └── open-ai-chat-provider.tsx │ │ │ │ │ ├── x-chat/ │ │ │ │ │ │ ├── async-defaultMessages.md │ │ │ │ │ │ ├── async-defaultMessages.tsx │ │ │ │ │ │ ├── custom-request-fetch-en.tsx │ │ │ │ │ │ ├── custom-request-fetch.md │ │ │ │ │ │ ├── custom-request-fetch.tsx │ │ │ │ │ │ ├── deepSeek.md │ │ │ │ │ │ ├── deepSeek.tsx │ │ │ │ │ │ ├── defaultMessages.md │ │ │ │ │ │ ├── defaultMessages.tsx │ │ │ │ │ │ ├── developer.md │ │ │ │ │ │ ├── developer.tsx │ │ │ │ │ │ ├── openai-callback.md │ │ │ │ │ │ ├── openai-callback.tsx │ │ │ │ │ │ ├── openai.md │ │ │ │ │ │ ├── openai.tsx │ │ │ │ │ │ ├── request-openai-node.md │ │ │ │ │ │ └── request-openai-node.tsx │ │ │ │ │ ├── x-conversations/ │ │ │ │ │ │ ├── async-defaultMessages.md │ │ │ │ │ │ ├── async-defaultMessages.tsx │ │ │ │ │ │ ├── basic.md │ │ │ │ │ │ ├── basic.tsx │ │ │ │ │ │ ├── multi-instances.md │ │ │ │ │ │ ├── multi-instances.tsx │ │ │ │ │ │ ├── operations.md │ │ │ │ │ │ ├── operations.tsx │ │ │ │ │ │ ├── session-key.md │ │ │ │ │ │ ├── session-key.tsx │ │ │ │ │ │ ├── with-x-chat.md │ │ │ │ │ │ └── with-x-chat.tsx │ │ │ │ │ ├── x-request/ │ │ │ │ │ │ ├── basic.md │ │ │ │ │ │ ├── basic.tsx │ │ │ │ │ │ ├── custom-params-headers.md │ │ │ │ │ │ ├── custom-params-headers.tsx │ │ │ │ │ │ ├── custom-transformer.md │ │ │ │ │ │ ├── custom-transformer.tsx │ │ │ │ │ │ ├── manual.md │ │ │ │ │ │ ├── manual.tsx │ │ │ │ │ │ ├── stream-separator.md │ │ │ │ │ │ ├── stream-separator.tsx │ │ │ │ │ │ ├── stream-timeout.md │ │ │ │ │ │ ├── stream-timeout.tsx │ │ │ │ │ │ ├── timeout.md │ │ │ │ │ │ └── timeout.tsx │ │ │ │ │ └── x-stream/ │ │ │ │ │ ├── custom-protocol.md │ │ │ │ │ ├── custom-protocol.tsx │ │ │ │ │ ├── default-protocol.md │ │ │ │ │ └── default-protocol.tsx │ │ │ │ ├── introduce.en-US.md │ │ │ │ ├── introduce.zh-CN.md │ │ │ │ ├── use-x-chat.en-US.md │ │ │ │ ├── use-x-chat.zh-CN.md │ │ │ │ ├── use-x-conversations.en-US.md │ │ │ │ ├── use-x-conversations.zh-CN.md │ │ │ │ ├── x-request.en-US.md │ │ │ │ ├── x-request.zh-CN.md │ │ │ │ ├── x-stream.en-US.md │ │ │ │ └── x-stream.zh-CN.md │ │ │ └── x-skill/ │ │ │ ├── introduce.en-US.md │ │ │ ├── introduce.zh-CN.md │ │ │ ├── prompt.en-US.md │ │ │ ├── prompt.zh-CN.md │ │ │ ├── skills.en-US.md │ │ │ └── skills.zh-CN.md │ │ ├── index.js │ │ ├── jest-puppeteer.config.js │ │ ├── mako.config.json │ │ ├── package.json │ │ ├── scripts/ │ │ │ ├── __snapshots__/ │ │ │ │ └── check-site.ts.snap │ │ │ ├── check-cssinjs.tsx │ │ │ ├── check-site.ts │ │ │ ├── check-version-md.ts │ │ │ ├── ci-mock-project-build.sh │ │ │ ├── collect-token-statistic.ts │ │ │ ├── generate-authors.ts │ │ │ ├── generate-component-changelog.ts │ │ │ ├── generate-cssinjs.ts │ │ │ ├── generate-token-meta.ts │ │ │ ├── generate-version.ts │ │ │ ├── previewEditor/ │ │ │ │ └── template.html │ │ │ ├── print-changelog.ts │ │ │ ├── set-node-options.ts │ │ │ ├── tsconfig.json │ │ │ └── visual-regression/ │ │ │ ├── build.ts │ │ │ ├── convert.ts │ │ │ ├── report-template.html │ │ │ └── upload.js │ │ ├── tests/ │ │ │ ├── __mocks__/ │ │ │ │ ├── @rc-component/ │ │ │ │ │ ├── trigger.tsx │ │ │ │ │ └── virtual-list.ts │ │ │ │ ├── copy-to-clipboard.ts │ │ │ │ └── mermaid.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── changelog.test.ts.snap │ │ │ │ └── index.test.ts.snap │ │ │ ├── changelog.test.ts │ │ │ ├── dekko/ │ │ │ │ ├── dist.test.ts │ │ │ │ ├── index.test.ts │ │ │ │ ├── lib.test.ts │ │ │ │ └── use-client.test.ts │ │ │ ├── index.html │ │ │ ├── index.test.ts │ │ │ ├── setup-streams.ts │ │ │ ├── setup.ts │ │ │ ├── setupAfterEnv.ts │ │ │ ├── shared/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── demoTest.tsx.snap │ │ │ │ ├── accessibilityTest.tsx │ │ │ │ ├── demoTest.tsx │ │ │ │ ├── demoTestContext.ts │ │ │ │ ├── excludeWarning.ts │ │ │ │ ├── focusTest.tsx │ │ │ │ ├── imageTest.tsx │ │ │ │ ├── mountTest.tsx │ │ │ │ ├── rootPropsTest.tsx │ │ │ │ ├── rtlTest.tsx │ │ │ │ └── themeTest.tsx │ │ │ └── utils.tsx │ │ ├── tsconfig.json │ │ └── typings/ │ │ ├── custom-typings.d.ts │ │ ├── index.d.ts │ │ └── jest.d.ts │ ├── x-markdown/ │ │ ├── .fatherrc.ts │ │ ├── .jest.js │ │ ├── BUG_VERSIONS.json │ │ ├── LICENSE │ │ ├── README-zh_CN.md │ │ ├── README.md │ │ ├── jest-puppeteer.config.js │ │ ├── mako.config.json │ │ ├── package.json │ │ ├── scripts/ │ │ │ ├── generate-plugin-meta.ts │ │ │ └── generate-version.ts │ │ ├── src/ │ │ │ ├── XMarkdown/ │ │ │ │ ├── AnimationText.tsx │ │ │ │ ├── DebugPanel/ │ │ │ │ │ ├── DebugPanel.css │ │ │ │ │ ├── DebugPanel.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── __benchmark__/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── MarkdownRenderer.tsx │ │ │ │ │ ├── playwright/ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── playwright-ct.config.ts │ │ │ │ │ ├── scripts/ │ │ │ │ │ │ ├── check-performance.js │ │ │ │ │ │ └── run-benchmark.js │ │ │ │ │ └── tests/ │ │ │ │ │ ├── benchmark.config.ts │ │ │ │ │ ├── performance.spec.tsx │ │ │ │ │ └── test.md │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── AnimationText.test.tsx │ │ │ │ │ ├── DebugPanel.test.tsx │ │ │ │ │ ├── Parser.test.ts │ │ │ │ │ ├── Renderer.test.ts │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── DebugPanel.test.tsx.snap │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ ├── hooks.test.tsx │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── core/ │ │ │ │ │ ├── Parser.ts │ │ │ │ │ ├── Renderer.ts │ │ │ │ │ ├── detectUnclosedComponentTags.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── hooks/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── useStreaming.ts │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── interface.ts │ │ │ │ └── utils/ │ │ │ │ └── tail.ts │ │ │ ├── index.ts │ │ │ ├── plugins/ │ │ │ │ ├── Latex/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ │ └── index.test.tsx.snap │ │ │ │ │ │ └── index.test.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── type.ts │ │ │ │ └── version/ │ │ │ │ └── index.ts │ │ │ ├── themes/ │ │ │ │ ├── dark.css │ │ │ │ └── light.css │ │ │ └── version/ │ │ │ └── index.ts │ │ ├── tests/ │ │ │ ├── dekko/ │ │ │ │ ├── dist.test.ts │ │ │ │ ├── index.test.ts │ │ │ │ └── lib.test.ts │ │ │ ├── setup.ts │ │ │ └── setupAfterEnv.ts │ │ ├── tsconfig.json │ │ └── typings/ │ │ ├── custom-typings.d.ts │ │ ├── index.d.ts │ │ └── jest.d.ts │ ├── x-sdk/ │ │ ├── .fatherrc.ts │ │ ├── .jest.js │ │ ├── BUG_VERSIONS.json │ │ ├── LICENSE │ │ ├── README-zh_CN.md │ │ ├── README.md │ │ ├── mako.config.json │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── generate-version.ts │ │ ├── src/ │ │ │ ├── _util/ │ │ │ │ └── type.ts │ │ │ ├── chat-providers/ │ │ │ │ ├── AbstractChatProvider.ts │ │ │ │ ├── DeepSeekChatProvider.ts │ │ │ │ ├── DefaultChatProvider.ts │ │ │ │ ├── OpenAIChatProvider.ts │ │ │ │ ├── __test__/ │ │ │ │ │ └── providers.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── types/ │ │ │ │ └── model.ts │ │ │ ├── index.ts │ │ │ ├── version/ │ │ │ │ └── index.ts │ │ │ ├── x-chat/ │ │ │ │ ├── __test__/ │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ ├── store.test.ts │ │ │ │ │ └── useSyncState.test.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── store.ts │ │ │ │ └── useSyncState.ts │ │ │ ├── x-conversations/ │ │ │ │ ├── __test__/ │ │ │ │ │ └── index.test.tsx │ │ │ │ ├── index.ts │ │ │ │ └── store.ts │ │ │ ├── x-mcp-client/ │ │ │ │ ├── __test__/ │ │ │ │ │ └── index.test.ts │ │ │ │ └── index.ts │ │ │ ├── x-request/ │ │ │ │ ├── __test__/ │ │ │ │ │ ├── abort.test.ts │ │ │ │ │ ├── index.test.ts │ │ │ │ │ └── x-fetch.test.tsx │ │ │ │ ├── index.ts │ │ │ │ └── x-fetch.ts │ │ │ └── x-stream/ │ │ │ ├── __test__/ │ │ │ │ └── index.test.ts │ │ │ └── index.ts │ │ ├── tests/ │ │ │ ├── dekko/ │ │ │ │ ├── dist.test.ts │ │ │ │ ├── index.test.ts │ │ │ │ └── lib.test.ts │ │ │ ├── index.test.ts │ │ │ ├── setup-streams.ts │ │ │ ├── setup.ts │ │ │ └── utils.tsx │ │ ├── tsconfig.json │ │ └── typings/ │ │ ├── custom-typings.d.ts │ │ ├── index.d.ts │ │ └── jest.d.ts │ └── x-skill/ │ ├── .claude-plugin/ │ │ └── marketplace.json │ ├── .fatherrc.ts │ ├── .gitignore │ ├── .skill.json │ ├── LICENSE │ ├── README-zh_CN.md │ ├── README.md │ ├── package.json │ ├── scripts/ │ │ ├── config.ts │ │ ├── dekko.ts │ │ ├── generate-meta.ts │ │ ├── generate-version.ts │ │ ├── skillApi.ts │ │ └── typings/ │ │ └── custom-typings.d.ts │ ├── skills/ │ │ ├── use-x-chat/ │ │ │ ├── SKILL.md │ │ │ └── reference/ │ │ │ ├── API.md │ │ │ ├── CORE.md │ │ │ └── EXAMPLES.md │ │ ├── x-chat-provider/ │ │ │ ├── SKILL.md │ │ │ └── reference/ │ │ │ └── EXAMPLES.md │ │ ├── x-markdown/ │ │ │ ├── SKILL.md │ │ │ └── reference/ │ │ │ ├── API.md │ │ │ ├── CORE.md │ │ │ ├── EXTENSIONS.md │ │ │ └── STREAMING.md │ │ └── x-request/ │ │ ├── SKILL.md │ │ └── reference/ │ │ ├── API.md │ │ ├── CORE.md │ │ └── EXAMPLES_SERVICE_PROVIDER.md │ ├── skills-zh/ │ │ ├── use-x-chat/ │ │ │ ├── SKILL.md │ │ │ └── reference/ │ │ │ ├── API.md │ │ │ ├── CORE.md │ │ │ └── EXAMPLES.md │ │ ├── x-chat-provider/ │ │ │ ├── SKILL.md │ │ │ └── reference/ │ │ │ └── EXAMPLES.md │ │ ├── x-markdown/ │ │ │ ├── SKILL.md │ │ │ └── reference/ │ │ │ ├── API.md │ │ │ ├── CORE.md │ │ │ ├── EXTENSIONS.md │ │ │ └── STREAMING.md │ │ └── x-request/ │ │ ├── SKILL.md │ │ └── reference/ │ │ ├── API.md │ │ ├── CORE.md │ │ └── EXAMPLES_SERVICE_PROVIDER.md │ ├── src/ │ │ ├── getSkillRepo.ts │ │ ├── help.ts │ │ ├── index.ts │ │ ├── locale/ │ │ │ └── index.ts │ │ └── skill-meta.json │ └── tsconfig.json ├── scripts/ │ ├── check-repo.ts │ ├── pre-publish.ts │ └── synchronize-version.ts ├── tsconfig.base.json └── tsconfig.json
SYMBOL INDEX (1076 symbols across 341 files)
FILE: packages/x-markdown/.fatherrc.ts
class CodecovWebpackPlugin (line 7) | class CodecovWebpackPlugin {
method constructor (line 9) | constructor(options = {}) {
method apply (line 12) | apply(compiler: any) {
FILE: packages/x-markdown/.jest.js
function getTestRegex (line 33) | function getTestRegex(libDir) {
FILE: packages/x-markdown/scripts/generate-plugin-meta.ts
function getPluginMeta (line 5) | function getPluginMeta(list?: DeclarationReflection[]) {
FILE: packages/x-markdown/src/XMarkdown/AnimationText.tsx
type AnimationTextProps (line 4) | interface AnimationTextProps {
FILE: packages/x-markdown/src/XMarkdown/DebugPanel/DebugPanel.tsx
type PerformanceSnapshot (line 4) | interface PerformanceSnapshot {
type Position (line 10) | interface Position {
type DragState (line 15) | interface DragState {
constant CONSTANTS (line 23) | const CONSTANTS = {
FILE: packages/x-markdown/src/XMarkdown/__benchmark__/components/MarkdownRenderer.tsx
type MarkdownRendererProps (line 15) | type MarkdownRendererProps = {
FILE: packages/x-markdown/src/XMarkdown/__benchmark__/scripts/check-performance.js
constant PERFORMANCE_THRESHOLDS (line 11) | const PERFORMANCE_THRESHOLDS = {
function loadBenchmarkResults (line 34) | function loadBenchmarkResults(resultsPath) {
function checkThresholds (line 104) | function checkThresholds(results) {
function generateReport (line 167) | function generateReport(currentResults) {
function main (line 221) | function main() {
FILE: packages/x-markdown/src/XMarkdown/__benchmark__/scripts/run-benchmark.js
function runFullBenchmark (line 6) | async function runFullBenchmark() {
function runCommand (line 43) | function runCommand(command, args, options = {}) {
FILE: packages/x-markdown/src/XMarkdown/__benchmark__/tests/benchmark.config.ts
constant TEXT_CATEGORIES (line 6) | const TEXT_CATEGORIES = {
constant BENCHMARK_CONFIG (line 12) | const BENCHMARK_CONFIG = {
constant RENDERERS (line 38) | const RENDERERS = isCI
constant TEST_FILE_PATH (line 43) | const TEST_FILE_PATH = 'test.md';
FILE: packages/x-markdown/src/XMarkdown/__benchmark__/tests/performance.spec.tsx
type BenchmarkResult (line 16) | interface BenchmarkResult {
type RunResult (line 39) | interface RunResult {
function generateTextByLength (line 57) | function generateTextByLength(length: number): string {
type PerformanceWindow (line 100) | interface PerformanceWindow extends Window {
type PerformanceMemory (line 110) | interface PerformanceMemory {
type ExtendedPerformance (line 114) | interface ExtendedPerformance extends Performance {
function injectPerformanceTracker (line 121) | async function injectPerformanceTracker(page: any) {
function measureSingleRun (line 183) | async function measureSingleRun({
function measure (line 331) | async function measure({
FILE: packages/x-markdown/src/XMarkdown/__tests__/hooks.test.tsx
type TestCase (line 311) | type TestCase = {
FILE: packages/x-markdown/src/XMarkdown/__tests__/index.test.tsx
type ITestCase (line 136) | type ITestCase = {
method link (line 435) | link() {
method link (line 456) | link({ href, text }) {
method paragraph (line 478) | paragraph() {
method paragraph (line 494) | paragraph({ text }) {
method code (line 513) | code() {
method code (line 536) | code({ lang, text }) {
FILE: packages/x-markdown/src/XMarkdown/core/Parser.ts
type ParserOptions (line 4) | type ParserOptions = {
type ParseOptions (line 13) | type ParseOptions = {
function escapeHtml (line 37) | function escapeHtml(html: string, encode?: boolean) {
constant TAIL_MARKER (line 52) | const TAIL_MARKER = Symbol('tailMarker');
type MarkableToken (line 55) | type MarkableToken = Token & { [TAIL_MARKER]?: boolean };
class Parser (line 57) | class Parser {
method constructor (line 62) | constructor(options: ParserOptions = {}) {
method configureHtmlEscapeRenderer (line 75) | private configureHtmlEscapeRenderer() {
method configureLinkRenderer (line 88) | private configureLinkRenderer() {
method configureParagraphRenderer (line 102) | private configureParagraphRenderer() {
method configureCodeRenderer (line 115) | private configureCodeRenderer() {
method configureTailInjection (line 138) | private configureTailInjection() {
method protectCustomTags (line 171) | private protectCustomTags(content: string): {
method restorePlaceholders (line 272) | private restorePlaceholders(content: string, placeholders: Map<string,...
method findLastNonEmptyToken (line 285) | private findLastNonEmptyToken(tokens: Token[]): Token | null {
method findLastTextToken (line 324) | private findLastTextToken(tokens: Token[]): Token | null {
method parse (line 336) | public parse(content: string, parseOptions?: ParseOptions) {
FILE: packages/x-markdown/src/XMarkdown/core/Renderer.ts
type RendererOptions (line 10) | interface RendererOptions {
class Renderer (line 16) | class Renderer {
method constructor (line 20) | constructor(options: RendererOptions) {
method detectUnclosedTags (line 24) | private detectUnclosedTags(htmlString: string): Set<string> {
method configureDOMPurify (line 31) | private configureDOMPurify(): DOMPurifyConfig {
method createReplaceElement (line 45) | private createReplaceElement(
method processChildren (line 113) | private processChildren(
method processHtml (line 123) | public processHtml(htmlString: string): React.ReactNode {
method render (line 136) | public render(html: string): ReactNode | null {
FILE: packages/x-markdown/src/XMarkdown/core/detectUnclosedComponentTags.ts
constant WHITESPACE_REGEX (line 1) | const WHITESPACE_REGEX = /\s/;
constant TAG_NAME_CHAR_REGEX (line 2) | const TAG_NAME_CHAR_REGEX = /[a-zA-Z0-9-]/;
constant VOID_ELEMENTS (line 3) | const VOID_ELEMENTS = new Set<string>([
constant COMMENT_START (line 19) | const COMMENT_START = '<!--';
constant COMMENT_END (line 20) | const COMMENT_END = '-->';
constant CDATA_START (line 21) | const CDATA_START = '<![CDATA[';
constant CDATA_END (line 22) | const CDATA_END = ']]>';
function detectUnclosedComponentTags (line 130) | function detectUnclosedComponentTags(
FILE: packages/x-markdown/src/XMarkdown/hooks/useStreaming.ts
type StreamCache (line 6) | interface StreamCache {
type Recognizer (line 19) | interface Recognizer {
constant STREAM_INCOMPLETE_REGEX (line 32) | const STREAM_INCOMPLETE_REGEX = {
FILE: packages/x-markdown/src/XMarkdown/interface.ts
type AnimationConfig (line 6) | interface AnimationConfig {
type StreamCacheTokenType (line 21) | enum StreamCacheTokenType {
type Token (line 32) | type Token = Tokens.Generic;
type TailConfig (line 34) | interface TailConfig {
type StreamingOption (line 48) | interface StreamingOption {
type StreamStatus (line 85) | type StreamStatus = 'loading' | 'done';
type ComponentProps (line 87) | type ComponentProps<T extends Record<string, unknown> = Record<string, u...
type XMarkdownProps (line 111) | interface XMarkdownProps {
FILE: packages/x-markdown/src/XMarkdown/utils/tail.ts
constant DEFAULT_TAIL_CONTENT (line 3) | const DEFAULT_TAIL_CONTENT = '▋';
FILE: packages/x-markdown/src/plugins/Latex/index.ts
type LatexOption (line 11) | type LatexOption = {
type Token (line 16) | type Token = {
type Render (line 21) | type Render = (token: Token) => string;
type ILevel (line 23) | type ILevel = 'inline' | 'block';
function replaceAlign (line 26) | function replaceAlign(text: string) {
function createRenderer (line 30) | function createRenderer(options: KatexOptions, newlineAfter: boolean) {
function inlineKatex (line 38) | function inlineKatex(renderer: Render, replaceAlignStart: boolean) {
function blockKatex (line 68) | function blockKatex(renderer: Render, replaceAlignStart: boolean) {
FILE: packages/x-markdown/src/plugins/type.ts
type LatexOption (line 4) | type LatexOption = {
type PluginsType (line 9) | type PluginsType = {
FILE: packages/x-markdown/tests/setup.ts
type Writeable (line 18) | type Writeable<T> = { -readonly [P in keyof T]: T[P] };
function fillWindowEnv (line 21) | function fillWindowEnv(window: Window | DOMWindow) {
FILE: packages/x-markdown/tests/setupAfterEnv.ts
function cleanup (line 13) | function cleanup(node: HTMLElement) {
function formatHTML (line 26) | function formatHTML(nodes: any) {
FILE: packages/x-markdown/typings/jest.d.ts
type Matchers (line 2) | interface Matchers<R> {
FILE: packages/x-sdk/.fatherrc.ts
class CodecovWebpackPlugin (line 7) | class CodecovWebpackPlugin {
method constructor (line 9) | constructor(options = {}) {
method apply (line 12) | apply(compiler: any) {
FILE: packages/x-sdk/.jest.js
function getTestRegex (line 28) | function getTestRegex(libDir) {
FILE: packages/x-sdk/src/_util/type.ts
type AnyObject (line 1) | type AnyObject = Record<PropertyKey, any>;
FILE: packages/x-sdk/src/chat-providers/AbstractChatProvider.ts
type ChatProviderConfig (line 4) | interface ChatProviderConfig<Input, Output, ChatMessage extends SimpleTy...
type TransformMessage (line 10) | interface TransformMessage<ChatMessage extends SimpleType, Output> {
method request (line 23) | public get request() {
method constructor (line 27) | constructor(config: ChatProviderConfig<Input, Output, ChatMessage>) {
method getMessages (line 58) | getMessages(): ChatMessage[] {
method injectGetMessages (line 62) | injectGetMessages(getMessages: () => ChatMessage[]) {
method injectRequest (line 66) | injectRequest({
FILE: packages/x-sdk/src/chat-providers/DeepSeekChatProvider.ts
class DeepSeekChatProvider (line 12) | class DeepSeekChatProvider<
method transformParams (line 17) | transformParams(
method transformLocalMessage (line 28) | transformLocalMessage(requestParams: Partial<Input>): ChatMessage[] {
method transformMessage (line 32) | transformMessage(info: TransformMessage<ChatMessage, Output>): ChatMes...
FILE: packages/x-sdk/src/chat-providers/DefaultChatProvider.ts
class DefaultChatProvider (line 5) | class DefaultChatProvider<
method transformParams (line 10) | transformParams(
method transformLocalMessage (line 23) | transformLocalMessage(requestParams: Partial<Input>): ChatMessage {
method transformMessage (line 27) | transformMessage(info: TransformMessage<ChatMessage, Output>): ChatMes...
FILE: packages/x-sdk/src/chat-providers/OpenAIChatProvider.ts
class OpenAIChatProvider (line 12) | class OpenAIChatProvider<
method transformParams (line 17) | transformParams(
method transformLocalMessage (line 28) | transformLocalMessage(requestParams: Partial<Input>): ChatMessage[] {
method transformMessage (line 32) | transformMessage(info: TransformMessage<ChatMessage, Output>): ChatMes...
FILE: packages/x-sdk/src/chat-providers/__test__/providers.test.ts
type DefaultInput (line 11) | interface DefaultInput {
type CustomMessage (line 766) | interface CustomMessage {
type CustomParams (line 772) | interface CustomParams {
FILE: packages/x-sdk/src/chat-providers/types/model.ts
type XModelMessage (line 3) | interface XModelMessage extends AnyObject {
type XModelParams (line 13) | interface XModelParams extends AnyObject {
type XModelResponse (line 79) | interface XModelResponse {
FILE: packages/x-sdk/src/x-chat/__test__/index.test.tsx
type ChatInput (line 8) | interface ChatInput {
function getMessages (line 67) | function getMessages(container: HTMLElement) {
function expectMessage (line 71) | function expectMessage<T = string>(message: T, status?: MessageStatus) {
FILE: packages/x-sdk/src/x-chat/index.ts
type SimpleType (line 10) | type SimpleType = string | number | boolean | object;
type MessageStatusEnum (line 12) | enum MessageStatusEnum {
type MessageStatus (line 21) | type MessageStatus = `${MessageStatusEnum}`;
type RequestPlaceholderFn (line 23) | type RequestPlaceholderFn<Input, Message> = (
type RequestFallbackFn (line 28) | type RequestFallbackFn<Input, MessageInfo, Message> = (
type RequestParams (line 33) | type RequestParams<Message> = {
type XChatConfig (line 37) | interface XChatConfig<
type MessageInfo (line 57) | interface MessageInfo<Message extends SimpleType> {
type DefaultMessageInfo (line 64) | type DefaultMessageInfo<Message extends SimpleType> = Pick<MessageInfo<M...
type RequestResultObject (line 67) | type RequestResultObject<Message> = {
type StandardRequestResult (line 72) | type StandardRequestResult<Message extends SimpleType> = Omit<
function toArray (line 80) | function toArray<T>(item: T | T[]): T[] {
function useXChat (line 87) | function useXChat<
FILE: packages/x-sdk/src/x-chat/store.ts
type ConversationKey (line 3) | type ConversationKey = string | number | symbol;
class ChatMessagesStore (line 22) | class ChatMessagesStore<T extends { id: number | string }> {
method emitListeners (line 39) | private emitListeners() {
method throttledEmitListeners (line 45) | private throttledEmitListeners() {
method constructor (line 64) | constructor(defaultMessages: () => Promise<T[]>, conversationKey?: Con...
method initializeMessages (line 78) | private async initializeMessages(
function useChatStore (line 203) | function useChatStore<T extends { id: number | string }>(
FILE: packages/x-sdk/src/x-chat/useSyncState.ts
type Getter (line 3) | type Getter<T> = () => T;
type Setter (line 4) | type Setter<T> = (pre: T) => T;
function useSyncState (line 6) | function useSyncState<T>(defaultValue: T | Getter<T>) {
FILE: packages/x-sdk/src/x-conversations/index.ts
type ConversationData (line 5) | interface ConversationData extends AnyObject {
type XConversationConfig (line 9) | interface XConversationConfig {
function useXConversations (line 14) | function useXConversations(config: XConversationConfig) {
FILE: packages/x-sdk/src/x-conversations/store.ts
class ConversationStore (line 27) | class ConversationStore {
method emitListeners (line 33) | private emitListeners() {
method constructor (line 39) | constructor(defaultConversations: ConversationData[], defaultActiveCon...
FILE: packages/x-sdk/src/x-mcp-client/index.ts
type XMCPTool (line 4) | interface XMCPTool {
type XMCPClientOptions (line 20) | type XMCPClientOptions = Pick<XRequestOptions, 'params' | 'headers' | 't...
class XMCPClientClass (line 22) | class XMCPClientClass {
method constructor (line 26) | constructor(baseURL: string, options?: XMCPClientOptions) {
method tools (line 32) | async tools(): Promise<XMCPTool[]> {
function XMCPClient (line 49) | function XMCPClient(baseURL: string, options?: XMCPClientOptions) {
FILE: packages/x-sdk/src/x-request/__test__/index.test.ts
constant SSE_SEPARATOR (line 9) | const SSE_SEPARATOR = '\n\n';
constant ND_JSON_SEPARATOR (line 11) | const ND_JSON_SEPARATOR = '\n';
function mockSSEReadableStream (line 36) | function mockSSEReadableStream() {
function mockNdJsonReadableStream (line 47) | function mockNdJsonReadableStream() {
function mockSSEReadableStreamTimeout (line 58) | function mockSSEReadableStreamTimeout() {
method transform (line 312) | transform() {
FILE: packages/x-sdk/src/x-request/index.ts
type XRequestCallbacks (line 8) | interface XRequestCallbacks<Output, ChatMessage extends SimpleType = any> {
type XRequestOptions (line 38) | interface XRequestOptions<
type XRequestGlobalOptions (line 108) | type XRequestGlobalOptions<Input, Output> = Pick<
type XRequestFunction (line 113) | type XRequestFunction<Input = AnyObject, Output = SSEOutput> = (
function setXRequestGlobalOptions (line 132) | function setXRequestGlobalOptions<Input, Output>(
method constructor (line 144) | constructor(baseURL: string, options?: XRequestOptions<Input, Output, Ch...
class XRequestClass (line 160) | class XRequestClass<
method asyncHandler (line 179) | public get asyncHandler() {
method isTimeout (line 183) | public get isTimeout() {
method isTimeout (line 187) | private set isTimeout(value: boolean) {
method isStreamTimeout (line 191) | public get isStreamTimeout() {
method isStreamTimeout (line 195) | private set isStreamTimeout(value: boolean) {
method isRequesting (line 199) | public get isRequesting() {
method manual (line 203) | public get manual() {
method constructor (line 207) | constructor(baseURL: string, options?: XRequestOptions<Input, Output, ...
method run (line 215) | public run(params?: Input) {
method abort (line 226) | public abort() {
method init (line 232) | private init(extraParams?: Partial<Input>, extraHeaders?: Record<strin...
method startRequest (line 363) | private startRequest() {
method finishRequest (line 367) | private finishRequest() {
method processStream (line 407) | private async processStream<Output, ChatMessage extends SimpleType = s...
method resetRetry (line 474) | private resetRetry() {
function XRequest (line 481) | function XRequest<Input = AnyObject, Output = SSEOutput, ChatMessage ext...
FILE: packages/x-sdk/src/x-request/x-fetch.ts
type XFetchMiddlewares (line 3) | interface XFetchMiddlewares<Input, Output> {
type XFetchType (line 11) | type XFetchType<Input, Output> = (
FILE: packages/x-sdk/src/x-stream/__test__/index.test.ts
method start (line 7) | start(controller) {
method start (line 28) | start(controller) {
method start (line 53) | async start(controller) {
method start (line 75) | start(controller) {
method transform (line 82) | transform(chunk, controller) {
method start (line 115) | async start(controller) {
method start (line 139) | async start(controller) {
FILE: packages/x-sdk/src/x-stream/index.ts
constant DEFAULT_STREAM_SEPARATOR (line 4) | const DEFAULT_STREAM_SEPARATOR = '\n\n';
constant DEFAULT_PART_SEPARATOR (line 9) | const DEFAULT_PART_SEPARATOR = '\n';
constant DEFAULT_KV_SEPARATOR (line 14) | const DEFAULT_KV_SEPARATOR = ':';
function splitStream (line 33) | function splitStream(streamSeparator = DEFAULT_STREAM_SEPARATOR) {
type SSEFields (line 66) | type SSEFields = 'data' | 'event' | 'id' | 'retry';
type SSEOutput (line 75) | type SSEOutput = Partial<Record<SSEFields, any>>;
type JSONOutPut (line 77) | interface JSONOutPut extends Partial<Record<SSEFields, any>> {
function splitPart (line 95) | function splitPart(partSeparator = DEFAULT_PART_SEPARATOR, kvSeparator =...
type XStreamOptions (line 130) | interface XStreamOptions<Output> {
type XReadableStream (line 157) | type XReadableStream<R = SSEOutput> = ReadableStream<R> & AsyncGenerator...
function createDecoderStream (line 159) | function createDecoderStream() {
function XStream (line 179) | function XStream<Output = SSEOutput>(options: XStreamOptions<Output>) {
FILE: packages/x-sdk/tests/setup-streams.ts
class PolyfillTextDecoderStream (line 32) | class PolyfillTextDecoderStream extends TransformStream<Uint8Array, stri...
method constructor (line 37) | constructor(
function setupStreamsPolyfill (line 68) | function setupStreamsPolyfill(win: Window | DOMWindow) {
FILE: packages/x-sdk/tests/setup.ts
type Writeable (line 19) | type Writeable<T> = { -readonly [P in keyof T]: T[P] };
function fillWindowEnv (line 22) | function fillWindowEnv(window: Window | DOMWindow) {
FILE: packages/x-sdk/tests/utils.tsx
function assertsExist (line 9) | function assertsExist<T>(item?: T): asserts item is T {
function setMockDate (line 14) | function setMockDate(dateString = '2017-09-18T03:30:07.795') {
function resetMockDate (line 18) | function resetMockDate() {
function renderHook (line 41) | function renderHook<T>(func: () => T): { result: React.RefObject<T | nul...
function waitFakeTimer (line 83) | async function waitFakeTimer(advanceTime = 1000, times = 20) {
FILE: packages/x-sdk/typings/jest.d.ts
type Matchers (line 2) | interface Matchers<R> {
FILE: packages/x-skill/scripts/config.ts
type SkillConfig (line 9) | interface SkillConfig {
type Config (line 13) | interface Config {
FILE: packages/x-skill/scripts/generate-meta.ts
type SkillMetadata (line 11) | interface SkillMetadata {
type MarketplaceConfig (line 20) | interface MarketplaceConfig {
constant SKILL_ROOT_EN (line 29) | const SKILL_ROOT_EN = path.join(__dirname, '../skills');
constant SKILL_ROOT_ZH (line 30) | const SKILL_ROOT_ZH = path.join(__dirname, '../skills-zh');
constant OUTPUT_PATH (line 31) | const OUTPUT_PATH = path.join(__dirname, '../src/skill-meta.json');
constant MARKETPLACE_PATH (line 32) | const MARKETPLACE_PATH = path.join(__dirname, '../.claude-plugin/marketp...
function readMarketplaceConfig (line 37) | function readMarketplaceConfig(): MarketplaceConfig {
function extractSkillMetadata (line 50) | function extractSkillMetadata(skillName: string): SkillMetadata | null {
function extractTags (line 138) | function extractTags(skillName: string): string[] {
function getPluginInfo (line 154) | function getPluginInfo(skillName: string): { category: string; desc: str...
function scanSkills (line 184) | function scanSkills(): SkillMetadata[] {
function generateSkillMeta (line 211) | function generateSkillMeta(): void {
FILE: packages/x-skill/scripts/skillApi.ts
function extractApiContent (line 16) | function extractApiContent(filePath: string): string {
function ensureDirectoryExists (line 49) | function ensureDirectoryExists(dirPath: string): void {
function processLanguage (line 60) | function processLanguage(lang: string, skills: SkillConfig): void {
function main (line 96) | function main(): void {
FILE: packages/x-skill/src/getSkillRepo.ts
type SkillLoaderOptions (line 6) | interface SkillLoaderOptions {
type GitHubContent (line 12) | interface GitHubContent {
type GitHubTag (line 20) | interface GitHubTag {
type Skill (line 33) | interface Skill {
type ParsedVersion (line 40) | interface ParsedVersion {
class SkillLoader (line 47) | class SkillLoader {
method constructor (line 52) | constructor(options: SkillLoaderOptions = {}) {
method makeRequest (line 58) | async makeRequest(url: string, options: { headers?: Record<string, str...
method downloadFile (line 138) | async downloadFile(url: string): Promise<string> {
method downloadDirectory (line 192) | async downloadDirectory(url: string, destPath: string): Promise<void> {
method downloadSkillFromGitHub (line 230) | async downloadSkillFromGitHub(
method compareVersions (line 286) | private compareVersions(a: GitHubTag, b: GitHubTag): number {
method getLatestTag (line 315) | async getLatestTag(): Promise<string> {
method extractDescription (line 345) | private extractDescription(skillPath: string, skillName: string): stri...
method loadSkills (line 368) | async loadSkills(version = 'latest', language = 'en'): Promise<Skill[]> {
method loadLocalSkills (line 416) | async loadLocalSkills(language = 'zh'): Promise<Skill[]> {
method copyDirectorySync (line 437) | private copyDirectorySync(src: string, dest: string): void {
method listVersions (line 467) | async listVersions(): Promise<string[]> {
FILE: packages/x-skill/src/help.ts
type ColorMap (line 6) | interface ColorMap {
class HelpManager (line 20) | class HelpManager {
method constructor (line 24) | constructor(language = 'zh' as Language) {
method colorize (line 40) | colorize(text: string, color: string): string {
method printSeparator (line 47) | printSeparator(): void {
method showHelp (line 51) | showHelp(): void {
method showVersion (line 99) | showVersion(): boolean {
method printHeader (line 115) | async printHeader(): Promise<void> {
method printLanguageSelection (line 124) | printLanguageSelection(): void {
method printCompletion (line 132) | printCompletion(): void {
method printError (line 136) | printError(error: Error): void {
method setLanguage (line 143) | setLanguage(language: Language): void {
FILE: packages/x-skill/src/index.ts
type SkillConfig (line 13) | interface SkillConfig {
type ParsedArgs (line 25) | interface ParsedArgs {
type Skill (line 31) | interface Skill {
class SkillInstaller (line 38) | class SkillInstaller {
method constructor (line 48) | constructor() {
method questionAsync (line 69) | questionAsync(question: string): Promise<string> {
method printSeparator (line 77) | printSeparator(): void {
method parseArgs (line 81) | parseArgs(): ParsedArgs {
method handleNonInteractiveCommands (line 132) | handleNonInteractiveCommands(): boolean {
method showHelp (line 146) | showHelp(): void {
method loadConfig (line 150) | loadConfig(): SkillConfig {
method loadLocaleMessages (line 156) | loadLocaleMessages(): LocaleMessages {
method getCache (line 160) | getCache(key: string): any {
method setCache (line 175) | setCache(key: string, data: any, ttlSeconds = 3600): void {
method clearCache (line 185) | clearCache(key: string): void {
method listVersions (line 192) | async listVersions(): Promise<void> {
method loadSkills (line 221) | async loadSkills(): Promise<void> {
method loadLocalSkills (line 260) | async loadLocalSkills(): Promise<void> {
method askQuestion (line 264) | async askQuestion(question: string, options: string[]): Promise<string...
method askMultipleChoice (line 328) | async askMultipleChoice(question: string, options: string[]): Promise<...
method createProgressBar (line 400) | createProgressBar(total: number): ProgressBar {
method run (line 412) | async run(): Promise<void> {
method installSkills (line 588) | async installSkills(skillNames: string[], software: string, isGlobal: ...
method copyDirectory (line 612) | copyDirectory(src: string, dest: string): void {
FILE: packages/x-skill/src/locale/index.ts
type EmojiKey (line 22) | type EmojiKey = keyof typeof emojis;
type LocaleMessages (line 25) | interface LocaleMessages {
type Language (line 89) | type Language = 'zh' | 'en';
type Messages (line 92) | type Messages = Record<Language, LocaleMessages>;
constant DEFAULT_LANGUAGE (line 254) | const DEFAULT_LANGUAGE: Language = 'zh';
constant SUPPORTED_LANGUAGES (line 257) | const SUPPORTED_LANGUAGES: Language[] = Object.keys(messages) as Languag...
function getMessage (line 260) | function getMessage(
FILE: packages/x/.dumi/components/SemanticPreview.tsx
constant MARK_BORDER_SIZE (line 9) | const MARK_BORDER_SIZE = 2;
function getSemanticCells (line 70) | function getSemanticCells(semanticPath: string) {
type SemanticPreviewProps (line 77) | interface SemanticPreviewProps {
FILE: packages/x/.dumi/hooks/use.ts
function use (line 1) | function use<T>(promise: PromiseLike<T>): T {
FILE: packages/x/.dumi/hooks/useFetch/cache.ts
class FetchCache (line 1) | class FetchCache {
method get (line 4) | get(key: string) {
method set (line 8) | set(key: string, value: PromiseLike<any>) {
method promise (line 12) | promise<T>(key: string, promiseFn: () => PromiseLike<T>): PromiseLike<...
FILE: packages/x/.dumi/hooks/useLocale.ts
type LocaleMap (line 3) | interface LocaleMap<
FILE: packages/x/.dumi/hooks/useLocation.ts
function clearPath (line 6) | function clearPath(path: string) {
function useLocation (line 10) | function useLocation() {
FILE: packages/x/.dumi/hooks/useLottie.ts
type UseLottieOptions (line 4) | interface UseLottieOptions extends Omit<AnimationConfig, 'container' | '...
FILE: packages/x/.dumi/hooks/useMenu.tsx
function isVersionNumber (line 11) | function isVersionNumber(value?: string) {
type MenuItemLabelProps (line 47) | interface MenuItemLabelProps {
type UseMenuOptions (line 87) | interface UseMenuOptions {
FILE: packages/x/.dumi/pages/404/index.tsx
type NotFoundProps (line 9) | interface NotFoundProps {
constant DIRECT_MAP (line 16) | const DIRECT_MAP: Record<string, string> = {
FILE: packages/x/.dumi/pages/index/common/Container.tsx
type ContainerProps (line 41) | interface ContainerProps extends Omit<React.HTMLAttributes<HTMLDivElemen...
FILE: packages/x/.dumi/pages/index/common/CustomizationProvider.tsx
constant LOCALES (line 33) | const LOCALES = {
constant DESIGN_STAGE_COLOR (line 85) | const DESIGN_STAGE_COLOR = {
FILE: packages/x/.dumi/pages/index/common/Introduction.tsx
type IntroductionItem (line 99) | interface IntroductionItem extends Omit<React.HTMLAttributes<HTMLDivElem...
type IntroductionProps (line 110) | interface IntroductionProps extends ContainerProps {
FILE: packages/x/.dumi/pages/index/components/Lottie.tsx
type Props (line 5) | interface Props {
FILE: packages/x/.dumi/pages/index/components/SceneIntroduction/Assistant.tsx
type ChatInput (line 13) | interface ChatInput {
method contentRender (line 38) | contentRender(content: ChatInput) {
FILE: packages/x/.dumi/pages/index/components/SceneIntroduction/Independent.tsx
type ChatInput (line 11) | interface ChatInput {
method contentRender (line 35) | contentRender(content: ChatInput) {
FILE: packages/x/.dumi/rehypeAntd.ts
function rehypeAntd (line 8) | function rehypeAntd(): UnifiedTransformer<HastRoot> {
FILE: packages/x/.dumi/remarkAnchor.ts
type Options (line 25) | interface Options {
FILE: packages/x/.dumi/remarkAntd.ts
function remarkMeta (line 4) | function remarkMeta(): UnifiedTransformer<any> {
FILE: packages/x/.dumi/theme/SiteThemeProvider.tsx
type NewToken (line 7) | interface NewToken {
type CustomToken (line 29) | interface CustomToken extends NewToken {}
FILE: packages/x/.dumi/theme/builtins/Antd.tsx
type AntdProps (line 4) | interface AntdProps {
function Antd (line 8) | function Antd(props: AntdProps) {
FILE: packages/x/.dumi/theme/builtins/Audio/index.tsx
type AudioProps (line 30) | interface AudioProps {
FILE: packages/x/.dumi/theme/builtins/Badge/index.tsx
type BadgeProps (line 5) | interface BadgeProps extends TagProps {
FILE: packages/x/.dumi/theme/builtins/ColorChunk/index.tsx
type ColorChunkProps (line 25) | interface ColorChunkProps {
FILE: packages/x/.dumi/theme/builtins/ComponentMeta/index.tsx
function isVersionNumber (line 39) | function isVersionNumber(value?: string) {
type ComponentMetaProps (line 67) | interface ComponentMetaProps {
FILE: packages/x/.dumi/theme/builtins/ComponentTokenTable/index.tsx
type SubTokenTableProps (line 89) | interface SubTokenTableProps {
type ComponentTokenTableProps (line 204) | interface ComponentTokenTableProps {
FILE: packages/x/.dumi/theme/builtins/Container/index.tsx
type ContainerProps (line 10) | interface ContainerProps {
FILE: packages/x/.dumi/theme/builtins/IconSearch/Category.tsx
type CategoryProps (line 29) | interface CategoryProps {
FILE: packages/x/.dumi/theme/builtins/IconSearch/CopyableIcon.tsx
type CopyableIconProps (line 88) | interface CopyableIconProps {
FILE: packages/x/.dumi/theme/builtins/IconSearch/IconSearch.tsx
type ThemeType (line 15) | enum ThemeType {
type IconSearchState (line 31) | interface IconSearchState {
FILE: packages/x/.dumi/theme/builtins/IconSearch/fields.ts
type Categories (line 241) | type Categories = typeof categories;
type CategoriesKeys (line 242) | type CategoriesKeys = keyof Categories;
FILE: packages/x/.dumi/theme/builtins/IconSearch/themeIcons.tsx
type CustomIconComponent (line 4) | type CustomIconComponent = React.ComponentType<
FILE: packages/x/.dumi/theme/builtins/ImagePreview/index.tsx
type ImagePreviewProps (line 6) | interface ImagePreviewProps {
function isGood (line 12) | function isGood(className: string): boolean {
function isBad (line 16) | function isBad(className: string): boolean {
function isInline (line 20) | function isInline(className: string): boolean {
function isGoodBadImg (line 24) | function isGoodBadImg(imgMeta: any): boolean {
function isCompareImg (line 28) | function isCompareImg(imgMeta: any): boolean {
type MateType (line 32) | interface MateType {
FILE: packages/x/.dumi/theme/builtins/InlinePopover/index.tsx
type InlinePopoverProps (line 16) | interface InlinePopoverProps {
FILE: packages/x/.dumi/theme/builtins/InstallDependencies/bun.tsx
type IconProps (line 5) | interface IconProps {
FILE: packages/x/.dumi/theme/builtins/InstallDependencies/index.tsx
type InstallProps (line 13) | interface InstallProps {
FILE: packages/x/.dumi/theme/builtins/InstallDependencies/npm.tsx
type IconProps (line 5) | interface IconProps {
FILE: packages/x/.dumi/theme/builtins/InstallDependencies/pnpm.tsx
type IconProps (line 5) | interface IconProps {
FILE: packages/x/.dumi/theme/builtins/InstallDependencies/utoo.tsx
type IconProps (line 5) | interface IconProps {
FILE: packages/x/.dumi/theme/builtins/InstallDependencies/yarn.tsx
type IconProps (line 5) | interface IconProps {
FILE: packages/x/.dumi/theme/builtins/LocaleLink/index.tsx
type LinkProps (line 6) | type LinkProps = Parameters<typeof Link>[0];
type LocaleLinkProps (line 8) | interface LocaleLinkProps extends LinkProps {
FILE: packages/x/.dumi/theme/builtins/MarkdownPluginsOverView.tsx
type PluginItem (line 8) | interface PluginItem {
FILE: packages/x/.dumi/theme/builtins/Previewer/CodeBlockButton.tsx
type CodeBlockButtonProps (line 39) | interface CodeBlockButtonProps {
FILE: packages/x/.dumi/theme/builtins/Previewer/CodePreviewer.tsx
function compress (line 28) | function compress(string: string): string {
FILE: packages/x/.dumi/theme/builtins/Previewer/Previewer.tsx
type AntdPreviewerProps (line 8) | interface AntdPreviewerProps extends IPreviewerProps {
FILE: packages/x/.dumi/theme/builtins/ResourceCards/index.tsx
type Resource (line 41) | type Resource = {
type ResourceCardProps (line 62) | type ResourceCardProps = {
type ResourceCardsProps (line 102) | type ResourceCardsProps = {
FILE: packages/x/.dumi/theme/builtins/Sandpack/index.tsx
type SandpackProps (line 43) | interface SandpackProps {
FILE: packages/x/.dumi/theme/builtins/SkillsOverView.tsx
type SkillItem (line 7) | interface SkillItem {
type SkillCategory (line 16) | interface SkillCategory {
type SkillMetaData (line 22) | interface SkillMetaData {
constant LOCALE_TEXTS (line 26) | const LOCALE_TEXTS = {
FILE: packages/x/.dumi/theme/builtins/TokenCompare/index.tsx
function color2Rgba (line 57) | function color2Rgba(color: string) {
type ColorCircleProps (line 61) | interface ColorCircleProps {
type TokenCompareProps (line 75) | interface TokenCompareProps {
FILE: packages/x/.dumi/theme/builtins/TokenTable/index.tsx
type TokenTableProps (line 13) | type TokenTableProps = {
type TokenData (line 18) | type TokenData = {
function useColumns (line 54) | function useColumns(): Exclude<TableProps<TokenData>['columns'], undefin...
FILE: packages/x/.dumi/theme/common/BehaviorMap/BehaviorMap.tsx
type BehaviorMapItem (line 31) | type BehaviorMapItem = {
type BehaviorMapProps (line 90) | type BehaviorMapProps = {
method getAnchorPoints (line 128) | getAnchorPoints() {
method getAnchorPoints (line 243) | getAnchorPoints() {
FILE: packages/x/.dumi/theme/common/BezierVisualizer/Visualizer.tsx
type VisualizerProps (line 4) | interface VisualizerProps {
FILE: packages/x/.dumi/theme/common/BezierVisualizer/index.tsx
type BezierVisualizerProps (line 8) | interface BezierVisualizerProps {
FILE: packages/x/.dumi/theme/common/CodePreview.tsx
constant LANGS (line 70) | const LANGS = {
type CodePreviewProps (line 76) | interface CodePreviewProps
function toReactComponent (line 86) | function toReactComponent(jsonML: any[]) {
FILE: packages/x/.dumi/theme/common/Color/ColorBlock.tsx
type ColorBlockProps (line 5) | interface ColorBlockProps {
FILE: packages/x/.dumi/theme/common/Color/ColorPatterns.tsx
type ColorPatternsProps (line 7) | interface ColorPatternsProps {
FILE: packages/x/.dumi/theme/common/Color/Palette.tsx
type PaletteProps (line 20) | interface PaletteProps {
FILE: packages/x/.dumi/theme/common/ComponentChangelog/ComponentChangelog.tsx
type MatchDeprecatedResult (line 14) | interface MatchDeprecatedResult {
type ChangelogInfo (line 19) | interface ChangelogInfo {
function matchDeprecated (line 27) | function matchDeprecated(v: string): MatchDeprecatedResult {
FILE: packages/x/.dumi/theme/common/EditButton.tsx
type EditButtonProps (line 8) | interface EditButtonProps {
FILE: packages/x/.dumi/theme/common/Link.tsx
type LinkProps (line 5) | interface LinkProps {
FILE: packages/x/.dumi/theme/common/LinkButton.tsx
type LinkButtonProps (line 7) | type LinkButtonProps = LinkProps &
FILE: packages/x/.dumi/theme/common/PrevAndNext.tsx
type MenuItemType (line 11) | type MenuItemType = Extract<GetProp<MenuProps, 'items'>[number], { type?...
FILE: packages/x/.dumi/theme/common/ThemeSwitch/index.tsx
type ThemeName (line 15) | type ThemeName = 'light' | 'dark' | 'compact' | 'motion-off' | 'happy-wo...
type ThemeSwitchProps (line 17) | interface ThemeSwitchProps {
FILE: packages/x/.dumi/theme/common/styles/SearchBar.tsx
constant THEME_PREFIX (line 5) | const THEME_PREFIX = 'dumi-default-';
FILE: packages/x/.dumi/theme/icons/DirectionIcon.tsx
type DirectionIconProps (line 5) | interface DirectionIconProps {
FILE: packages/x/.dumi/theme/icons/ExternalLinkIcon.tsx
type ExternalIconProps (line 4) | interface ExternalIconProps {
FILE: packages/x/.dumi/theme/layouts/GlobalLayout.tsx
type Entries (line 25) | type Entries<T> = { [K in keyof T]: [K, T[K]] }[keyof T][];
type SiteState (line 26) | type SiteState = Partial<Omit<SiteContextProps, 'updateSiteContext'>>;
constant RESPONSIVE_MOBILE (line 28) | const RESPONSIVE_MOBILE = 870;
constant ANT_DESIGN_NOT_SHOW_BANNER (line 29) | const ANT_DESIGN_NOT_SHOW_BANNER = 'ANT_DESIGN_NOT_SHOW_BANNER';
FILE: packages/x/.dumi/theme/layouts/IndexLayout/index.tsx
type IndexLayoutProps (line 6) | interface IndexLayoutProps {
FILE: packages/x/.dumi/theme/plugin.ts
function extractEmotionStyle (line 10) | function extractEmotionStyle(html: string) {
class AntdReactTechStack (line 37) | class AntdReactTechStack extends ReactTechStack {
method generatePreviewerProps (line 38) | generatePreviewerProps(...[props, opts]: any) {
FILE: packages/x/.dumi/theme/slots/Content/ColumnCard.tsx
constant ANTD_IMG_URL (line 10) | const ANTD_IMG_URL =
type Props (line 107) | interface Props {
FILE: packages/x/.dumi/theme/slots/Content/ContributorAvatar.tsx
type ContributorAvatarProps (line 5) | interface ContributorAvatarProps {
FILE: packages/x/.dumi/theme/slots/Content/Contributors.tsx
type ContributorsProps (line 36) | interface ContributorsProps {
FILE: packages/x/.dumi/theme/slots/Content/DocAnchor.tsx
type DocAnchorProps (line 63) | interface DocAnchorProps {
type AnchorItem (line 68) | interface AnchorItem {
FILE: packages/x/.dumi/theme/slots/Content/DocMeta.tsx
type AuthorAvatarPoprs (line 7) | interface AuthorAvatarPoprs {
FILE: packages/x/.dumi/theme/slots/Content/InViewSuspense.tsx
type InViewSuspenseProps (line 6) | type InViewSuspenseProps = Pick<IntersectionObserverProps, 'delay'> & {
FILE: packages/x/.dumi/theme/slots/Content/JuejinLogo.tsx
type Props (line 3) | interface Props {
FILE: packages/x/.dumi/theme/slots/DemoContext.ts
type DemoContextProps (line 3) | type DemoContextProps = {
FILE: packages/x/.dumi/theme/slots/Header/Actions.tsx
type HeaderActionsProps (line 38) | interface HeaderActionsProps extends SharedProps {
FILE: packages/x/.dumi/theme/slots/Header/Logo.tsx
type LogoProps (line 63) | interface LogoProps extends SharedProps {}
FILE: packages/x/.dumi/theme/slots/Header/Navigation.tsx
type HeaderNavigationProps (line 135) | interface HeaderNavigationProps extends SharedProps {
FILE: packages/x/.dumi/theme/slots/Header/SwitchBtn.tsx
type LangBtnProps (line 6) | interface LangBtnProps {
constant BASE_SIZE (line 18) | const BASE_SIZE = '1.2em';
FILE: packages/x/.dumi/theme/slots/Header/interface.ts
type SharedProps (line 1) | interface SharedProps {
FILE: packages/x/.dumi/theme/slots/SiteContext.ts
type SiteContextProps (line 6) | interface SiteContextProps {
FILE: packages/x/.dumi/theme/utils.ts
type Meta (line 6) | interface Meta {
type ModuleDataItem (line 19) | interface ModuleDataItem {
type Orders (line 23) | interface Orders {
function getMenuItems (line 27) | function getMenuItems(
function isZhCN (line 119) | function isZhCN(pathname: string) {
function getLocalizedPathname (line 123) | function getLocalizedPathname(
function ping (line 153) | function ping(callback: (status: string) => void) {
function isLocalStorageNameSupported (line 175) | function isLocalStorageNameSupported() {
function loadScript (line 188) | function loadScript(src: string) {
function getMetaDescription (line 199) | function getMetaDescription(jml?: any[] | null) {
FILE: packages/x/.dumi/theme/utils/tsToJs.ts
function parseText (line 73) | function parseText(tsCode: string): string {
FILE: packages/x/.fatherrc.ts
class CodecovWebpackPlugin (line 7) | class CodecovWebpackPlugin {
method constructor (line 9) | constructor(options = {}) {
method apply (line 12) | apply(compiler: any) {
FILE: packages/x/.jest.js
function getTestRegex (line 56) | function getTestRegex(libDir) {
FILE: packages/x/components/_util/hooks/use-collapsible.ts
type CollapsibleOptions (line 6) | type CollapsibleOptions = {
type Collapsible (line 26) | type Collapsible = boolean | CollapsibleOptions;
type RequiredCollapsibleOptions (line 28) | type RequiredCollapsibleOptions = Required<CollapsibleOptions>;
type UseCollapsible (line 30) | type UseCollapsible = (
FILE: packages/x/components/_util/hooks/use-proxy-imperative-handle.ts
function useProxyImperativeHandle (line 7) | function useProxyImperativeHandle<
FILE: packages/x/components/_util/hooks/use-shortcut-keys.ts
type ShortcutKeyActionType (line 8) | type ShortcutKeyActionType = {
type ShortcutKeyInfoType (line 17) | type ShortcutKeyInfoType = {
type ShortcutKeysInfo (line 22) | type ShortcutKeysInfo = Record<string, ShortcutKeyInfoType>;
type FlattenShortcutKeysType (line 24) | type FlattenShortcutKeysType = {
type Observer (line 30) | type Observer = (ShortcutKeyAction: ShortcutKeyActionType) => void;
type Subscribe (line 31) | type Subscribe = (fn: Observer) => void;
FILE: packages/x/components/_util/hooks/use-x-component-config.ts
type MergeXComponentsConfig (line 13) | type MergeXComponentsConfig = XComponentsConfig;
FILE: packages/x/components/_util/type.ts
type AnyObject (line 1) | type AnyObject = Record<PropertyKey, any>;
type PrefixKeysInfo (line 2) | type PrefixKeysInfo = [keyof KeyboardEvent, string, string];
type PrefixKeysType (line 3) | type PrefixKeysType = {
type CodeKeyType (line 9) | type CodeKeyType = number | 'number' | keyof PrefixKeysType;
type ShortcutKeys (line 10) | type ShortcutKeys<CustomKey = number | 'number'> =
type DirectionType (line 14) | type DirectionType = 'ltr' | 'rtl' | undefined;
FILE: packages/x/components/_util/warning.ts
function noop (line 5) | function noop() {}
function resetWarned (line 9) | function resetWarned() {
type Warning (line 14) | type Warning = (valid: boolean, component: string, message?: string) => ...
type BaseTypeWarning (line 28) | type BaseTypeWarning = (
type TypeWarning (line 39) | type TypeWarning = BaseTypeWarning & {
type WarningContextProps (line 43) | interface WarningContextProps {
FILE: packages/x/components/actions/ActionsAudio.tsx
type SemanticType (line 12) | type SemanticType = 'root' | 'default' | 'running' | 'error' | 'loading';
type ActionsAudioProps (line 13) | interface ActionsAudioProps extends Omit<React.HTMLAttributes<HTMLDivEle...
FILE: packages/x/components/actions/ActionsCopy.tsx
type SemanticType (line 9) | type SemanticType = 'root';
type ActionsCopyProps (line 10) | interface ActionsCopyProps extends Omit<React.HTMLAttributes<HTMLDivElem...
FILE: packages/x/components/actions/ActionsFeedback.tsx
type FEEDBACK_VALUE (line 12) | enum FEEDBACK_VALUE {
type SemanticType (line 18) | type SemanticType = 'like' | 'liked' | 'dislike' | 'disliked' | 'root';
type ActionsFeedbackProps (line 19) | interface ActionsFeedbackProps
FILE: packages/x/components/actions/ActionsItem.tsx
type ACTIONS_ITEM_STATUS (line 9) | enum ACTIONS_ITEM_STATUS {
type SemanticType (line 27) | type SemanticType = 'root' | 'default' | 'running' | 'error' | 'loading';
type ActionsItemProps (line 29) | interface ActionsItemProps extends Omit<React.HTMLAttributes<HTMLDivElem...
FILE: packages/x/components/actions/demo/sub.tsx
method onOk (line 34) | onOk() {
method onCancel (line 37) | onCancel() {
FILE: packages/x/components/actions/index.tsx
type ActionsRef (line 18) | type ActionsRef = {
type CompoundedActions (line 137) | type CompoundedActions = typeof ForwardActions & {
FILE: packages/x/components/actions/interface.ts
type SemanticType (line 4) | type SemanticType = 'root' | 'item' | 'itemDropdown';
type ActionsProps (line 6) | interface ActionsProps
type ActionsItemProps (line 67) | interface ActionsItemProps extends Omit<ActionsProps, 'items' | 'variant...
type ItemType (line 71) | interface ItemType {
FILE: packages/x/components/actions/style/index.ts
type ComponentToken (line 10) | interface ComponentToken {}
type ActionsToken (line 12) | interface ActionsToken extends FullToken<'Actions'> {}
FILE: packages/x/components/attachments/DropArea.tsx
type DropUploaderProps (line 6) | interface DropUploaderProps {
function DropArea (line 14) | function DropArea(props: DropUploaderProps) {
FILE: packages/x/components/attachments/FileList/Progress.tsx
type ProgressProps (line 4) | interface ProgressProps {
function Progress (line 9) | function Progress(props: ProgressProps) {
FILE: packages/x/components/attachments/FileList/index.tsx
type SemanticType (line 16) | type SemanticType = 'list' | 'placeholder' | 'upload';
type FileListProps (line 17) | interface FileListProps {
function FileList (line 33) | function FileList(props: FileListProps) {
FILE: packages/x/components/attachments/PlaceholderUploader.tsx
type PlaceholderConfig (line 6) | interface PlaceholderConfig {
type PlaceholderType (line 12) | type PlaceholderType = PlaceholderConfig | React.ReactElement;
type PlaceholderProps (line 14) | interface PlaceholderProps {
FILE: packages/x/components/attachments/SilentUploader.tsx
type SilentUploaderProps (line 4) | interface SilentUploaderProps {
FILE: packages/x/components/attachments/__tests__/util.test.ts
method constructor (line 39) | constructor() {
FILE: packages/x/components/attachments/context.tsx
type AttachmentContextProps (line 3) | interface AttachmentContextProps {
FILE: packages/x/components/attachments/demo/placeholder.tsx
type ExtractFunc (line 55) | type ExtractFunc<T> = T extends (...args: any) => any ? T : never;
FILE: packages/x/components/attachments/demo/select-files.tsx
constant MAX_COUNT (line 11) | const MAX_COUNT = 5;
FILE: packages/x/components/attachments/index.tsx
type SemanticType (line 20) | type SemanticType = 'list' | 'placeholder' | 'upload';
type Attachment (line 21) | interface Attachment<T = any>
type AttachmentsProps (line 28) | interface AttachmentsProps<T = any> extends Omit<UploadProps, 'fileList'> {
type AttachmentsRef (line 56) | interface AttachmentsRef {
FILE: packages/x/components/attachments/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {
type AttachmentsToken (line 11) | interface AttachmentsToken extends FullToken<'Attachments'> {}
FILE: packages/x/components/attachments/util.ts
constant MEASURE_SIZE (line 5) | const MEASURE_SIZE = 200;
function previewImage (line 7) | function previewImage(file: File | Blob): Promise<string> {
FILE: packages/x/components/bubble/Bubble.tsx
type ForwardBubbleType (line 261) | type ForwardBubbleType = <T extends BubbleContentType = string>(
FILE: packages/x/components/bubble/BubbleList.tsx
type BubblesRecord (line 23) | interface BubblesRecord {
function roleCfgIsFunction (line 27) | function roleCfgIsFunction(roleCfg: RoleProps | FuncRoleProps): roleCfg ...
FILE: packages/x/components/bubble/Divider.tsx
type ForwardDividerBubbleType (line 67) | type ForwardDividerBubbleType = <T extends BubbleContentType = string>(
FILE: packages/x/components/bubble/EditableContent.tsx
function isBlock (line 13) | function isBlock(el: HTMLElement): boolean {
function getPlainTextWithFormat (line 18) | function getPlainTextWithFormat(dom: HTMLElement) {
FILE: packages/x/components/bubble/System.tsx
type ForwardSystemBubbleType (line 61) | type ForwardSystemBubbleType = <T extends BubbleContentType = string>(
FILE: packages/x/components/bubble/__tests__/list-scroll.test.tsx
function spyOnGetComputedStyle (line 43) | function spyOnGetComputedStyle(reverse = true) {
FILE: packages/x/components/bubble/demo/custom-content.tsx
type ContentType (line 5) | type ContentType = {
FILE: packages/x/components/bubble/demo/list-scroll.tsx
function useBubbleList (line 34) | function useBubbleList(initialItems: BubbleItemType[] = []) {
FILE: packages/x/components/bubble/demo/list.tsx
function useBubbleList (line 50) | function useBubbleList(initialItems: BubbleItemType[] = []) {
FILE: packages/x/components/bubble/demo/stream.tsx
function useStreamContent (line 8) | function useStreamContent(
FILE: packages/x/components/bubble/hooks/useCompatibleScroll.ts
function isReverse (line 3) | function isReverse(scrollDom: HTMLElement) {
function useCompatibleScroll (line 12) | function useCompatibleScroll(
FILE: packages/x/components/bubble/hooks/useTyping.ts
type OutputData (line 5) | interface OutputData {
function getLCP (line 12) | function getLCP(strs: string[]) {
function useTyping (line 23) | function useTyping({
FILE: packages/x/components/bubble/index.tsx
type BubbleType (line 14) | type BubbleType = typeof Bubble & {
FILE: packages/x/components/bubble/interface.ts
type BubbleContentType (line 4) | type BubbleContentType = React.ReactNode | AnyObject;
type SemanticType (line 6) | type SemanticType = 'root' | 'content' | 'body' | 'header' | 'footer' | ...
type ListSemanticType (line 7) | type ListSemanticType =
type BubbleAnimationOption (line 20) | interface BubbleAnimationOption {
type EditableBubbleOption (line 43) | interface EditableBubbleOption {
type BubbleSlot (line 58) | type BubbleSlot<ContentType> =
type BubbleRef (line 62) | interface BubbleRef {
type MessageStatus (line 66) | enum MessageStatus {
type Info (line 75) | type Info = {
type Placement (line 80) | type Placement = 'start' | 'end';
type BubbleProps (line 81) | interface BubbleProps<ContentType extends BubbleContentType = string>
type SystemBubbleSemanticName (line 150) | type SystemBubbleSemanticName = 'root' | 'body' | 'content';
type SystemBubbleProps (line 152) | interface SystemBubbleProps<ContentType extends BubbleContentType = string>
type DividerBubbleProps (line 161) | interface DividerBubbleProps<ContentType extends BubbleContentType = str...
type BubbleListRef (line 172) | interface BubbleListRef {
type RemainRole (line 189) | type RemainRole = 'ai' | 'system' | 'user' | 'divider';
type AnyStr (line 191) | type AnyStr = string;
type BubbleItemType (line 193) | type BubbleItemType = (Omit<BubbleProps<any>, 'styles' | 'classNames'> &
type RoleProps (line 209) | type RoleProps = Pick<
type FuncRoleProps (line 234) | type FuncRoleProps = (data: BubbleItemType) => RoleProps;
type DividerRoleProps (line 236) | type DividerRoleProps = Partial<DividerBubbleProps>;
type FuncDividerRoleProps (line 237) | type FuncDividerRoleProps = (data: BubbleItemType) => DividerRoleProps;
type RoleType (line 239) | type RoleType = Partial<
type BubbleListProps (line 245) | interface BubbleListProps extends Omit<React.HTMLAttributes<HTMLDivEleme...
FILE: packages/x/components/bubble/loading.tsx
type LoadingProps (line 3) | interface LoadingProps {
FILE: packages/x/components/bubble/style/bubble.ts
type BubbleToken (line 43) | interface BubbleToken extends FullToken<'Bubble'> {}
FILE: packages/x/components/bubble/style/index.ts
type ComponentToken (line 17) | interface ComponentToken {
FILE: packages/x/components/code-highlighter/interface.ts
type SemanticType (line 4) | type SemanticType = 'root' | 'header' | 'headerTitle' | 'code';
type CodeHighlighterProps (line 6) | interface CodeHighlighterProps
FILE: packages/x/components/code-highlighter/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {
type CodeHighlighterToken (line 24) | interface CodeHighlighterToken extends FullToken<'CodeHighlighter'> {}
FILE: packages/x/components/conversations/Creation.tsx
type CreationLabelInfo (line 6) | type CreationLabelInfo = {
type CreationProps (line 10) | interface CreationProps {
FILE: packages/x/components/conversations/GroupTitle.tsx
type GroupTitleProps (line 9) | interface GroupTitleProps {
type GroupTitleContextType (line 13) | interface GroupTitleContextType {
FILE: packages/x/components/conversations/Item.tsx
type ConversationsItemProps (line 11) | interface ConversationsItemProps
FILE: packages/x/components/conversations/hooks/useCreation.tsx
type CreationLabelProps (line 7) | interface CreationLabelProps {
type BaseConfig (line 29) | interface BaseConfig {
FILE: packages/x/components/conversations/hooks/useGroupable.ts
type GroupConfig (line 6) | interface GroupConfig {
type GroupInfoType (line 11) | interface GroupInfoType {
type GroupList (line 18) | type GroupList = GroupInfoType[];
type KeyList (line 20) | type KeyList = { key: string; disabled?: boolean }[];
FILE: packages/x/components/conversations/index.tsx
type SemanticType (line 20) | type SemanticType = 'root' | 'creation' | 'group' | 'item';
type ConversationsProps (line 25) | interface ConversationsProps extends React.HTMLAttributes<HTMLUListEleme...
type CompoundedComponent (line 102) | type CompoundedComponent = typeof ForwardConversations & {
type ConversationsRef (line 106) | type ConversationsRef = {
FILE: packages/x/components/conversations/interface.ts
type ConversationItemType (line 10) | interface ConversationItemType
type DividerItemType (line 44) | interface DividerItemType {
type ItemType (line 50) | type ItemType = ConversationItemType | DividerItemType;
type GroupLabel (line 52) | type GroupLabel =
type Collapsible (line 62) | type Collapsible = boolean | ((group: string) => boolean);
type GroupableProps (line 63) | interface GroupableProps extends CollapsibleOptions {
FILE: packages/x/components/conversations/style/index.ts
type ComponentToken (line 8) | interface ComponentToken {
type ConversationsToken (line 30) | interface ConversationsToken extends FullToken<'Conversations'> {}
FILE: packages/x/components/file-card/FileCard.tsx
type CARD_TYPE (line 28) | enum CARD_TYPE {
type SemanticType (line 35) | type SemanticType = 'root' | 'file' | 'icon' | 'name' | 'description';
type PresetIcons (line 36) | type PresetIcons =
type CardInfo (line 51) | type CardInfo = {
type ExtendNode (line 60) | type ExtendNode = false | React.ReactNode | ((info: CardInfo) => React.R...
type FileCardProps (line 61) | interface FileCardProps
constant IMAGE_EXT (line 93) | const IMAGE_EXT = ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg', 'j...
constant AUDIO_EXT (line 94) | const AUDIO_EXT = ['mp3', 'wav', 'flac', 'ape', 'aac', 'ogg'];
constant VIDEO_EXT (line 95) | const VIDEO_EXT = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv'];
constant PRESET_FILE_ICONS (line 97) | const PRESET_FILE_ICONS: {
constant DEFAULT_ICON (line 177) | const DEFAULT_ICON = {
FILE: packages/x/components/file-card/List.tsx
type SemanticType (line 11) | type SemanticType = 'root' | 'card';
type FileCardListProps (line 12) | interface FileCardListProps {
FILE: packages/x/components/file-card/components/File.tsx
type FileProps (line 6) | interface FileProps {
FILE: packages/x/components/file-card/components/ImageIcon.tsx
type ImageIconProps (line 6) | interface ImageIconProps {
type ImageIconSizeType (line 22) | type ImageIconSizeType = typeof ImageIconSize;
type ImageIconSizeKey (line 23) | type ImageIconSizeKey = keyof ImageIconSizeType;
FILE: packages/x/components/file-card/components/ImageLoading.tsx
type ImageLoadingProps (line 8) | type ImageLoadingProps = {
FILE: packages/x/components/file-card/components/usePercent.ts
constant AUTO_INTERVAL (line 3) | const AUTO_INTERVAL = 200;
constant STEP_BUCKETS (line 4) | const STEP_BUCKETS: [limit: number, stepPtg: number][] = [
function usePercent (line 10) | function usePercent(
FILE: packages/x/components/file-card/index.tsx
type FileCardType (line 4) | type FileCardType = typeof FileCard & {
FILE: packages/x/components/file-card/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {}
type FileCardToken (line 8) | interface FileCardToken extends FullToken<'FileCard'> {}
FILE: packages/x/components/file-card/utils.ts
function getSize (line 1) | function getSize(size: number) {
function matchExt (line 14) | function matchExt(suffix: string, ext: string[]) {
FILE: packages/x/components/folder/DirectoryTree.tsx
type FolderTreeData (line 10) | interface FolderTreeData {
type DirectoryTreeProps (line 19) | interface DirectoryTreeProps {
FILE: packages/x/components/folder/FilePreview.tsx
type FileViewProps (line 15) | interface FileViewProps {
FILE: packages/x/components/folder/demo/custom-service.tsx
class CustomFileContentService (line 37) | class CustomFileContentService {
method loadFileContent (line 287) | async loadFileContent(filePath: string): Promise<string> {
FILE: packages/x/components/folder/demo/searchable.tsx
function countFiles (line 178) | function countFiles(data: FolderProps['treeData']): number {
FILE: packages/x/components/folder/index.tsx
type FileContentService (line 16) | interface FileContentService {
type SemanticType (line 20) | type SemanticType =
type FolderProps (line 29) | interface FolderProps {
type FolderRef (line 90) | type FolderRef = {
FILE: packages/x/components/folder/style/index.tsx
type ComponentToken (line 5) | interface ComponentToken {
type FolderToken (line 13) | interface FolderToken extends FullToken<'Folder'> {}
FILE: packages/x/components/locale/context.ts
type LocaleContextProps (line 5) | type LocaleContextProps = Locale & { exist?: boolean };
FILE: packages/x/components/locale/index.tsx
constant ANT_MARK (line 9) | const ANT_MARK = 'internalMark';
type xLocale (line 11) | interface xLocale {
type Locale (line 48) | type Locale = xLocale & antdLocale;
type LocaleProviderProps (line 50) | interface LocaleProviderProps {
FILE: packages/x/components/locale/useLocale.ts
type LocaleComponentName (line 9) | type LocaleComponentName = Exclude<keyof xLocale, 'locale'>;
type mergeLocaleComponentName (line 10) | type mergeLocaleComponentName = LocaleComponentName | AntdLocaleContextP...
FILE: packages/x/components/mermaid/Mermaid.tsx
type MermaidType (line 18) | type MermaidType = 'root' | 'header' | 'graph' | 'code';
type MermaidProps (line 20) | interface MermaidProps {
type RenderType (line 40) | enum RenderType {
FILE: packages/x/components/mermaid/__tests__/index.test.tsx
type MockMermaid (line 68) | interface MockMermaid {
FILE: packages/x/components/mermaid/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {
type MermaidToken (line 32) | interface MermaidToken extends FullToken<'Mermaid'> {}
FILE: packages/x/components/notification/__tests__/index.test.tsx
class MockNotification (line 4) | class MockNotification {
method constructor (line 14) | constructor(title: string, options?: NotificationOptions) {
method onshow (line 28) | get onshow(): (this: Notification, ev: Event) => any {
method onshow (line 31) | set onshow(callback: (this: Notification, ev: Event) => any) {
method onclose (line 39) | get onclose(): (this: any, ev: Event) => any {
method onclose (line 42) | set onclose(callback: (this: MockNotification, ev: Event) => any) {
method onerror (line 45) | get onerror(): (this: Notification, ev: Event) => any {
method onerror (line 48) | set onerror(callback: (this: Notification, ev: Event) => any) {
method requestPermission (line 55) | static requestPermission() {
FILE: packages/x/components/notification/index.tsx
class XNotification (line 7) | class XNotification {
method constructor (line 10) | constructor() {
method permission (line 19) | public get permission(): NotificationPermission {
method open (line 26) | public open(arg: XNotificationOpenArgs): void {
method requestPermission (line 62) | public async requestPermission(): Promise<NotificationPermission> {
method _requestPermission (line 65) | private async _requestPermission(
method useNotification (line 79) | public useNotification(): useNotificationType {
method close (line 92) | public close(tags?: string[]): void {
FILE: packages/x/components/notification/interface.ts
type TypeOpen (line 3) | type TypeOpen = NotificationOptions & {
type useNotificationType (line 12) | type useNotificationType = [
type XNotificationOpenArgs (line 23) | type XNotificationOpenArgs = TypeOpen;
FILE: packages/x/components/prompts/index.tsx
type BasePromptsItemType (line 11) | interface BasePromptsItemType {
type PromptsItemType (line 43) | interface PromptsItemType extends BasePromptsItemType {
type SemanticType (line 47) | type SemanticType =
type PromptsProps (line 56) | interface PromptsProps
type ActionsRef (line 123) | type ActionsRef = {
type CompoundedPrompts (line 288) | type CompoundedPrompts = typeof ForwardPrompts;
FILE: packages/x/components/prompts/style/index.ts
type ComponentToken (line 8) | interface ComponentToken {}
type PromptsToken (line 10) | interface PromptsToken extends FullToken<'Prompts'> {}
FILE: packages/x/components/sender/SenderHeader.tsx
type SendHeaderContextProps (line 8) | interface SendHeaderContextProps {
type SemanticType (line 14) | type SemanticType = 'header' | 'content';
type SenderHeaderProps (line 16) | interface SenderHeaderProps
function SenderHeader (line 41) | function SenderHeader(props: SenderHeaderProps) {
FILE: packages/x/components/sender/SenderSwitch.tsx
type SemanticType (line 12) | type SemanticType = 'root' | 'content' | 'icon' | 'title';
type SenderSwitchProps (line 13) | interface SenderSwitchProps
type SenderSwitchRef (line 33) | type SenderSwitchRef = {
FILE: packages/x/components/sender/__tests__/slot.test.tsx
type MockRange (line 69) | interface MockRange {
FILE: packages/x/components/sender/components/ActionButton.tsx
type ActionButtonContextProps (line 5) | interface ActionButtonContextProps {
type ActionButtonProps (line 22) | interface ActionButtonProps extends ButtonProps {
FILE: packages/x/components/sender/components/ClearButton.tsx
function ClearButton (line 6) | function ClearButton(props: ButtonProps, ref: React.Ref<HTMLButtonElemen...
FILE: packages/x/components/sender/components/SendButton.tsx
function SendButton (line 6) | function SendButton(props: ButtonProps, ref: React.Ref<HTMLButtonElement...
FILE: packages/x/components/sender/components/Skill.tsx
type ClosableConfig (line 7) | interface ClosableConfig {
type SkillProps (line 13) | interface SkillProps extends SkillType {
FILE: packages/x/components/sender/components/SlotTextArea.tsx
type SlotTextAreaRef (line 24) | interface SlotTextAreaRef {
type InputFocusOptions (line 42) | type InputFocusOptions = {
type SlotFocusOptions (line 47) | type SlotFocusOptions = {
type FocusOptions (line 53) | type FocusOptions = SlotFocusOptions | InputFocusOptions;
type SlotNode (line 55) | type SlotNode = Text | Document | HTMLSpanElement;
FILE: packages/x/components/sender/components/SpeechButton/RecordingIcon.tsx
type RecordingIconProps (line 4) | interface RecordingIconProps {
constant SIZE (line 8) | const SIZE = 1000;
constant COUNT (line 9) | const COUNT = 4;
constant RECT_WIDTH (line 10) | const RECT_WIDTH = 140;
constant RECT_RADIUS (line 11) | const RECT_RADIUS = RECT_WIDTH / 2;
constant RECT_HEIGHT_MIN (line 12) | const RECT_HEIGHT_MIN = 250;
constant RECT_HEIGHT_MAX (line 13) | const RECT_HEIGHT_MAX = 500;
constant DURATION (line 14) | const DURATION = 0.8;
function RecordingIcon (line 16) | function RecordingIcon({ className }: RecordingIconProps) {
FILE: packages/x/components/sender/components/TextArea.tsx
function getComponent (line 10) | function getComponent<T>(
type TextAreaRef (line 18) | interface TextAreaRef {
FILE: packages/x/components/sender/demo/slot-filling.tsx
type SlotConfig (line 5) | type SlotConfig = SenderProps['slotConfig'];
FILE: packages/x/components/sender/demo/slot-with-suggestion.tsx
type SuggestionItems (line 110) | type SuggestionItems = Exclude<GetProp<typeof Suggestion, 'items'>, () =...
FILE: packages/x/components/sender/hooks/use-cursor.ts
type CursorPosition (line 5) | interface CursorPosition {
type UseCursorOptions (line 10) | interface UseCursorOptions {
type UseCursorReturn (line 20) | interface UseCursorReturn {
FILE: packages/x/components/sender/hooks/use-input-height.ts
constant SENDER_INPUT_PADDING_HEIGHT (line 4) | const SENDER_INPUT_PADDING_HEIGHT = 4.35;
FILE: packages/x/components/sender/hooks/use-slot-builder.ts
type UseSlotBuilderOptions (line 5) | interface UseSlotBuilderOptions {
type UseSlotBuilderReturn (line 12) | interface UseSlotBuilderReturn {
FILE: packages/x/components/sender/hooks/use-slot-config-state.ts
type NodeInfo (line 4) | interface NodeInfo {
type SlotValues (line 13) | type SlotValues = Record<string, any>;
constant SUPPORTED_INPUT_TYPES (line 16) | const SUPPORTED_INPUT_TYPES = new Set(['input', 'select', 'custom', 'con...
FILE: packages/x/components/sender/hooks/use-speech.ts
type ControlledSpeechConfig (line 5) | type ControlledSpeechConfig = {
type AllowSpeech (line 10) | type AllowSpeech = boolean | ControlledSpeechConfig;
function useSpeech (line 12) | function useSpeech(
FILE: packages/x/components/sender/index.tsx
type CompoundedSender (line 14) | type CompoundedSender = typeof ForwardSender & {
FILE: packages/x/components/sender/interface.ts
type TextareaProps (line 7) | type TextareaProps = GetProps<typeof import('antd').Input.TextArea>;
type SubmitType (line 9) | type SubmitType = 'enter' | 'shiftEnter';
type SemanticType (line 11) | type SemanticType = 'root' | 'prefix' | 'input' | 'suffix' | 'footer' | ...
type InsertPosition (line 13) | type InsertPosition = 'start' | 'end' | 'cursor';
type SenderComponents (line 14) | interface SenderComponents {
type ActionsComponents (line 18) | type ActionsComponents = {
type BaseNode (line 25) | type BaseNode = React.ReactNode | false;
type NodeRender (line 26) | type NodeRender = (
type SlotConfigBaseType (line 33) | interface SlotConfigBaseType {
type SlotConfigTextType (line 38) | interface SlotConfigTextType extends SlotConfigBaseType {
type SlotConfigContentType (line 46) | interface SlotConfigContentType extends SlotConfigBaseType {
type SkillType (line 54) | interface SkillType {
type SlotConfigInputType (line 67) | interface SlotConfigInputType extends SlotConfigBaseType {
type SlotConfigSelectType (line 76) | interface SlotConfigSelectType extends SlotConfigBaseType {
type SlotConfigTagType (line 86) | interface SlotConfigTagType extends SlotConfigBaseType {
type SlotConfigCustomType (line 95) | interface SlotConfigCustomType extends SlotConfigBaseType {
type SlotConfigType (line 113) | type SlotConfigType =
type EventType (line 121) | type EventType =
type SenderProps (line 124) | interface SenderProps
type SenderRef (line 160) | type SenderRef = Omit<TextAreaRef, 'nativeElement'> &
FILE: packages/x/components/sender/style/index.ts
type ComponentToken (line 10) | interface ComponentToken {
type SenderToken (line 80) | interface SenderToken extends FullToken<'Sender'> {
FILE: packages/x/components/sources/Sources.tsx
type SemanticType (line 16) | type SemanticType = 'root' | 'title' | 'content';
type SourcesItem (line 18) | interface SourcesItem {
type SourcesProps (line 26) | interface SourcesProps
type SourcesRef (line 46) | type SourcesRef = {
FILE: packages/x/components/sources/components/CarouselCard.tsx
type CarouselCardProps (line 7) | interface CarouselCardProps {
FILE: packages/x/components/sources/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {}
type SourcesToken (line 9) | interface SourcesToken extends FullToken<'Sources'> {}
FILE: packages/x/components/suggestion/demo/_semantic.tsx
type SuggestionItems (line 21) | type SuggestionItems = Exclude<GetProp<typeof Suggestion, 'items'>, () =...
FILE: packages/x/components/suggestion/demo/basic.tsx
type SuggestionItems (line 6) | type SuggestionItems = Exclude<GetProp<typeof Suggestion, 'items'>, () =...
FILE: packages/x/components/suggestion/demo/block.tsx
type SuggestionItems (line 5) | type SuggestionItems = Exclude<SuggestionProps['items'], () => void>;
FILE: packages/x/components/suggestion/index.tsx
type SemanticType (line 12) | type SemanticType = 'root' | 'content' | 'popup';
type SuggestionItem (line 13) | interface SuggestionItem extends AnyObject {
type RenderChildrenProps (line 21) | interface RenderChildrenProps<T> {
type SuggestionProps (line 27) | interface SuggestionProps<T = any>
function Suggestion (line 62) | function Suggestion<T = any>(props: SuggestionProps<T>) {
FILE: packages/x/components/suggestion/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {}
type SuggestionToken (line 8) | interface SuggestionToken extends FullToken<'Suggestion'> {}
FILE: packages/x/components/suggestion/useActive.ts
function useActive (line 8) | function useActive(
FILE: packages/x/components/theme/context.ts
type ComponentsToken (line 7) | type ComponentsToken = {
type DesignTokenProviderProps (line 13) | interface DesignTokenProviderProps {
FILE: packages/x/components/theme/interface/alias.ts
type AliasToken (line 10) | interface AliasToken extends MapToken {
FILE: packages/x/components/theme/interface/components.ts
type ComponentTokenMap (line 17) | interface ComponentTokenMap {
FILE: packages/x/components/theme/interface/cssinjs-utils.ts
type GlobalToken (line 14) | type GlobalToken = GlobalTokenTypeUtil<ComponentTokenMap, AliasToken>;
type OverrideToken (line 16) | type OverrideToken = OverrideTokenTypeUtil<ComponentTokenMap, AliasToken>;
type OverrideComponent (line 18) | type OverrideComponent = TokenMapKey<ComponentTokenMap>;
type FullToken (line 20) | type FullToken<C extends TokenMapKey<ComponentTokenMap>> = FullTokenType...
type GetDefaultToken (line 26) | type GetDefaultToken<C extends TokenMapKey<ComponentTokenMap>> = GetDefa...
type GenStyleFn (line 32) | type GenStyleFn<C extends TokenMapKey<ComponentTokenMap>> = GenStyleFnTy...
type GenerateStyle (line 41) | type GenerateStyle<
FILE: packages/x/components/theme/interface/index.ts
type MappingAlgorithm (line 10) | type MappingAlgorithm = DerivativeFunc<SeedToken, MapToken>;
type UseComponentStyleResult (line 41) | type UseComponentStyleResult = [(node: React.ReactNode) => React.ReactEl...
type GenerateStyle (line 43) | type GenerateStyle<
FILE: packages/x/components/theme/interface/maps/colors.ts
type ColorNeutralMapToken (line 1) | interface ColorNeutralMapToken {
type ColorPrimaryMapToken (line 160) | interface ColorPrimaryMapToken {
type ColorSuccessMapToken (line 242) | interface ColorSuccessMapToken {
type ColorWarningMapToken (line 324) | interface ColorWarningMapToken {
type ColorInfoMapToken (line 406) | interface ColorInfoMapToken {
type ColorErrorMapToken (line 488) | interface ColorErrorMapToken {
type ColorLinkMapToken (line 586) | interface ColorLinkMapToken {
type ColorMapToken (line 610) | interface ColorMapToken
FILE: packages/x/components/theme/interface/maps/font.ts
type FontMapToken (line 1) | interface FontMapToken {
FILE: packages/x/components/theme/interface/maps/index.ts
type CommonMapToken (line 13) | interface CommonMapToken extends StyleMapToken {
type MapToken (line 37) | interface MapToken
FILE: packages/x/components/theme/interface/maps/size.ts
type SizeMapToken (line 1) | interface SizeMapToken {
type HeightMapToken (line 47) | interface HeightMapToken {
FILE: packages/x/components/theme/interface/maps/style.ts
type StyleMapToken (line 1) | interface StyleMapToken {
FILE: packages/x/components/theme/interface/presetColors.ts
type PresetColorKey (line 17) | type PresetColorKey = (typeof PresetColors)[number];
type PresetColorType (line 19) | type PresetColorType = Record<PresetColorKey, string>;
type ColorPaletteKeyIndex (line 21) | type ColorPaletteKeyIndex = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
type LegacyColorPalettes (line 23) | type LegacyColorPalettes = {
type ColorPalettes (line 30) | type ColorPalettes = {
FILE: packages/x/components/theme/interface/seeds.ts
type SeedToken (line 8) | interface SeedToken extends PresetColorType {
FILE: packages/x/components/theme/useToken.ts
function useInternalToken (line 101) | function useInternalToken(): [
function useToken (line 140) | function useToken() {
FILE: packages/x/components/theme/util/alias.ts
type RawMergedToken (line 8) | type RawMergedToken = MapToken & OverrideToken & { override: Partial<Ali...
function formatToken (line 15) | function formatToken(derivativeToken: RawMergedToken): AliasToken {
FILE: packages/x/components/theme/util/getAlphaColor.ts
function isStableColor (line 3) | function isStableColor(color: number): boolean {
function getAlphaColor (line 7) | function getAlphaColor(frontColor: string, backgroundColor: string): str...
FILE: packages/x/components/think/Think.tsx
type SemanticType (line 15) | type SemanticType = 'root' | 'status' | 'content';
type ThinkProps (line 30) | interface ThinkProps extends Omit<React.HTMLAttributes<HTMLDivElement>, ...
type ThinkRef (line 46) | type ThinkRef = {
FILE: packages/x/components/think/style/index.ts
type ComponentToken (line 5) | interface ComponentToken {
type ThinkToken (line 18) | interface ThinkToken extends FullToken<'Think'> {}
FILE: packages/x/components/thought-chain/Item.tsx
type VARIANT (line 9) | enum VARIANT {
type SemanticType (line 15) | type SemanticType = 'root' | 'icon' | 'title' | 'description';
type ThoughtChainItemProps (line 17) | interface ThoughtChainItemProps
type ItemRef (line 97) | type ItemRef = {
FILE: packages/x/components/thought-chain/Node.tsx
type ThoughtChainNodeProps (line 22) | interface ThoughtChainNodeProps extends Omit<React.HTMLAttributes<HTMLDi...
FILE: packages/x/components/thought-chain/Status.tsx
type THOUGHT_CHAIN_ITEM_STATUS (line 10) | enum THOUGHT_CHAIN_ITEM_STATUS {
type StatusProps (line 29) | interface StatusProps {
FILE: packages/x/components/thought-chain/demo/status.tsx
function getStatusIcon (line 7) | function getStatusIcon(status: ThoughtChainItemType['status']) {
function addChainItem (line 44) | function addChainItem() {
function updateChainItem (line 53) | async function updateChainItem(status: ThoughtChainItemType['status']) {
FILE: packages/x/components/thought-chain/index.tsx
type CompoundedComponent (line 14) | type CompoundedComponent = typeof ForwardThoughtChain & {
FILE: packages/x/components/thought-chain/interface.ts
type ThoughtChainItemType (line 4) | interface ThoughtChainItemType {
type SemanticType (line 58) | type SemanticType =
type ThoughtChainProps (line 66) | interface ThoughtChainProps extends Omit<React.HTMLAttributes<HTMLDivEle...
FILE: packages/x/components/thought-chain/style/index.ts
type ComponentToken (line 10) | interface ComponentToken {
type ThoughtChainToken (line 98) | interface ThoughtChainToken extends FullToken<'ThoughtChain'> {}
FILE: packages/x/components/welcome/index.tsx
type SemanticType (line 10) | type SemanticType = 'root' | 'title' | 'description' | 'icon' | 'extra';
type WelcomeProps (line 12) | interface WelcomeProps {
FILE: packages/x/components/welcome/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {}
type WelcomeToken (line 8) | interface WelcomeToken extends FullToken<'Welcome'> {}
FILE: packages/x/components/x-provider/context.ts
type BaseComponentConfig (line 22) | interface BaseComponentConfig {
type XComponentConfig (line 28) | interface XComponentConfig extends BaseComponentConfig {
type ComponentConfig (line 32) | type ComponentConfig<
type XComponentsConfig (line 37) | interface XComponentsConfig {
type ComponentsConfig (line 55) | type ComponentsConfig = {
type XProviderProps (line 61) | interface XProviderProps
FILE: packages/x/components/x-provider/demo/locale.tsx
type Locale (line 16) | type Locale = XProviderProps['locale'];
FILE: packages/x/components/x-provider/demo/theme.tsx
type ThemeData (line 21) | type ThemeData = {
FILE: packages/x/components/x-provider/hooks/use-x-provider-context.ts
function useXProviderContext (line 6) | function useXProviderContext() {
FILE: packages/x/docs/playground/agent-tbox.tsx
constant DEFAULT_CONVERSATIONS_ITEMS (line 132) | const DEFAULT_CONVERSATIONS_ITEMS = [
constant HOT_TOPICS (line 145) | const HOT_TOPICS = {
constant DESIGN_GUIDE (line 162) | const DESIGN_GUIDE = {
constant SENDER_PROMPTS (line 181) | const SENDER_PROMPTS: GetProp<typeof Prompts, 'items'> = [
type TboxInput (line 324) | interface TboxInput {
type TboxOutput (line 332) | interface TboxOutput {
type TboxMessage (line 336) | interface TboxMessage {
class TboxRequest (line 347) | class TboxRequest<
method constructor (line 358) | constructor(baseURL: string, options: XRequestOptions<Input, Output>) {
method asyncHandler (line 367) | get asyncHandler(): Promise<any> {
method isTimeout (line 370) | get isTimeout(): boolean {
method isStreamTimeout (line 373) | get isStreamTimeout(): boolean {
method isRequesting (line 376) | get isRequesting(): boolean {
method manual (line 379) | get manual(): boolean {
method run (line 382) | run(params?: Input | undefined): void {
method abort (line 431) | abort(): void {
class TboxProvider (line 436) | class TboxProvider<
method transformParams (line 441) | transformParams(
method transformLocalMessage (line 465) | transformLocalMessage(requestParams: Partial<Input>): ChatMessage {
method transformMessage (line 468) | transformMessage(info: TransformMessage<ChatMessage, Output>): ChatMes...
FILE: packages/x/docs/playground/copilot.tsx
constant DEFAULT_CONVERSATIONS_ITEMS (line 44) | const DEFAULT_CONVERSATIONS_ITEMS: ConversationItemType[] = [
constant MOCK_SUGGESTIONS (line 155) | const MOCK_SUGGESTIONS = [
constant MOCK_QUESTIONS (line 168) | const MOCK_QUESTIONS = [
type CopilotProps (line 284) | interface CopilotProps {
method contentRender (line 300) | contentRender(content: string) {
FILE: packages/x/docs/playground/independent.tsx
constant HISTORY_MESSAGES (line 165) | const HISTORY_MESSAGES: {
constant DEFAULT_CONVERSATIONS_ITEMS (line 193) | const DEFAULT_CONVERSATIONS_ITEMS = [
constant HOT_TOPICS (line 211) | const HOT_TOPICS = {
constant DESIGN_GUIDE (line 243) | const DESIGN_GUIDE = {
constant SENDER_PROMPTS (line 274) | const SENDER_PROMPTS: GetProp<typeof Prompts, 'items'> = [
constant THOUGHT_CHAIN_CONFIG (line 297) | const THOUGHT_CHAIN_CONFIG = {
type ChatMessage (line 321) | interface ChatMessage extends XModelMessage {
FILE: packages/x/docs/playground/ultramodern.tsx
constant DEFAULT_CONVERSATIONS_ITEMS (line 124) | const DEFAULT_CONVERSATIONS_ITEMS = [
constant HISTORY_MESSAGES (line 141) | const HISTORY_MESSAGES: {
FILE: packages/x/docs/react/demo/qwen-sdk.tsx
constant BASE_URL (line 19) | const BASE_URL = 'https://api.x.ant.design/api/llm_cloudflare_qwq-32b';
constant MODEL (line 25) | const MODEL = 'qwq-32b';
method contentRender (line 31) | contentRender(content: string) {
FILE: packages/x/docs/react/demo/qwen.tsx
type OutputType (line 15) | type OutputType = Partial<Record<SSEFields, any>>;
type InputType (line 16) | type InputType = XModelParams;
class OpenAiRequest (line 18) | class OpenAiRequest<
method constructor (line 29) | constructor(baseURL: string, options: XRequestOptions<Input, Output>) {
method asyncHandler (line 37) | get asyncHandler(): Promise<any> {
method isTimeout (line 40) | get isTimeout(): boolean {
method isStreamTimeout (line 43) | get isStreamTimeout(): boolean {
method isRequesting (line 46) | get isRequesting(): boolean {
method manual (line 49) | get manual(): boolean {
method run (line 52) | async run(input: Input): Promise<void> {
method abort (line 67) | abort(): void {
FILE: packages/x/docs/react/demo/tbox.tsx
type TboxMessage (line 15) | interface TboxMessage {
type TboxInput (line 20) | interface TboxInput {
type TboxOutput (line 24) | interface TboxOutput {
class TboxRequest (line 28) | class TboxRequest<
method constructor (line 39) | constructor(baseURL: string, options: XRequestOptions<Input, Output>) {
method asyncHandler (line 48) | get asyncHandler(): Promise<any> {
method isTimeout (line 51) | get isTimeout(): boolean {
method isStreamTimeout (line 54) | get isStreamTimeout(): boolean {
method isRequesting (line 57) | get isRequesting(): boolean {
method manual (line 60) | get manual(): boolean {
method run (line 63) | run(params?: Input | undefined): void {
method abort (line 102) | abort(): void {
class TboxProvider (line 107) | class TboxProvider<
method transformParams (line 112) | transformParams(
method transformLocalMessage (line 124) | transformLocalMessage(requestParams: Partial<Input>): ChatMessage {
method transformMessage (line 127) | transformMessage(info: TransformMessage<ChatMessage, Output>): ChatMes...
method contentRender (line 151) | contentRender(content: string) {
FILE: packages/x/docs/x-markdown/demo/_utils/index.tsx
method start (line 16) | async start(controller) {
FILE: packages/x/docs/x-markdown/demo/codeDemo/escape-raw-html.tsx
type ToggleItemProps (line 27) | interface ToggleItemProps {
FILE: packages/x/docs/x-markdown/demo/codeDemo/link.tsx
constant LOCALE_MARKDOWN (line 10) | const LOCALE_MARKDOWN = {
FILE: packages/x/docs/x-markdown/demo/codeDemo/plugin.tsx
method tokenizer (line 63) | tokenizer(src: string) {
method renderer (line 75) | renderer(token: Token) {
FILE: packages/x/docs/x-markdown/demo/codeDemo/renderer.tsx
method html (line 31) | html(token) {
method heading (line 34) | heading({ tokens, depth }) {
FILE: packages/x/docs/x-markdown/demo/codeDemo/tokenizer.tsx
type PercentHeadingToken (line 13) | interface PercentHeadingToken extends Token {
method start (line 22) | start(src: string): number {
method tokenizer (line 25) | tokenizer(src: string): PercentHeadingToken | undefined {
method renderer (line 40) | renderer(token: PercentHeadingToken): string {
FILE: packages/x/docs/x-markdown/demo/components/custom.tsx
type OrderData (line 31) | interface OrderData {
type SalesData (line 41) | interface SalesData {
FILE: packages/x/docs/x-markdown/demo/components/infographic.tsx
type ReactInfographicProps (line 37) | type ReactInfographicProps = {
function ReactInfographic (line 45) | function ReactInfographic(props: ReactInfographicProps) {
FILE: packages/x/docs/x-markdown/demo/streaming/animation.tsx
type ToggleItemProps (line 43) | interface ToggleItemProps {
type InputItemProps (line 56) | interface InputItemProps {
FILE: packages/x/docs/x-markdown/demo/streaming/combined.tsx
type ToggleItemProps (line 11) | interface ToggleItemProps {
type InputItemProps (line 24) | interface InputItemProps {
FILE: packages/x/docs/x-markdown/demo/supersets/CustomPlugin/custom.tsx
method tokenizer (line 69) | tokenizer(src: string) {
method renderer (line 81) | renderer(token: Token) {
FILE: packages/x/docs/x-markdown/playground.tsx
constant DEFAULT_SOURCE (line 24) | const DEFAULT_SOURCE = `# XMarkdown Playground
type ToggleItemProps (line 91) | interface ToggleItemProps {
type SelectItemProps (line 104) | interface SelectItemProps {
FILE: packages/x/docs/x-sdk/demos/chat-providers/custom-provider-width-ui.tsx
type CustomInput (line 9) | interface CustomInput {
type CustomOutput (line 16) | interface CustomOutput {
type CustomMessage (line 28) | interface CustomMessage {
class CustomProvider (line 41) | class CustomProvider<
method transformParams (line 49) | transformParams(
method transformLocalMessage (line 64) | transformLocalMessage(requestParams: Partial<Input>): ChatMessage {
method transformMessage (line 73) | transformMessage(info: any): ChatMessage {
method contentRender (line 128) | contentRender(content: CustomMessage) {
method contentRender (line 147) | contentRender(content: CustomMessage) {
method contentRender (line 153) | contentRender(content: CustomMessage) {
FILE: packages/x/docs/x-sdk/demos/chat-providers/default-chat-provider-width-ui.tsx
type ChatInput (line 7) | interface ChatInput {
type ChatOutput (line 13) | interface ChatOutput {
type SystemMessage (line 22) | interface SystemMessage {
method contentRender (line 30) | contentRender(content: ChatOutput) {
method contentRender (line 36) | contentRender(content: ChatInput) {
method contentRender (line 42) | contentRender(content: SystemMessage) {
FILE: packages/x/docs/x-sdk/demos/chat-providers/default-chat-provider.tsx
type ChatInput (line 29) | interface ChatInput {
type ChatOutput (line 34) | interface ChatOutput {
type SystemMessage (line 42) | interface SystemMessage {
FILE: packages/x/docs/x-sdk/demos/x-chat/async-defaultMessages.tsx
constant BASE_URL (line 20) | const BASE_URL = 'https://api.x.ant.design/api/llm_siliconflow_THUDM_glm...
constant MODEL (line 27) | const MODEL = 'THUDM/glm-4-9b-chat';
method contentRender (line 67) | contentRender(content: string) {
FILE: packages/x/docs/x-sdk/demos/x-chat/custom-request-fetch.tsx
type ChatInput (line 7) | interface ChatInput {
type ChatOutput (line 13) | interface ChatOutput {
type MessageType (line 24) | type MessageType = ChatInput | ChatOutput;
FILE: packages/x/docs/x-sdk/demos/x-chat/deepSeek.tsx
constant BASE_URL (line 20) | const BASE_URL = 'https://api.x.ant.design/api/big_model_glm-4.5-flash';
constant MODEL (line 27) | const MODEL = 'glm-4.5-flash';
method contentRender (line 85) | contentRender(content: string) {
FILE: packages/x/docs/x-sdk/demos/x-chat/defaultMessages.tsx
constant BASE_URL (line 20) | const BASE_URL = 'https://api.x.ant.design/api/llm_siliconflow_THUDM_glm...
constant MODEL (line 27) | const MODEL = 'THUDM/glm-4-9b-chat';
method contentRender (line 66) | contentRender(content: string) {
FILE: packages/x/docs/x-sdk/demos/x-chat/developer.tsx
constant BASE_URL (line 19) | const BASE_URL = 'https://api.x.ant.design/api/llm_siliconflow_THUDM_glm...
constant MODEL (line 25) | const MODEL = 'THUDM/glm-4-9b-chat';
method contentRender (line 65) | contentRender(content: string) {
FILE: packages/x/docs/x-sdk/demos/x-chat/openai-callback.tsx
constant BASE_URL (line 21) | const BASE_URL = 'https://api.x.ant.design/api/big_model_glm-4.5-flash';
constant MODEL (line 28) | const MODEL = 'THUDM/glm-4-9b-chat';
method contentRender (line 67) | contentRender(content: string) {
FILE: packages/x/docs/x-sdk/demos/x-chat/openai.tsx
constant BASE_URL (line 20) | const BASE_URL = 'https://api.x.ant.design/api/big_model_glm-4.5-flash';
constant MODEL (line 27) | const MODEL = 'THUDM/glm-4-9b-chat';
method contentRender (line 65) | contentRender(content: string) {
FILE: packages/x/docs/x-sdk/demos/x-chat/request-openai-node.tsx
type OutputType (line 17) | type OutputType = Partial<Record<SSEFields, any>>;
type InputType (line 20) | type InputType = XModelParams;
class OpenAiRequest (line 24) | class OpenAiRequest<
method constructor (line 37) | constructor(baseURL: string, options: XRequestOptions<Input, Output>) {
method asyncHandler (line 46) | get asyncHandler(): Promise<any> {
method isTimeout (line 51) | get isTimeout(): boolean {
method isStreamTimeout (line 56) | get isStreamTimeout(): boolean {
method isRequesting (line 61) | get isRequesting(): boolean {
method manual (line 66) | get manual(): boolean {
method run (line 72) | async run(input: Input): Promise<void> {
method abort (line 92) | abort(): void {
FILE: packages/x/docs/x-sdk/demos/x-conversations/session-key.tsx
constant DEFAULT_KEY (line 17) | const DEFAULT_KEY = 'DEFAULT_KEY';
FILE: packages/x/docs/x-sdk/demos/x-request/basic.tsx
constant QUERY_URL (line 8) | const QUERY_URL = 'https://api.x.ant.design/api/default_chat_provider_st...
FILE: packages/x/docs/x-sdk/demos/x-request/custom-params-headers.tsx
constant QUERY_URL (line 8) | const QUERY_URL = 'https://api.x.ant.design/api/default_chat_provider_st...
FILE: packages/x/docs/x-sdk/demos/x-request/custom-transformer.tsx
constant BASE_URL (line 8) | const BASE_URL = 'https://api.example.com';
constant PATH (line 9) | const PATH = '/chat';
constant ND_JSON_SEPARATOR (line 11) | const ND_JSON_SEPARATOR = '\n';
function mockFetch (line 13) | async function mockFetch() {
method transform (line 88) | transform(chunk, controller) {
FILE: packages/x/docs/x-sdk/demos/x-request/manual.tsx
type ChatInput (line 10) | interface ChatInput {
constant QUERY_URL (line 15) | const QUERY_URL = 'https://api.x.ant.design/api/default_chat_provider_st...
FILE: packages/x/docs/x-sdk/demos/x-request/stream-separator.tsx
constant BASE_URL (line 8) | const BASE_URL = 'https://api.example.com';
constant PATH (line 9) | const PATH = '/chat';
constant ND_JSON_SEPARATOR (line 11) | const ND_JSON_SEPARATOR = '\r\n';
function mockFetch (line 13) | async function mockFetch() {
FILE: packages/x/docs/x-sdk/demos/x-request/stream-timeout.tsx
constant BASE_URL (line 8) | const BASE_URL = 'https://api.example.com';
constant PATH (line 9) | const PATH = '/chat';
constant ND_JSON_SEPARATOR (line 11) | const ND_JSON_SEPARATOR = '\n\n';
function mockFetch (line 13) | async function mockFetch() {
FILE: packages/x/docs/x-sdk/demos/x-request/timeout.tsx
constant BASE_URL (line 8) | const BASE_URL = 'https://api.example.com';
constant PATH (line 9) | const PATH = '/chat';
function mockFetch (line 11) | async function mockFetch() {
function request (line 42) | function request() {
FILE: packages/x/docs/x-sdk/demos/x-stream/custom-protocol.tsx
function mockReadableStream (line 27) | function mockReadableStream() {
function readStream (line 42) | async function readStream() {
FILE: packages/x/docs/x-sdk/demos/x-stream/default-protocol.tsx
function createRealisticStream (line 8) | function createRealisticStream(partSeparator: string, streamSeparator: s...
function mockReadableStream (line 31) | function mockReadableStream(partSeparator: string, streamSeparator: stri...
function readStream (line 40) | async function readStream() {
FILE: packages/x/scripts/check-cssinjs.tsx
function checkCSSVar (line 30) | async function checkCSSVar() {
method render (line 48) | render(Component: any) {
FILE: packages/x/scripts/collect-token-statistic.ts
method beforeRender (line 26) | beforeRender(componentName: string) {
method render (line 29) | render(Component: any) {
FILE: packages/x/scripts/generate-authors.ts
function execute (line 20) | async function execute() {
FILE: packages/x/scripts/generate-component-changelog.ts
function fillComponentKey (line 32) | function fillComponentKey(componentName: string): RegExp[] {
function syncChangelog (line 96) | function syncChangelog(sourceFile: string, targetFile: string) {
FILE: packages/x/scripts/generate-cssinjs.ts
type StyleFn (line 6) | type StyleFn = (prefix?: string) => void;
type GenCssinjsOptions (line 8) | interface GenCssinjsOptions {
FILE: packages/x/scripts/generate-token-meta.ts
type TokenMeta (line 5) | interface TokenMeta {
function getTokenList (line 12) | function getTokenList(list?: DeclarationReflection[], source?: string) {
FILE: packages/x/scripts/print-changelog.ts
constant QUERY_TITLE (line 22) | const QUERY_TITLE = '.gh-header-title .js-issue-title';
constant QUERY_DESCRIPTION_LINES (line 23) | const QUERY_DESCRIPTION_LINES = '.comment-body table tbody tr';
constant QUERY_AUTHOR (line 24) | const QUERY_AUTHOR = '.pull-discussion-timeline .TimelineItem:first .aut...
constant MAINTAINERS (line 26) | const MAINTAINERS = [
type Line (line 50) | interface Line {
type PR (line 55) | interface PR {
function printLog (line 74) | async function printLog() {
FILE: packages/x/scripts/visual-regression/build.ts
constant ROOT_DIR (line 21) | const ROOT_DIR = process.cwd();
constant ALI_OSS_BUCKET (line 22) | const ALI_OSS_BUCKET = 'antd-visual-diff';
constant REPORT_DIR (line 24) | const REPORT_DIR = path.join(ROOT_DIR, './visualRegressionReport');
function downloadFile (line 89) | async function downloadFile(url: string, destPath: string) {
function getBranchLatestRef (line 99) | async function getBranchLatestRef(branchName: string) {
function downloadBaseSnapshots (line 108) | async function downloadBaseSnapshots(ref: string, targetDir: string) {
type IImageDesc (line 123) | interface IImageDesc {
function getMdImageTag (line 128) | function getMdImageTag(desc: IImageDesc, extraCaption?: boolean) {
type IBadCase (line 138) | interface IBadCase {
function parseArgs (line 153) | async function parseArgs() {
function generateLineReport (line 170) | function generateLineReport(
function generateReport (line 238) | function generateReport(
function boot (line 301) | async function boot() {
FILE: packages/x/scripts/visual-regression/convert.ts
function markdown2Html (line 10) | function markdown2Html(content: string) {
FILE: packages/x/scripts/visual-regression/upload.js
constant OSS (line 6) | const OSS = require('ali-oss');
constant ALI_OSS_BUCKET (line 20) | const ALI_OSS_BUCKET = 'antd-visual-diff';
function retry (line 22) | function retry(promise, retries, delay) {
function parseArgs (line 45) | function parseArgs(cliArgs) {
function walkDir (line 62) | async function walkDir(dirPath) {
function uploadFile (line 89) | async function uploadFile(client, filePath, refValue) {
function boot (line 116) | async function boot() {
FILE: packages/x/tests/setup-streams.ts
class PolyfillTextDecoderStream (line 32) | class PolyfillTextDecoderStream extends TransformStream<Uint8Array, stri...
method constructor (line 37) | constructor(
function setupStreamsPolyfill (line 68) | function setupStreamsPolyfill(win: Window | DOMWindow) {
FILE: packages/x/tests/setup.ts
type Writeable (line 19) | type Writeable<T> = { -readonly [P in keyof T]: T[P] };
function fillWindowEnv (line 22) | function fillWindowEnv(window: Window | DOMWindow) {
FILE: packages/x/tests/setupAfterEnv.ts
function cleanup (line 35) | function cleanup(node: HTMLElement) {
function formatHTML (line 48) | function formatHTML(nodes: any) {
FILE: packages/x/tests/shared/accessibilityTest.tsx
function accessibilityTest (line 6) | function accessibilityTest(Component: React.ComponentType) {
FILE: packages/x/tests/shared/demoTest.tsx
type Options (line 19) | type Options = {
function baseTest (line 29) | function baseTest(doInject: boolean, component: string, options: Options...
function extendTest (line 108) | function extendTest(component: string, options: Options = {}) {
function demoTest (line 115) | function demoTest(component: string, options: Options = {}) {
FILE: packages/x/tests/shared/excludeWarning.ts
function isSafeWarning (line 4) | function isSafeWarning(message: boolean, all = false) {
function excludeWarning (line 15) | function excludeWarning() {
function excludeAllWarning (line 26) | function excludeAllWarning() {
FILE: packages/x/tests/shared/imageTest.tsx
type ImageTestOptions (line 29) | interface ImageTestOptions {
function imageTest (line 36) | function imageTest(
type Options (line 251) | type Options = {
function imageDemoTest (line 261) | function imageDemoTest(component: string, options: Options = {}) {
FILE: packages/x/tests/shared/mountTest.tsx
function mountTest (line 6) | function mountTest(Component: React.ComponentType) {
FILE: packages/x/tests/shared/rootPropsTest.tsx
type Options (line 9) | interface Options {
function isSingleNode (line 20) | function isSingleNode(node: any): node is Element {
function rootPropsTest (line 24) | function rootPropsTest(
FILE: packages/x/tests/utils.tsx
function assertsExist (line 9) | function assertsExist<T>(item?: T): asserts item is T {
function setMockDate (line 14) | function setMockDate(dateString = '2017-09-18T03:30:07.795') {
function resetMockDate (line 18) | function resetMockDate() {
function renderHook (line 41) | function renderHook<T>(func: () => T): { result: React.RefObject<T | nul...
function waitFakeTimer (line 83) | async function waitFakeTimer(advanceTime = 1000, times = 20) {
FILE: packages/x/typings/jest.d.ts
type Matchers (line 2) | interface Matchers<R> {
FILE: scripts/check-repo.ts
function exitProcess (line 14) | function exitProcess(code = 1) {
function getCurrentVersion (line 19) | function getCurrentVersion() {
function checkVersion (line 25) | async function checkVersion() {
function checkBranch (line 78) | async function checkBranch({ current }: StatusResult) {
function checkCommit (line 95) | async function checkCommit({ files }: StatusResult) {
function checkRemote (line 107) | async function checkRemote() {
function checkRepo (line 120) | async function checkRepo() {
FILE: scripts/synchronize-version.ts
function exitProcess (line 7) | function exitProcess(code = 1) {
function synchronizeVersion (line 11) | async function synchronizeVersion() {
Condensed preview — 1219 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,064K chars).
[
{
"path": ".codefuse/skills/components/SKILL.md",
"chars": 11473,
"preview": "# Ant Design X 组件开发规范指南\n\n基于 antd 组件库最佳实践的完整开发规范,涵盖命名、架构、样式、测试等各个方面。\n\n## 1. 项目架构规范\n\n### 1.1 目录结构\n\n```\ncomponents/[组件名]/\n├"
},
{
"path": ".editorconfig",
"chars": 192,
"preview": "# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines with a newline ending every file\n[*.{js,css}]\nend_of_lin"
},
{
"path": ".github/FUNDING.yml",
"chars": 943,
"preview": "# These are supported funding model platforms\n\ngithub: ant-design # Replace with up to 4 GitHub Sponsors-enabled usernam"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 1278,
"preview": "name: 错误报告 🐛\ndescription: 提交一个 @ant-design/x 的 bug\nlabels: ['bug']\nbody:\n - type: markdown\n attributes:\n value:"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 398,
"preview": "name: 功能请求 💄\ndescription: 我想给 @ant-design/x 加个新功能\nlabels: ['feature request']\nbody:\n - type: markdown\n attributes:\n "
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1696,
"preview": "<!--\nFirst of all, thank you for your contribution! 😄\nFor requesting to pull a new feature or bugfix, please send it fro"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE_CN.md",
"chars": 884,
"preview": "<!--\n首先,感谢你的贡献!😄\n\n新特性请提交至 feature 分支,其余可提交至 master 分支。\n在维护者审核通过后会合并。\n请确保填写以下 pull request 的信息,谢谢!~\n-->\n\n[English Templat"
},
{
"path": ".github/dependabot.yml",
"chars": 790,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/main.yml",
"chars": 543,
"preview": "name: ✅ test\non: [push, pull_request]\npermissions:\n contents: read\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n"
},
{
"path": ".github/workflows/markdown-benchmark.yml",
"chars": 2793,
"preview": "name: Markdown Performance\n\non:\n pull_request:\n paths:\n - 'packages/x-markdown/**'\n push:\n paths:\n - '"
},
{
"path": ".github/workflows/pr-auto-merge.yml",
"chars": 1235,
"preview": "# Used to merge master/feature branches with each other\nname: PR Auto Merge Bot\n\non:\n schedule:\n - cron: '*/5 * * * "
},
{
"path": ".github/workflows/pr-contributor-welcome.yml",
"chars": 1685,
"preview": "# 当 PR 被合并时,留言欢迎加入共建群\nname: PullRequest Contributor Welcome\n\non:\n pull_request_target:\n types:\n - closed\n pa"
},
{
"path": ".github/workflows/preview-build.yml",
"chars": 1206,
"preview": "# Each PR will build preview site that help to check code is work as expect.\n\nname: Preview Build\n\non:\n pull_request:\n "
},
{
"path": ".github/workflows/preview-deploy.yml",
"chars": 4714,
"preview": "# Each PR will build preview site that help to check code is work as expect.\n\nname: Preview Deploy\n\non:\n workflow_run:\n"
},
{
"path": ".github/workflows/preview-start.yml",
"chars": 1098,
"preview": "# When `preview-build` start. Leave a message on the PR\n#\n# 🚨🚨🚨 Important 🚨🚨🚨\n# Never do any `checkout` or `npm install`"
},
{
"path": ".github/workflows/release-dingtalk.yml",
"chars": 1032,
"preview": "name: DingTalk Release Notification\n\non: create\n\npermissions:\n contents: read\n\njobs:\n release-helper:\n permissions:"
},
{
"path": ".github/workflows/release-x.yml",
"chars": 752,
"preview": "name: 🆇 Release to X\n\non: create\n\njobs:\n tweet:\n runs-on: ubuntu-latest\n if: ${{ github.event.ref_type == 'tag' &"
},
{
"path": ".github/workflows/site-deploy.yml",
"chars": 2070,
"preview": "# When pushing a tag. this workflow will trigger site deployment and fixed version address comments\n\nname: Deploy websit"
},
{
"path": ".github/workflows/size-limit.yml",
"chars": 512,
"preview": "name: 📦 Size Limit\n\non:\n pull_request:\n types: [opened, synchronize]\n\npermissions:\n issues: write\n contents: read\n"
},
{
"path": ".gitignore",
"chars": 2032,
"preview": "*.iml\n.idea/\n.ipr\n.iws\n*~\n~*\n*.diff\n*.patch\n*.bak\n.DS_Store\nThumbs.db\n.project\n.*proj\n.svn/\n*.swp\n*.swo\n*.log\n*.log.*\n*."
},
{
"path": ".husky/commit-msg",
"chars": 44,
"preview": "#!/usr/bin/env sh\n# npx commitlint --edit $1"
},
{
"path": ".husky/pre-commit",
"chars": 11,
"preview": "lint-staged"
},
{
"path": ".lintstagedrc.json",
"chars": 143,
"preview": "{\n \"*.{ts,tsx,js,jsx,json,css,sh}\": [\"biome check --write --no-errors-on-unmatched\"],\n \"*.{md,yml}\": [\"prettier --igno"
},
{
"path": ".npmrc",
"chars": 21,
"preview": "legacy-peer-deps=true"
},
{
"path": ".prettierrc",
"chars": 178,
"preview": "{\n \"endOfLine\": \"lf\",\n \"semi\": true,\n \"singleQuote\": true,\n \"tabWidth\": 2,\n \"printWidth\": 100,\n \"proseWrap\": \"neve"
},
{
"path": "CHANGELOG.en-US.md",
"chars": 80824,
"preview": "---\norder: 6\ntitle: Changelog\ntoc: false\ntimeline: true\ntag: vVERSION\n---\n\n`@ant-design/x` follows [Semantic Versioning "
},
{
"path": "CHANGELOG.zh-CN.md",
"chars": 66664,
"preview": "---\norder: 6\ntitle: 更新日志\ntimeline: true\ntag: vVERSION\n---\n\n`@ant-design/x` 遵循 [Semantic Versioning 2.0.0](http://semver."
},
{
"path": "CNAME",
"chars": 12,
"preview": "x.ant.design"
},
{
"path": "README-zh_CN.md",
"chars": 8959,
"preview": "<div align=\"center\"><a name=\"readme-top\"></a>\n\n<img height=\"180\" src=\"https://mdn.alipayobjects.com/huamei_iwk9zp/afts/i"
},
{
"path": "README.md",
"chars": 10394,
"preview": "<div align=\"center\"><a name=\"readme-top\"></a>\n\n<img height=\"180\" src=\"https://mdn.alipayobjects.com/huamei_iwk9zp/afts/i"
},
{
"path": "biome.json",
"chars": 4583,
"preview": "{\n \"files\": {\n \"ignoreUnknown\": true,\n \"includes\": [\n \"**\",\n \"!**/.dumi/tmp*\",\n \"!**/dist/**/*\",\n "
},
{
"path": "package.json",
"chars": 2607,
"preview": "{\n \"name\": \"x-mono\",\n \"version\": \"2.4.0\",\n \"private\": true,\n \"scripts\": {\n \"presite\": \"npm run prestart --workspa"
},
{
"path": "packages/x/.dumi/components/SemanticPreview.tsx",
"chars": 6720,
"preview": "import { XProvider } from '@ant-design/x';\nimport set from '@rc-component/util/lib/utils/set';\nimport { Col, Flex, Popov"
},
{
"path": "packages/x/.dumi/global.css",
"chars": 350,
"preview": ".demo-logo {\n width: 120px;\n min-width: 120px;\n height: 32px;\n background: rgba(255, 255, 255, 0.2);\n border-radius"
},
{
"path": "packages/x/.dumi/hooks/use.ts",
"chars": 673,
"preview": "function use<T>(promise: PromiseLike<T>): T {\n const internal: PromiseLike<T> & {\n status?: 'pending' | 'fulfilled' "
},
{
"path": "packages/x/.dumi/hooks/useDark.tsx",
"chars": 83,
"preview": "import React from 'react';\n\nexport const DarkContext = React.createContext(false);\n"
},
{
"path": "packages/x/.dumi/hooks/useFetch/cache.ts",
"chars": 479,
"preview": "export default class FetchCache {\n private cache: Map<string, PromiseLike<any>> = new Map();\n\n get(key: string) {\n "
},
{
"path": "packages/x/.dumi/hooks/useFetch/index.ts",
"chars": 518,
"preview": "import fetch from 'cross-fetch';\nimport React from 'react';\n\nimport FetchCache from './cache';\n\nconst cache = new FetchC"
},
{
"path": "packages/x/.dumi/hooks/useLayoutState.ts",
"chars": 438,
"preview": "import { startTransition, useState } from 'react';\n\nconst useLayoutState: typeof useState = <S>(\n ...args: Parameters<t"
},
{
"path": "packages/x/.dumi/hooks/useLocale.ts",
"chars": 575,
"preview": "import { useIntl } from 'dumi';\n\nexport interface LocaleMap<\n K extends PropertyKey = PropertyKey,\n V extends string |"
},
{
"path": "packages/x/.dumi/hooks/useLocation.ts",
"chars": 1047,
"preview": "import { useLocation as useDumiLocation } from 'dumi';\nimport * as React from 'react';\n\nimport useLocale from './useLoca"
},
{
"path": "packages/x/.dumi/hooks/useLottie.ts",
"chars": 3381,
"preview": "import type { AnimationConfig, AnimationItem, LottiePlayer } from 'lottie-web';\nimport React from 'react';\n\ninterface Us"
},
{
"path": "packages/x/.dumi/hooks/useMenu.tsx",
"chars": 6958,
"preview": "import { version } from '@ant-design/x';\nimport type { MenuProps } from 'antd';\nimport { Flex, Tag } from 'antd';\nimport"
},
{
"path": "packages/x/.dumi/hooks/useScrollY.ts",
"chars": 962,
"preview": "import React from 'react';\n\nconst getSnapshot = () => window.scrollY;\n\nconst getServerSnapshot = () => 0;\n\nconst useScro"
},
{
"path": "packages/x/.dumi/hooks/useThemeAnimation.ts",
"chars": 3102,
"preview": "import { removeCSS, updateCSS } from '@rc-component/util/lib/Dom/dynamicCSS';\nimport { useTheme } from 'antd-style';\nimp"
},
{
"path": "packages/x/.dumi/loading.js",
"chars": 101,
"preview": "// must be .js file, can't modify to be .ts file!\n\nexport { default } from './theme/common/Loading';\n"
},
{
"path": "packages/x/.dumi/pages/404/index.tsx",
"chars": 1632,
"preview": "import { HomeOutlined } from '@ant-design/icons';\nimport { Button, Result } from 'antd';\nimport { useLocation } from 'du"
},
{
"path": "packages/x/.dumi/pages/index/common/Container.tsx",
"chars": 1723,
"preview": "import { createStyles } from 'antd-style';\nimport { clsx } from 'clsx';\nimport React from 'react';\n\nconst useStyle = cre"
},
{
"path": "packages/x/.dumi/pages/index/common/CustomizationProvider.tsx",
"chars": 4912,
"preview": "import { XProvider } from '@ant-design/x';\nimport { createStyles } from 'antd-style';\nimport React from 'react';\n\nexport"
},
{
"path": "packages/x/.dumi/pages/index/common/CustomizationSender.tsx",
"chars": 1240,
"preview": "import { Sender, type SenderProps } from '@ant-design/x';\nimport { Button } from 'antd';\nimport { createStyles } from 'a"
},
{
"path": "packages/x/.dumi/pages/index/common/Introduction.tsx",
"chars": 5441,
"preview": "import { createStyles } from 'antd-style';\nimport React from 'react';\n\nimport Link, { type LinkProps } from '../../../th"
},
{
"path": "packages/x/.dumi/pages/index/components/CompIntroduction/Customization.tsx",
"chars": 3964,
"preview": "import { DeleteOutlined, EditOutlined, EnterOutlined } from '@ant-design/icons';\nimport type { BubbleProps, Conversation"
},
{
"path": "packages/x/.dumi/pages/index/components/CompIntroduction/index.tsx",
"chars": 5881,
"preview": "import { createStyles } from 'antd-style';\nimport React from 'react';\n\nimport useLocale from '../../../../hooks/useLocal"
},
{
"path": "packages/x/.dumi/pages/index/components/DesignBanner.tsx",
"chars": 2191,
"preview": "import { createStyles } from 'antd-style';\nimport { useLocation, useNavigate } from 'dumi';\nimport React, { lazy, Suspen"
},
{
"path": "packages/x/.dumi/pages/index/components/DesignFramework.tsx",
"chars": 4981,
"preview": "import { createStyles } from 'antd-style';\nimport { useLocation } from 'dumi';\nimport React, { useContext } from 'react'"
},
{
"path": "packages/x/.dumi/pages/index/components/DesignGuide.tsx",
"chars": 9421,
"preview": "import { Button } from 'antd';\nimport { createStyles } from 'antd-style';\nimport { useLocation, useNavigate } from 'dumi"
},
{
"path": "packages/x/.dumi/pages/index/components/Lottie.tsx",
"chars": 993,
"preview": "import type { AnimationItem } from 'lottie-web';\nimport React, { useEffect, useImperativeHandle } from 'react';\nimport u"
},
{
"path": "packages/x/.dumi/pages/index/components/MainBanner.tsx",
"chars": 8309,
"preview": "import { Button } from 'antd';\nimport { createStyles } from 'antd-style';\nimport { clsx } from 'clsx';\nimport { useLocat"
},
{
"path": "packages/x/.dumi/pages/index/components/SceneIntroduction/Assistant.tsx",
"chars": 6050,
"preview": "import type { BubbleItemType } from '@ant-design/x';\nimport { Bubble, Prompts, Welcome } from '@ant-design/x';\nimport { "
},
{
"path": "packages/x/.dumi/pages/index/components/SceneIntroduction/Independent.tsx",
"chars": 7417,
"preview": "import type { BubbleItemType } from '@ant-design/x';\nimport { Bubble, Prompts, Welcome } from '@ant-design/x';\nimport { "
},
{
"path": "packages/x/.dumi/pages/index/components/SceneIntroduction/Nest.tsx",
"chars": 1200,
"preview": "import { createStyles } from 'antd-style';\nimport React from 'react';\nimport useLocale from '../../../../hooks/useLocale"
},
{
"path": "packages/x/.dumi/pages/index/components/SceneIntroduction/index.tsx",
"chars": 6738,
"preview": "import { Button, Carousel } from 'antd';\nimport { createStyles } from 'antd-style';\nimport { clsx } from 'clsx';\nimport "
},
{
"path": "packages/x/.dumi/pages/index/components/SiteContext.ts",
"chars": 164,
"preview": "import SiteContext from '../../../theme/slots/SiteContext';\n\nexport type { SiteContextProps } from '../../../theme/slots"
},
{
"path": "packages/x/.dumi/pages/index/index.tsx",
"chars": 1895,
"preview": "import { createStyles } from 'antd-style';\nimport { clsx } from 'clsx';\nimport React, { lazy, Suspense } from 'react';\ni"
},
{
"path": "packages/x/.dumi/pages/index-cn/index.ts",
"chars": 65,
"preview": "import Homepage from '../index/index';\n\nexport default Homepage;\n"
},
{
"path": "packages/x/.dumi/preset/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "packages/x/.dumi/rehypeAntd.ts",
"chars": 3644,
"preview": "import assert from 'assert';\nimport type { HastRoot, UnifiedTransformer } from 'dumi';\nimport { unistUtilVisit } from 'd"
},
{
"path": "packages/x/.dumi/remarkAnchor.ts",
"chars": 2317,
"preview": "import type { UnifiedTransformer } from 'dumi';\nimport { unistUtilVisit } from 'dumi';\n\nlet toSlug: typeof import('githu"
},
{
"path": "packages/x/.dumi/remarkAntd.ts",
"chars": 413,
"preview": "import type { UnifiedTransformer } from 'dumi';\nimport { unistUtilVisit } from 'dumi';\n\nfunction remarkMeta(): UnifiedTr"
},
{
"path": "packages/x/.dumi/theme/SiteThemeProvider.tsx",
"chars": 2277,
"preview": "import { theme as antdTheme, ConfigProvider } from 'antd';\nimport type { ThemeConfig } from 'antd/es/config-provider';\ni"
},
{
"path": "packages/x/.dumi/theme/builtins/APITable/index.tsx",
"chars": 190,
"preview": "import React from 'react';\n\nconst APITable: React.FC = () => (\n // TODO: implement api table, depend on the new markdow"
},
{
"path": "packages/x/.dumi/theme/builtins/Antd.tsx",
"chars": 420,
"preview": "import * as all from 'antd';\nimport * as React from 'react';\n\ninterface AntdProps {\n component: keyof typeof all;\n}\n\nfu"
},
{
"path": "packages/x/.dumi/theme/builtins/Audio/index.tsx",
"chars": 1222,
"preview": "import { SoundOutlined } from '@ant-design/icons';\nimport { createStyles } from 'antd-style';\nimport React from 'react';"
},
{
"path": "packages/x/.dumi/theme/builtins/Badge/index.tsx",
"chars": 548,
"preview": "import { Tag, TagProps } from 'antd';\nimport * as React from 'react';\n\n// https://github.com/umijs/dumi/blob/master/src/"
},
{
"path": "packages/x/.dumi/theme/builtins/ColorChunk/index.tsx",
"chars": 1740,
"preview": "import type { ColorInput } from '@ant-design/fast-color';\nimport { FastColor } from '@ant-design/fast-color';\nimport { P"
},
{
"path": "packages/x/.dumi/theme/builtins/ColorPaletteTool/index.ts",
"chars": 102,
"preview": "import ColorPaletteTool from '../../common/Color/ColorPaletteTool';\n\nexport default ColorPaletteTool;\n"
},
{
"path": "packages/x/.dumi/theme/builtins/ColorPaletteToolDark/index.ts",
"chars": 114,
"preview": "import ColorPaletteToolDark from '../../common/Color/ColorPaletteToolDark';\n\nexport default ColorPaletteToolDark;\n"
},
{
"path": "packages/x/.dumi/theme/builtins/ColorPalettes/index.ts",
"chars": 93,
"preview": "import ColorPalettes from '../../common/Color/ColorPalettes';\n\nexport default ColorPalettes;\n"
},
{
"path": "packages/x/.dumi/theme/builtins/ComponentMeta/index.tsx",
"chars": 7180,
"preview": "import { CompassOutlined, EditOutlined, GithubOutlined, HistoryOutlined } from '@ant-design/icons';\nimport type { GetPro"
},
{
"path": "packages/x/.dumi/theme/builtins/ComponentOverview/index.tsx",
"chars": 8537,
"preview": "import { SearchOutlined } from '@ant-design/icons';\nimport { Affix, Card, Col, Divider, Flex, Input, Row, Tag, Typograph"
},
{
"path": "packages/x/.dumi/theme/builtins/ComponentTokenTable/index.tsx",
"chars": 6985,
"preview": "import { LinkOutlined, QuestionCircleOutlined, RightOutlined } from '@ant-design/icons';\nimport { XProvider } from '@ant"
},
{
"path": "packages/x/.dumi/theme/builtins/Container/index.tsx",
"chars": 947,
"preview": "/**\n * copied: https://github.com/arvinxx/dumi-theme-antd-style/tree/master/src/builtins/Container\n */\n\nimport { Alert }"
},
{
"path": "packages/x/.dumi/theme/builtins/Container/style.ts",
"chars": 360,
"preview": "import { createStyles } from 'antd-style';\n\nconst useStyles = createStyles(({ token, prefixCls, css }) => ({\n container"
},
{
"path": "packages/x/.dumi/theme/builtins/DemoWrapper/index.tsx",
"chars": 3747,
"preview": "import { BugOutlined, CodeOutlined, ExperimentOutlined } from '@ant-design/icons';\nimport { XProvider } from '@ant-desig"
},
{
"path": "packages/x/.dumi/theme/builtins/IconSearch/Category.tsx",
"chars": 2166,
"preview": "import { App } from 'antd';\nimport { createStyles } from 'antd-style';\nimport { useIntl } from 'dumi';\nimport * as React"
},
{
"path": "packages/x/.dumi/theme/builtins/IconSearch/CopyableIcon.tsx",
"chars": 3416,
"preview": "import * as AntdIcons from '@ant-design/icons';\nimport { App, Badge } from 'antd';\nimport { createStyles } from 'antd-st"
},
{
"path": "packages/x/.dumi/theme/builtins/IconSearch/IconSearch.tsx",
"chars": 4842,
"preview": "import Icon, * as AntdIcons from '@ant-design/icons';\nimport { Affix, Empty, Input, Segmented } from 'antd';\nimport type"
},
{
"path": "packages/x/.dumi/theme/builtins/IconSearch/fields.ts",
"chars": 3603,
"preview": "import * as AntdIcons from '@ant-design/icons/lib/icons';\n\nconst all = Object.keys(AntdIcons)\n .map((n) => n.replace(/("
},
{
"path": "packages/x/.dumi/theme/builtins/IconSearch/index.tsx",
"chars": 1473,
"preview": "import { Skeleton } from 'antd';\nimport { createStyles } from 'antd-style';\nimport React, { Suspense } from 'react';\n\nco"
},
{
"path": "packages/x/.dumi/theme/builtins/IconSearch/themeIcons.tsx",
"chars": 1425,
"preview": "import type { CustomIconComponentProps } from '@ant-design/icons/es/components/Icon';\nimport * as React from 'react';\n\nt"
},
{
"path": "packages/x/.dumi/theme/builtins/ImagePreview/index.tsx",
"chars": 3595,
"preview": "import toArray from '@rc-component/util/lib/Children/toArray';\nimport { Image } from 'antd';\nimport { clsx } from 'clsx'"
},
{
"path": "packages/x/.dumi/theme/builtins/InlinePopover/index.tsx",
"chars": 1061,
"preview": "import { PictureOutlined } from '@ant-design/icons';\nimport { Image, Tooltip, Typography } from 'antd';\nimport React fro"
},
{
"path": "packages/x/.dumi/theme/builtins/InstallDependencies/bun.tsx",
"chars": 6019,
"preview": "import { createStyles, css } from 'antd-style';\nimport { clsx } from 'clsx';\nimport React from 'react';\n\ninterface IconP"
},
{
"path": "packages/x/.dumi/theme/builtins/InstallDependencies/index.tsx",
"chars": 1660,
"preview": "import { XProvider } from '@ant-design/x';\nimport type { Tab } from '@rc-component/tabs/lib/interface';\nimport { Tabs } "
},
{
"path": "packages/x/.dumi/theme/builtins/InstallDependencies/npm.tsx",
"chars": 925,
"preview": "import { createStyles, css } from 'antd-style';\nimport { clsx } from 'clsx';\nimport React from 'react';\n\ninterface IconP"
},
{
"path": "packages/x/.dumi/theme/builtins/InstallDependencies/pnpm.tsx",
"chars": 1083,
"preview": "import { createStyles, css } from 'antd-style';\nimport { clsx } from 'clsx';\nimport React from 'react';\n\ninterface IconP"
},
{
"path": "packages/x/.dumi/theme/builtins/InstallDependencies/utoo.tsx",
"chars": 2508,
"preview": "import { createStyles, css } from 'antd-style';\nimport { clsx } from 'clsx';\nimport React from 'react';\n\ninterface IconP"
},
{
"path": "packages/x/.dumi/theme/builtins/InstallDependencies/yarn.tsx",
"chars": 2239,
"preview": "import { createStyles, css } from 'antd-style';\nimport { clsx } from 'clsx';\nimport React from 'react';\n\ninterface IconP"
},
{
"path": "packages/x/.dumi/theme/builtins/LocaleLink/index.tsx",
"chars": 1206,
"preview": "import * as React from 'react';\n\nimport useLocale from '../../../hooks/useLocale';\nimport Link from '../../../theme/comm"
},
{
"path": "packages/x/.dumi/theme/builtins/MarkdownPluginsOverView.tsx",
"chars": 2064,
"preview": "import PluginMeta from '@ant-design/x-markdown/plugins/version/plugin-meta.json';\nimport { List } from 'antd';\nimport { "
},
{
"path": "packages/x/.dumi/theme/builtins/Palette/index.ts",
"chars": 75,
"preview": "import Palette from '../../common/Color/Palette';\n\nexport default Palette;\n"
},
{
"path": "packages/x/.dumi/theme/builtins/Previewer/CodeBlockButton.tsx",
"chars": 2463,
"preview": "import { Tooltip } from 'antd';\nimport { FormattedMessage } from 'dumi';\nimport React, { Suspense } from 'react';\n\n// im"
},
{
"path": "packages/x/.dumi/theme/builtins/Previewer/CodePreviewer.tsx",
"chars": 19555,
"preview": "import { LinkOutlined, ThunderboltOutlined, UpOutlined } from '@ant-design/icons';\nimport type { Project } from '@stackb"
},
{
"path": "packages/x/.dumi/theme/builtins/Previewer/DemoFallback.tsx",
"chars": 562,
"preview": "import { Skeleton } from 'antd';\nimport { createStyles } from 'antd-style';\nimport React from 'react';\n\nconst useStyle ="
},
{
"path": "packages/x/.dumi/theme/builtins/Previewer/DesignPreviewer.tsx",
"chars": 3152,
"preview": "import { CheckOutlined, SketchOutlined } from '@ant-design/icons';\nimport { App } from 'antd';\nimport { createStyles } f"
},
{
"path": "packages/x/.dumi/theme/builtins/Previewer/Previewer.tsx",
"chars": 578,
"preview": "import type { IPreviewerProps } from 'dumi';\nimport { useTabMeta } from 'dumi';\nimport React from 'react';\n\nimport CodeP"
},
{
"path": "packages/x/.dumi/theme/builtins/Previewer/index.tsx",
"chars": 462,
"preview": "import { Alert } from 'antd';\nimport type { IPreviewerProps } from 'dumi';\nimport React, { Suspense } from 'react';\nimpo"
},
{
"path": "packages/x/.dumi/theme/builtins/PromptTemplate.tsx",
"chars": 568,
"preview": "import { XMarkdown } from '@ant-design/x-markdown';\nimport { Card, Typography } from 'antd';\nimport React from 'react';\n"
},
{
"path": "packages/x/.dumi/theme/builtins/ResourceCards/index.tsx",
"chars": 2799,
"preview": "import { ExclamationCircleOutlined } from '@ant-design/icons';\nimport { Card, Col, Row, Tooltip, Typography } from 'antd"
},
{
"path": "packages/x/.dumi/theme/builtins/Sandpack/Sandpack.ts",
"chars": 82,
"preview": "import { Sandpack } from '@codesandbox/sandpack-react';\n\nexport default Sandpack;\n"
},
{
"path": "packages/x/.dumi/theme/builtins/Sandpack/index.tsx",
"chars": 2511,
"preview": "import { Skeleton } from 'antd';\nimport { createStyles } from 'antd-style';\nimport { useSearchParams } from 'dumi';\nimpo"
},
{
"path": "packages/x/.dumi/theme/builtins/SkillsOverView.tsx",
"chars": 5719,
"preview": "import SkillMeta from '@ant-design/x-skill/skill-meta.json';\nimport { Empty, Flex, List, Spin, Tag, Typography } from 'a"
},
{
"path": "packages/x/.dumi/theme/builtins/TokenCompare/index.tsx",
"chars": 2988,
"preview": "import { FastColor } from '@ant-design/fast-color';\nimport { Flex, theme } from 'antd';\nimport tokenMeta from 'antd/es/v"
},
{
"path": "packages/x/.dumi/theme/builtins/TokenTable/index.tsx",
"chars": 3113,
"preview": "import type { TableProps } from 'antd';\nimport { Table } from 'antd';\nimport tokenMeta from 'antd/es/version/token-meta."
},
{
"path": "packages/x/.dumi/theme/builtins/VideoPlayer/index.tsx",
"chars": 1732,
"preview": "import { PauseCircleFilled, PlayCircleFilled } from '@ant-design/icons';\nimport { createStyles, css } from 'antd-style';"
},
{
"path": "packages/x/.dumi/theme/common/BehaviorMap/BehaviorMap.tsx",
"chars": 12071,
"preview": "import { createStyles, css } from 'antd-style';\nimport { useRouteMeta } from 'dumi';\nimport React, { useEffect, useRef }"
},
{
"path": "packages/x/.dumi/theme/common/BehaviorMap/index.tsx",
"chars": 1069,
"preview": "import { Skeleton } from 'antd';\nimport { createStyles } from 'antd-style';\nimport type { FC } from 'react';\nimport Reac"
},
{
"path": "packages/x/.dumi/theme/common/BezierVisualizer/Visualizer.tsx",
"chars": 2355,
"preview": "import { theme } from 'antd';\nimport React, { useId } from 'react';\n\nexport interface VisualizerProps {\n /**\n * 控制点坐标"
},
{
"path": "packages/x/.dumi/theme/common/BezierVisualizer/index.tsx",
"chars": 1347,
"preview": "import { Button, Flex, Tooltip, Typography } from 'antd';\nimport React, { useMemo } from 'react';\n\nimport useLocale from"
},
{
"path": "packages/x/.dumi/theme/common/BrowserFrame.tsx",
"chars": 1212,
"preview": "import { createStyles } from 'antd-style';\nimport React from 'react';\n\nconst useStyle = createStyles(({ token, css }) =>"
},
{
"path": "packages/x/.dumi/theme/common/ClientOnly.tsx",
"chars": 383,
"preview": "import type React from 'react';\nimport { useLayoutEffect, useState } from 'react';\n\nconst ClientOnly: React.FC<React.Pro"
},
{
"path": "packages/x/.dumi/theme/common/CodePreview.tsx",
"chars": 6135,
"preview": "import { Button, Tabs, Typography } from 'antd';\nimport { createStyles } from 'antd-style';\nimport JsonML from 'jsonml.j"
},
{
"path": "packages/x/.dumi/theme/common/Color/ColorBlock.tsx",
"chars": 1050,
"preview": "import { App } from 'antd';\nimport React, { useMemo } from 'react';\nimport CopyToClipboard from 'react-copy-to-clipboard"
},
{
"path": "packages/x/.dumi/theme/common/Color/ColorPaletteTool.tsx",
"chars": 2379,
"preview": "import { ColorPicker } from 'antd';\nimport type { Color } from 'antd/es/color-picker';\nimport { FormattedMessage } from "
},
{
"path": "packages/x/.dumi/theme/common/Color/ColorPaletteToolDark.tsx",
"chars": 3544,
"preview": "import { Col, ColorPicker, Row } from 'antd';\nimport type { Color } from 'antd/es/color-picker';\nimport { FormattedMessa"
},
{
"path": "packages/x/.dumi/theme/common/Color/ColorPalettes.tsx",
"chars": 1666,
"preview": "import { clsx } from 'clsx';\nimport React from 'react';\n\nimport Palette from './Palette';\n\nconst colors = [\n {\n name"
},
{
"path": "packages/x/.dumi/theme/common/Color/ColorPatterns.tsx",
"chars": 627,
"preview": "import { generate } from '@ant-design/colors';\nimport uniq from 'lodash/uniq';\nimport React from 'react';\n\nimport ColorB"
},
{
"path": "packages/x/.dumi/theme/common/Color/ColorStyle.tsx",
"chars": 7043,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nconst g"
},
{
"path": "packages/x/.dumi/theme/common/Color/Palette.tsx",
"chars": 3358,
"preview": "import { presetDarkPalettes } from '@ant-design/colors';\nimport { App } from 'antd';\nimport React, { useEffect } from 'r"
},
{
"path": "packages/x/.dumi/theme/common/CommonHelmet.tsx",
"chars": 1026,
"preview": "import { Helmet, useRouteMeta } from 'dumi';\nimport React from 'react';\n\nconst CommonHelmet: React.FC = () => {\n const "
},
{
"path": "packages/x/.dumi/theme/common/ComponentChangelog/ComponentChangelog.tsx",
"chars": 10101,
"preview": "import { BugOutlined } from '@ant-design/icons';\nimport type { TimelineItemProps } from 'antd';\nimport { Button, Drawer,"
},
{
"path": "packages/x/.dumi/theme/common/ComponentChangelog/index.tsx",
"chars": 307,
"preview": "import React from 'react';\n\nimport ComponentChangelog from './ComponentChangelog';\n\nconst ChangeLog: React.FC<Readonly<R"
},
{
"path": "packages/x/.dumi/theme/common/EditButton.tsx",
"chars": 1367,
"preview": "import { EditOutlined } from '@ant-design/icons';\nimport { Tooltip } from 'antd';\nimport { createStyles } from 'antd-sty"
},
{
"path": "packages/x/.dumi/theme/common/GlobalStyles.tsx",
"chars": 569,
"preview": "import React from 'react';\n\nimport ColorStyle from './Color/ColorStyle';\nimport {\n Common,\n Demo,\n HeadingAnchor,\n H"
},
{
"path": "packages/x/.dumi/theme/common/Helmet.tsx",
"chars": 203,
"preview": "import { Helmet } from 'dumi';\nimport * as React from 'react';\n\nconst WrapHelmet: React.FC<React.PropsWithChildren<Helme"
},
{
"path": "packages/x/.dumi/theme/common/JSONEditor/index.tsx",
"chars": 805,
"preview": "import React, { useEffect, useRef } from 'react';\nimport type { JSONEditorPropsOptional, JsonEditor } from 'vanilla-json"
},
{
"path": "packages/x/.dumi/theme/common/Link.tsx",
"chars": 1587,
"preview": "import { Link as DumiLink, useAppData, useLocation, useNavigate } from 'dumi';\nimport type { MouseEvent, MouseEventHandl"
},
{
"path": "packages/x/.dumi/theme/common/LinkButton.tsx",
"chars": 402,
"preview": "import type { ButtonProps } from 'antd';\nimport { Button } from 'antd';\nimport React from 'react';\nimport type { LinkPro"
},
{
"path": "packages/x/.dumi/theme/common/LiveCode.tsx",
"chars": 1844,
"preview": "import { createStyles } from 'antd-style';\nimport SourceCodeEditor from 'dumi/theme-default/slots/SourceCodeEditor';\nimp"
},
{
"path": "packages/x/.dumi/theme/common/Loading.tsx",
"chars": 1020,
"preview": "import { Flex, Skeleton, Spin } from 'antd';\nimport { useLocation } from 'dumi';\nimport React from 'react';\n\nconst Loadi"
},
{
"path": "packages/x/.dumi/theme/common/PrevAndNext.tsx",
"chars": 4317,
"preview": "import { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport type { GetProp, MenuProps } from 'antd';\nimport "
},
{
"path": "packages/x/.dumi/theme/common/ThemeSwitch/ThemeIcon.tsx",
"chars": 1199,
"preview": "import Icon from '@ant-design/icons';\nimport React from 'react';\n\nconst SVGIcon: React.FC = (props) => (\n <svg width={2"
},
{
"path": "packages/x/.dumi/theme/common/ThemeSwitch/index.tsx",
"chars": 4067,
"preview": "import { BgColorsOutlined, LinkOutlined, SmileOutlined, SunOutlined } from '@ant-design/icons';\nimport type { MenuProps "
},
{
"path": "packages/x/.dumi/theme/common/styles/Common.tsx",
"chars": 1563,
"preview": "import { css, Global } from '@emotion/react';\nimport { updateCSS } from '@rc-component/util/lib/Dom/dynamicCSS';\nimport "
},
{
"path": "packages/x/.dumi/theme/common/styles/Demo.tsx",
"chars": 9199,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nconst G"
},
{
"path": "packages/x/.dumi/theme/common/styles/HeadingAnchor.tsx",
"chars": 1153,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nexport "
},
{
"path": "packages/x/.dumi/theme/common/styles/Highlight.tsx",
"chars": 3705,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nexport "
},
{
"path": "packages/x/.dumi/theme/common/styles/InlineCard.tsx",
"chars": 612,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nexport "
},
{
"path": "packages/x/.dumi/theme/common/styles/Markdown.tsx",
"chars": 12618,
"preview": "import { FastColor } from '@ant-design/fast-color';\nimport { css, Global } from '@emotion/react';\nimport { useTheme } fr"
},
{
"path": "packages/x/.dumi/theme/common/styles/NProgress.tsx",
"chars": 628,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nexport "
},
{
"path": "packages/x/.dumi/theme/common/styles/PreviewImage.tsx",
"chars": 4850,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nexport "
},
{
"path": "packages/x/.dumi/theme/common/styles/Reset.tsx",
"chars": 2155,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nexport "
},
{
"path": "packages/x/.dumi/theme/common/styles/Responsive.tsx",
"chars": 8193,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nexport "
},
{
"path": "packages/x/.dumi/theme/common/styles/SearchBar.tsx",
"chars": 1535,
"preview": "import { css, Global } from '@emotion/react';\nimport { useTheme } from 'antd-style';\nimport React from 'react';\n\nconst T"
},
{
"path": "packages/x/.dumi/theme/common/styles/index.ts",
"chars": 510,
"preview": "export { default as Common } from './Common';\nexport { default as Demo } from './Demo';\nexport { default as HeadingAncho"
},
{
"path": "packages/x/.dumi/theme/icons/CodePenIcon.tsx",
"chars": 1757,
"preview": "import Icon from '@ant-design/icons';\nimport React from 'react';\n\nconst SVGIcon: React.FC = () => (\n <svg viewBox=\"0 0 "
},
{
"path": "packages/x/.dumi/theme/icons/CodeSandboxIcon.tsx",
"chars": 704,
"preview": "import Icon from '@ant-design/icons';\nimport React from 'react';\n\nconst SVGIcon: React.FC = () => (\n <svg viewBox=\"0 0 "
},
{
"path": "packages/x/.dumi/theme/icons/DirectionIcon.tsx",
"chars": 1987,
"preview": "import Icon from '@ant-design/icons';\nimport type { DirectionType } from 'antd/es/config-provider';\nimport React from 'r"
},
{
"path": "packages/x/.dumi/theme/icons/ExternalLinkIcon.tsx",
"chars": 1157,
"preview": "import Icon from '@ant-design/icons';\nimport React from 'react';\n\ninterface ExternalIconProps {\n className?: string;\n "
},
{
"path": "packages/x/.dumi/theme/layouts/DocLayout/index.tsx",
"chars": 3521,
"preview": "import { clsx } from 'clsx';\nimport dayjs from 'dayjs';\n\nimport 'dayjs/locale/zh-cn';\n\nimport { XProvider } from '@ant-d"
},
{
"path": "packages/x/.dumi/theme/layouts/GlobalLayout.tsx",
"chars": 6449,
"preview": "import {\n createCache,\n extractStyle,\n legacyNotSelectorLinter,\n NaNLinter,\n parentSelectorLinter,\n StyleProvider,"
},
{
"path": "packages/x/.dumi/theme/layouts/IndexLayout/index.tsx",
"chars": 791,
"preview": "import { Helmet } from 'dumi';\nimport type { PropsWithChildren } from 'react';\nimport React from 'react';\nimport InViewS"
},
{
"path": "packages/x/.dumi/theme/layouts/SidebarLayout/index.tsx",
"chars": 881,
"preview": "import { createStyles } from 'antd-style';\nimport type { PropsWithChildren } from 'react';\nimport React from 'react';\nim"
},
{
"path": "packages/x/.dumi/theme/locales/en-US.json",
"chars": 6812,
"preview": "{\n \"app.theme.switch.dynamic\": \"Dynamic Theme\",\n \"app.theme.switch.default\": \"Default theme\",\n \"app.theme.switch.dark"
},
{
"path": "packages/x/.dumi/theme/locales/zh-CN.json",
"chars": 5371,
"preview": "{\n \"app.theme.switch.dynamic\": \"动态主题\",\n \"app.theme.switch.default\": \"默认主题\",\n \"app.theme.switch.dark\": \"暗黑主题\",\n \"app."
},
{
"path": "packages/x/.dumi/theme/plugin.ts",
"chars": 6384,
"preview": "import createEmotionServer from '@emotion/server/create-instance';\nimport { createHash } from 'crypto';\nimport type { IA"
},
{
"path": "packages/x/.dumi/theme/slots/Alert/index.tsx",
"chars": 1552,
"preview": "import { CloseOutlined } from '@ant-design/icons';\nimport { Alert, Button, Space } from 'antd';\nimport { createStyles } "
},
{
"path": "packages/x/.dumi/theme/slots/Content/ColumnCard.tsx",
"chars": 6434,
"preview": "import { RightOutlined, YuqueOutlined, ZhihuOutlined } from '@ant-design/icons';\nimport { Button, Card, Divider } from '"
},
{
"path": "packages/x/.dumi/theme/slots/Content/ContributorAvatar.tsx",
"chars": 763,
"preview": "import type { AvatarListItem } from '@qixian.cs/github-contributors-list/dist/AvatarList';\nimport { Avatar, Tooltip } fr"
},
{
"path": "packages/x/.dumi/theme/slots/Content/Contributors.tsx",
"chars": 1605,
"preview": "import ContributorsList from '@qixian.cs/github-contributors-list';\nimport { createStyles } from 'antd-style';\nimport { "
},
{
"path": "packages/x/.dumi/theme/slots/Content/DocAnchor.tsx",
"chars": 3410,
"preview": "import { Anchor } from 'antd';\nimport type { AnchorLinkItemProps } from 'antd/es/anchor/Anchor';\nimport { createStyles, "
},
{
"path": "packages/x/.dumi/theme/slots/Content/DocMeta.tsx",
"chars": 2183,
"preview": "import { CalendarOutlined } from '@ant-design/icons';\nimport { Avatar, Flex, Skeleton, Typography } from 'antd';\nimport "
},
{
"path": "packages/x/.dumi/theme/slots/Content/InViewSuspense.tsx",
"chars": 717,
"preview": "import { Skeleton } from 'antd';\nimport React, { Suspense } from 'react';\nimport type { IntersectionObserverProps } from"
},
{
"path": "packages/x/.dumi/theme/slots/Content/JuejinLogo.tsx",
"chars": 997,
"preview": "import React from 'react';\n\ninterface Props {\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst JuejinLogo: "
},
{
"path": "packages/x/.dumi/theme/slots/Content/index.tsx",
"chars": 4810,
"preview": "import { Col, Flex, Skeleton, Space, Typography } from 'antd';\nimport { clsx } from 'clsx';\nimport { FormattedMessage, u"
},
{
"path": "packages/x/.dumi/theme/slots/ContentTabs/index.tsx",
"chars": 1142,
"preview": "import { CodeOutlined, SkinOutlined } from '@ant-design/icons';\nimport type { TabsProps } from '@rc-component/tabs';\nimp"
},
{
"path": "packages/x/.dumi/theme/slots/DemoContext.ts",
"chars": 329,
"preview": "import { createContext } from 'react';\n\nexport type DemoContextProps = {\n showDebug?: boolean;\n codeType?: string;\n};\n"
},
{
"path": "packages/x/.dumi/theme/slots/Footer/AdditionalInfo.tsx",
"chars": 2745,
"preview": "import { removeCSS, updateCSS } from '@rc-component/util/lib/Dom/dynamicCSS';\nimport { createStyles } from 'antd-style';"
},
{
"path": "packages/x/.dumi/theme/slots/Footer/index.tsx",
"chars": 12623,
"preview": "import { FastColor } from '@ant-design/fast-color';\nimport {\n AntDesignOutlined,\n BgColorsOutlined,\n BugOutlined,\n G"
},
{
"path": "packages/x/.dumi/theme/slots/Header/Actions.tsx",
"chars": 5421,
"preview": "import { GithubOutlined } from '@ant-design/icons';\nimport { Button, Select } from 'antd';\nimport { createStyles } from "
},
{
"path": "packages/x/.dumi/theme/slots/Header/Logo.tsx",
"chars": 2191,
"preview": "import { createStyles } from 'antd-style';\nimport { clsx } from 'clsx';\nimport { useLocation } from 'dumi';\nimport * as "
},
{
"path": "packages/x/.dumi/theme/slots/Header/Navigation.tsx",
"chars": 4817,
"preview": "import { createStyles, css } from 'antd-style';\nimport { clsx } from 'clsx';\nimport { useFullSidebarData, useLocation } "
},
{
"path": "packages/x/.dumi/theme/slots/Header/SwitchBtn.tsx",
"chars": 2642,
"preview": "import omit from '@rc-component/util/lib/omit';\nimport { Button, Tooltip } from 'antd';\nimport { createStyles } from 'an"
},
{
"path": "packages/x/.dumi/theme/slots/Header/index.tsx",
"chars": 4949,
"preview": "import { CloseOutlined, MenuOutlined } from '@ant-design/icons';\nimport { Button, Drawer } from 'antd';\nimport { createS"
},
{
"path": "packages/x/.dumi/theme/slots/Header/interface.ts",
"chars": 276,
"preview": "export interface SharedProps {\n isZhCN: boolean;\n isRTL: boolean;\n /**\n * @description is mobile device || inner wi"
},
{
"path": "packages/x/.dumi/theme/slots/LiveError/index.tsx",
"chars": 359,
"preview": "import { Alert, theme } from 'antd';\nimport type { FC } from 'react';\nimport React from 'react';\n\nconst LiveError: FC<{ "
},
{
"path": "packages/x/.dumi/theme/slots/Sidebar/index.tsx",
"chars": 4354,
"preview": "import { XProvider } from '@ant-design/x';\nimport MobileMenu from '@rc-component/drawer';\nimport { Col, Menu } from 'ant"
},
{
"path": "packages/x/.dumi/theme/slots/SiteContext.ts",
"chars": 605,
"preview": "import type { DirectionType } from 'antd/es/config-provider';\nimport * as React from 'react';\n\nimport type { ThemeName }"
},
{
"path": "packages/x/.dumi/theme/static/style.ts",
"chars": 37,
"preview": "import 'rc-footer/assets/index.css';\n"
},
{
"path": "packages/x/.dumi/theme/themeConfig.ts",
"chars": 818,
"preview": "export default {\n categoryOrder: {\n 'Ant Design': 0,\n 全局样式: 1,\n 'Global Styles': 1,\n 设计模式: 2,\n 'Design P"
},
{
"path": "packages/x/.dumi/theme/utils/__tests__/runTests.ts",
"chars": 3187,
"preview": "import tsToJs from '../tsToJs';\n\n// 简单测试用例:基本的 TypeScript 到 JavaScript 转换\nconsole.log('测试 1: 基本 TypeScript 转换');\nconst t"
},
{
"path": "packages/x/.dumi/theme/utils/__tests__/tsToJs.test.ts",
"chars": 2485,
"preview": "import tsToJs from '../tsToJs';\n\ndescribe('tsToJs', () => {\n it('应该将基本的 TypeScript 转换为 JavaScript', () => {\n const t"
},
{
"path": "packages/x/.dumi/theme/utils/tsToJs.test.ts",
"chars": 6459,
"preview": "import { parseText } from './tsToJs';\n\n// 简单 TypeScript 代码示例\nconst tsCode = `\ninterface Person {\n name: string;\n age: "
},
{
"path": "packages/x/.dumi/theme/utils/tsToJs.ts",
"chars": 1843,
"preview": "import { format } from '@prettier/sync';\nimport * as ts from 'typescript';\n\n/**\n * TypeScript 到 JavaScript 代码转换工具\n *\n * "
},
{
"path": "packages/x/.dumi/theme/utils.ts",
"chars": 5434,
"preview": "import flatten from 'lodash/flatten';\nimport flattenDeep from 'lodash/flattenDeep';\n\nimport themeConfig from './themeCon"
},
{
"path": "packages/x/.dumi/tsconfig.json",
"chars": 142,
"preview": "{\n \"extends\": \"../tsconfig.json\",\n \"compilerOptions\": {\n \"resolveJsonModule\": true\n },\n \"include\": [\"**/*\", \"../t"
},
{
"path": "packages/x/.dumirc.ts",
"chars": 6084,
"preview": "import os from 'node:os';\nimport { defineConfig } from 'dumi';\nimport path from 'path';\n\nimport rehypeAntd from './.dumi"
},
{
"path": "packages/x/.fatherrc.ts",
"chars": 2974,
"preview": "import { codecovWebpackPlugin } from '@codecov/webpack-plugin';\nimport DuplicatePackageCheckerPlugin from '@madccc/dupli"
},
{
"path": "packages/x/.jest.js",
"chars": 3684,
"preview": "const compileModules = [\n '@rc-component',\n 'react-sticky-box',\n 'rc-tween-one',\n '@babel',\n '@ant-design',\n 'coun"
},
{
"path": "packages/x/.lintstagedrc.json",
"chars": 143,
"preview": "{\n \"*.{ts,tsx,js,jsx,json,css,sh}\": [\"biome check --write --no-errors-on-unmatched\"],\n \"*.{md,yml}\": [\"prettier --igno"
}
]
// ... and 1019 more files (download for full content)
About this extraction
This page contains the full source code of the ant-design/x GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1219 files (5.5 MB), approximately 1.5M tokens, and a symbol index with 1076 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.