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, and ToggleButton components and their Props exports. Use Ant Design Button and Tooltip directly, replace isLoading with loading, render trailing icons as children, and manage toggle state in the caller.
  • 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/node devDependency so father build declaration emit no longer fails with missing process / NodeJS.Timeout types.

v2.33.0

  • MarkdownInputField
    • 🆕 Added inline atomic chips (composerChips): slash command chips (structured skill nodes with pre-send onSlashChipGate) plus @file / @folder and @symbol inline mention chips, upgrading from plain text tags to Slate inline void nodes with whole-chip deletion, click-to-configure, and serialization to /name / @path on 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 when draftKey changes; defaults to localStorage with a customizable storage.
    • 🆕 Added context usage indicator (contextUsage): toolbar circular indicator plus a built-in ContextUsagePanel detail panel (categorical bar segments, expandable breakdown rows, high-usage warning, compact action); ContextUsageIndicator / ContextUsagePanel / computeBarSegments are 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 standalone ComposerBranchTrigger component is exported as well.
    • 💄 Slash chip tones now align with the IDE resolveSlashCommandToneKey: dedicated colors for plan / goal commands, and unconfigured chips show placeholderText when no input follows.
    • 🛠 Exported insertComposerChip / withComposerChips / findUnconfiguredSlashChips / handleLongTextPasteFold plus the ComposerChipNode chip helpers and types.
  • 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.

v2.32.49

  • OfficeViewer
    • 🐞 Dynamic @silurus/ooxml subpath 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 inferOfficeFileType utilities so the full OfficeViewer implementation is not pulled in synchronously.

v2.32.48

  • OfficeViewer
    • 🆕 Added OfficeViewer to 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 with wasmUrl.
    • 🆕 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 via Ctrl/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.
  • Workspace
    • 🆕 File preview now supports Office Open XML (.docx / .xlsx / .pptx); legacy .doc / .xls / .ppt and csv remain 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 when matchInputToNode is off by default (first-paragraph guard retained to protect chat inputs). Closes #59
  • SandboxRenderer

    • 🆕 Added SandboxRenderer component to safely render coding-agent-generated JavaScript: node creation uses the real DOM while queries are scoped to the Shadow DOM container, inheriting ProxySandbox timeout and global whitelist. Closes #330
    • 🆕 ProxySandbox now accepts a renderRoot config: when provided, the sandbox document switches to a scoped implementation (createElement returns real nodes; querySelector / getElementById are limited to the root) and exposes it to scripts as shadowRoot.

v2.32.31

  • MarkdownRenderer
    • 🛠 Removed all streaming animations and character queues (paragraph fade-in, progressive fade-in, CharacterQueue typewriter, and AnimationText). Streaming content is now rendered immediately after useStreaming caching; removed obsolete APIs and exports including queueOptions, streamingParagraphAnimation, and isFinished.
    • 🆕 Added ContentThrottle + useContentThrottle to progressively render large SSE text chunks frame-by-frame, mitigating full-page flashes. isFinished / throttleOptions are now exposed to MarkdownPreview and ReadonlyMarkdownEditorView.
  • TaskList
    • 💄 Simple variant wrapper now uses fit-content to avoid stretching full width.
  • ToolUseBar
    • 💄 Tool container uses grid 0fr/1fr transition instead of max-height, and registers --tool-rotate custom property for stable rotation animation.
  • Workspace
    • 🆕 FileTree: support synthetic tree leaf node binding in preview-only mode.
  • 🛠 Styling
    • 🛠 Removed the deprecated wrapSSR wrapper from useGenStyle; useStyle no longer returns wrapSSR.
    • 🛠 Removed wrapSSR(...) wrapper calls from 70+ components; components now return JSX directly.

