Skip to content

feat(Actions): 支持自定义每个操作项的 Tooltip - #1977

Open
Somtry wants to merge 1 commit into
ant-design:mainfrom
Somtry:feat/actions-tooltip-1952
Open

feat(Actions): 支持自定义每个操作项的 Tooltip#1977
Somtry wants to merge 1 commit into
ant-design:mainfrom
Somtry:feat/actions-tooltip-1952

Conversation

@Somtry

@Somtry Somtry commented Jul 16, 2026

Copy link
Copy Markdown

Summary

Resolves #1952. Adds support for customizing the Tooltip of each action item in the Actions component.

Changes

  • ItemType now accepts an optional tooltip field of type string | TooltipProps | false
  • When tooltip is a string → used as the Tooltip title
  • When tooltip is a TooltipProps object → spread as Tooltip props (solves Allow customizing the Tooltip of an Action. #1834's getPopupContainer need)
  • When tooltip is false → no Tooltip rendered
  • When tooltip is undefined → existing behavior (title = label)
  • Both Actions (via items) and standalone Actions.Item are supported
  • Added demo, unit tests, and documentation

Checklist

  • Demo added
  • Unit tests added
  • Chinese & English docs updated
  • All 56 tests pass

Summary by CodeRabbit

  • 新功能

    • Actions 操作项支持自定义 Tooltip,可传入提示文本或完整配置。
    • 支持通过 tooltip: false 关闭提示,并在移动端自动保持无 Tooltip 展示。
  • 文档

    • 新增中英文自定义 Tooltip 示例及属性说明,涵盖文本、配置对象和禁用用法。
  • 测试

    • 补充默认提示、自定义文本、自定义配置及禁用 Tooltip 的行为测试。

@dosubot dosubot Bot added documentation Improvements or additions to documentation enhancement New feature or request javascript Pull requests that update Javascript code labels Jul 16, 2026
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: cf1db848-eff2-443d-b285-538bb3324a08

📥 Commits

Reviewing files that changed from the base of the PR and between 42a7e68 and 5a78cb0.

⛔ Files ignored due to path filters (2)
  • packages/x/components/actions/__tests__/__snapshots__/demo-extend.test.ts.snap is excluded by !**/*.snap
  • packages/x/components/actions/__tests__/__snapshots__/demo.test.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (9)
  • packages/x/components/actions/ActionsItem.tsx
  • packages/x/components/actions/Item.tsx
  • packages/x/components/actions/__tests__/action-item.test.tsx
  • packages/x/components/actions/__tests__/index.test.tsx
  • packages/x/components/actions/demo/tooltip.md
  • packages/x/components/actions/demo/tooltip.tsx
  • packages/x/components/actions/index.en-US.md
  • packages/x/components/actions/index.zh-CN.md
  • packages/x/components/actions/interface.ts
🚧 Files skipped from review as they are similar to previous changes (9)
  • packages/x/components/actions/demo/tooltip.tsx
  • packages/x/components/actions/Item.tsx
  • packages/x/components/actions/demo/tooltip.md
  • packages/x/components/actions/ActionsItem.tsx
  • packages/x/components/actions/tests/action-item.test.tsx
  • packages/x/components/actions/interface.ts
  • packages/x/components/actions/index.en-US.md
  • packages/x/components/actions/tests/index.test.tsx
  • packages/x/components/actions/index.zh-CN.md

📝 Walkthrough

Walkthrough

Actions 现在支持为每个操作项配置字符串或 TooltipProps,也可使用 false 禁用 Tooltip;移动端不渲染 Tooltip,并新增测试、示例及中英文文档。

Changes

Actions Tooltip 配置

Layer / File(s) Summary
Tooltip 类型与渲染逻辑
packages/x/components/actions/interface.ts, packages/x/components/actions/ActionsItem.tsx, packages/x/components/actions/Item.tsx
新增 tooltip 公共属性,统一处理默认文本、自定义配置、禁用状态及移动端渲染。
Tooltip 验证与文档
packages/x/components/actions/__tests__/*, packages/x/components/actions/demo/*, packages/x/components/actions/index.*.md
新增默认、自定义字符串、TooltipProps 和禁用场景测试,并补充演示与 API 文档。

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Actions
  participant ActionsItem
  participant Item
  participant Tooltip
  Actions->>ActionsItem: 传入 tooltip 配置
  Actions->>Item: 传递 item.tooltip
  ActionsItem->>Tooltip: 启用时包裹 innerNode
  Item->>Tooltip: 启用时包裹 iconElement
Loading

Poem

一只兔子跳过按钮旁,
Tooltip 捧着新花香。
字符串、配置随心选,
false 一挥提示藏。
移动端轻快不打扰,
测试文档齐登场。

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 标题简洁且准确概括了本次变更:为 Actions 每个操作项支持自定义 Tooltip。
Linked Issues check ✅ Passed 代码、单测、示例与中英文档都覆盖了 issue #1952 要求的自定义和关闭 Tooltip 能力。
Out of Scope Changes check ✅ Passed 未见与 issue 目标无关的额外改动,变更集中在 Actions Tooltip 能力相关文件。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a custom tooltip feature for action items, allowing configurations via string, TooltipProps, or disabling them entirely. It also improves the stability of the Mermaid component's streaming render by replacing throttle with debounce, utilizing useId for stable IDs, and handling incomplete syntax. The reviewer feedback highlights a bug where the debounced renderDiagram function is recreated on every render, suggesting it be cached using React.useMemo. Additionally, the reviewer recommends merging custom TooltipProps with the default title in both ActionsItem and Item components to prevent empty tooltips when only non-title properties are customized.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +105 to +120
const renderDiagram = debounce(async () => {
if (!children || !containerRef.current || renderType === RenderType.Code) return;

try {
const isValid = await mermaid.parse(children, { suppressErrors: true });
if (!isValid) throw new Error('Invalid Mermaid syntax');
if (!isValid) return; // 流式渲染过程中语法不完整时静默跳过,不报错

const { svg } = await mermaid.render(id, children);
containerRef.current.innerHTML = svg;
// 确保渲染完成后容器仍然存在(防止异步过程中组件已卸载)
if (containerRef.current) {
containerRef.current.innerHTML = svg;
}
} catch (error) {
warning(false, 'Mermaid', `Render failed: ${error}`);
}
}, 100);
}, 200);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

在当前的实现中,renderDiagram 防抖函数是在组件函数体内部直接声明的。这意味着每次组件重新渲染(例如由于 scalepositionisDragging 等状态更新)时,都会重新创建一个全新的 debounce 函数。

这会导致以下问题:

  1. 防抖失效:每次渲染都会生成新的防抖函数和定时器,无法正确合并多次连续的渲染请求。
  2. 性能开销:频繁创建和销毁防抖函数。
  3. 潜在的竞态条件:如果之前的定时器未被清理,可能会在之后触发并使用旧的闭包数据渲染。

建议使用 React.useMemorenderDiagram 缓存起来,并将 childrenid 作为参数传递给它,以确保防抖函数在组件生命周期内保持稳定,且不会产生闭包陈旧数据的问题。

  const renderDiagram = React.useMemo(
    () =>
      debounce(async (currentChildren: string, currentId: string) => {
        if (!currentChildren || !containerRef.current) return;

        try {
          const isValid = await mermaid.parse(currentChildren, { suppressErrors: true });
          if (!isValid) return; // 流式渲染过程中语法不完整时静默跳过,不报错

          const { svg } = await mermaid.render(currentId, currentChildren);
          // 确保渲染完成后容器仍然存在(防止异步过程中组件已卸载)
          if (containerRef.current) {
            containerRef.current.innerHTML = svg;
          }
        } catch (error) {
          warning(false, 'Mermaid', `Render failed: ${error}`);
        }
      }, 200),
    [],
  );

Comment on lines +149 to +152
const tooltipProps: TooltipProps =
typeof tooltip === 'string'
? { title: tooltip }
: (tooltip as TooltipProps) || { title: label };

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

tooltip 传入一个 TooltipProps 对象(例如 { placement: 'bottom' })但未指定 title 时,当前的实现会导致 Tooltip 渲染时没有标题内容。

建议将传入的 TooltipProps 与默认的 title: label 进行合并,这样用户在仅自定义 Tooltip 属性(如位置、颜色等)时,依然能保留默认的 label 作为标题,避免出现空白 Tooltip 的问题。

Suggested change
const tooltipProps: TooltipProps =
typeof tooltip === 'string'
? { title: tooltip }
: (tooltip as TooltipProps) || { title: label };
const tooltipProps: TooltipProps =
typeof tooltip === 'string'
? { title: tooltip }
: { title: label, ...(tooltip || {}) };

Comment on lines +36 to +39
const tooltipProps: TooltipProps =
typeof tooltipConfig === 'string'
? { title: tooltipConfig }
: (tooltipConfig as TooltipProps) || { title: item.label };

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

tooltipConfig 传入一个 TooltipProps 对象但未指定 title 时,当前的实现会导致 Tooltip 渲染时没有标题内容。

建议将传入的 TooltipProps 与默认的 title: item.label 进行合并,这样用户在仅自定义 Tooltip 属性(如位置、颜色等)时,依然能保留默认的 item.label 作为标题,避免出现空白 Tooltip 的问题。

Suggested change
const tooltipProps: TooltipProps =
typeof tooltipConfig === 'string'
? { title: tooltipConfig }
: (tooltipConfig as TooltipProps) || { title: item.label };
const tooltipProps: TooltipProps =
typeof tooltipConfig === 'string'
? { title: tooltipConfig }
: { title: item.label, ...(tooltipConfig || {}) };

@Somtry
Somtry force-pushed the feat/actions-tooltip-1952 branch from 0c85e63 to 42a7e68 Compare July 16, 2026 06:21

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/x/components/actions/ActionsItem.tsx`:
- Around line 147-154: Update the tooltipProps construction in ActionsItem.tsx
to merge object-based tooltip configuration with the default { title: label },
while preserving explicit string titles and tooltip:false behavior. Apply the
same merge in Item.tsx so custom options without a title consistently fall back
to label.

In `@packages/x/components/actions/Item.tsx`:
- Around line 36-39: Update the tooltipProps assignment in Item so object-valued
tooltipConfig is merged with a fallback title of item.label, while preserving
any explicitly provided title and other TooltipProps. Keep the existing string
configuration behavior unchanged.

In `@packages/x/components/mermaid/__tests__/index.test.tsx`:
- Around line 1234-1256: Update the Mermaid rerender test around mockRender to
wait for the call count to increase after each rerender before recording the
latest call’s ID. In the unmount/cancellation test around mockParse and
mockRender, advance fake timers beyond 200ms after unmounting, then assert
neither mock was executed.

In `@packages/x/components/mermaid/Mermaid.tsx`:
- Around line 105-116: Update renderDiagram in Mermaid.tsx to track a
monotonically increasing render request identifier, invalidate the active
request during cleanup, and verify the identifier after both mermaid.parse and
mermaid.render before writing to containerRef.current.innerHTML. Ensure only the
latest asynchronous render can update the container, while preserving the
existing debounce cancellation and validation behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c6417cb0-e8da-4687-9213-9515cc0d19e6

📥 Commits

Reviewing files that changed from the base of the PR and between 17db20b and 0c85e63.

⛔ Files ignored due to path filters (2)
  • packages/x/components/actions/__tests__/__snapshots__/demo-extend.test.ts.snap is excluded by !**/*.snap
  • packages/x/components/actions/__tests__/__snapshots__/demo.test.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (11)
  • packages/x/components/actions/ActionsItem.tsx
  • packages/x/components/actions/Item.tsx
  • packages/x/components/actions/__tests__/action-item.test.tsx
  • packages/x/components/actions/__tests__/index.test.tsx
  • packages/x/components/actions/demo/tooltip.md
  • packages/x/components/actions/demo/tooltip.tsx
  • packages/x/components/actions/index.en-US.md
  • packages/x/components/actions/index.zh-CN.md
  • packages/x/components/actions/interface.ts
  • packages/x/components/mermaid/Mermaid.tsx
  • packages/x/components/mermaid/__tests__/index.test.tsx

Comment on lines +147 to +154
// ============================ Tooltip ============================
const tooltipEnabled = tooltip !== false;
const tooltipProps: TooltipProps =
typeof tooltip === 'string'
? { title: tooltip }
: (tooltip as TooltipProps) || { title: label };

return isMobile || !tooltipEnabled ? innerNode : <Tooltip {...tooltipProps}>{innerNode}</Tooltip>;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

修复 Tooltip 对象配置时丢失默认 title 的问题。

当用户仅通过 tooltip 传递自定义配置(如 tooltip={{ placement: 'bottom' }})而未显式声明 title 时,当前的逻辑会导致 title 为空,从而导致 Tooltip 无法正常显示默认的 label
建议将其与 { title: label } 进行合并,以确保具有默认标题回退。同时,请注意 packages/x/components/actions/Item.tsx 中也存在相同的逻辑,请一并修复以保持行为的一致性。

🐛 修复建议
   // ============================ Tooltip ============================
   const tooltipEnabled = tooltip !== false;
   const tooltipProps: TooltipProps =
     typeof tooltip === 'string'
       ? { title: tooltip }
-      : (tooltip as TooltipProps) || { title: label };
+      : { title: label, ...(tooltip as TooltipProps) };

   return isMobile || !tooltipEnabled ? innerNode : <Tooltip {...tooltipProps}>{innerNode}</Tooltip>;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// ============================ Tooltip ============================
const tooltipEnabled = tooltip !== false;
const tooltipProps: TooltipProps =
typeof tooltip === 'string'
? { title: tooltip }
: (tooltip as TooltipProps) || { title: label };
return isMobile || !tooltipEnabled ? innerNode : <Tooltip {...tooltipProps}>{innerNode}</Tooltip>;
// ============================ Tooltip ============================
const tooltipEnabled = tooltip !== false;
const tooltipProps: TooltipProps =
typeof tooltip === 'string'
? { title: tooltip }
: { title: label, ...(tooltip as TooltipProps) };
return isMobile || !tooltipEnabled ? innerNode : <Tooltip {...tooltipProps}>{innerNode}</Tooltip>;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/x/components/actions/ActionsItem.tsx` around lines 147 - 154, Update
the tooltipProps construction in ActionsItem.tsx to merge object-based tooltip
configuration with the default { title: label }, while preserving explicit
string titles and tooltip:false behavior. Apply the same merge in Item.tsx so
custom options without a title consistently fall back to label.

Comment on lines +36 to +39
const tooltipProps: TooltipProps =
typeof tooltipConfig === 'string'
? { title: tooltipConfig }
: (tooltipConfig as TooltipProps) || { title: item.label };

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

合并 TooltipProps 以避免丢失默认的 title

tooltipConfig 是一个对象(例如仅用于配置位置 { placement: 'bottom' })且未显式提供 title 属性时,当前的逻辑会直接将其作为 tooltipProps 返回,从而丢失默认的 item.label。此时 Tooltip 可能会渲染出空内容或不显示。

建议在传入对象配置时,保留 item.label 作为后备的 title 进行合并:

💡 建议的修复
-  const tooltipProps: TooltipProps =
-    typeof tooltipConfig === 'string'
-      ? { title: tooltipConfig }
-      : (tooltipConfig as TooltipProps) || { title: item.label };
+  const tooltipProps: TooltipProps =
+    typeof tooltipConfig === 'string'
+      ? { title: tooltipConfig }
+      : { title: item.label, ...(typeof tooltipConfig === 'object' ? tooltipConfig : {}) };
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const tooltipProps: TooltipProps =
typeof tooltipConfig === 'string'
? { title: tooltipConfig }
: (tooltipConfig as TooltipProps) || { title: item.label };
const tooltipProps: TooltipProps =
typeof tooltipConfig === 'string'
? { title: tooltipConfig }
: { title: item.label, ...(typeof tooltipConfig === 'object' ? tooltipConfig : {}) };
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/x/components/actions/Item.tsx` around lines 36 - 39, Update the
tooltipProps assignment in Item so object-valued tooltipConfig is merged with a
fallback title of item.label, while preserving any explicitly provided title and
other TooltipProps. Keep the existing string configuration behavior unchanged.

Comment on lines +1234 to +1256
it('should not use uuid++ that changes every render', async () => {
const { rerender } = render(<Mermaid>{mermaidContent}</Mermaid>);

await waitFor(() => {
expect(mockRender).toHaveBeenCalled();
});

// Record id from first render
const ids: string[] = [mockRender.mock.calls[0][0]];

// Multiple re-renders simulating streaming
for (let i = 0; i < 5; i++) {
rerender(<Mermaid>{`${mermaidContent} ${i}`}</Mermaid>);
await waitFor(() => {
expect(mockRender).toHaveBeenCalled();
});
const lastCall = mockRender.mock.calls[mockRender.mock.calls.length - 1];
ids.push(lastCall[0]);
}

// All ids should be identical
const uniqueIds = new Set(ids);
expect(uniqueIds.size).toBe(1);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

让回归测试实际等待并验证防抖结果。

Line 1247 只断言“至少调用过一次”,因此后续循环可能重复读取第一次调用;Line 1307 也无法证明挂起任务已取消。请等待调用次数递增,并在卸载后推进超过 200ms 的假计时器,断言 mockParse/mockRender 未执行。

Also applies to: 1303-1308

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/x/components/mermaid/__tests__/index.test.tsx` around lines 1234 -
1256, Update the Mermaid rerender test around mockRender to wait for the call
count to increase after each rerender before recording the latest call’s ID. In
the unmount/cancellation test around mockParse and mockRender, advance fake
timers beyond 200ms after unmounting, then assert neither mock was executed.

Comment on lines +105 to +116
const renderDiagram = debounce(async () => {
if (!children || !containerRef.current || renderType === RenderType.Code) return;

try {
const isValid = await mermaid.parse(children, { suppressErrors: true });
if (!isValid) throw new Error('Invalid Mermaid syntax');
if (!isValid) return; // 流式渲染过程中语法不完整时静默跳过,不报错

const { svg } = await mermaid.render(id, children);
containerRef.current.innerHTML = svg;
// 确保渲染完成后容器仍然存在(防止异步过程中组件已卸载)
if (containerRef.current) {
containerRef.current.innerHTML = svg;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate the target file and inspect the relevant region with line numbers.
FILE="packages/x/components/mermaid/Mermaid.tsx"
wc -l "$FILE"
sed -n '1,220p' "$FILE" | cat -n

Repository: ant-design/x

Length of output: 8571


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check whether lodash is available in the sandbox and inspect the package dependency.
python3 - <<'PY'
import json, pathlib
pkg = json.loads(pathlib.Path('package.json').read_text())
deps = {**pkg.get('dependencies', {}), **pkg.get('devDependencies', {})}
print('lodash' in deps, deps.get('lodash'))
PY

node - <<'JS'
try {
  const lodashPath = require.resolve('lodash');
  console.log('lodash-resolve:', lodashPath);
} catch (e) {
  console.log('lodash-resolve: NOT_FOUND');
}
JS

Repository: ant-design/x

Length of output: 187


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the effect cleanup region and search for any request-token or stale-result guard.
sed -n '104,132p' packages/x/components/mermaid/Mermaid.tsx | cat -n
printf '\n----\n'
rg -n "request|token|latest|stale|abort|cancel\\(" packages/x/components/mermaid/Mermaid.tsx

Repository: ant-design/x

Length of output: 1327


阻止旧的异步渲染覆盖新图表。
renderDiagram.cancel() 只能取消尚未执行的防抖任务;一旦 mermaid.parse/render 已开始,后续更新仍可能在更晚完成后把旧 SVG 写回 innerHTML。加一个递增请求序号(或内容快照),并在 parserender 后只允许最新请求写入;清理时把当前请求失效。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/x/components/mermaid/Mermaid.tsx` around lines 105 - 116, Update
renderDiagram in Mermaid.tsx to track a monotonically increasing render request
identifier, invalidate the active request during cleanup, and verify the
identifier after both mermaid.parse and mermaid.render before writing to
containerRef.current.innerHTML. Ensure only the latest asynchronous render can
update the container, while preserving the existing debounce cancellation and
validation behavior.

@Somtry
Somtry force-pushed the feat/actions-tooltip-1952 branch from 42a7e68 to 5a78cb0 Compare July 16, 2026 06:29
@Somtry

Somtry commented Jul 16, 2026

Copy link
Copy Markdown
Author

#1952

@codecov

codecov Bot commented Jul 16, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 8 bytes (0.0%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
antdx-array-push 2.11MB 8 bytes (0.0%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: antdx-array-push

Assets Changed:

Asset Name Size Change Total Size Change (%)
antdx.min.js 8 bytes 2.11MB 0.0%

@codecov

codecov Bot commented Jul 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.08%. Comparing base (17db20b) to head (5a78cb0).
⚠️ Report is 56 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1977   +/-   ##
=======================================
  Coverage   97.08%   97.08%           
=======================================
  Files         159      159           
  Lines        5755     5764    +9     
  Branches     1694     1719   +25     
=======================================
+ Hits         5587     5596    +9     
  Misses        166      166           
  Partials        2        2           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request javascript Pull requests that update Javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Good First Issue] Actions 支持自定义每个操作项的 Tooltip

1 participant