Skip to content

fix(Popup): keep popups open for shadow DOM interactions - #6980

Merged
uyarn merged 4 commits into
developfrom
fix/popup/shadow-dom
Sep 28, 2026
Merged

uyarn merged 4 commits into
developfrom
fix/popup/shadow-dom

Conversation

@liweijie0812

@liweijie0812 liweijie0812 commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

🤔 这个 PR 的性质是?

  • 日常 bug 修复

🔗 相关 Issue

无

💡 需求背景和解决方案

t-popup 在 Shadow DOM 下有两处 broken:

  1. onDocumentMouseDown 用 popperEl.contains(ev.target) 判断点击是否在弹层内。Shadow DOM 下 document 层的事件 target 被重定向到 shadow host,contains 恒为 false,点击弹层内部误关闭。
  2. onMouseLeave → getPopperTree 用 document.querySelectorAll 查找子弹层,判断光标是否仍在弹层上。querySelectorAll 不穿透 shadow 边界,返回空数组,hover 移向子弹层时父弹层误关闭。

解决方案:

  • 命中判断改为 event.composedPath().includes(element) || element.contains(ev.target),事件路径可穿透 shadow 边界。
  • getPopperTree 增加查询根参数,通过 getRootNode() 解析弹层所在的 Document | ShadowRoot,并同时查询 document(覆盖父弹层与子弹层挂载在不同根节点的混合场景,如父弹层在 shadow root、子弹层默认 attach: 'body');纯 document 场景行为不变。

📝 更新日志

tdesign-vue-next

  • fix(Popup): 修复 Shadow DOM 下点击弹层内容和移入嵌套弹层时弹层误关闭的问题

☑️ 请求合并前的自查清单

  • 文档已补充或无须补充
  • 代码演示已提供或无须提供
  • TypeScript 定义已补充或无须补充
  • Changelog 已提供或无须提供

测试:pnpm exec vitest run packages/components/popup/__tests__/popup.test.tsx 90 项全部通过(新增 3 个 Shadow DOM 回归用例,含混合根节点场景);Select/Dropdown 共 200 项冒烟通过。

@github-actions

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 3.55 kB

ℹ️ View Unchanged
Filename Size
packages/tdesign-vue-next-nuxt/dist/module.d.mts 551 B
packages/tdesign-vue-next-nuxt/dist/module.mjs 2.84 kB
packages/tdesign-vue-next-nuxt/dist/types.d.mts 164 B

compressed-size-action::tdesign-vue-next-nuxt

@tdesign-bot

tdesign-bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

TDesign Component Site Preview Open

Component Preview
tdesign-vue-next 完成
@tdesign-vue-next/chat 完成

@github-actions

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 100 kB