Unreleased

  • Bubble

    • 🐞 Flush buffered content and exit streaming when generation finishes or is aborted, even with an explicit streaming configuration; 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 semantic styles / classNames fields, 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 MarkdownRenderer for 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, and PureBubbleListProps exports in favor of Bubble / BubbleList; use pure for compact styling. Add the @ant-design/agentic-ui/Bubble import entry.
    • 🐞 Unify content configuration precedence, retaining markdownRenderConfig.initValue and explicit readonly; content defaults to readonly, so migrated Pure usage needs readonly={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.
  • 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 tableConfig for 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 onPaste returns false and 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 (agenticMdBlurFadeIn on tbody tr). Streaming remounts rows and used to replay the blur fade-in; keyframes are kept only for MarkdownRenderer word-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 suggestionProps to disable the internal Dropdown with enabled: false or configure getPopupContainer, destroyOnHidden, forceRender, and placement.#682
  • 📦 Compatibility

    • 📦 Added Ant Design 5.29.3 through 6.x support: antd is 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/cssinjs and @ant-design/cssinjs-utils to 2.x and made Popover semantic style keys work across antd 5/6.
  • 📖 Docs

    • 📖 Documented how Agentic UI differs from Ant Design X and the safety boundary for running Coding Agent output with ProxySandbox.#668 #213 #330
  • MarkdownInputField

    • 🆕 Added inputHistory navigation (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 attachment configured, drop files onto the input (format, size, and count checks included, with a hover highlight overlay).
    • 🆕 Added followups suggestion 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 onChange once through state updates for edits, truncation, quick actions, and fills.
  • 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, honors prefers-reduced-motion; skips code blocks / tables / formulas.
    • 🆕 Fade toggle lives in throttleOptions.fade (default true, only when streaming): pass throttleOptions={{ fade: false }} to disable. Works via existing throttleOptions on MarkdownEditor (renderMode: 'markdown') and Bubble.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); synced api.md / bubble.md / Playground and the streaming compare demo.
  • TaskList

    • 🛠 simple variant drops the 2px progress bar underneath the summary; showProgress now only toggles the inline "completed/total" count text.
    • 🆕 Added scrollIntoViewOnExpand (boolean | ScrollIntoViewOptions, default false): when the simple summary expands, scroll the component into the viewport. true resolves 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, default false): scroll the component into the viewport on expand (skips the initial mount), mirroring TaskList.
    • 🆕 MarkdownEditor.codeProps gains scrollDeepThinkIntoViewOnExpand, forwarded to the deep-think block's ToolUseBarThink.scrollIntoViewOnExpand so in-editor ```think blocks can opt into the scroll-on-expand behavior.
  • 🛠 Styling

    • 🛠 Rewrote Hooks/useStyle on top of @ant-design/cssinjs-utils's genStyleUtils, mirroring antd's own theme/util/genStyleUtils. Exposes genStyleHooks / genComponentStyleHook / genSubStyleComponent plus AgenticComponentTokenMap / FullToken / GenStyleFn types; components can declare their own ComponentToken via module augmentation.
    • 🛠 Migrated 70+ style.ts files to the genStyleHooks('ComponentName', genStyle) pattern (AILabel / TaskList / ToolUseBar / Workspace / Plugins/chart/* / MarkdownEditor root, etc.). useEditorStyleRegister remains as a thin compatibility entry for cases that need a dynamic token / dynamic classNames (Bubble, MarkdownInputField, MarkdownEditor/editor content), and is now backed directly by @ant-design/cssinjs's useStyleRegister.
    • 🛠 Dropped runtime dependency on @ant-design/theme-token's createStyleRegister. The component library keeps hashId='' to prevent host antd theme hash from breaking selectors.
    • ⚡️ useStyle now returns an identity wrapSSR. Style injection happens through cssinjs's useGlobalCache → updateCSS side effect during the hook call and never depended on wrapSSR. In our CSR-only config wrapSSR(node) was always <><Empty/>{node}</>, so we drop that Fragment + <Empty/> allocation. Existing return wrapSSR(<jsx/>) callers continue to work (identity passthrough); new code can simply return <jsx/>.
  • Workspace

    • 💄 FileTree: folder and leaf names use CSS single-line ellipsis; full name via native title on hover.
    • 🆕 Added defaultActiveTabKey to set the initial active tab in uncontrolled mode.
    • 🆕 Added notifyOnInvalidActiveTabKey (default true): when controlled activeTabKey is not in the tab list, whether to call onTabChange with a valid key; false falls back in the UI only.
    • 🆕 Added preserveFilePreviewOnTabChange (default false): when true, leaving and returning to a file panel keeps Workspace.File / Workspace.FileTree preview state.
    • 🆕 Added emptyContent placeholder when there are no valid child panels (otherwise still null).
    • 🆕 Child BaseChildProps.panelType for explicit panel typing; package exports markWorkspacePanel and WORKSPACE_PANEL_TYPE. Built-in Workspace.* children are marked; React.memo(Workspace.File) and memo / forwardRef chains are resolved via the type walk.
    • 🛠 resetKey now increments only when leaving a file / fileTree panel or switching between two file panels, instead of on every tab change (avoids pointless bumps for hidden file panes).
    • 💄 Workspace.File fileTreeSwitch icons: list BarsOutlined, tree ApartmentOutlined; default Workspace File / FileTree tab icons aligned (@ant-design/icons).
    • 📖 Updated workspace.md with new props, panel recognition, controlled tabs, preview behavior, and best practices.
    • ✅ Added Workspace and workspacePanel unit tests (defaultActiveTabKey, emptyContent, memo recognition, notifyOnInvalidActiveTabKey, etc.).
    • 🛠 Defensive guards: flatten Fragment children, dedupe tab.key, ignore segmented divider / invalid tab keys, validate panelType / tab.count, normalizeTabKey, cap type-chain walk depth.
  • 📖 Docs

    • 📖 Added MarkdownRenderer component documentation (streaming Markdown, ContentThrottleOptions, built-in code-block renderer routing, MarkdownRendererRef).
    • 📖 Added a dedicated ToolUseBarThink doc; corrected the ToolUseBarThink API table inside tool-use-bar.md (removed deprecated/non-existent props such as id, isThinkLoading, isActive, onActiveChange, etc., aligned with actual props).
    • 📖 Added GradientText, TextAnimate, and TypingAnimation component 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, and leftExtra / rightExtra slots.
    • 🛠 Rewrote task-running.md as AgentRunBar 任务运行状态, marking TaskRunning / TaskRunningProps / TaskRunningVariant / TaskRunningActionsRender as deprecated aliases; updated docs/demos/task-running.tsx to use AgentRunBar instead of TaskRunning.

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 table data contract. Header columns are matched by aliases (名称/标题/name/title, 地址/链接/URL, 简介/描述/description, 亮点/标签/tags) with the same logical name + (unit) loose matching used by chart x/y. cardColumns controls the per-row card count (1–4, default 2, values out of range are clamped); fieldMap overrides the alias resolution.
    • 🐞 Security: isSafeHref now explicitly rejects protocol-relative URLs (//evil.com). The previous startsWith('/') allowance for site-internal absolute paths inadvertently let //host through, bypassing the protocol allowlist.
    • 🛠 Bundle: Extracted src/Utils/columnMatching.ts as a zero-dependency shared module hosting columnKeyMatchesConfiguredField / resolveChartAxisFieldToColumnKey / DOC_CARDS_FIELD_ALIASES / resolveDocCardsFields. DocCards/utils.ts no longer imports from parseTable, so import { DocCards } no longer transitively pulls the full Markdown parser stack (remark / rehype / sanitize / katex). parseTable.ts and DocCards/utils.ts still re-export the same symbols for backward compatibility.
    • 💄 In-page links (/foo, ./foo, ../foo, #anchor) no longer force target="_blank", so anchor jumps stay in the current tab; external links (http(s)/mailto/tel) still open in a new tab with rel="noopener noreferrer".
    • 🌐 The tag pill container aria-label now uses a dedicated docCardsTags key (English "Tags"); previously it reused docCards which read as "Card List" to screen readers.
    • 🆕 The @ant-design/agentic-ui entry now exports the DocCards component along with resolveDocCardsFields / splitDocCardsTags / isDocCardsSafeHref / formatDocCardsDisplayUrl / DocCardsDefaultFieldAliases for downstream reuse.
    • 💄 Card links render as host + path (e.g. https://tailwindcss.com/docs → tailwindcss.com/docs); href and the title tooltip keep the original URL. Overlong URLs are truncated to a single line with ellipsis.
    • 💄 Mobile / touch readiness: viewport < 480px is forced to a single column; card :hover is 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 use padding instead of a fixed height so they don't get squashed.
    • ⚡️ gridTemplateColumns and the header node are memoized; cardColumns uses repeat(N, minmax(0, 1fr)) so the column count strictly matches user intent (instead of auto-fit over-packing a wide container).
    • 🛠 parseTable: docCards now 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 other chartTypes is unchanged.
  • 🐞 Fix React Hooks dependency issues causing infinite loops and excessive re-renders

    • SchemaRenderer: schema || {} creates a new reference each render, invalidating useMemo([safeSchema]). Fixed with module-level constant EMPTY_SCHEMA
    • SchemaForm: schema?.component || {} creates a new reference each render, invalidating useMemo([properties]). Fixed with module-level constant EMPTY_COMPONENT
    • ButtonTabGroup: default param items = [] causes useEffect([items]) to fire every render. Fixed with module-level constant EMPTY_ITEMS
    • useChartDataFilter: Array.isArray(data) ? data : [] invalidates useMemo([safeData]). Fixed with module-level constant EMPTY_DATA
    • TagPopup: props || {} destructured items has unstable reference. Removed unnecessary || {} fallback
    • I18n: antdContext?.locale (object reference) as dependency causes excessive effect firing. Changed to antdContext?.locale?.locale (string)
    • AgenticLayout: currentRightWidth as both dependency and setCurrentRightWidth target causes resize listener to rebuild repeatedly. Fixed with ref
    • BaseMarkdownEditorSlate: isEditorFocused as both dependency and setter target causes mousedown listener to rebuild repeatedly. Fixed with ref + useRefFunction
    • Workspace: uncontrolled setInternalActiveTab in else-if branch causes double effect firing. Added currentKey !== internalActiveTab guard
    • ActionItemContainer: props.children as dependency causes effect to fire on every parent render. Fixed with useMemo extracting childrenKeys
    • keyboard: empty deps [] but uses props.readonly/store/keydown. Added missing dependencies
    • ThoughtChainList/MarkdownEditor: useEffect missing props.plugins and props.initValue dependencies. Added
    • AceEditorWrapper: onChange closure captures initial value, later changes ignored. Fixed with onChangeRef pattern
    • BubbleExtra: useEffect missing props.onRenderExtraNull dependency. Added
    • FileComponent: useEffect missing previewFile dependency. Added
    • Editor: ref.current as dependency is unreliable. Removed and added eslint-disable comment
    • useAutoScroll: no-deps useEffect for ref sync changed to useLayoutEffect
  • 🛠 SchemaRenderer / SchemaForm: add ComponentConfig type annotation to EMPTY_COMPONENT

  • 🛠 BaseMarkdownEditorSlate: change setEditorFocused from useCallback to useRefFunction, remove redundant isEditorFocused state

  • 📖 Add "React Hooks Dependency Pitfalls" section to development guide, documenting 7 common patterns and fixes

v2.32.0

  • MarkdownInputField
    • 💥 Breaking change: actionsRender / toolsRender / quickActionRender / beforeToolsRender arg type narrowed from the god-object MarkdownInputFieldProps & MarkdownInputFieldProps['attachment'] & {...} to the stable derived type SlotRenderState (actionsRender uses ActionsSlotState which adds collapseSendActions). New arg fields: value / isHover / isLoading / fileMap / onFileMapChange / fileUploadStatus / fileUploadSummary / attachment / disabled / typing. Migration: change props.upload and other attachment fields to state.attachment?.upload; rename props to state for the rest.
    • 🛠 MarkdownInputFieldProps['attachment'] switched from the inline shape { enable?: boolean } & AttachmentButtonProps to the named type AttachmentConfig. Behaviour is identical.
    • 🆕 New public type exports: SlotRenderState, ActionsSlotState, for typing custom slot implementations.

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.FileTree lazy file tree doc demo workspace-file-tree-demo.
    • 🐞 FileTree: empty dirs / failed loads no longer force isLeaf; onLoadChildren rejection propagates for rc-tree retry; toDataNode defaults missing isLeaf with no children to a file; resetKey no longer wipes lazy-loaded state.
    • 🛠 Rename lazy-load callback on FileTreeProps to onLoadChildren (aligns with on prefix for callbacks).
    • 🛠 resetKey is only passed to the active Workspace.File / Workspace.FileTree tab, avoiding redundant updates in hidden panes.
    • ⚡️ Precompute Segmented options and the first Realtime index in one pass, avoiding repeated O(n) findIndex scans in the options reducer.
    • 🛠 Stabilize onLoadChildren in FileTree via useRefFunction to keep Tree loadData from churning on parent re-renders.
    • 🛠 Export WorkspacePanelType and narrow TabItem.componentType to that union; docs add a TabItem blurb.
  • MarkdownRenderer
    • 🐞 Fix missing paragraph fade-in when streamingParagraphAnimation is omitted in streaming markdown mode; default is now on, set streamingParagraphAnimation: false to disable. #478
  • MarkdownEditor
    • 🛠 Align streamingParagraphAnimation semantics with MarkdownRenderer (on by default, pass false to disable). #478
  • Bubble
    • 📖 Docs and streaming demo add markdownRenderConfig.streamingParagraphAnimation: false migration example (matches legacy “omit means no paragraph animation”). #478
    • 🆕 Add useOpenAIMessageBubbleData hook and mapOpenAIMessagesToMessageBubbleData to convert OpenAI Chat Completions-style messages into MessageBubbleData[] for BubbleList and SSE streaming.
    • 🆕 Add useOpenClawMessageBubbleData, mapOpenClawMessagesToMessageBubbleData, and normalizeOpenClawMessagesToOpenAI for OpenClaw session/transcript-style messages (timestamp, toolResult, etc.).
    • 🆕 Add useOllamaMessageBubbleData, mapOllamaMessagesToMessageBubbleData, and normalizeOllamaMessagesToOpenAI for Ollama /api/chat messages (images, tool_calls, thinking, etc.).

v2.30.15

  • MarkdownInputField
    • 🆕 Add onUploadError callback and removeFileOnUploadError option 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.maxSize field. #429
  • 🐞 Fix data-is-unclosed attribute and CSS selector logic. #438

v2.30.14

  • Bubble
    • 🆕 Extract markdown filemap images to render outside the bubble. #430
  • MarkdownInputField
    • 🐞 Fix code blocks being uneditable inside MarkdownInputField. #425
    • 💄 Set default code block height to 120px. #428
    • 🐞 Prevent attachment placeholder from stretching full width. #427
  • 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 ::warning double-colon container directive syntax. #426

v2.30.13

  • FileMapView
    • 🆕 Support onPreview interception and itemRender custom rendering for images/videos, passed through markdownRenderConfig.fileMapConfig. #423
  • FileMapConfig
    • 🆕 Add normalizeFile callback for custom file data format conversion. #424
  • MarkdownInputField
    • 🆕 Add onExceedMaxCount callback, display files in error state when count exceeds limit. #419
  • 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
  • 🐞 Fix E2E full failure (usePrefersColor crash) and toBeInTheDocument TypeScript error. #417

v2.30.12

  • MarkdownEditor / Plugins / CodeBlock
    • 🆕 Added "Local Preview" button to the code block toolbar: html and markdown code 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.
  • MarkdownEditor
    • 🆕 Add agentic-ui-filemap fenced code block, rendered as a file list. #416
  • 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 eleRender for custom element rendering (markdown render mode). #405
  • MarkdownInputField
    • 🐞 Fix placeholder not disappearing on mobile input. #401
  • Workspace
    • 🐞 Hide empty file detail panels; Browser links support onOpen callback. #406
    • 🛠 Replace hard-coded ant- class prefix with token.antCls in styles. #404
  • 🐞 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
    • 🐞 Hide file size when size is absent or 0. #393 #394
  • MarkdownEditor
    • 🐞 Use block layout for blockquote instead of flex. #396
  • Parser
    • 🆕 Only ::: block container directives are supported; inline :foo forms are ignored. #395

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 animateTailChars config.

v2.30.3

  • Chart
    • 🆕 Add BoxPlot and Histogram chart components.
    • 🆕 Atomic charts support dark theme. #390
    • 🆕 Export chart components with forwardRef to 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 ToolBarItem when title is present, mitigating findDOMNode deprecation 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-task and agentic-ui-toolusebar code blocks rendering TaskList and ToolUseBar; legacy agentic-ui-usertoolbar remains readable and normalizes to the new identifier. #378 #380
    • 💄 Fenced agentic-ui-task defaults variant to simple; set root-level variant to default for the full task-chain layout.
    • 🆕 In readonly mode, renderMode / renderType markdown uses MarkdownRenderer; markdownRenderConfig accepts renderType alias.
    • 🐞 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 extraShowOnHover handling to default to true when not provided.
  • BubbleMessageDisplay
    • 🐞 Fix empty, undefined, or null content rendering when answerStatus is EXCEPTION. #376
  • MarkdownInputField
    • 🌐 Improve clarity of file upload related messages.
  • 📖 Remove rfc-streaming-markdown-renderer.md documentation. #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 extra in Popover mode. #367
  • 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 textDirective rendering failure, support Yuque documents. #365
  • 🛠 Add error handling to myRemark.stringify for improved robustness.
  • 🐞 Fix TypeScript type errors.
  • 🐞 Update card-selection-demo snapshot, fix paragraph element structure and attributes.

v2.29.56

  • MarkdownEditor
    • 🐞 Add textDirective/leafDirective processors for remark-rehype, fix unknown node error. #364
  • Bubble
    • 🆕 Add extraShowOnHover prop, default off, when enabled extra only shows on hover.
    • 💄 Change extra to show on hover instead of always visible. #362
  • 🛠 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-testid attributes for improved testing support.
    • 🐞 Fix className compatibility by casting attributes to React.HTMLAttributes.

v2.29.54

  • MarkdownEditor
    • 🆕 Add markdown-it-container style ::: custom container syntax (info/warning/success/error/tip). #360
  • MarkdownInputField
    • 🆕 Add data-testid attributes to demos for E2E testing support.

v2.29.53

  • MarkdownInputField
    • 🆕 Add E2E test ID support and export testIds constant.
    • 🆕 Image upload supports svg and webp formats. #358
  • ChartStatistic
    • 🆕 Support Semantic styles and subtitle display.
  • ToolUseBarThink
    • 🌐 Add internationalization support, add flex-direction: column to container. #357
  • ✅ Improve test coverage for RealtimeFollow, FileMapView, AttachmentFileIcon, BeforeToolContainer, Enlargement.

v2.29.31

  • MarkdownEditor
    • 🐞 Fix Node.leaf error under list-item, use Editor.leaf to parse leaf nodes.
    • 🛠 Enhance matchInputToNode functionality and keyboard handling logic.
    • 🛠 Optimize classname specification and usage. #315 [@陈帅]

✅ Enhance test coverage for MarkdownEditor and Bubble components. #307 [@222]

v2.29.30

  • MarkdownEditor

    • 🛠 Optimize SlateMarkdownEditor rendering performance with React.memo.
    • 🛠 Unify classname prefix to agentic-md-editor-*. #311 [@陈帅]
  • LinkCard

    • 🛠 Reorganize class naming per BEM specification. #312 [@陈帅]
  • Chart

    • 🛠 Optimize ProForm config form class names with agentic-chart-config-form prefix and BEM structure. #313 [@陈帅]
  • ChartRender

    • 🛠 Optimize BEM class names for table and description list. #314 [@陈帅]
  • AceEditor

    • 🛠 Remove unused dependency from effect hook.

v2.29.29

  • MarkdownEditor
    • 🆕 Add Jinja template support with jinja config, {} trigger for template panel, syntax highlighting, and createJinjaPlugin. #309 #310 [@陈帅]

v2.29.28

  • Workspace

    • 🆕 Support video file preview and playback. #308 [@陈帅]
  • SchemaEditorBridgeManager

    • 🆕 Add getContentById method for content retrieval. #306 [@222]

📚 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 useMergedLocale for consistent locale handling across components. (6647b12b)

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 [@陈帅]

📚 API documentation update, improve design issues documentation. #298 [@陈帅]

v2.29.24

  • Bubble

    • 🐞 Fix style class name prefix, prepend dot to class name in useMessagesContentStyle for correct styling. (2f496852)
  • MarkdownPreview

    • 🛠 Simplify rendering logic and enhance Popover behavior based on placement and extra content. (d9cf641c)
  • 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 initValue is empty or undefined. #294 [@陈帅]

v2.29.22

  • Bubble
    • 🛠 Refactor class naming for improved style encapsulation in BubbleMessageDisplay. (e734568c)

v2.29.21

  • Bubble
    • 🆕 Add wrapSSR support for improved rendering in BubbleMessageDisplay. (8dd08a01)

v2.29.20

  • Bubble
    • 💄 Update MessagesContent styles, optimize padding and gap values for consistency. (4578a647)
    • 🆕 Enhance bubble message handling with preMessage support and retry UI. (8b56ebe3)

✅ MarkdownEditor: Add tests for footnote rendering in readonly mode. (2ca9faee)

v2.29.19

  • MarkdownEditor

    • 🐞 Disable RAF by default in setMDContent to prevent rendering stop on browser alerts. #293 [@陈帅]
  • ChatLayout

    • 💄 Optimize bottom animation background to fill the entire container. #292 [@不见月]

v2.29.18

  • MarkdownEditor
    • 🐞 Fix paste handling logic, update onPaste handler to return boolean and enhance paste handling. (af8cff63)

v2.29.17

  • Workspace

    • 🆕 Support card custom rendering. #291 [@shuyan]
  • MarkdownEditor

    • 🆕 Enhance quick input tips for code and horizontal rule blocks. #289 [@222]
    • 🐞 Optimize key matching and space trigger logic. #288 [@陈帅]
    • 🆕 Support double hash (##) heading input. #284 [@陈帅]

✅ Improve test case coverage. #287 [@222]

v2.29.16

  • Workspace
    • 🆕 Support file and web page reverse location, click files or web pages in workspace to locate corresponding position in conversation. #286 [@shuyan]
    • 🆕 Task name supports ReactNode, support custom title. #279 [@shuyan]

📚 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

    • 🆕 Support customizing title right side. [@shuyan] (619309d4)
    • 💄 Optimize styles. [@shuyan] (619309d4)
    • 🌐 Add internationalization. [@shuyan] (619309d4)
    • ✅ Add test cases. [@shuyan] (619309d4)
    • 🆕 Add file card custom rendering capability. #263 (7be1d6a2)
  • MarkdownInputField

  • ToolUseBar

  • ChatLayout

    • 💄 Adjust ant-chat-item-extra styles, optimize spacing and alignment. (24334255)
    • 🆕 Enhance style adaptation capabilities, optimize conversation flow demo. #258 (a54a5934)

🆕 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

    • 🐞 Fix useEffect dependency issues. [@qixian]
    • 💄 Optimize content font style. #246 [@不见月]
    • 💄 Optimize Loading and action icon display effects. #237 [@不见月]
  • MarkdownEditor

    • 💄 Default content font size now uses --font-text-paragraph-lg variable. #249 [@不见月]
    • 🆕 Add disableHtmlPreview and viewModeLabels properties. [@qixian]

🆕 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 useEffect dependencies. [@qixian]
    • 🛠 Optimize expanded state handling. [@qixian]

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]