Changelog
Unreleased
-
MarkdownEditor
- ⚡️ Stabilize plugin lists and index node renderers once per configuration; adding display-only plugins preserves the Slate instance and selection.
- 🐞 Allow later node renderers to override defaults, synchronize readonly mode, Slate children and DOM attributes, and preserve nested code fences during parsing and export.
-
Plugins
- 🐞 Show source immediately when code languages change, preserve accepted drafts across effect restarts and unmounts, and retain formula source until the first paint without overlapping fallback content.
- ⚡️ Avoid hidden Ace instances for previews, collapsed code and think blocks; cancel stale theme/event tasks and show source while loading.
- 🐞 Update charts for same-length data edits, column titles and external configuration without delayed remounts; preserve Slate refs and observe local container sizing.
- 🐞 Cancel stale Mermaid loading and output, serialize shared rendering to isolate themes, and remove excess fallback space in narrow containers.
- ⚡️ Reuse KaTeX DOM for unchanged source and clear formulas immediately; show source for unfinished formulas and load failures, with horizontal scrolling for long formulas.
-
Components
- 🛠 Remove the redundant
IconButton,SwitchButton, andToggleButtoncomponents and their Props exports. Use Ant DesignButtonandTooltipdirectly, replaceisLoadingwithloading, render trailing icons as children, and manage toggle state in the caller.
- 🛠 Remove the redundant
-
Workspace
- 💄 Refine Workspace demos with a delivery overview, file browsing and realtime previews; align spacing and embedded sizing, show complete results initially, replay generation on demand, and remove continuous random updates and placeholder actions.
- ⚡️ Use lightweight Markdown for readonly realtime content and text previews, remove duplicate document synchronization, and isolate tab navigation from streamed body updates while preserving explicit Slate configuration.
- ⚡️ Truncate file text with CSS, build tree path indexes on demand, and reuse browser result and task rows to reduce measurement and unrelated updates.
- 🐞 Cancel stale preview requests and release Blob URLs without reloading unchanged sources or on locale changes; fix empty content fallback, failed previews remaining in loading state, and forced streaming scroll.
- 💄 Correct panel sizing and scroll areas, improve narrow tabs and long filenames, simplify transitions and count animations, and support touch actions, keyboard focus, and reduced motion.
-
Docs
- 📖 Remove native Input/Select, Segmented, and redundant button pages, demos, and navigation/search entries; retain specialized Markdown input scenarios and migrate their button examples.
- ⚡️ Bound and batch long-document generation with cancellation, replay streamed code, charts, and tasks on demand, stop completed updates, retain histogram samples, and cancel asynchronous work on unmount.
- 🐞 Fix duplicate chat sends and stale replies, conflicting demo styles, lost task expansion state, and clipped or compressed editors, charts, and configuration panels in narrow containers.
- 💄 Restore the default outer border and description separator for all documentation demos, adapting to light and dark themes while preserving their full preview height.
- 🐞 Include homepage styles in the initial HTML and provide matching static entries for extensionless document and demo URLs, preventing an unstyled homepage from flashing on first load.
- 💄 Remove decorative borders and shadows from editor, chat, chart, and utility demo wrappers to avoid nested frames; preserve control, table, and style customization borders.
- 🐞 Render standalone demo routes with a minimal layout to prevent duplicate site navigation and document sidebars inside code previews.
- 💄 Tighten homepage section spacing and adapt demo previews to narrow screens; size the carousel to its content instead of reserving two screens of unused scroll space.
- 🐞 Use explicit card flip buttons to prevent accidental hover flips; respond immediately to consecutive showroom selections, support keyboard and touch navigation, and display demo loading feedback.
- ⚡️ Play the homepage title animation once on entry and use transform and opacity transitions; start Canvas effects after wheel movement and retain paused progress to reduce rebuilding and blank replays while switching.
- 🐞 Fixed Ant Design reset styles vertically misaligning the navigation links with the search box, theme switch, and GitHub icon.
- ⚡️ Load homepage demos near the viewport and enhancement tabs on demand, reducing initial editor and chart dependencies and hidden DOM.
- ⚡️ Pause homepage particle, carousel, and typing animations offscreen and in background tabs; cache static particles, simplify wheel nodes, and batch demo text updates to reduce ongoing rendering.
- 🐞 Match the initial client language to the statically generated homepage to avoid remounting on hydration; language switching also works when browser storage is restricted.
v2.33.1
- 🛠 Added explicit
@types/nodedevDependency sofather builddeclaration emit no longer fails with missingprocess/NodeJS.Timeouttypes.
v2.33.0
- MarkdownInputField
- 🆕 Added inline atomic chips (
composerChips): slash command chips (structured skill nodes with pre-sendonSlashChipGate) plus@file/@folderand@symbolinline mention chips, upgrading from plain text tags to Slate inline void nodes with whole-chip deletion, click-to-configure, and serialization to/name/@pathon send. - 🆕 Added long-text paste folding (
longTextFold): plain-text pastes of ≥1200 chars or ≥12 lines collapse into a "long text" chip (with char/line stats and a click-to-preview popover) that serializes back to the original text on send. - 🆕 Added fragment-level draft recovery (
draft): auto-commits on idle / blur / send / switch / unmount and restores whendraftKeychanges; defaults to localStorage with a customizablestorage. - 🆕 Added context usage indicator (
contextUsage): toolbar circular indicator plus a built-inContextUsagePaneldetail panel (categorical bar segments, expandable breakdown rows, high-usage warning, compact action);ContextUsageIndicator/ContextUsagePanel/computeBarSegmentsare exported standalone. - 🆕 Added branch selector (
branch): branch pill with a searchable dropdown menu (current-branch uncommitted overview, per-branch switching spinner, create-branch entry, label customization); the standaloneComposerBranchTriggercomponent is exported as well. - 💄 Slash chip tones now align with the IDE
resolveSlashCommandToneKey: dedicated colors forplan/goalcommands, and unconfigured chips showplaceholderTextwhen no input follows. - 🛠 Exported
insertComposerChip/withComposerChips/findUnconfiguredSlashChips/handleLongTextPasteFoldplus theComposerChipNodechip helpers and types.
- 🆕 Added inline atomic chips (
- MarkdownRenderer
- 🐞 Fixed cached blocks reusing the stale token tree after toggling
throttleOptions.fade: fade config changes now rebuild the processor to re-parse, while finishing a stream still keeps the processor stable so heavy components are not remounted.
- 🐞 Fixed cached blocks reusing the stale token tree after toggling
v2.32.49
- OfficeViewer
- 🐞 Dynamic
@silurus/ooxmlsubpath imports use Webpack / Vite ignore hints so consumer builds succeed without the optional peer; when the peer is missing at runtime, ESM is loaded from jsDelivr as a fallback. - 🛠 Workspace Office preview statically imports only
inferOfficeFileTypeutilities so the fullOfficeViewerimplementation is not pulled in synchronously.
- 🐞 Dynamic
v2.32.48
- OfficeViewer
- 🆕 Added
OfficeViewerto preview docx / xlsx / pptx via optional peer@silurus/ooxml; shows a fallback when the peer is missing; WASM defaults to CDN and can be overridden withwasmUrl. - 🆕 PPTX now renders a slide thumbnail rail (
enableSlideRail, on by default): click a thumbnail to jump to that slide; disable it to fall back to the continuous scroll view. - 🆕 Copy support: docx / pptx enable a selectable text layer by default (
enableTextSelection); xlsx copies the selected cells as TSV viaCtrl/Cmd+C. - 📖 Added a "cards in Markdown" demo: Word / Excel render as file cards and the PPTX card lists slide thumbnails; clicking a card opens the detail preview.
- 🆕 Added
- Workspace
- 🆕
Filepreview now supports Office Open XML (.docx/.xlsx/.pptx); legacy.doc/.xls/.pptandcsvremain outside the Office preview path.
- 🆕
v2.32.47
-
Test
- ✅ Added E2E specs: SandboxRenderer sandbox rendering (Shadow DOM render/interaction/scoped isolation, #330), MarkdownEditor WYSIWYG instant conversion (default-config conversion matrix, #59), and homepage footer visibility (#397).
-
MarkdownEditor
- 🐞 Improved WYSIWYG experience:
#heading conversion no longer limited to the first paragraph;-/[ ]list conversion now applies to body paragraphs even whenmatchInputToNodeis off by default (first-paragraph guard retained to protect chat inputs). Closes #59
- 🐞 Improved WYSIWYG experience:
-
SandboxRenderer
- 🆕 Added
SandboxRenderercomponent to safely render coding-agent-generated JavaScript: node creation uses the real DOM while queries are scoped to the Shadow DOM container, inheritingProxySandboxtimeout and global whitelist. Closes #330 - 🆕
ProxySandboxnow accepts arenderRootconfig: when provided, the sandboxdocumentswitches to a scoped implementation (createElementreturns real nodes;querySelector/getElementByIdare limited to the root) and exposes it to scripts asshadowRoot.
- 🆕 Added
v2.32.31
- MarkdownRenderer
- 🛠 Removed all streaming animations and character queues (paragraph fade-in, progressive fade-in,
CharacterQueuetypewriter, andAnimationText). Streaming content is now rendered immediately afteruseStreamingcaching; removed obsolete APIs and exports includingqueueOptions,streamingParagraphAnimation, andisFinished. - 🆕 Added
ContentThrottle+useContentThrottleto progressively render large SSE text chunks frame-by-frame, mitigating full-page flashes.isFinished/throttleOptionsare now exposed toMarkdownPreviewandReadonlyMarkdownEditorView.
- 🛠 Removed all streaming animations and character queues (paragraph fade-in, progressive fade-in,
- TaskList
- 💄 Simple variant wrapper now uses
fit-contentto avoid stretching full width.
- 💄 Simple variant wrapper now uses
- ToolUseBar
- 💄 Tool container uses
grid 0fr/1frtransition instead ofmax-height, and registers--tool-rotatecustom property for stable rotation animation.
- 💄 Tool container uses
- Workspace
- 🆕
FileTree: support synthetic tree leaf node binding in preview-only mode.
- 🆕
- 🛠 Styling
- 🛠 Removed the deprecated
wrapSSRwrapper fromuseGenStyle;useStyleno longer returnswrapSSR. - 🛠 Removed
wrapSSR(...)wrapper calls from 70+ components; components now return JSX directly.
- 🛠 Removed the deprecated
Unreleased
-
Bubble
- 🐞 Flush buffered content and exit streaming when generation finishes or is aborted, even with an explicit
streamingconfiguration; remove word-animation nodes while retaining media playback state. - ⚡️ Reuse unchanged list row React elements during streaming to avoid recreating historical subtrees and rerendering their wrappers; keep attachments and the default thought chain stable while body text grows, while still applying configuration and lifecycle updates.
- 🐞 Restore actions after an empty toolbar, retain custom actions, replace reference placeholders, enable original-link navigation, and preserve numeric and array message bodies; retain edited drafts across action visibility and hover-mode changes.
- 🐞 Unify public
quote, context, action, and ref types, support short semanticstyles/classNamesfields, and apply updated attachment and speech configuration. - ⚡️ Merge redundant AI containers and omit empty titles and surrounding slots; share lazy rows and observers, retain visible message state when appending messages or changing loading policies, and skip hidden message computation while showing skeletons.
- ⚡️ Use
MarkdownRendererfor ordinary readonly messages, retaining Slate for editing, Slate-only configuration/plugins, and editor configuration comments; mount reference previews on demand while preserving locale and table fullscreen actions. - 🛠 Remove separate
PureBubble,PureAIBubble,PureUserBubble,PureBubbleList, andPureBubbleListPropsexports in favor ofBubble/BubbleList; usepurefor compact styling. Add the@ant-design/agentic-ui/Bubbleimport entry. - 🐞 Unify content configuration precedence, retaining
markdownRenderConfig.initValueand explicitreadonly; content defaults to readonly, so migrated Pure usage needsreadonly={false}for editing. Fix memo ignoring updated custom message fields, session configuration, and callbacks. - ⚡️ Reuse unchanged historical messages, styles, and context during streaming; stabilize loading message identities to avoid remounting and losing local state.
- ⚡️ Remove one redundant wrapper per user message and stabilize content props so feedback and layout changes do not rerender unchanged Markdown.
- ⚡️ Load the Schema editing bridge on demand in development only; reflect external content updates in the current render without stale content or an extra render.
- ⚡️ Mount reference entries only while expanded and release hidden content when collapsing or closing previews; reuse the editor's Slate synchronization to avoid duplicate parsing and retain plugin configuration.
- 🐞 Flush buffered content and exit streaming when generation finishes or is aborted, even with an explicit
-
MarkdownRenderer
- ⚡️ Reuse unchanged block React elements during streaming and retain only each block's latest parsed tree; equal HTML settings and empty plugin arrays preserve the processor, reducing historical work and cache retention after rollbacks.
- ⚡️ Process ordinary text and fenced-code bodies in runs; extract footnotes incrementally with committed definition contexts and update only changed reference previews, retaining full validation for new global definitions or document revisions.
- ⚡️ Isolate code and table configuration subscriptions and reuse unchanged chart data and default Schema rendering; remove one code-toolbar DOM layer and skip resize listeners until streaming content produces charts.
- ⚡️ Reuse completed blocks and resplit only the trailing window for ordinary streaming Markdown; preserve full processing for complex directives and reset correctly for revisions, rollbacks, and clearing. Render static content synchronously on the first frame and clear stale content when restarting an empty stream.
- 🐞 Compare the actual displayed prefix in the throttle so revisions sharing the same boundary character cannot retain stale display progress.
- 🆕 Add
tableConfigfor native table fullscreen previews in a modal or drawer, mounted on demand. - ⚡️ Parse footnote definitions once per content update and share them with references; mount mobile previews on the first click and disable readonly player preloading by default.
- 🐞 Stabilize rendering bridges so link, footnote, and table configuration updates take effect while retaining player positions; preserve open table previews and code blocks across configuration updates.
- ⚡️ Remove word-animation nodes from sealed blocks and completed streams, merging adjacent text while preserving formatting, charts, and media instances; keep visible paragraphs mounted when streaming ends.
-
TaskList / ToolUseBarThink / ToolUseBar
- ⚡️ Defer collapsed task and thinking content until its first expansion, retaining custom content state afterward; update only the toggled task row and omit empty hidden tool containers.
-
Workspace
- ⚡️ Reduce DOM elements in file rows, tree leaves, and search results, mounting image previews on demand; stabilize file data references to avoid rerendering files when another group collapses.
-
MarkdownEditor
- ⚡️ Stabilize plugin/editor contexts, reduce card and Tag selection subscriptions and node traversal, coalesce selection queries during typing, and simplify link-card DOM.
- ⚡️ Isolate Slate runtime dependencies from the readonly entry and reuse comment observers during streaming; load Slate operations only when deleting comments in an editable editor.
- 🐞 Validate current Slate node identity when updating nodes, embedded code, and Tags so moving, deleting, or replacing content cannot write into a neighboring node; keep table index paths synchronized with structural edits.
- 🐞 Fix backward and keyboard selections in readonly editors and selection ownership across editors; loading Markdown only clears this editor's native selection, and focus callbacks retain plugin serialization.
- ⚡️ Coalesce selection notifications, cancel pending work on unmount, and deduplicate unchanged document selections to avoid repeated callbacks, serialization, and measurements; still reposition the floating toolbar for matching text at different locations.
- ⚡️ Preserve existing empty text leaves during code input to avoid redundant Slate removals and insertions; commit IME text after composition ends, guard structural shortcuts during composition or readonly mode, and preserve pending debounced input when switching to readonly.
- ⚡️ Use Slate dirty paths for ordinary edits and selection changes, avoiding repeated full-document sanitization, copying, and serialization while preserving full validation for imports and forced normalization.
- ⚡️ Render bold text on the existing Slate leaf instead of an extra decorative
span; preserve ordinary React child identities when restoring Jinja placeholders. - ⚡️ Mount table row and column index actions and outside-click listeners only while active and isolate stable action context, reducing hidden DOM, global listeners and rerenders during large-table edits.
- 🐞 Cache highlights by node and Jinja configuration and merge each range once without mutating external caches; avoid recalculating placeholders on selection changes.
- ⚡️ Load task assignee suggestions only when first opened and avoid writing empty assignments on mounting, preventing request bursts and document updates in large task lists.
- ⚡️ Remove redundant media, readonly image and drag icon wrappers; release hidden image and media toolbar contents on close while preserving Slate selection mappings and player instances.
- ⚡️ Reduce full-document subscriptions in tags, cards, and table cells; batch column insertion/removal normalization and reuse column-width calculations for unchanged cells.
- ⚡️ Initialize the editable editor and initial document once instead of reparsing Markdown on prop echoes; load tag suggestions only when opened and load shared panel suggestions once.
- 🐞 Preserve edited drafts when toggling readonly or updating plugins together with initial values; readonly source updates continue to synchronize.
- 🐞 Fix stale selection paths when pasting across paragraphs; preserve selected text when
onPastereturnsfalseand allow plain-text fallback for empty or invalid Slate clipboard fragments. - 🐞 Use the same plugin-aware serialization for autosave and
store.getMDContent(); isolate Markdown parsing caches by plugins and configuration to prevent mixed node results. - 🐞 Cancel pending frames when clearing content or replacing an asynchronous load, preventing old content from returning and older tasks from removing newer cancellation handles.
- ⚡️ Load images, video, and audio through their displayed elements, removing duplicate preloaders and document writes on mounting; mount resize handles only for selected images and preload only player metadata.
- 🐞 Persist the final image dimensions when resizing ends and reflect external size and URL updates; resizing and deletion still target the original media after nodes move.
- 🐞 Fix card caching hiding media dimensions, URL changes, and removal; preserve player position when editing media descriptions or dimensions.
- 🐞 Create a visible paragraph after selected media when typing, pressing Enter, or pasting; deletion retains a valid caret and supports one-step undo without hidden text, empty cards, or invalid paths.
- 🐞 Unify copy and cut for images, players, and attachments; remove content only after clipboard writes succeed, with plugin serialization, moved-node protection, and one-step undo.
- 🐞 Enforce media-link request timeouts and prevent duplicate insertions or late results overwriting new edits; preserve file order and media types when pasting multiple uploads.
- 🐞 Fixed table flickering by removing the table row entry animation (
agenticMdBlurFadeInontbody tr). Streaming remounts rows and used to replay the blur fade-in; keyframes are kept only forMarkdownRendererword-by-word fade-in. - 🐞 Fixed duplicated items while readonly streaming loose lists. Multi-block parser output now merges adjacent lists before entering Slate, and the hash fast path also validates tree shape.#722
- 🐞 Fixed stale IME composition text being restored after the entire uncommitted buffer was deleted.#721
- 🐞 apaasify custom-rendered content now uses native browser copy instead of being replaced by the backing Slate schema fragment.#201
-
MarkdownInputField
- 🆕 Added
suggestionPropsto disable the internal Dropdown withenabled: falseor configuregetPopupContainer,destroyOnHidden,forceRender, andplacement.#682
- 🆕 Added
-
📦 Compatibility
- 📦 Added Ant Design 5.29.3 through 6.x support:
antdis now a peer dependency, development uses antd 6, an antd 5/6 CI matrix was added, and the antd-6-incompatible Pro Components runtime dependency was removed.#649 - 🛠 Upgraded
@ant-design/cssinjsand@ant-design/cssinjs-utilsto 2.x and made Popover semantic style keys work across antd 5/6.
- 📦 Added Ant Design 5.29.3 through 6.x support:
-
📖 Docs
-
MarkdownInputField
- 🆕 Added
inputHistorynavigation (aligned with the desktop IDE chat input):↑/↓recall previously sent content at the start/end of the draft, stashing the in-progress draft; history lives only in component memory. - 🆕 Added drag-and-drop upload: with
attachmentconfigured, drop files onto the input (format, size, and count checks included, with a hover highlight overlay). - 🆕 Added
followupssuggestion chips: click to send or fill the input (fillOnly), width-aligned with the field. - 💄 Slash / tag chips now play a one-shot character wave + icon sweep animation on insert (aligned with the desktop IDE composer), honoring
prefers-reduced-motion. - 🐞 Synchronize external controlled clears, conversation changes, and draft updates while focused, preserving protection for editor echoes and IME composition.
- 🐞 Route Followups through the shared send pipeline, respecting disabled, typing, send-button restrictions, and concurrent-send guards; notify
onChangeonce through state updates for edits, truncation, quick actions, and fills.
- 🆕 Added
-
MarkdownRenderer
- 🆕 Added GPT-style streaming word-by-word fade-in: while
streaming, new words fade in individually; already-shown content reuses DOM without flickering. Pure CSS, honorsprefers-reduced-motion; skips code blocks / tables / formulas. - 🆕 Fade toggle lives in
throttleOptions.fade(defaulttrue, only whenstreaming): passthrottleOptions={{ fade: false }}to disable. Works via existingthrottleOptionsonMarkdownEditor(renderMode: 'markdown') andBubble.markdownRenderConfig. - 🛠 Token splitting via a last-registered rehype plugin on the final hast; processor instance stays stable during a streaming session to avoid remounting charts/code blocks.
- 📖 Tidied
markdown-renderer.md(demo sections, alphabetical API tables,ContentThrottleOptions.fade); syncedapi.md/bubble.md/ Playground and the streaming compare demo.
- 🆕 Added GPT-style streaming word-by-word fade-in: while
-
TaskList
- 🛠
simplevariant drops the 2px progress bar underneath the summary;showProgressnow only toggles the inline "completed/total" count text. - 🆕 Added
scrollIntoViewOnExpand(boolean | ScrollIntoViewOptions, defaultfalse): when thesimplesummary expands, scroll the component into the viewport.trueresolves to{ behavior: 'smooth', block: 'nearest' }; the initial mount does not trigger it.
- 🛠
-
ToolUseBarThink
- 💄 Removed the default and hover background fills on the bottom
content-expand(expand/collapse) button — only the text color changes on hover. Hovering the whole card no longer stacks a second grey on top of the root background. - 🆕 Added
scrollIntoViewOnExpand(boolean | ScrollIntoViewOptions, defaultfalse): scroll the component into the viewport on expand (skips the initial mount), mirroringTaskList. - 🆕
MarkdownEditor.codePropsgainsscrollDeepThinkIntoViewOnExpand, forwarded to the deep-think block'sToolUseBarThink.scrollIntoViewOnExpandso in-editor```thinkblocks can opt into the scroll-on-expand behavior.
- 💄 Removed the default and hover background fills on the bottom
-
🛠 Styling
- 🛠 Rewrote
Hooks/useStyleon top of@ant-design/cssinjs-utils'sgenStyleUtils, mirroring antd's owntheme/util/genStyleUtils. ExposesgenStyleHooks/genComponentStyleHook/genSubStyleComponentplusAgenticComponentTokenMap/FullToken/GenStyleFntypes; components can declare their ownComponentTokenvia module augmentation. - 🛠 Migrated 70+
style.tsfiles to thegenStyleHooks('ComponentName', genStyle)pattern (AILabel/TaskList/ToolUseBar/Workspace/Plugins/chart/*/MarkdownEditorroot, etc.).useEditorStyleRegisterremains as a thin compatibility entry for cases that need a dynamic token / dynamic classNames (Bubble,MarkdownInputField,MarkdownEditor/editorcontent), and is now backed directly by@ant-design/cssinjs'suseStyleRegister. - 🛠 Dropped runtime dependency on
@ant-design/theme-token'screateStyleRegister. The component library keepshashId=''to prevent host antd theme hash from breaking selectors. - ⚡️
useStylenow returns an identitywrapSSR. Style injection happens through cssinjs'suseGlobalCache→updateCSSside effect during the hook call and never depended onwrapSSR. In our CSR-only configwrapSSR(node)was always<><Empty/>{node}</>, so we drop that Fragment +<Empty/>allocation. Existingreturn wrapSSR(<jsx/>)callers continue to work (identity passthrough); new code can simplyreturn <jsx/>.
- 🛠 Rewrote
-
Workspace
- 💄
FileTree: folder and leaf names use CSS single-line ellipsis; full name via nativetitleon hover. - 🆕 Added
defaultActiveTabKeyto set the initial active tab in uncontrolled mode. - 🆕 Added
notifyOnInvalidActiveTabKey(defaulttrue): when controlledactiveTabKeyis not in the tab list, whether to callonTabChangewith a valid key;falsefalls back in the UI only. - 🆕 Added
preserveFilePreviewOnTabChange(defaultfalse): whentrue, leaving and returning to a file panel keepsWorkspace.File/Workspace.FileTreepreview state. - 🆕 Added
emptyContentplaceholder when there are no valid child panels (otherwise stillnull). - 🆕 Child
BaseChildProps.panelTypefor explicit panel typing; package exportsmarkWorkspacePanelandWORKSPACE_PANEL_TYPE. Built-inWorkspace.*children are marked;React.memo(Workspace.File)andmemo/forwardRefchains are resolved via thetypewalk. - 🛠
resetKeynow increments only when leaving afile/fileTreepanel or switching between two file panels, instead of on every tab change (avoids pointless bumps for hidden file panes). - 💄
Workspace.FilefileTreeSwitchicons: listBarsOutlined, treeApartmentOutlined; default Workspace File / FileTree tab icons aligned (@ant-design/icons). - 📖 Updated
workspace.mdwith new props, panel recognition, controlled tabs, preview behavior, and best practices. - ✅ Added
WorkspaceandworkspacePanelunit tests (defaultActiveTabKey,emptyContent,memorecognition,notifyOnInvalidActiveTabKey, etc.). - 🛠 Defensive guards: flatten
Fragmentchildren, dedupetab.key, ignore segmented divider / invalid tab keys, validatepanelType/tab.count,normalizeTabKey, captype-chain walk depth.
- 💄
-
📖 Docs
- 📖 Added
MarkdownRenderercomponent documentation (streaming Markdown,ContentThrottleOptions, built-in code-block renderer routing,MarkdownRendererRef). - 📖 Added a dedicated
ToolUseBarThinkdoc; corrected theToolUseBarThinkAPI table insidetool-use-bar.md(removed deprecated/non-existent props such asid,isThinkLoading,isActive,onActiveChange, etc., aligned with actual props). - 📖 Added
GradientText,TextAnimate, andTypingAnimationcomponent docs with demos. - 📖 Added an "API Playground" comprehensive demo for
MarkdownRenderer/GradientText/TextAnimate/ToolUseBarThink, showcasing each component's core props and behavior in a single interactive demo. - 📖 Added an "API Playground" comprehensive demo for layout components
AgenticLayout/ChatLayout/LayoutHeader, covering three-column toggles, widths, controlled/uncontrolled collapse,scrollBehavior, imperative ref (scrollToBottom/isAtBottom),onScrollStateChange, andleftExtra/rightExtraslots. - 🛠 Rewrote
task-running.mdasAgentRunBar 任务运行状态, markingTaskRunning/TaskRunningProps/TaskRunningVariant/TaskRunningActionsRenderas deprecated aliases; updateddocs/demos/task-running.tsxto useAgentRunBarinstead ofTaskRunning.
- 📖 Added
v2.33.0
-
MarkdownEditor / Plugins.chart
- 🆕 New
chartType: "docCards"renders a Markdown table as a card grid (one row → one card), reusing the existing{/* {chartType: ...} */} + GFM tabledata contract. Header columns are matched by aliases (名称/标题/name/title,地址/链接/URL,简介/描述/description,亮点/标签/tags) with the samelogical name + (unit)loose matching used by chartx/y.cardColumnscontrols the per-row card count (1–4, default2, values out of range are clamped);fieldMapoverrides the alias resolution. - 🐞 Security:
isSafeHrefnow explicitly rejects protocol-relative URLs (//evil.com). The previousstartsWith('/')allowance for site-internal absolute paths inadvertently let//hostthrough, bypassing the protocol allowlist. - 🛠 Bundle: Extracted
src/Utils/columnMatching.tsas a zero-dependency shared module hostingcolumnKeyMatchesConfiguredField/resolveChartAxisFieldToColumnKey/DOC_CARDS_FIELD_ALIASES/resolveDocCardsFields.DocCards/utils.tsno longer imports fromparseTable, soimport { DocCards }no longer transitively pulls the full Markdown parser stack (remark / rehype / sanitize / katex).parseTable.tsandDocCards/utils.tsstill re-export the same symbols for backward compatibility. - 💄 In-page links (
/foo,./foo,../foo,#anchor) no longer forcetarget="_blank", so anchor jumps stay in the current tab; external links (http(s)/mailto/tel) still open in a new tab withrel="noopener noreferrer". - 🌐 The tag pill container
aria-labelnow uses a dedicateddocCardsTagskey (English "Tags"); previously it reuseddocCardswhich read as "Card List" to screen readers. - 🆕 The
@ant-design/agentic-uientry now exports theDocCardscomponent along withresolveDocCardsFields/splitDocCardsTags/isDocCardsSafeHref/formatDocCardsDisplayUrl/DocCardsDefaultFieldAliasesfor downstream reuse. - 💄 Card links render as
host + path(e.g.https://tailwindcss.com/docs→tailwindcss.com/docs);hrefand thetitletooltip keep the original URL. Overlong URLs are truncated to a single line with ellipsis. - 💄 Mobile / touch readiness: viewport
< 480pxis forced to a single column; card:hoveris wrapped in@media (hover: hover)so it no longer "sticks" after first tap on touch devices; link min touch height is 24px (WCAG 2.5.5 AA); tag pills usepaddinginstead of a fixed height so they don't get squashed. - ⚡️
gridTemplateColumnsand the header node are memoized;cardColumnsusesrepeat(N, minmax(0, 1fr))so the column count strictly matches user intent (instead ofauto-fitover-packing a wide container). - 🛠
parseTable:docCardsnow validates that a primary title column is resolvable; if not, the whole table downgrades to a plain Markdown table to avoid rendering an empty card grid. Behavior of otherchartTypes is unchanged.
- 🆕 New
-
🐞 Fix React Hooks dependency issues causing infinite loops and excessive re-renders
- SchemaRenderer:
schema || {}creates a new reference each render, invalidatinguseMemo([safeSchema]). Fixed with module-level constantEMPTY_SCHEMA - SchemaForm:
schema?.component || {}creates a new reference each render, invalidatinguseMemo([properties]). Fixed with module-level constantEMPTY_COMPONENT - ButtonTabGroup: default param
items = []causesuseEffect([items])to fire every render. Fixed with module-level constantEMPTY_ITEMS - useChartDataFilter:
Array.isArray(data) ? data : []invalidatesuseMemo([safeData]). Fixed with module-level constantEMPTY_DATA - TagPopup:
props || {}destructureditemshas unstable reference. Removed unnecessary|| {}fallback - I18n:
antdContext?.locale(object reference) as dependency causes excessive effect firing. Changed toantdContext?.locale?.locale(string) - AgenticLayout:
currentRightWidthas both dependency andsetCurrentRightWidthtarget causes resize listener to rebuild repeatedly. Fixed with ref - BaseMarkdownEditorSlate:
isEditorFocusedas both dependency and setter target causes mousedown listener to rebuild repeatedly. Fixed with ref +useRefFunction - Workspace: uncontrolled
setInternalActiveTabin else-if branch causes double effect firing. AddedcurrentKey !== internalActiveTabguard - ActionItemContainer:
props.childrenas dependency causes effect to fire on every parent render. Fixed withuseMemoextractingchildrenKeys - keyboard: empty deps
[]but usesprops.readonly/store/keydown. Added missing dependencies - ThoughtChainList/MarkdownEditor:
useEffectmissingprops.pluginsandprops.initValuedependencies. Added - AceEditorWrapper:
onChangeclosure captures initial value, later changes ignored. Fixed withonChangeRefpattern - BubbleExtra:
useEffectmissingprops.onRenderExtraNulldependency. Added - FileComponent:
useEffectmissingpreviewFiledependency. Added - Editor:
ref.currentas dependency is unreliable. Removed and added eslint-disable comment - useAutoScroll: no-deps
useEffectfor ref sync changed touseLayoutEffect
- SchemaRenderer:
-
🛠 SchemaRenderer / SchemaForm: add
ComponentConfigtype annotation toEMPTY_COMPONENT -
🛠 BaseMarkdownEditorSlate: change
setEditorFocusedfromuseCallbacktouseRefFunction, remove redundantisEditorFocusedstate -
📖 Add "React Hooks Dependency Pitfalls" section to development guide, documenting 7 common patterns and fixes
v2.32.0
- MarkdownInputField
- 💥 Breaking change:
actionsRender/toolsRender/quickActionRender/beforeToolsRenderarg type narrowed from the god-objectMarkdownInputFieldProps & MarkdownInputFieldProps['attachment'] & {...}to the stable derived typeSlotRenderState(actionsRenderusesActionsSlotStatewhich addscollapseSendActions). New arg fields:value/isHover/isLoading/fileMap/onFileMapChange/fileUploadStatus/fileUploadSummary/attachment/disabled/typing. Migration: changeprops.uploadand other attachment fields tostate.attachment?.upload; renamepropstostatefor the rest. - 🛠
MarkdownInputFieldProps['attachment']switched from the inline shape{ enable?: boolean } & AttachmentButtonPropsto the named typeAttachmentConfig. Behaviour is identical. - 🆕 New public type exports:
SlotRenderState,ActionsSlotState, for typing custom slot implementations.
- 💥 Breaking change:
v2.31.5
- 🛠 Change some exported types from value exports to type exports, optimize bundle size.
- 🛠 Remove unused locale keys and fix lint errors.
- ✅ Remove animation mock files no longer used in tests.
- 🛠 Clean up MarkdownEditor utility functions and optimize import paths.
v2.31.4
- 🐞 Fix text display logic for tasks in progress.
- ⚡️ Optimize tree-shaking — eliminate reverse barrel references, named exports for third-party SDKs, add sideEffects.
- 🐞 Fix code block styles in dark theme.
- 🛠 Remove deprecated theme i18n key (code block theme toggle button removed).
v2.31.3
- ✅ Add unit tests for rehypeSanitizeUserHtml plugin.
- 🛠 Code block theme follows global theme, remove independent moon icon toggle.
- 🐞 Add rehypeSanitizeUserHtml plugin to filter dangerous HTML from user input and prevent layout issues.
- 🛠 Replace hardcoded color values with CSS variables.
v2.31.2
- ⚡️ Reduce bundle size and improve first screen — direct Lottie imports, split readonly markdown components, lazy load Renderer.
v2.31.1
- 🛠 Replace hardcoded color values with token variables to support theme switching.
v2.31.0
- 📖 Add MarkdownInputField component demo.
- 📖 Add Loading component demo.
- 💄 Add dark theme support for Loading component.
- 🛠 Remove test step from prepublishOnly.
- 💄 Merge download and copy button styles, use unified styles.
- 💄 Add dark theme support for table and chart toolbar copy buttons.
v2.30.35
- 🛠 Fix eqeqeq rule errors and unused imports.
- 🐞 Fix multiple issues in FileTree and FilePreview components.
- 🛠 Remove MutationObserver from Paragraph, use composition event listener instead.
- 🐞 Fix multiple issues in animation generation.
- ⚡️ Optimize useDetectTheme to singleton mode, avoid duplicate MutationObserver.
- 🐞 Chart components support html[data-theme="dark"] for automatic dark theme switching.
- ✅ Change Robot component tests to async and add Lottie loading wait logic.
v2.30.33
- 🆕 Add automatic theme detection for ChartContainer.
- ✅ Fix async timing in onLoadChildren retry test cases.
- 🆕 Add ThreeThinkingLottie on-demand loading animation component and remove extra spacing in user messages.
v2.30.32
- 🆕 Add data-testid attributes to multiple components for automated testing support.
- 🛠 Adjust BubbleList code formatting and indentation.
v2.30.31
- 🐞 Remove MarkdownEditor content area margin variable override. #513
- 🐞 ActionIconBox no longer prevents event bubbling when there is no onClick.
- 🆕 Add FileTree component to Workspace with lazy-loaded children support. #510
- 🐞 Fix Bubble useMemo/useEffect dependency issues and performance problems.
- 🐞 Increase ToolUseBarThink light variant style priority after success. #511
- 💄 Optimize TaskList easing curves, change demo to auto-loop playback.
- 💄 Reduce TaskList simple mode demo animation speed.
- 💄 TaskList simple mode demo supports dynamic change demonstration.
- 💄 Remove TaskList progress element, add blur fade-in animation when text changes.
- 💄 Add CSS transition animation for TaskList Simple mode expand/collapse.
- 🐞 TaskList Simple mode removes background color, always shows last task, cleans up redundancy.
- 🐞 Fix MarkdownInputField send button solid color by theme to ensure contrast. #509
- ⚡️ Remove ToolUseBarThink framer-motion, full CSS animations + performance optimization.
- 🐞 Fix MarkdownInputField tools bar fixed height and padding conflict causing vertical misalignment. #508
- 🆕 Support thinking tag as an alias for think block.
- ⚡️ Comprehensive improvements to streaming rendering performance and correctness.
- 🛠 Remove BOM characters from files.
v2.30.30
- 🛠 Extract MarkdownEditor style cleanup function and support custom properties.
- 📖 Update bubble examples to file understanding scenarios.
v2.30.29
- 🛠 No major changes.
v2.30.28
- 🛠 No major changes.
v2.30.27
- 🐞 Fix Bubble code block selector and improve SendButton accessibility. #507
- 🐞 Streaming JSON code blocks avoid Ace repeated setValue flickering. #504
- 💄 Built-in Agentic UI business layer CSS overrides. #506
- 🐞 Normalize redacted_thinking alias so nested JSON stays in think block. #505
- 🐞 Attachment list file size and error text single-line ellipsis display. #503
- ⚡️ Reduce ThoughtChainList deep thinking related re-renders during streaming updates. #501
- ✅ Default suite excludes large directories, approximately 5000 test cases. #500
- ✅ Reduce duplicate mocks in ace and elements tests. #498
- 🐞 Chart x/y and header with unit column names loose matching and supplement RFC. #499
v2.30.26
- 🐞 Fix MarkdownEditor IME and root-level double empty paragraph, initSchema sync issues.
v2.30.25
- 🐞 Improve loading indicators and enhance Markdown rendering.
- 🆕 Enhance Bubble Markdown rendering with stable fncProps and caching improvements.
- 🐞 Lazy load rows to avoid display:contents causing LazyElement to never display. #494
- 🐞 Paragraph visibility based on Slate children rather than React children. #493
- 🛠 Remove todo.md file.
- 🐞 Stop mutating list items so streaming updates do not rerender all bubbles. #492
- 🐞 Fix Mermaid SVG size and adapt canvas scaling conflict causing charts to be too small. #487
- 🛠 Remove todo.md and update clean-code rule to no longer require that file. #491
- 🐞 Empty initValue no longer repeatedly appends paragraphs to restore placeholder. #490
- 📖 rerender demo supports left-side Markdown manual editing. #488
- 📖 Optimize MarkdownInputField demos. #486
- 📖 Format Props tables in component documentation.
- 🐞 Fix MarkdownEditor sparse children causing Slate renderLeaf to read undefined. #485
- 🛠 Remove document BOM header and optimize MarkdownInputField import order.
v2.30.24
- 🐞 Fix MarkdownEditor empty markdown content handling and Node method safe calls.
- 🐞 Harden MarkdownEditor sanitize normalizer against invalid Slate trees. #484
v2.30.23
- 🐞 Remove illegal children during MarkdownEditor normalization to avoid Node.string crash. #483
v2.30.22
- 🛠 Restore demo check and report scripts. #482
- 📖 Optimize MarkdownInputField documentation Demo layout and fix example issues.
- 🆕 Support Bubble OpenAI/OpenClaw/Ollama message format adapters. #481
- 🐞 Fix MarkdownEditor empty paragraph backspace accidentally triggering select-all clear. #479
- 🐞 Streaming paragraph animation enabled by default and E2E/unit test stabilization. #478
- 🐞 ChatLayout auto-scroll to bottom when streaming text update ends. #480
- 🐞 Fix MarkdownRenderer animation failure and add streaming blinking cursor. #477
- ✅ Add MarkdownEditor stale selection handling regression coverage. #476
- ✅ Add MarkdownEditor invalid selection path regression coverage. #475
- ✅ Add Mermaid toolbar interaction regression coverage. #471
- 🛠 Slate.js normalized usage improvements (P0-P3 all fixed + coverage met). #474
- 🐞 Fix MarkdownEditor isElement crash reading undefined.children. #472
- 🆕 SendButton disabled during file upload, support sendButtonProps.disabled external control. #470
- ✅ Add attachment preview passthrough regression coverage. #467
- ✅ Add MarkdownInputField attachment onPreview passthrough and error handling regression coverage. #468
- ✅ Add AttachmentFileListItem retry unit tests. #465
- 🐞 Fix Lint errors in non-compliant Demo code. #466
v2.30.22
- Workspace
- 📖 Add
Workspace.FileTreelazy file tree doc demoworkspace-file-tree-demo. - 🐞
FileTree: empty dirs / failed loads no longer forceisLeaf;onLoadChildrenrejection propagates for rc-tree retry;toDataNodedefaults missingisLeafwith no children to a file;resetKeyno longer wipes lazy-loaded state. - 🛠 Rename lazy-load callback on
FileTreePropstoonLoadChildren(aligns withonprefix for callbacks). - 🛠
resetKeyis only passed to the activeWorkspace.File/Workspace.FileTreetab, avoiding redundant updates in hidden panes. - ⚡️ Precompute
Segmentedoptions and the firstRealtimeindex in one pass, avoiding repeated O(n)findIndexscans in the options reducer. - 🛠 Stabilize
onLoadChildreninFileTreeviauseRefFunctionto keep TreeloadDatafrom churning on parent re-renders. - 🛠 Export
WorkspacePanelTypeand narrowTabItem.componentTypeto that union; docs add aTabItemblurb.
- 📖 Add
- MarkdownRenderer
- 🐞 Fix missing paragraph fade-in when
streamingParagraphAnimationis omitted in streaming markdown mode; default is now on, setstreamingParagraphAnimation: falseto disable. #478
- 🐞 Fix missing paragraph fade-in when
- MarkdownEditor
- 🛠 Align
streamingParagraphAnimationsemantics with MarkdownRenderer (on by default, passfalseto disable). #478
- 🛠 Align
- Bubble
- 📖 Docs and streaming demo add
markdownRenderConfig.streamingParagraphAnimation: falsemigration example (matches legacy “omit means no paragraph animation”). #478 - 🆕 Add
useOpenAIMessageBubbleDatahook andmapOpenAIMessagesToMessageBubbleDatato convert OpenAI Chat Completions-stylemessagesintoMessageBubbleData[]forBubbleListand SSE streaming. - 🆕 Add
useOpenClawMessageBubbleData,mapOpenClawMessagesToMessageBubbleData, andnormalizeOpenClawMessagesToOpenAIfor OpenClaw session/transcript-style messages (timestamp,toolResult, etc.). - 🆕 Add
useOllamaMessageBubbleData,mapOllamaMessagesToMessageBubbleData, andnormalizeOllamaMessagesToOpenAIfor Ollama/api/chatmessages(images,tool_calls,thinking, etc.).
- 📖 Docs and streaming demo add
v2.30.15
- MarkdownInputField
- 🆕 Add
onUploadErrorcallback andremoveFileOnUploadErroroption for custom upload failure handling. #434 - 🆕 Support file size interception and attachment upload error handling. #437
- 🆕 Clicking anywhere in the input area automatically focuses the editor. #435
- 🐞 Unify attachment file size configuration, remove
SupportedFormat.maxSizefield. #429
- 🆕 Add
- 🐞 Fix
data-is-unclosedattribute and CSS selector logic. #438
v2.30.14
- Bubble
- 🆕 Extract markdown filemap images to render outside the bubble. #430
- MarkdownInputField
- Workspace / Browser
- 🐞 Fix page navigation triggered on location and link clicks. #431
- DonutChart
- 🐞 Fix inconsistent legend and sector colors in pie/donut charts. #432
- Plugins / CodeBlock
- 💄 Update code block font size from 0.8em to 1em for improved readability.
- Parser
- 🆕 Support
::warningdouble-colon container directive syntax. #426
- 🆕 Support
v2.30.13
- FileMapView
- 🆕 Support
onPreviewinterception anditemRendercustom rendering for images/videos, passed throughmarkdownRenderConfig.fileMapConfig. #423
- 🆕 Support
- FileMapConfig
- 🆕 Add
normalizeFilecallback for custom file data format conversion. #424
- 🆕 Add
- MarkdownInputField
- 🆕 Add
onExceedMaxCountcallback, display files in error state when count exceeds limit. #419
- 🆕 Add
- MarkdownRenderer
- 🐞 Fix code block flickering (unmount/remount) during streaming rendering. #422
- Chart / Histogram
- 🐞 Fix scientific notation parsing and support pre-binned data. #421
- Chart / ScatterChart
- 🐞 Auto-calculate axis range from data; support manual
xMin/xMax/yMin/yMax. #420
- 🐞 Auto-calculate axis range from data; support manual
- 🐞 Fix E2E full failure (
usePrefersColorcrash) andtoBeInTheDocumentTypeScript error. #417
v2.30.12
- MarkdownEditor / Plugins / CodeBlock
- 🆕 Added "Local Preview" button to the code block toolbar:
htmlandmarkdowncode blocks now have a button to open a local preview in a new tab. HTML code is rendered directly via a Blob URL (JavaScript is allowed to run); Markdown code is converted to HTML first.
- 🆕 Added "Local Preview" button to the code block toolbar:
- MarkdownEditor
- 🆕 Add
agentic-ui-filemapfenced code block, rendered as a file list. #416
- 🆕 Add
- History
- 🆕 Do not display group title when group has fewer than 3 items; display items as a flat list instead. #411
- Bubble
- 🐞 Fix dark theme and user bubble style visibility issues. #413
- 🐞 Fix message list not reaching the bottom by a small margin (
useAutoScroll). #409 - 🐞 Add top margin for chat loading state. #410
v2.30.11
- MarkdownRenderer
- 🆕 Support
eleRenderfor custom element rendering (markdown render mode). #405
- 🆕 Support
- MarkdownInputField
- 🐞 Fix placeholder not disappearing on mobile input. #401
- Workspace
- 🐞 Provide default CSS variable values and auto-load root styles. #403
- 🐞 Delay streaming table rendering until first row is complete. #400
v2.30.10
- Mermaid
- 🐞 Only render Mermaid diagram when code block is closed. #399
- 💄 Adjust default table column width from 120px to 40px.
v2.30.9
- MarkdownEditor
- 🛠 Simplify directive handling and remove unused subpath type.
v2.30.8
- FileMapView
- MarkdownEditor
- 🐞 Use block layout for
blockquoteinstead of flex. #396
- 🐞 Use block layout for
- Parser
- 🆕 Only
:::block container directives are supported; inline:fooforms are ignored. #395
- 🆕 Only
v2.30.7
- 📖 Add Bubble streaming Markdown demo page.
v2.30.6
- MarkdownRenderer
- 🆕 Enhance streaming rendering with tail fade-in animation and character queue configuration.
v2.30.5
- MarkdownRenderer
- 🐞 Improve key stability and animation logic for streaming messages.
v2.30.4
- MarkdownRenderer
- 🆕 Animate only the trailing 50 characters during streaming; add
animateTailCharsconfig.
- 🆕 Animate only the trailing 50 characters during streaming; add
v2.30.3
- Chart
- 🆕 Add BoxPlot and Histogram chart components.
- 🆕 Atomic charts support dark theme. #390
- 🆕 Export chart components with
forwardRefto support ref forwarding. - 🆕 Add copy Markdown table feature.
- MarkdownRenderer
- 🆕 Improve block content stability in streaming scenarios, avoid repeated unmount and remount.
v2.30.2
- Chart
- 🆕 Parse Chinese currency strings (亿元/万元/元) for charts. #388
- MarkdownEditor
- 🐞 Skip time-colon escape inside fenced code blocks. #383
- 💄 Only render Tooltip in
ToolBarItemwhentitleis present, mitigatingfindDOMNodedeprecation warning.
- SchemaEditor
- 🐞 Restore empty content copy hint and success/failure feedback.
v2.30.1
- MarkdownEditor
- 🛠 Rebuild editable table implementation; improve column width handling, row/column commands, and cell selection. #376
- 🆕 Support fenced
agentic-ui-taskandagentic-ui-toolusebarcode blocks rendering TaskList and ToolUseBar; legacyagentic-ui-usertoolbarremains readable and normalizes to the new identifier. #378 #380 - 💄 Fenced
agentic-ui-taskdefaultsvarianttosimple; set root-levelvarianttodefaultfor the full task-chain layout. - 🆕 In readonly mode,
renderMode/renderTypemarkdownuses MarkdownRenderer;markdownRenderConfigacceptsrenderTypealias. - 🐞 Fix Chart canvas not visible under the Slate placeholder overlay. #381
- MarkdownRenderer
- 🆕 Use Markdown Renderer instead of Slate for streaming scenarios. #369
- 💄 Add blur transition to streaming text fade-in animation.
- Bubble
- 🛠 Optimize thinking state with lightweight DOM loading and dots-only animation. #377
- 🐞 Fix
extraShowOnHoverhandling to default totruewhen not provided.
- BubbleMessageDisplay
- 🐞 Fix empty,
undefined, ornullcontent rendering whenanswerStatusisEXCEPTION. #376
- 🐞 Fix empty,
- MarkdownInputField
- 🌐 Improve clarity of file upload related messages.
- 📖 Remove
rfc-streaming-markdown-renderer.mddocumentation. #370 - ✅ Add snapshots for agentic-ui embed and thinking DOM demos; update related demo snapshots.
- 🛠 Fix test and Chart error logging.
v2.29.60
- MarkdownRenderer
- 🆕 Use Markdown Renderer instead of Slate for streaming scenarios (pre-release; formally shipped in v2.30.1). #369
- 🛠 Fix test and Chart error logging.
v2.29.58
- Bubble
- 💄 Remove padding from
extrain Popover mode. #367
- 💄 Remove padding from
- MarkdownPreview
- 🛠 Improve code formatting and error handling.
- FileUploadManager
- 🛠 Improve error handling.
- ✅ Add Markdown directive and parseTable regression test coverage. #366
v2.29.57
- MarkdownEditor
- 🐞 Fix
textDirectiverendering failure, support Yuque documents. #365
- 🐞 Fix
- 🛠 Add error handling to
myRemark.stringifyfor improved robustness. - 🐞 Fix TypeScript type errors.
- 🐞 Update card-selection-demo snapshot, fix paragraph element structure and attributes.
v2.29.56
- MarkdownEditor
- 🐞 Add
textDirective/leafDirectiveprocessors for remark-rehype, fix unknown node error. #364
- 🐞 Add
- Bubble
- 🆕 Add
extraShowOnHoverprop, default off, when enabledextraonly shows on hover. - 💄 Change
extrato show on hover instead of always visible. #362
- 🆕 Add
- 🛠 Remove all message prompt calls. #363
- ✅ Add regression tests for PureBubbleList, AttachmentFileList, AttachmentButtonPopover. #355 #356 #359
v2.29.55
- MarkdownInputField
- 🆕 Send button supports sendable state. #361
- Blockquote
- 🆕 Add
data-testidattributes for improved testing support. - 🐞 Fix
classNamecompatibility by casting attributes toReact.HTMLAttributes.
- 🆕 Add
v2.29.54
- MarkdownEditor
- 🆕 Add markdown-it-container style
:::custom container syntax (info/warning/success/error/tip). #360
- 🆕 Add markdown-it-container style
- MarkdownInputField
- 🆕 Add
data-testidattributes to demos for E2E testing support.
- 🆕 Add
v2.29.53
- MarkdownInputField
- 🆕 Add E2E test ID support and export
testIdsconstant. - 🆕 Image upload supports svg and webp formats. #358
- 🆕 Add E2E test ID support and export
- ChartStatistic
- 🆕 Support Semantic styles and
subtitledisplay.
- 🆕 Support Semantic styles and
- ToolUseBarThink
- 🌐 Add internationalization support, add
flex-direction: columnto container. #357
- 🌐 Add internationalization support, add
- ✅ Improve test coverage for RealtimeFollow, FileMapView, AttachmentFileIcon, BeforeToolContainer, Enlargement.
v2.29.31
- MarkdownEditor
- 🐞 Fix
Node.leaferror underlist-item, useEditor.leafto parse leaf nodes. - 🛠 Enhance
matchInputToNodefunctionality and keyboard handling logic. - 🛠 Optimize
classnamespecification and usage. #315 [@陈帅]
- 🐞 Fix
✅ Enhance test coverage for MarkdownEditor and Bubble components. #307 [@222]
v2.29.30
-
MarkdownEditor
- 🛠 Optimize
SlateMarkdownEditorrendering performance withReact.memo. - 🛠 Unify
classnameprefix toagentic-md-editor-*. #311 [@陈帅]
- 🛠 Optimize
-
LinkCard
- 🛠 Reorganize
classnaming per BEM specification. #312 [@陈帅]
- 🛠 Reorganize
-
Chart
- 🛠 Optimize ProForm config form class names with
agentic-chart-config-formprefix and BEM structure. #313 [@陈帅]
- 🛠 Optimize ProForm config form class names with
-
ChartRender
- 🛠 Optimize BEM class names for table and description list. #314 [@陈帅]
-
AceEditor
- 🛠 Remove unused dependency from
effecthook.
- 🛠 Remove unused dependency from
v2.29.29
- MarkdownEditor
v2.29.28
-
Workspace
- 🆕 Support video file preview and playback. #308 [@陈帅]
-
SchemaEditorBridgeManager
- 🆕 Add
getContentByIdmethod for content retrieval. #306 [@222]
- 🆕 Add
📚 Update demo data and content. #305 [@陈帅]
v2.29.27
- Bubble
- 🛠 Refactor locale handling for improved internationalization support. (e1927ec6)
📚 Supplement changelog entries for v2.29.8-v2.29.26. #303 [@陈帅]
v2.29.26
- Bubble
- 🛠 Refactor Bubble component to integrate
useMergedLocalefor consistent locale handling across components. (6647b12b)
- 🛠 Refactor Bubble component to integrate
v2.29.25
-
MarkdownInputField
- 🌐 Internationalize upload status, optimize "Uploading..." and "Upload failed" text multilingual display. #301 [@陈帅]
-
I18n
- 🌐 Improve internationalization, fix translation errors in
cnLabels, add 17 missing i18n keys, and update 9 components to use internationalization. #299 [@陈帅]
- 🌐 Improve internationalization, fix translation errors in
📚 API documentation update, improve design issues documentation. #298 [@陈帅]
v2.29.24
-
Bubble
- 🐞 Fix style class name prefix, prepend dot to class name in
useMessagesContentStylefor correct styling. (2f496852)
- 🐞 Fix style class name prefix, prepend dot to class name in
-
MarkdownPreview
- 🛠 Simplify rendering logic and enhance Popover behavior based on
placementand extra content. (d9cf641c)
- 🛠 Simplify rendering logic and enhance Popover behavior based on
-
Workspace
- 🛠 Update demo file reference and remove obsolete demo. (fc4ffb27)
✅ Test optimization, update type assertions and mock implementations in various test files for better type safety and consistency. (4d5634b1)
v2.29.23
-
MarkdownEditor
- 🌐 Support internationalization for editor toolbar titles, headings, subheadings, and body text. #296 [@shuyan]
-
MarkdownEditor
- 🐞 Fix initialization issue when Markdown content is empty, ensure proper rendering when
initValueis empty orundefined. #294 [@陈帅]
- 🐞 Fix initialization issue when Markdown content is empty, ensure proper rendering when
v2.29.22
- Bubble
- 🛠 Refactor class naming for improved style encapsulation in BubbleMessageDisplay. (e734568c)
v2.29.21
- Bubble
- 🆕 Add
wrapSSRsupport for improved rendering in BubbleMessageDisplay. (8dd08a01)
- 🆕 Add
v2.29.20
- Bubble
✅ MarkdownEditor: Add tests for footnote rendering in readonly mode. (2ca9faee)
v2.29.19
-
MarkdownEditor
- 🐞 Disable RAF by default in
setMDContentto prevent rendering stop on browser alerts. #293 [@陈帅]
- 🐞 Disable RAF by default in
-
ChatLayout
- 💄 Optimize bottom animation background to fill the entire container. #292 [@不见月]
v2.29.18
- MarkdownEditor
- 🐞 Fix paste handling logic, update
onPastehandler to return boolean and enhance paste handling. (af8cff63)
- 🐞 Fix paste handling logic, update
v2.29.17
-
Workspace
- 🆕 Support card custom rendering. #291 [@shuyan]
-
MarkdownEditor
✅ Improve test case coverage. #287 [@222]
v2.29.16
- Workspace
📚 Design guidelines improvement, add Figma design system guidelines. #285 [@陈帅]
📚 Add AGENTS.md file to improve project documentation. #283 [@陈帅]
📚 Add Markdown input shortcuts documentation. #282 [@陈帅]
📚 Improve component library specification documentation. #281 [@陈帅]
📚 Add atomId documentation for button. #280 [@遇见同学]
v2.29.15
📦 Add guidelines directory to package files. (895d20fc)
v2.29.14
🆕 Sofa icon page launched. #278 [@陈帅]
🛠 ParseMd code structure optimization. #277 [@陈帅]
v2.29.12
-
MarkdownInputField
- 💄 Animation optimization, adjust beam to left side for better visual guidance. #276 [@不见月]
-
ChatFlowContainer
- 🛠 Update animation duration for scroll elements. #275 [@不见月]
⚡️ Elements style performance optimization. #274 [@陈帅]
v2.29.9
- TagPopup
- 🐞 Fix 'path' is null error when selecting dropdown options consecutively. #269 [@222]
v2.29.7
🆕 FooterBackgroundLottie: Add Lottie animation configuration file. (a77e7f6a)
v2.29.4
-
Workspace
-
MarkdownInputField
-
ToolUseBar
-
ChatLayout
🆕 Disable single tilde feature. #265 (57d65ef2)
📚 API documentation update. #259 (66f9ec17)
v2.29.3
-
MarkdownInputField
- 🆕 Add animated border beam effect. [@qixian]
- 🆕 Add new component with placeholder and send functionality. [@qixian]
- 🆕 Support customizing send button colors via
sendButtonProps. #241 [@Chiaki枫烨] - 💄 Optimize disabled and loading styles. [@qixian]
- 💄 Optimize styles for tool rendering and border radius. [@qixian]
-
Bubble
-
MarkdownEditor
- 💄 Default content font size now uses
--font-text-paragraph-lgvariable. #249 [@不见月] - 🆕 Add
disableHtmlPreviewandviewModeLabelsproperties. [@qixian]
- 💄 Default content font size now uses
🆕 AppWrapper: Add AppWrapper component to utilize useAppData and log app data on mount. [@qixian]
🆕 BubbleList: Add lazy loading support to improve performance. [@qixian]
🆕 CodeRenderer: Support JavaScript detection in HTML code. [@qixian]
🆕 ChatLayout: Auto-scroll to bottom when switching conversation records. #247 [@不见月]
🆕 QuickLink: Add viewport link prefetching. [@qixian]
🐞 SendButton: Fix fillOpacity animation warning. #236 [@Chiaki枫烨]
💄 ToolUseBar: Style optimizations. #235 [@不见月]
💄 Workspace: Optimize content and header margins. #238 [@shuyan]
v2.29.1
🐞 EditorStore: Optimize node replacement logic to consider finished state. [@陈帅]
🐞 TagPopup: Fix node path retrieval errors and dependency checks. [@qixian]
🆕 ChatLayout: Add animations for flow action buttons. #234 [@不见月]
v2.29.0
🛠 Bubble: Optimize message content styling and structure. [@qixian]
🛠 MarkdownEditor: Optimize style handling, node comparison logic, and drag-and-drop functionality. [@qixian]
🆕 Dumirc: Add Google Tag Manager script. [@qixian]
v2.28.11
🆕 AI Label: Add AILabel component. #229 [@不见月]
🆕 Loading: Enhance Loading component. #230 [@不见月]
💄 RealtimeFollow: Adjust icon size and margins. #232 [@ranranup]
v2.28.10
⚡️ MarkdownEditor: Optimize node comparison and parsing logic to improve rendering performance. [@qixian]
🛠 MarkdownToSlateParser: Optimize HTML comment handling. [@qixian]
💄 Workspace: Optimize download button display logic. #228 [@ranranup]
💄 Reset CSS: Remove deprecated color variables. [@qixian]
⚡️ useIntersectionOnce: Use useLayoutEffect instead of useEffect for optimized detection. [@qixian]
v2.28.9
🆕 Bubble: Support customizable user and AI bubble properties. [@qixian]
🐞 ChartRender: Simplify runtime loading condition. [@qixian]
🛠 MarkdownInputField: Remove enlargeable prop and refactor component structure. [@qixian]
🐞 QuickActions: Fix exception in resize events. [@qixian]
🆕 Mermaid: Add flowchart support. [@qixian]
v2.28.8
🆕 Lottie: Add multiple robot animations. #225 [@不见月]
🐞 SchemaEditorBridgeManager: Fix stopBridge error in strict mode. #226 [@hei-f]
🐞 Mermaid: Enhance error handling and rendering logic. [@qixian]
v2.28.7
🐞 Bubble: Fix content handling logic and stabilize originData reference. #220 [@hei-f]
💄 ChatLayout: Change footer style to minHeight. [@qixian]
🆕 Workspace: Add Browser component support. #222 [@ranranup]
v2.28.6
🐞 ThinkBlock: Update default expanded state. [@qixian]
v2.28.5
- ThinkBlock
- 🛠 Optimize
useEffectdependencies. [@qixian] - 🛠 Optimize expanded state handling. [@qixian]
- 🛠 Optimize
v2.28.4
🛠 CodeRenderer: Enhance props handling. [@qixian]
v2.28.3
🛠 ThinkBlock: Add Context support. [@qixian]
v2.28.2
🆕 MarkdownEditor: Add CommentLeaf and FncLeaf components. [@qixian]
v2.28.1
- ThinkBlock
- 🛠 Optimize state management. [@qixian]
🛠 SimpleTable: Clean up component and optimize chart animation duration. [@qixian]
v2.28.0
🆕 Utils: Add debug info logging functionality. [@qixian]
v2.27.10
🐞 Bubble: Remove Loader component from AIBubble. [@qixian]
💄 ThinkBlock: Adjust marginTop style to 8px. [@qixian]
v2.27.9
🐞 ThinkBlock: Fix message context retrieval logic. [@qixian]
v2.27.8
🐞 Bubble: Fix initial content retrieval logic. [@qixian]
v2.27.7
🆕 Utils: Add debugInfo utility function. [@qixian]
🆕 MediaErrorLink: Add component to handle media load failures. [@陈帅]
v2.27.6
🐞 Bubble: Adjust content retrieval order. [@qixian]
