From 8d2f08108b89d8fe0318d8bccd6d7b5e1f6bd6f9 Mon Sep 17 00:00:00 2001
From: Xiao <120718501+xiaowhang@users.noreply.github.com>
Date: Wed, 7 May 2025 18:02:28 +0800
Subject: [PATCH] fix(components): [popper] fix arrow overflow issue (#20049)
* fix(components): [popper] fix arrow overflow issue
Add popperArrowProp to popperContentProps to ensure usePopper
correctly applies arrow options, preventing the arrow from
overflowing the popper container edges.
* fix(components): [popper] change arrowOffset to ref for reactivity
* feat(components): [tooltip] add arrow-offset property
- Allow users to control the padding of the tooltip arrow
- Prevents the arrow from touching the popper's edge
Reference: https://popper.js.org/docs/v2/modifiers/arrow/#padding
* fix(components): [popper] add reactive watch for arrowOffset prop
* feat(components): [popper] remove unused arrowOffset prop
Removes unused arrowOffset prop and related logic
- Removes arrowOffset from PopperContentInjectionContext
- Removes arrowOffset prop watching and state management
- Cleans up related test cases
* docs(components): [tooltip] update version requirement
update version requirement for arrow-offset prop
* docs(components): [tooltip] update `arrow-offset` version
* Update docs/en-US/component/tooltip.md
Co-authored-by: kooriookami <38392315+kooriookami@users.noreply.github.com>
---------
Co-authored-by: sea <45450994+warmthsea@users.noreply.github.com>
Co-authored-by: kooriookami <38392315+kooriookami@users.noreply.github.com>
---
docs/en-US/component/tooltip.md | 1 +
packages/components/popper/__tests__/arrow.test.tsx | 13 -------------
packages/components/popper/src/arrow.vue | 13 ++-----------
.../popper/src/composables/use-content.ts | 2 +-
packages/components/popper/src/constants.ts | 1 -
packages/components/popper/src/content.ts | 2 ++
packages/components/popper/src/content.vue | 12 +-----------
packages/components/tooltip/src/content.vue | 1 +
packages/components/tooltip/src/tooltip.vue | 3 ++-
9 files changed, 10 insertions(+), 38 deletions(-)
diff --git a/docs/en-US/component/tooltip.md b/docs/en-US/component/tooltip.md
index d07cd03228..b76aa4f5bb 100644
--- a/docs/en-US/component/tooltip.md
+++ b/docs/en-US/component/tooltip.md
@@ -173,6 +173,7 @@ tooltip/append-to
| offset | offset of the Tooltip | ^[number] | 12 |
| transition | animation name | ^[string] | — |
| popper-options | [popper.js](https://popper.js.org/docs/v2/) parameters | ^[object]refer to [popper.js](https://popper.js.org/docs/v2/) doc | {} |
+| arrow-offset ^(2.9.10) | Controls the offset (padding) of the tooltip’s arrow relative to the popper. | ^[number] | 5 |
| show-after | delay of appearance, in millisecond | ^[number] | 0 |
| show-arrow | whether the tooltip content has an arrow | ^[boolean] | true |
| hide-after | delay of disappear, in millisecond | ^[number] | 200 |
diff --git a/packages/components/popper/__tests__/arrow.test.tsx b/packages/components/popper/__tests__/arrow.test.tsx
index 29d70064bb..7f8dcef99d 100644
--- a/packages/components/popper/__tests__/arrow.test.tsx
+++ b/packages/components/popper/__tests__/arrow.test.tsx
@@ -9,7 +9,6 @@ import type { PopperArrowInstance } from '../src/arrow'
const popperContentInjection = {
arrowRef: ref(null),
- arrowOffset: ref(0),
}
const mountArrow = () =>
@@ -32,22 +31,10 @@ describe('', () => {
afterEach(() => {
wrapper?.unmount()
popperContentInjection.arrowRef.value = null
- popperContentInjection.arrowOffset.value = 0
})
it('should set the arrowRef after mounted', async () => {
expect(popperContentInjection.arrowRef.value).toBe(wrapper.vm.arrowRef)
- expect(popperContentInjection.arrowOffset.value).toBe(0)
- })
-
- it('should update the offset after props changed', async () => {
- expect(popperContentInjection.arrowOffset.value).toBe(0)
-
- await wrapper.setProps({
- arrowOffset: 10,
- })
-
- expect(popperContentInjection.arrowOffset.value).toBe(10)
})
it('should unset arrowRef before unmount', async () => {
diff --git a/packages/components/popper/src/arrow.vue b/packages/components/popper/src/arrow.vue
index f6929369e0..3dd69f5d55 100644
--- a/packages/components/popper/src/arrow.vue
+++ b/packages/components/popper/src/arrow.vue
@@ -8,30 +8,21 @@