ℹ️ View Unchanged
Filename Size
packages/tdesign-vue-next-chat/es/_chunks/dep-7f0cc7d4.mjs 7.29 kB
packages/tdesign-vue-next-chat/es/_chunks/dep-416e8288.mjs 2.16 kB
packages/tdesign-vue-next-chat/es/_chunks/dep-b0543ca2.mjs 24.1 kB
packages/tdesign-vue-next-chat/es/attachments/index.mjs 240 B
packages/tdesign-vue-next-chat/es/chat-actionbar/chat-actionbar-props.mjs 364 B
packages/tdesign-vue-next-chat/es/chat-actionbar/chat-actionbar.mjs 1.58 kB
packages/tdesign-vue-next-chat/es/chat-actionbar/index.mjs 347 B
packages/tdesign-vue-next-chat/es/chat-content/chat-content-props.mjs 358 B
packages/tdesign-vue-next-chat/es/chat-content/chat-content.mjs 2.23 kB
packages/tdesign-vue-next-chat/es/chat-content/index.mjs 390 B
packages/tdesign-vue-next-chat/es/chat-engine/components/activity/index.mjs 329 B
packages/tdesign-vue-next-chat/es/chat-engine/components/activity/registry.mjs 406 B
packages/tdesign-vue-next-chat/es/chat-engine/components/activity/render.mjs 861 B
packages/tdesign-vue-next-chat/es/chat-engine/components/json-render/a2ui.mjs 4.49 kB
packages/tdesign-vue-next-chat/es/chat-engine/components/json-render/catalog.mjs 1.99 kB
packages/tdesign-vue-next-chat/es/chat-engine/components/json-render/context.mjs 3.13 kB
packages/tdesign-vue-next-chat/es/chat-engine/components/json-render/index.mjs 1.4 kB
packages/tdesign-vue-next-chat/es/chat-engine/components/json-render/registry.mjs 3.24 kB
packages/tdesign-vue-next-chat/es/chat-engine/components/json-render/renderer.mjs 1.68 kB
packages/tdesign-vue-next-chat/es/chat-engine/components/provider/agent-state.mjs 521 B
packages/tdesign-vue-next-chat/es/chat-engine/components/provider/index.mjs 219 B
packages/tdesign-vue-next-chat/es/chat-engine/components/shared/ComponentErrorBoundary.mjs 549 B
packages/tdesign-vue-next-chat/es/chat-engine/components/shared/createRegistry.mjs 1.02 kB
packages/tdesign-vue-next-chat/es/chat-engine/components/shared/index.mjs 259 B
packages/tdesign-vue-next-chat/es/chat-engine/components/shared/useRegistrationListener.mjs 624 B
packages/tdesign-vue-next-chat/es/chat-engine/components/toolcall/hoc.mjs 755 B
packages/tdesign-vue-next-chat/es/chat-engine/components/toolcall/index.mjs 442 B
packages/tdesign-vue-next-chat/es/chat-engine/components/toolcall/registry.mjs 410 B
packages/tdesign-vue-next-chat/es/chat-engine/components/toolcall/render.mjs 341 B
packages/tdesign-vue-next-chat/es/chat-engine/hooks/index.mjs 371 B
packages/tdesign-vue-next-chat/es/chat-engine/hooks/useAgentActivity.mjs 954 B
packages/tdesign-vue-next-chat/es/chat-engine/hooks/useAgentState.mjs 1.22 kB
packages/tdesign-vue-next-chat/es/chat-engine/hooks/useAgentToolcall.mjs 920 B
packages/tdesign-vue-next-chat/es/chat-engine/hooks/useChat.mjs 1.45 kB
packages/tdesign-vue-next-chat/es/chat-engine/index.mjs 962 B
packages/tdesign-vue-next-chat/es/chat-input/chat-input-props.mjs 352 B
packages/tdesign-vue-next-chat/es/chat-input/chat-input.mjs 1.56 kB
packages/tdesign-vue-next-chat/es/chat-input/index.mjs 331 B
packages/tdesign-vue-next-chat/es/chat-item/chat-item-props.mjs 431 B
packages/tdesign-vue-next-chat/es/chat-item/chat-item.mjs 1.99 kB
packages/tdesign-vue-next-chat/es/chat-item/index.mjs 439 B
packages/tdesign-vue-next-chat/es/chat-list/chat-list.mjs 2.79 kB
packages/tdesign-vue-next-chat/es/chat-list/index.mjs 377 B
packages/tdesign-vue-next-chat/es/chat-list/props.mjs 454 B
packages/tdesign-vue-next-chat/es/chat-loading/chat-loading-props.mjs 281 B
packages/tdesign-vue-next-chat/es/chat-loading/index.mjs 244 B
packages/tdesign-vue-next-chat/es/chat-markdown/index.mjs 252 B
packages/tdesign-vue-next-chat/es/chat-message/chat-message-props.mjs 436 B
packages/tdesign-vue-next-chat/es/chat-message/chat-message.mjs 1.26 kB
packages/tdesign-vue-next-chat/es/chat-message/index.mjs 326 B
packages/tdesign-vue-next-chat/es/chat-reasoning/chat-reasoning-props.mjs 421 B
packages/tdesign-vue-next-chat/es/chat-reasoning/chat-reasoning.mjs 1.21 kB
packages/tdesign-vue-next-chat/es/chat-reasoning/index.mjs 312 B
packages/tdesign-vue-next-chat/es/chat-sender/chat-sender-props.mjs 366 B
packages/tdesign-vue-next-chat/es/chat-sender/chat-sender.mjs 3.31 kB
packages/tdesign-vue-next-chat/es/chat-sender/index.mjs 370 B
packages/tdesign-vue-next-chat/es/chat-thinking/chat-thinking-props.mjs 387 B
packages/tdesign-vue-next-chat/es/chat-thinking/chat-thinking.mjs 949 B
packages/tdesign-vue-next-chat/es/chat-thinking/index.mjs 331 B
packages/tdesign-vue-next-chat/es/chatbot/index.mjs 404 B
packages/tdesign-vue-next-chat/es/config-provider.mjs 158 B
packages/tdesign-vue-next-chat/es/index.mjs 1.84 kB
packages/tdesign-vue-next-chat/es/style/css.mjs 42 B
packages/tdesign-vue-next-chat/es/style/index.css 3.97 kB
packages/tdesign-vue-next-chat/es/style/web-components.css 3.01 kB
packages/tdesign-vue-next-chat/es/style/web-components.mjs 3.4 kB
packages/tdesign-vue-next-chat/es/utils/index.mjs 493 B

compressed-size-action::tdesign-vue-next-chat

@pkg-pr-new

pkg-pr-new Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
  • tdesign-vue-next-demo

    npm i https://pkg.pr.new/@tdesign-vue-next/auto-import-resolver@6980
    
    npm i https://pkg.pr.new/tdesign-vue-next@6980
    
    npm i https://pkg.pr.new/@tdesign-vue-next/chat@6980
    
    npm i https://pkg.pr.new/@tdesign-vue-next/nuxt@6980
    

commit: f0346a8

@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Size Change: +284 B (+0.03%)

Total Size: 963 kB

📦 View Changed
Filename Size Change
packages/tdesign-vue-next/dist/tdesign.js 535 kB +185 B (+0.03%)
packages/tdesign-vue-next/dist/tdesign.min.js 318 kB +99 B (+0.03%)
ℹ️ View Unchanged
Filename Size
packages/tdesign-vue-next/dist/plugin.css 3.02 kB
packages/tdesign-vue-next/dist/reset.css 1.91 kB
packages/tdesign-vue-next/dist/tdesign.css 55.5 kB
packages/tdesign-vue-next/dist/tdesign.min.css 50.4 kB

compressed-size-action::tdesign-vue-next

@github-actions

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 21.5 kB

ℹ️ View Unchanged
Filename Size
packages/auto-import-resolver/dist/index.cjs 10.8 kB
packages/auto-import-resolver/dist/index.js 10.7 kB

compressed-size-action::auto-import-resolver

@uyarn
uyarn merged commit 30d030e into develop Sep 28, 2026
16 checks passed
@uyarn
uyarn deleted the fix/popup/shadow-dom branch September 28, 2026 02:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants