From 7ce09f34199878a51bae88f06725b72f41378660 Mon Sep 17 00:00:00 2001
From: free-cutyapple <87959671+free-cutyapple@users.noreply.github.com>
Date: Fri, 3 Sep 2021 14:21:08 +0900
Subject: [PATCH 01/41] Update Readme (#276)
Update placement - descrition
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index af2d2a96..f1aa916c 100644
--- a/README.md
+++ b/README.md
@@ -142,7 +142,7 @@ Online examples:
diff --git a/docs/examples/showArrow.tsx b/docs/examples/showArrow.tsx
new file mode 100644
index 00000000..882f6bfa
--- /dev/null
+++ b/docs/examples/showArrow.tsx
@@ -0,0 +1,91 @@
+import React from 'react';
+import Tooltip from 'rc-tooltip';
+import '../../assets/bootstrap_white.less';
+
+const text = Tooltip Text;
+const styles = {
+ display: 'table-cell',
+ height: '60px',
+ width: '80px',
+ textAlign: 'center',
+ background: '#f6f6f6',
+ verticalAlign: 'middle',
+ border: '5px solid white',
+};
+
+const rowStyle = {
+ display: 'table-row',
+};
+
+const Test = () => (
+
+
+
+
+
+);
+
+export default Test;
diff --git a/src/Tooltip.tsx b/src/Tooltip.tsx
index 4948c32d..ac9cfb6f 100644
--- a/src/Tooltip.tsx
+++ b/src/Tooltip.tsx
@@ -32,6 +32,7 @@ export interface TooltipProps extends Pick {
}
const getPopupElement = () => {
- const { arrowContent = null, overlay, id } = props;
+ const { showArrow = true, arrowContent = null, overlay, id } = props;
return [
-
- {arrowContent}
- ,
+ showArrow && (
+
+ {arrowContent}
+
+ ),
{
jest.useRealTimers();
});
+
+ describe('showArrow', () => {
+ it('should show tooltip arrow default', () => {
+ const wrapper = mount(
+ Tooltip content}
+ >
+ Click this
+ ,
+ );
+ wrapper.find('.target').simulate('click');
+ expect(wrapper.find('.rc-tooltip-content').html()).toBe(
+ 'Tooltip content',
+ );
+ });
+ it('should show tooltip arrow when showArrow is true', () => {
+ const wrapper = mount(
+ Tooltip content}
+ showArrow
+ >
+ Click this
+ ,
+ );
+ wrapper.find('.target').simulate('click');
+ expect(wrapper.find('.rc-tooltip-content').html()).toBe(
+ 'Tooltip content',
+ );
+ });
+ it('should hide tooltip arrow when showArrow is false', () => {
+ const wrapper = mount(
+ Tooltip content}
+ showArrow={false}
+ >
+ Click this
+ ,
+ );
+ wrapper.find('.target').simulate('click');
+ expect(wrapper.find('.rc-tooltip-content').html()).toBe(
+ 'Tooltip content',
+ );
+ });
+ });
});
From eb22b7b547e8a9503cf5943f1be3def7fac48d8b Mon Sep 17 00:00:00 2001
From: Tony Narlock
Date: Mon, 4 Jul 2022 10:03:39 -0500
Subject: [PATCH 05/41] docs(README) (#346)
Missing space
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 6efe6b85..4522ff5d 100644
--- a/README.md
+++ b/README.md
@@ -190,7 +190,7 @@ Online examples:
destroyTooltipOnHide
boolean | { keepParent: boolean }
false
- whether destroy tooltip when tooltip is hidden.In general, destroyTooltipOnHide will only remove itself instead of parent container of it.Parent container will be removed include tooltip when keepParent is true
+ whether destroy tooltip when tooltip is hidden.In general, destroyTooltipOnHide will only remove itself instead of parent container of it. Parent container will be removed include tooltip when keepParent is true
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/demo/formError.md b/docs/demo/formError.md
index 51a3480d..e3bf2e8d 100644
--- a/docs/demo/formError.md
+++ b/docs/demo/formError.md
@@ -1,3 +1,8 @@
-## formError
+---
+title: formError
+nav:
+ title: Demo
+ path: /demo
+---
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/demo/onVisibleChange.md b/docs/demo/onVisibleChange.md
index 989b373e..4f30b05a 100644
--- a/docs/demo/onVisibleChange.md
+++ b/docs/demo/onVisibleChange.md
@@ -1,3 +1,8 @@
-## onVisibleChange
+---
+title: onVisibleChange
+nav:
+ title: Demo
+ path: /demo
+---
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/demo/placement.md b/docs/demo/placement.md
index e2952931..192ec92e 100644
--- a/docs/demo/placement.md
+++ b/docs/demo/placement.md
@@ -1,3 +1,8 @@
-## placement
+---
+title: placement
+nav:
+ title: Demo
+ path: /demo
+---
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/demo/showArrow.md b/docs/demo/showArrow.md
index d4b4c420..7925fe57 100644
--- a/docs/demo/showArrow.md
+++ b/docs/demo/showArrow.md
@@ -1,3 +1,8 @@
-## showArrow
+---
+title: showArrow
+nav:
+ title: Demo
+ path: /demo
+---
-
+
diff --git a/docs/demo/simple.md b/docs/demo/simple.md
index 51d9e8f6..23f3e343 100644
--- a/docs/demo/simple.md
+++ b/docs/demo/simple.md
@@ -1,3 +1,8 @@
-## simple
+---
+title: simple
+nav:
+ title: Demo
+ path: /demo
+---
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
index 53a98a37..4c79a7b9 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,5 +1,8 @@
---
-title: rc-tooltip
+hero:
+ title: rc-tooltip
+ description: React Tooltip
---
+
diff --git a/package.json b/package.json
index 4ae08af6..de94828e 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
"@types/react-dom": "^16.9.2",
"@types/warning": "^3.0.0",
"cross-env": "^7.0.0",
- "dumi": "^1.1.0",
+ "dumi": "^2.1.1",
"enzyme": "^3.10.0",
"enzyme-adapter-react-16": "^1.15.1",
"enzyme-to-json": "^3.4.3",
diff --git a/tsconfig.json b/tsconfig.json
index e23fb377..eee6c53d 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,8 +9,9 @@
"esModuleInterop": true,
"paths": {
"@/*": ["src/*"],
- "@@/*": ["src/.umi/*"],
+ "@@/*": [".dumi/tmp/*"],
"rc-tooltip": ["src/index.tsx"]
}
- }
+ },
+ "include": [".dumi/**/*", ".dumirc.ts", "./src/**/*.ts", "./src/**/*.tsx", "./docs/**/*.tsx"]
}
From 61a32867f547b190e254e13517a658626e9c749e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?kiner-tang=28=E6=96=87=E8=BE=89=29?= <1127031143@qq.com>
Date: Sun, 15 Jan 2023 12:12:55 +0800
Subject: [PATCH 14/41] feat: update react and react-dom version to 18+ (#431)
* feat: update react and react-dom version to 18+
* tests: enzyme => @testing-library/react
---
package.json | 12 +-
tests/{index.test.js => index.test.tsx} | 141 ++++++++++++------------
tests/{popup.test.js => popup.test.tsx} | 0
tests/setup.js | 42 ++++++-
tsconfig.json | 2 +-
5 files changed, 112 insertions(+), 85 deletions(-)
rename tests/{index.test.js => index.test.tsx} (60%)
rename tests/{popup.test.js => popup.test.tsx} (100%)
diff --git a/package.json b/package.json
index de94828e..b298c33c 100644
--- a/package.json
+++ b/package.json
@@ -43,23 +43,21 @@
"rc-trigger": "^5.3.1"
},
"devDependencies": {
+ "@testing-library/react": "^13.4.0",
"@types/jest": "^26.0.0",
- "@types/react": "^17.0.15",
- "@types/react-dom": "^16.9.2",
+ "@types/react": "^18.0.26",
+ "@types/react-dom": "^18.0.10",
"@types/warning": "^3.0.0",
"cross-env": "^7.0.0",
"dumi": "^2.1.1",
- "enzyme": "^3.10.0",
- "enzyme-adapter-react-16": "^1.15.1",
- "enzyme-to-json": "^3.4.3",
"eslint": "^7.1.0",
"father": "^2.23.1",
"father-build": "^1.18.6",
"gh-pages": "^3.1.0",
"less": "^3.11.1",
"np": "^7.1.0",
- "react": "^16.10.2",
- "react-dom": "^16.10.2",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
"typescript": "^4.0.5"
},
"maintainers": [
diff --git a/tests/index.test.js b/tests/index.test.tsx
similarity index 60%
rename from tests/index.test.js
rename to tests/index.test.tsx
index 6d4c2249..1bd0b5af 100644
--- a/tests/index.test.js
+++ b/tests/index.test.tsx
@@ -1,21 +1,27 @@
-import React from 'react';
-import { mount } from 'enzyme';
+import React, { useState } from 'react';
+import { render, fireEvent } from '@testing-library/react';
import Tooltip from '../src';
-const verifyContent = (wrapper, content) => {
- expect(wrapper.find('.x-content').text()).toBe(content);
- expect(wrapper.find('Trigger').instance().getPopupDomNode()).toBeTruthy();
- wrapper.find('.target').simulate('click');
- expect(wrapper.find('.rc-tooltip').hostNodes().hasClass('rc-tooltip-hidden')).toBe(true);
+const verifyContent = (wrapper: HTMLElement, content: string) => {
+ expect(wrapper.querySelector('.x-content').textContent).toBe(content);
+ fireEvent.click(wrapper.querySelector('.target'));
+ expect(wrapper.querySelector('.rc-tooltip').classList.contains('rc-tooltip-hidden')).toBe(true);
};
describe('rc-tooltip', () => {
window.requestAnimationFrame = window.setTimeout;
window.cancelAnimationFrame = window.clearTimeout;
+ beforeEach(() => {
+ jest.useFakeTimers();
+ });
+
+ afterEach(() => {
+ jest.useRealTimers();
+ });
describe('shows and hides itself on click', () => {
it('using an element overlay', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- wrapper.find('.target').simulate('click');
- verifyContent(wrapper, 'Tooltip content');
+ fireEvent.click(container.querySelector('.target'));
+ verifyContent(container, 'Tooltip content');
});
it('using a function overlay', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- wrapper.find('.target').simulate('click');
- verifyContent(wrapper, 'Tooltip content');
+ fireEvent.click(container.querySelector('.target'));
+ verifyContent(container, 'Tooltip content');
});
// https://github.com/ant-design/ant-design/pull/23155
it('using style inner style', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- wrapper.find('.target').simulate('click');
- expect(wrapper.find('.rc-tooltip-inner').props().style).toEqual({ background: 'red' });
+ fireEvent.click(container.querySelector('.target'));
+ expect(
+ (container.querySelector('.rc-tooltip-inner') as HTMLElement).style.background,
+ ).toEqual('red');
});
it('access of ref', () => {
const domRef = React.createRef();
- mount(
+ render(
{
});
});
describe('destroyTooltipOnHide', () => {
- const destroyVerifyContent = (wrapper, content) => {
- wrapper.find('.target').simulate('click');
- expect(wrapper.find('.x-content').text()).toBe(content);
- expect(wrapper.find('Trigger').instance().getPopupDomNode()).toBeTruthy();
- wrapper.find('.target').simulate('click');
+ const destroyVerifyContent = (wrapper: HTMLElement, content: string) => {
+ fireEvent.click(wrapper.querySelector('.target'));
+ expect(wrapper.querySelector('.x-content').textContent).toBe(content);
+ fireEvent.click(wrapper.querySelector('.target'));
};
it('default value', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- wrapper.find('.target').simulate('click');
- verifyContent(wrapper, 'Tooltip content');
+ fireEvent.click(container.querySelector('.target'));
+ verifyContent(container, 'Tooltip content');
});
it('should only remove tooltip when value is true', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- destroyVerifyContent(wrapper, 'Tooltip content');
- expect(wrapper.html()).toBe('Click this');
+ destroyVerifyContent(container, 'Tooltip content');
+ expect(container.innerHTML).toBe('Click this');
});
it('should only remove tooltip when keepParent is true', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- destroyVerifyContent(wrapper, 'Tooltip content');
- expect(wrapper.html()).toBe('Click this');
+ destroyVerifyContent(container, 'Tooltip content');
+ expect(container.innerHTML).toBe('Click this');
});
it('should remove tooltip and container when keepParent is false', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- destroyVerifyContent(wrapper, 'Tooltip content');
- expect(wrapper.html()).toBe('Click this');
+ destroyVerifyContent(container, 'Tooltip content');
+ expect(container.innerHTML).toBe('Click this');
});
});
- // This is only test for motion pass to internal rc-trigger
- // It's safe to remove since meaningless to rc-tooltip if refactor
- it('should motion props work', () => {
- const wrapper = mount(
-
- Bamboo
- ,
- );
-
- expect(wrapper.find('Trigger').props().popupMotion).toEqual({ motionName: 'bamboo-is-light' });
- });
-
it('zIndex', () => {
jest.useFakeTimers();
- const wrapper = mount(
+ const { container } = render(
Light
,
);
- wrapper.find('.target').simulate('click');
+ fireEvent.click(container.querySelector('.target'));
jest.runAllTimers();
- wrapper.update();
- expect(wrapper.find('div.rc-tooltip').prop('style')).toEqual(
- expect.objectContaining({
- zIndex: 903,
- }),
- );
+ expect((container.querySelector('div.rc-tooltip') as HTMLElement).style.zIndex).toBe('903');
jest.useRealTimers();
});
describe('showArrow', () => {
it('should show tooltip arrow default', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- wrapper.find('.target').simulate('click');
- expect(wrapper.find('.rc-tooltip-content').html()).toBe(
+ fireEvent.click(container.querySelector('.target'));
+ expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
'Tooltip content',
);
});
it('should show tooltip arrow when showArrow is true', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- wrapper.find('.target').simulate('click');
- expect(wrapper.find('.rc-tooltip-content').html()).toBe(
+ fireEvent.click(container.querySelector('.target'));
+ expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
'Tooltip content',
);
});
it('should hide tooltip arrow when showArrow is false', () => {
- const wrapper = mount(
+ const { container } = render(
{
Click this
,
);
- wrapper.find('.target').simulate('click');
- expect(wrapper.find('.rc-tooltip-content').html()).toBe(
+ fireEvent.click(container.querySelector('.target'));
+ expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
'Tooltip content',
);
});
});
it('visible', () => {
- const wrapper = mount(
- Tooltip content} visible={false}>
-
- ,
- );
+ const App = () => {
+ const [open, setOpen] = useState(false);
+ return (
+ Tooltip content} visible={open}>
+ {
+ setOpen(true);
+ }}
+ />
+
+ );
+ };
+ const { container } = render( );
- expect(wrapper.exists('.x-content')).toBeFalsy();
+ expect(container.querySelector('.x-content')).toBeFalsy();
- wrapper.setProps({ visible: true });
- expect(wrapper.exists('.x-content')).toBeTruthy();
+ fireEvent.click(container.querySelector('.target'));
+ expect(container.querySelector('.x-content')).toBeTruthy();
});
});
diff --git a/tests/popup.test.js b/tests/popup.test.tsx
similarity index 100%
rename from tests/popup.test.js
rename to tests/popup.test.tsx
diff --git a/tests/setup.js b/tests/setup.js
index 684b8a6f..8623ee6b 100644
--- a/tests/setup.js
+++ b/tests/setup.js
@@ -1,8 +1,38 @@
-global.requestAnimationFrame = global.requestAnimationFrame || function requestAnimationFrame(cb) {
- return setTimeout(cb, 0);
-};
+const React = require('react');
+const util = require('util');
-const Enzyme = require('enzyme');
-const Adapter = require('enzyme-adapter-react-16');
+// eslint-disable-next-line no-console
+console.log('Current React Version:', React.version);
-Enzyme.configure({ adapter: new Adapter() });
+/* eslint-disable global-require */
+if (typeof window !== 'undefined') {
+ global.window.resizeTo = (width, height) => {
+ global.window.innerWidth = width || global.window.innerWidth;
+ global.window.innerHeight = height || global.window.innerHeight;
+ global.window.dispatchEvent(new Event('resize'));
+ };
+ global.window.scrollTo = () => {};
+ // ref: https://github.com/ant-design/ant-design/issues/18774
+ if (!window.matchMedia) {
+ Object.defineProperty(global.window, 'matchMedia', {
+ writable: true,
+ configurable: true,
+ value: jest.fn((query) => ({
+ matches: query.includes('max-width'),
+ addListener: jest.fn(),
+ removeListener: jest.fn(),
+ })),
+ });
+ }
+
+ // Fix css-animation or rc-motion deps on these
+ // https://github.com/react-component/motion/blob/9c04ef1a210a4f3246c9becba6e33ea945e00669/src/util/motion.ts#L27-L35
+ // https://github.com/yiminghe/css-animation/blob/a5986d73fd7dfce75665337f39b91483d63a4c8c/src/Event.js#L44
+ window.AnimationEvent = window.AnimationEvent || window.Event;
+ window.TransitionEvent = window.TransitionEvent || window.Event;
+
+ // ref: https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom
+ // ref: https://github.com/jsdom/jsdom/issues/2524
+ Object.defineProperty(window, 'TextEncoder', { writable: true, value: util.TextEncoder });
+ Object.defineProperty(window, 'TextDecoder', { writable: true, value: util.TextDecoder });
+}
diff --git a/tsconfig.json b/tsconfig.json
index eee6c53d..a640dcb3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -13,5 +13,5 @@
"rc-tooltip": ["src/index.tsx"]
}
},
- "include": [".dumi/**/*", ".dumirc.ts", "./src/**/*.ts", "./src/**/*.tsx", "./docs/**/*.tsx"]
+ "include": [".dumi/**/*", ".dumirc.ts", "./src/**/*.ts", "./src/**/*.tsx", "./docs/**/*.tsx", "./tests/**/*.tsx"]
}
From 187be03f5cf260a843b50fa45d597260f5d01ee8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?kiner-tang=28=E6=96=87=E8=BE=89=29?= <1127031143@qq.com>
Date: Sun, 15 Jan 2023 21:08:28 +0800
Subject: [PATCH 15/41] feat: tooltip support show-arrow cls when showArrow not
falsy (#430)
* feat: tooltip support show-arrow cls when showArrow not falsy
* feat: optimize code
* feat: reset resolutions
* chore: merge master
* feat: optimize code
---
src/Tooltip.tsx | 7 +++++--
tests/index.test.tsx | 5 +++++
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/Tooltip.tsx b/src/Tooltip.tsx
index db8e353f..8bd9f72f 100644
--- a/src/Tooltip.tsx
+++ b/src/Tooltip.tsx
@@ -5,6 +5,7 @@ import type { TriggerProps } from 'rc-trigger';
import type { AlignType, AnimationType, ActionType } from 'rc-trigger/lib/interface';
import { placements } from './placements';
import Popup from './Popup';
+import classNames from 'classnames';
export interface TooltipProps extends Pick {
trigger?: ActionType | ActionType[];
@@ -64,7 +65,7 @@ const Tooltip = (props: TooltipProps, ref) => {
arrowContent,
overlay,
id,
- showArrow,
+ showArrow = true,
...restProps
} = props;
@@ -101,7 +102,9 @@ const Tooltip = (props: TooltipProps, ref) => {
return (
{
,
);
fireEvent.click(container.querySelector('.target'));
+ expect(container.querySelector('.rc-tooltip').classList).toContain('rc-tooltip-show-arrow');
expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
'Tooltip content',
);
@@ -191,6 +192,7 @@ describe('rc-tooltip', () => {
,
);
fireEvent.click(container.querySelector('.target'));
+ expect(container.querySelector('.rc-tooltip').classList).toContain('rc-tooltip-show-arrow');
expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
'Tooltip content',
);
@@ -208,6 +210,9 @@ describe('rc-tooltip', () => {
,
);
fireEvent.click(container.querySelector('.target'));
+ expect(container.querySelector('.rc-tooltip').classList).not.toContain(
+ 'rc-tooltip-show-arrow',
+ );
expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
'Tooltip content',
);
From d58ccd04efe9d32ff530bd733f0d698e6889cd5f Mon Sep 17 00:00:00 2001
From: MadCcc <1075746765@qq.com>
Date: Sun, 15 Jan 2023 21:22:00 +0800
Subject: [PATCH 16/41] v5.3.0
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index b298c33c..0952b17c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rc-tooltip",
- "version": "5.2.2",
+ "version": "5.3.0",
"description": "React Tooltip",
"keywords": [
"react",
From 74bf8a78ab619f5451edd9e1805cd5cadc92991c Mon Sep 17 00:00:00 2001
From: MadCcc <1075746765@qq.com>
Date: Sun, 15 Jan 2023 23:39:04 +0800
Subject: [PATCH 17/41] Revert "v5.3.0"
This reverts commit d58ccd04efe9d32ff530bd733f0d698e6889cd5f.
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 0952b17c..b298c33c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rc-tooltip",
- "version": "5.3.0",
+ "version": "5.2.2",
"description": "React Tooltip",
"keywords": [
"react",
From abb7d8bd6aa494057e20952a6519652716894258 Mon Sep 17 00:00:00 2001
From: MadCcc <1075746765@qq.com>
Date: Sun, 15 Jan 2023 23:48:40 +0800
Subject: [PATCH 18/41] v5.3.0
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index b298c33c..0952b17c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rc-tooltip",
- "version": "5.2.2",
+ "version": "5.3.0",
"description": "React Tooltip",
"keywords": [
"react",
From e9ba0fd4736fc30aae4a0ba6b545d5433fd8142f Mon Sep 17 00:00:00 2001
From: MadCcc <1075746765@qq.com>
Date: Sun, 15 Jan 2023 23:50:53 +0800
Subject: [PATCH 19/41] Revert "v5.3.0"
This reverts commit abb7d8bd6aa494057e20952a6519652716894258.
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 0952b17c..b298c33c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rc-tooltip",
- "version": "5.3.0",
+ "version": "5.2.2",
"description": "React Tooltip",
"keywords": [
"react",
From bf78c2efd0f2ba3e56e37e986566a77f19907653 Mon Sep 17 00:00:00 2001
From: MadCcc <1075746765@qq.com>
Date: Sun, 15 Jan 2023 23:51:14 +0800
Subject: [PATCH 20/41] v5.3.0
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index b298c33c..0952b17c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rc-tooltip",
- "version": "5.2.2",
+ "version": "5.3.0",
"description": "React Tooltip",
"keywords": [
"react",
From 2b86fcea82bf0241f129cf24ddc5e8c8a42eac43 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?kiner-tang=28=E6=96=87=E8=BE=89=29?= <1127031143@qq.com>
Date: Wed, 18 Jan 2023 14:06:57 +0800
Subject: [PATCH 21/41] feat: remove *-show-arrow cls when showArrow is true
(#433)
* feat: remove *-show-arrow cls when showArrow is true
* feat: update test case
---
src/Tooltip.tsx | 5 +----
tests/index.test.tsx | 2 --
2 files changed, 1 insertion(+), 6 deletions(-)
diff --git a/src/Tooltip.tsx b/src/Tooltip.tsx
index 8bd9f72f..c703e353 100644
--- a/src/Tooltip.tsx
+++ b/src/Tooltip.tsx
@@ -5,7 +5,6 @@ import type { TriggerProps } from 'rc-trigger';
import type { AlignType, AnimationType, ActionType } from 'rc-trigger/lib/interface';
import { placements } from './placements';
import Popup from './Popup';
-import classNames from 'classnames';
export interface TooltipProps extends Pick {
trigger?: ActionType | ActionType[];
@@ -102,9 +101,7 @@ const Tooltip = (props: TooltipProps, ref) => {
return (
{
,
);
fireEvent.click(container.querySelector('.target'));
- expect(container.querySelector('.rc-tooltip').classList).toContain('rc-tooltip-show-arrow');
expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
'Tooltip content',
);
@@ -192,7 +191,6 @@ describe('rc-tooltip', () => {
,
);
fireEvent.click(container.querySelector('.target'));
- expect(container.querySelector('.rc-tooltip').classList).toContain('rc-tooltip-show-arrow');
expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
'Tooltip content',
);
From 72554ebb0750990a36744158757a0a8cb969a616 Mon Sep 17 00:00:00 2001
From: MadCcc <1075746765@qq.com>
Date: Wed, 18 Jan 2023 14:15:40 +0800
Subject: [PATCH 22/41] v5.3.1
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 0952b17c..751f33c9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rc-tooltip",
- "version": "5.3.0",
+ "version": "5.3.1",
"description": "React Tooltip",
"keywords": [
"react",
From fb9d8bdbc800496859615e135d4b5bc544d3eda4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E7=88=B1=E5=90=83=E7=99=BD=E8=90=9D?=
=?UTF-8?q?=E5=8D=9C?=
Date: Wed, 8 Feb 2023 14:38:02 +0800
Subject: [PATCH 23/41] refactor: Use `@rc-component/trigger` (#438)
* refactor: replace with @rc-trigger
* chore: update deps
* chore: update deps
* chore: clean up
* chore: update deps
* test: Update test
---
.fatherrc.js | 14 ++---
assets/bootstrap_white.less | 6 +-
docs/demo/point.md | 8 +++
docs/examples/point.tsx | 56 +++++++++++++++++
package.json | 26 ++++----
src/Popup.tsx | 20 +-----
src/Tooltip.tsx | 37 +++--------
src/placements.tsx | 32 +++++-----
tests/__mocks__/@rc-component/trigger.js | 3 +
tests/__mocks__/rc-trigger.js | 3 -
tests/index.test.tsx | 78 ++++++++++--------------
tsconfig.json | 2 +-
12 files changed, 148 insertions(+), 137 deletions(-)
create mode 100644 docs/demo/point.md
create mode 100644 docs/examples/point.tsx
create mode 100644 tests/__mocks__/@rc-component/trigger.js
delete mode 100644 tests/__mocks__/rc-trigger.js
diff --git a/.fatherrc.js b/.fatherrc.js
index 912aa0aa..4ddbafd1 100644
--- a/.fatherrc.js
+++ b/.fatherrc.js
@@ -1,9 +1,5 @@
-export default {
- cjs: 'babel',
- esm: { type: 'babel', importLibToEs: true },
- preCommit: {
- eslint: true,
- prettier: true,
- },
- runtimeHelpers: true,
-};
+import { defineConfig } from 'father';
+
+export default defineConfig({
+ plugins: ['@rc-component/father-plugin'],
+});
\ No newline at end of file
diff --git a/assets/bootstrap_white.less b/assets/bootstrap_white.less
index 07b47858..b6deb247 100644
--- a/assets/bootstrap_white.less
+++ b/assets/bootstrap_white.less
@@ -69,7 +69,8 @@
&-placement-top &-arrow,
&-placement-topLeft &-arrow,
&-placement-topRight &-arrow{
- bottom: -@tooltip-arrow-width + @tooltip-shadow-width;
+ // bottom: -@tooltip-arrow-width + @tooltip-shadow-width;
+ transform: translate(-50%, @tooltip-arrow-width - @tooltip-shadow-width);
margin-left: -@tooltip-arrow-width;
border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
border-top-color: @tooltip-arrow-color;
@@ -161,7 +162,8 @@
&-placement-bottom &-arrow,
&-placement-bottomLeft &-arrow,
&-placement-bottomRight &-arrow {
- top: -@tooltip-arrow-width + @tooltip-shadow-width;;
+ // top: -@tooltip-arrow-width + @tooltip-shadow-width;;
+ transform: translate(-50%, -@tooltip-arrow-width + @tooltip-shadow-width);
margin-left: -@tooltip-arrow-width;
border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
border-bottom-color: @tooltip-arrow-color;
diff --git a/docs/demo/point.md b/docs/demo/point.md
new file mode 100644
index 00000000..073a89bc
--- /dev/null
+++ b/docs/demo/point.md
@@ -0,0 +1,8 @@
+---
+title: Point
+nav:
+ title: Demo
+ path: /demo
+---
+
+
\ No newline at end of file
diff --git a/docs/examples/point.tsx b/docs/examples/point.tsx
new file mode 100644
index 00000000..d59ce6a2
--- /dev/null
+++ b/docs/examples/point.tsx
@@ -0,0 +1,56 @@
+import Tooltip from 'rc-tooltip';
+import React from 'react';
+import '../../assets/bootstrap_white.less';
+
+const text = Tooltip Text;
+
+const Test = () => {
+ const scrollRef = React.useRef();
+
+ return (
+
+
+
+ }
+ >
+
+ Hover Me
+
+
+
+
+
+ );
+};
+
+export default Test;
diff --git a/package.json b/package.json
index 751f33c9..c452f86a 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,11 @@
"url": "git@github.com:react-component/tooltip.git"
},
"license": "MIT",
+ "maintainers": [
+ "yiminghe@gmail.com"
+ ],
+ "main": "lib/index",
+ "module": "es/index",
"files": [
"dist",
"lib",
@@ -24,25 +29,23 @@
"assets/*.css",
"assets/*.less"
],
- "main": "lib/index",
- "module": "es/index",
"scripts": {
- "start": "dumi dev",
+ "compile": "father build && lessc assets/bootstrap.less assets/bootstrap.css && lessc assets/bootstrap_white.less assets/bootstrap_white.css",
"docs:build": "dumi build",
"docs:deploy": "gh-pages -d .doc",
- "compile": "father build && lessc assets/bootstrap.less assets/bootstrap.css && lessc assets/bootstrap_white.less assets/bootstrap_white.css",
- "coverage": "father test --coverage",
"lint": "eslint src/ --ext .tsx,.ts,.jsx,.js",
"now-build": "npm run build",
"prepublishOnly": "npm run compile && np --no-cleanup --yolo --no-publish",
- "test": "father test"
+ "start": "dumi dev",
+ "test": "rc-test"
},
"dependencies": {
"@babel/runtime": "^7.11.2",
- "classnames": "^2.3.1",
- "rc-trigger": "^5.3.1"
+ "@rc-component/trigger": "^1.0.4",
+ "classnames": "^2.3.1"
},
"devDependencies": {
+ "@rc-component/father-plugin": "^1.0.0",
"@testing-library/react": "^13.4.0",
"@types/jest": "^26.0.0",
"@types/react": "^18.0.26",
@@ -51,18 +54,15 @@
"cross-env": "^7.0.0",
"dumi": "^2.1.1",
"eslint": "^7.1.0",
- "father": "^2.23.1",
- "father-build": "^1.18.6",
+ "father": "^4.0.0",
"gh-pages": "^3.1.0",
"less": "^3.11.1",
"np": "^7.1.0",
+ "rc-test": "^7.0.9",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"typescript": "^4.0.5"
},
- "maintainers": [
- "yiminghe@gmail.com"
- ],
"peerDependencies": {
"react": ">=16.9.0",
"react-dom": ">=16.9.0"
diff --git a/src/Popup.tsx b/src/Popup.tsx
index 6357e7bd..cbaa9cf3 100644
--- a/src/Popup.tsx
+++ b/src/Popup.tsx
@@ -1,36 +1,20 @@
-import * as React from 'react';
import classNames from 'classnames';
+import * as React from 'react';
export interface ContentProps {
prefixCls?: string;
children: (() => React.ReactNode) | React.ReactNode;
id?: string;
overlayInnerStyle?: React.CSSProperties;
- arrowContent?: React.ReactNode;
className?: string;
style?: React.CSSProperties;
- showArrow?: boolean;
}
export default function Popup(props: ContentProps) {
- const {
- showArrow,
- arrowContent,
- children,
- prefixCls,
- id,
- overlayInnerStyle,
- className,
- style,
- } = props;
+ const { children, prefixCls, id, overlayInnerStyle, className, style } = props;
return (
- {showArrow !== false && (
-
- {arrowContent}
-
- )}
{typeof children === 'function' ? children() : children}
diff --git a/src/Tooltip.tsx b/src/Tooltip.tsx
index c703e353..bb836d3e 100644
--- a/src/Tooltip.tsx
+++ b/src/Tooltip.tsx
@@ -1,8 +1,8 @@
+import type { TriggerProps } from '@rc-component/trigger';
+import Trigger from '@rc-component/trigger';
+import type { ActionType, AlignType, AnimationType } from '@rc-component/trigger/lib/interface';
import * as React from 'react';
-import { useRef, useImperativeHandle, forwardRef } from 'react';
-import Trigger from 'rc-trigger';
-import type { TriggerProps } from 'rc-trigger';
-import type { AlignType, AnimationType, ActionType } from 'rc-trigger/lib/interface';
+import { forwardRef, useImperativeHandle, useRef } from 'react';
import { placements } from './placements';
import Popup from './Popup';
@@ -26,11 +26,7 @@ export interface TooltipProps extends Pick HTMLElement;
- destroyTooltipOnHide?:
- | boolean
- | {
- keepParent?: boolean;
- };
+ destroyTooltipOnHide?: boolean;
align?: AlignType;
showArrow?: boolean;
arrowContent?: React.ReactNode;
@@ -77,28 +73,11 @@ const Tooltip = (props: TooltipProps, ref) => {
}
const getPopupElement = () => (
-
+
{overlay}
);
- let destroyTooltip = false;
- let autoDestroy = false;
- if (typeof destroyTooltipOnHide === 'boolean') {
- destroyTooltip = destroyTooltipOnHide;
- } else if (destroyTooltipOnHide && typeof destroyTooltipOnHide === 'object') {
- const { keepParent } = destroyTooltipOnHide;
- destroyTooltip = keepParent === true;
- autoDestroy = keepParent === false;
- }
-
return (
{
popupAnimation={animation}
popupMotion={motion}
defaultPopupVisible={defaultVisible}
- destroyPopupOnHide={destroyTooltip}
- autoDestroy={autoDestroy}
+ autoDestroy={destroyTooltipOnHide}
mouseLeaveDelay={mouseLeaveDelay}
popupStyle={overlayStyle}
mouseEnterDelay={mouseEnterDelay}
+ arrow={showArrow}
{...extraProps}
>
{children}
diff --git a/src/placements.tsx b/src/placements.tsx
index 789dce36..6371e889 100644
--- a/src/placements.tsx
+++ b/src/placements.tsx
@@ -1,82 +1,84 @@
-import { BuildInPlacements } from 'rc-trigger';
+import type { BuildInPlacements } from '@rc-component/trigger';
-const autoAdjustOverflow = {
- adjustX: 1,
+const autoAdjustOverflowTopBottom = {
+ shiftX: 64,
adjustY: 1,
};
+const autoAdjustOverflowLeftRight = { adjustX: 1, shiftY: true };
+
const targetOffset = [0, 0];
export const placements: BuildInPlacements = {
left: {
points: ['cr', 'cl'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowLeftRight,
offset: [-4, 0],
targetOffset,
},
right: {
points: ['cl', 'cr'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowLeftRight,
offset: [4, 0],
targetOffset,
},
top: {
points: ['bc', 'tc'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowTopBottom,
offset: [0, -4],
targetOffset,
},
bottom: {
points: ['tc', 'bc'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowTopBottom,
offset: [0, 4],
targetOffset,
},
topLeft: {
points: ['bl', 'tl'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowTopBottom,
offset: [0, -4],
targetOffset,
},
leftTop: {
points: ['tr', 'tl'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowLeftRight,
offset: [-4, 0],
targetOffset,
},
topRight: {
points: ['br', 'tr'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowTopBottom,
offset: [0, -4],
targetOffset,
},
rightTop: {
points: ['tl', 'tr'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowLeftRight,
offset: [4, 0],
targetOffset,
},
bottomRight: {
points: ['tr', 'br'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowTopBottom,
offset: [0, 4],
targetOffset,
},
rightBottom: {
points: ['bl', 'br'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowLeftRight,
offset: [4, 0],
targetOffset,
},
bottomLeft: {
points: ['tl', 'bl'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowTopBottom,
offset: [0, 4],
targetOffset,
},
leftBottom: {
points: ['br', 'bl'],
- overflow: autoAdjustOverflow,
+ overflow: autoAdjustOverflowLeftRight,
offset: [-4, 0],
targetOffset,
},
diff --git a/tests/__mocks__/@rc-component/trigger.js b/tests/__mocks__/@rc-component/trigger.js
new file mode 100644
index 00000000..887c966d
--- /dev/null
+++ b/tests/__mocks__/@rc-component/trigger.js
@@ -0,0 +1,3 @@
+import Trigger from '@rc-component/trigger/lib/mock';
+
+export default Trigger;
diff --git a/tests/__mocks__/rc-trigger.js b/tests/__mocks__/rc-trigger.js
deleted file mode 100644
index 32303075..00000000
--- a/tests/__mocks__/rc-trigger.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import Trigger from 'rc-trigger/lib/mock';
-
-export default Trigger;
diff --git a/tests/index.test.tsx b/tests/index.test.tsx
index 2a9fc44e..6784be1a 100644
--- a/tests/index.test.tsx
+++ b/tests/index.test.tsx
@@ -1,5 +1,5 @@
-import React, { useState } from 'react';
-import { render, fireEvent } from '@testing-library/react';
+import { act, fireEvent, render } from '@testing-library/react';
+import React from 'react';
import Tooltip from '../src';
const verifyContent = (wrapper: HTMLElement, content: string) => {
@@ -19,6 +19,15 @@ describe('rc-tooltip', () => {
jest.useRealTimers();
});
+ async function waitFakeTimers() {
+ for (let i = 0; i < 100; i += 1) {
+ await act(async () => {
+ jest.advanceTimersByTime(100);
+ await Promise.resolve();
+ });
+ }
+ }
+
describe('shows and hides itself on click', () => {
it('using an element overlay', () => {
const { container } = render(
@@ -30,7 +39,9 @@ describe('rc-tooltip', () => {
Click this
,
);
+
fireEvent.click(container.querySelector('.target'));
+
verifyContent(container, 'Tooltip content');
});
@@ -81,11 +92,16 @@ describe('rc-tooltip', () => {
expect(domRef.current).toBeTruthy();
});
});
+
describe('destroyTooltipOnHide', () => {
- const destroyVerifyContent = (wrapper: HTMLElement, content: string) => {
+ const destroyVerifyContent = async (wrapper: HTMLElement, content: string) => {
fireEvent.click(wrapper.querySelector('.target'));
+ await waitFakeTimers();
+
expect(wrapper.querySelector('.x-content').textContent).toBe(content);
+
fireEvent.click(wrapper.querySelector('.target'));
+ await waitFakeTimers();
};
it('default value', () => {
const { container } = render(
@@ -100,7 +116,8 @@ describe('rc-tooltip', () => {
fireEvent.click(container.querySelector('.target'));
verifyContent(container, 'Tooltip content');
});
- it('should only remove tooltip when value is true', () => {
+
+ it('should only remove tooltip when value is true', async () => {
const { container } = render(
{
Click this
,
);
- destroyVerifyContent(container, 'Tooltip content');
- expect(container.innerHTML).toBe('Click this');
- });
- it('should only remove tooltip when keepParent is true', () => {
- const { container } = render(
- Tooltip content}
- >
- Click this
- ,
- );
- destroyVerifyContent(container, 'Tooltip content');
- expect(container.innerHTML).toBe('Click this');
- });
- it('should remove tooltip and container when keepParent is false', () => {
- const { container } = render(
- Tooltip content}
- >
- Click this
- ,
- );
- destroyVerifyContent(container, 'Tooltip content');
- expect(container.innerHTML).toBe('Click this');
+ await destroyVerifyContent(container, 'Tooltip content');
+ expect(document.querySelector('.x-content')).toBeFalsy();
});
});
@@ -165,7 +154,7 @@ describe('rc-tooltip', () => {
it('should show tooltip arrow default', () => {
const { container } = render(
Tooltip content}
@@ -174,14 +163,12 @@ describe('rc-tooltip', () => {
,
);
fireEvent.click(container.querySelector('.target'));
- expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
- 'Tooltip content',
- );
+ expect(container.querySelector('.rc-tooltip-arrow')).toBeTruthy();
});
it('should show tooltip arrow when showArrow is true', () => {
const { container } = render(
Tooltip content}
@@ -191,14 +178,13 @@ describe('rc-tooltip', () => {
,
);
fireEvent.click(container.querySelector('.target'));
- expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
- 'Tooltip content',
- );
+ console.log(container.innerHTML);
+ expect(container.querySelector('.rc-tooltip-arrow')).toBeTruthy();
});
it('should hide tooltip arrow when showArrow is false', () => {
const { container } = render(
Tooltip content}
@@ -211,15 +197,13 @@ describe('rc-tooltip', () => {
expect(container.querySelector('.rc-tooltip').classList).not.toContain(
'rc-tooltip-show-arrow',
);
- expect(container.querySelector('.rc-tooltip-content').outerHTML).toBe(
- 'Tooltip content',
- );
+ expect(container.querySelector('.rc-tooltip-arrow')).toBeFalsy();
});
});
it('visible', () => {
const App = () => {
- const [open, setOpen] = useState(false);
+ const [open, setOpen] = React.useState(false);
return (
Tooltip content} visible={open}>
Date: Wed, 8 Feb 2023 15:12:17 +0800
Subject: [PATCH 24/41] 6.0.0
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index c452f86a..92451396 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rc-tooltip",
- "version": "5.3.1",
+ "version": "6.0.0",
"description": "React Tooltip",
"keywords": [
"react",
From eb23ffc8d936775921cf34e287a226ab03ebbe99 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E6=9C=BA=E5=99=A8=E4=BA=BA?=
Date: Thu, 9 Feb 2023 23:10:42 +0800
Subject: [PATCH 25/41] chore: fix missing def
---
src/Tooltip.tsx | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/Tooltip.tsx b/src/Tooltip.tsx
index bb836d3e..56dfdffe 100644
--- a/src/Tooltip.tsx
+++ b/src/Tooltip.tsx
@@ -1,4 +1,4 @@
-import type { TriggerProps } from '@rc-component/trigger';
+import type { TriggerProps, TriggerRef } from '@rc-component/trigger';
import Trigger from '@rc-component/trigger';
import type { ActionType, AlignType, AnimationType } from '@rc-component/trigger/lib/interface';
import * as React from 'react';
@@ -37,7 +37,11 @@ export interface TooltipProps extends Pick {
+export interface TooltipRef {
+ forceAlign: VoidFunction;
+}
+
+const Tooltip = (props: TooltipProps, ref: React.Ref) => {
const {
overlayClassName,
trigger = ['hover'],
@@ -64,8 +68,8 @@ const Tooltip = (props: TooltipProps, ref) => {
...restProps
} = props;
- const domRef = useRef(null);
- useImperativeHandle(ref, () => domRef.current);
+ const triggerRef = useRef(null);
+ useImperativeHandle(ref, () => triggerRef.current);
const extraProps = { ...restProps };
if ('visible' in props) {
@@ -86,7 +90,7 @@ const Tooltip = (props: TooltipProps, ref) => {
action={trigger}
builtinPlacements={placements}
popupPlacement={placement}
- ref={domRef}
+ ref={triggerRef}
popupAlign={align}
getPopupContainer={getTooltipContainer}
onPopupVisibleChange={onVisibleChange}
From c91ecc419e3f5c7b09797ea5c083242b2748efc2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E6=9C=BA=E5=99=A8=E4=BA=BA?=
Date: Thu, 9 Feb 2023 23:11:21 +0800
Subject: [PATCH 26/41] 6.0.1
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 92451396..40cd8254 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rc-tooltip",
- "version": "6.0.0",
+ "version": "6.0.1",
"description": "React Tooltip",
"keywords": [
"react",
From a6285d15a8e708d757490dfd67daa34634219212 Mon Sep 17 00:00:00 2001
From: Amumu
Date: Thu, 20 Apr 2023 10:21:53 +0800
Subject: [PATCH 27/41] feat: arrow support className (#449)
* feat: arrow support className
* chore: clear
---
README.md | 2 +-
package.json | 2 +-
src/Tooltip.tsx | 4 ++--
tests/index.test.tsx | 19 ++++++++++++++++++-
4 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 4522ff5d..450e1c86 100644
--- a/README.md
+++ b/README.md
@@ -170,7 +170,7 @@ Online examples:
name | -type | -default | -description | -
---|---|---|---|
overlayClassName | -string | -- | additional className added to popup overlay | -
trigger | -string | string[] | -['hover'] | -which actions cause tooltip shown. enum of 'hover','click','focus' | -
mouseEnterDelay | -number | -0 | -delay time to show when mouse enter.unit: s. | -
mouseLeaveDelay | -number | -0.1 | -delay time to hide when mouse leave.unit: s. | -
overlayStyle | -Object | -- | additional style of overlay node | -
prefixCls | -String | -rc-tooltip | -prefix class name | -
transitionName | -String|Object | -- | same as https://github.com/react-component/animate | -
onVisibleChange | -Function | -- | call when visible is changed | -
afterVisibleChange | -Function | -- | call after visible is changed | -
visible | -boolean | -- | whether tooltip is visible | -
defaultVisible | -boolean | -- | whether tooltip is visible initially | -
placement | -String | -- | one of ['left','right','top','bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight', 'rightTop', 'rightBottom', 'leftTop', 'leftBottom'] | -
align | -Object: alignConfig of [dom-align](https://github.com/yiminghe/dom-align) | -- | value will be merged into placement's config | -
onPopupAlign | -function(popupDomNode, align) | -- | callback when popup node is aligned | -
overlay | -React.Element | () => React.Element | -- | popup content | -
overlayInnerStyle | -Object | -- | set overlay inner style | -
showArrow | -boolean | { className?: string } | -true | -arrow visible | -
arrowContent | -React.Node | -null | -arrow content | -
getTooltipContainer | -function | -- | Function returning html node which will act as tooltip container. By default the tooltip attaches to the body. If you want to change the container, simply return a new element. | -
destroyTooltipOnHide | -boolean | { keepParent: boolean } | -false | -whether destroy tooltip when tooltip is hidden.In general, destroyTooltipOnHide will only remove itself instead of parent container of it. Parent container will be removed include tooltip when keepParent is true | -
id | -String | -- | Id which gets attached to the tooltip content. Can be used with aria-describedby to achieve Screenreader-Support. | -