From 123fdb07f6d9fcdcdb4ebd425032b8022cd5b4d8 Mon Sep 17 00:00:00 2001
From: LuckyFBB <976060700@qq.com>
Date: Mon, 29 Jun 2026 16:28:38 +0800
Subject: [PATCH] feat(popover): add popover component with scrollable content
---
src/index.ts | 1 +
src/popover/__tests__/index.test.tsx | 57 ++++++++++++++++++++++++++++
src/popover/demos/basic.tsx | 11 ++++++
src/popover/demos/customHeight.tsx | 20 ++++++++++
src/popover/demos/maxWidth.tsx | 14 +++++++
src/popover/demos/noTitle.tsx | 11 ++++++
src/popover/demos/scroll.tsx | 15 ++++++++
src/popover/index.md | 27 +++++++++++++
src/popover/index.scss | 24 ++++++++++++
src/popover/index.tsx | 13 +++++++
10 files changed, 193 insertions(+)
create mode 100644 src/popover/__tests__/index.test.tsx
create mode 100644 src/popover/demos/basic.tsx
create mode 100644 src/popover/demos/customHeight.tsx
create mode 100644 src/popover/demos/maxWidth.tsx
create mode 100644 src/popover/demos/noTitle.tsx
create mode 100644 src/popover/demos/scroll.tsx
create mode 100644 src/popover/index.md
create mode 100644 src/popover/index.scss
create mode 100644 src/popover/index.tsx
diff --git a/src/index.ts b/src/index.ts
index a4df49c0d..6ec201249 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -32,6 +32,7 @@ export { default as MarkdownRender } from './markdownRender';
export { default as Modal } from './modal';
export { default as NotFound } from './notFound';
export { default as Popconfirm } from './popConfirm';
+export { default as Popover } from './popover';
export { default as ProgressBar } from './progressBar';
export { default as ProgressLine } from './progressLine';
export { default as Resize } from './resize';
diff --git a/src/popover/__tests__/index.test.tsx b/src/popover/__tests__/index.test.tsx
new file mode 100644
index 000000000..c306d84b6
--- /dev/null
+++ b/src/popover/__tests__/index.test.tsx
@@ -0,0 +1,57 @@
+import React from 'react';
+import { render, screen, waitFor } from '@testing-library/react';
+import '@testing-library/jest-dom/extend-expect';
+
+import Popover from '..';
+
+describe('Popover', () => {
+ it('should render popover with default overlay className', async () => {
+ render(
+
+
+
+
+
+
+## API
+
+### Popover
+
+Popover 组件支持 antd Popover 组件的所有属性,详见 [Ant Design Popover API](https://ant.design/components/popover-cn/#API)。
diff --git a/src/popover/index.scss b/src/popover/index.scss
new file mode 100644
index 000000000..a6b2eadce
--- /dev/null
+++ b/src/popover/index.scss
@@ -0,0 +1,24 @@
+.dtc-popover {
+ min-width: 220px;
+ max-width: 400px;
+ .ant-popover-inner {
+ border-radius: 4px;
+ }
+ .ant-popover-title {
+ padding: 16px 16px 0;
+ border-bottom: 0;
+ font-weight: 500;
+ font-size: 14px;
+ color: #3D446E;
+ }
+ .ant-popover-inner-content {
+ padding: 16px;
+ max-height: var(--max-height, 400px);
+ overflow-y: auto;
+ font-size: 12px;
+ color: #8B8FA8;
+ }
+ .ant-popover-title + .ant-popover-inner-content {
+ padding-top: 4px;
+ }
+}
diff --git a/src/popover/index.tsx b/src/popover/index.tsx
new file mode 100644
index 000000000..677c89a1c
--- /dev/null
+++ b/src/popover/index.tsx
@@ -0,0 +1,13 @@
+import React from 'react';
+import { Popover as AntdPopover, PopoverProps as AntdPopoverProps } from 'antd';
+import classNames from 'classnames';
+
+import './index.scss';
+
+export type PopoverProps = AntdPopoverProps;
+
+const Popover = ({ overlayClassName, ...rest }: PopoverProps) => {
+ return