diff --git a/.gitignore b/.gitignore
index 0497e3e..fe8ecda 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,4 +44,5 @@ es/
.dumi/tmp
.dumi/tmp-production
-bun.lockb
\ No newline at end of file
+bun.lockb
+.vscode
\ No newline at end of file
diff --git a/assets/preview.less b/assets/preview.less
index dc7eff3..e60e906 100644
--- a/assets/preview.less
+++ b/assets/preview.less
@@ -5,6 +5,7 @@
overflow: hidden;
user-select: none;
inset: 0;
+ z-index: 1055;
&-mask {
position: absolute;
diff --git a/docs/demo/nested.md b/docs/demo/nested.md
new file mode 100644
index 0000000..cbe3076
--- /dev/null
+++ b/docs/demo/nested.md
@@ -0,0 +1,8 @@
+---
+title: nested
+nav:
+ title: Demo
+ path: /demo
+---
+
+
\ No newline at end of file
diff --git a/docs/examples/nested.tsx b/docs/examples/nested.tsx
new file mode 100644
index 0000000..9b581c1
--- /dev/null
+++ b/docs/examples/nested.tsx
@@ -0,0 +1,71 @@
+import React, { useState } from 'react';
+import Dialog from '@rc-component/dialog';
+import Image from '@rc-component/image';
+import '@rc-component/dialog/assets/index.css';
+import '../../assets/index.less';
+
+const App: React.FC = () => {
+ const [show, setShow] = useState(false);
+ return (
+ <>
+
+
+ >
+ );
+};
+
+export default App;
diff --git a/package.json b/package.json
index 7ca72ee..9d98386 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,7 @@
},
"dependencies": {
"@rc-component/motion": "^1.0.0",
- "@rc-component/portal": "^2.0.0",
+ "@rc-component/portal": "^2.1.2",
"@rc-component/util": "^1.3.0",
"clsx": "^2.1.1"
},
@@ -49,6 +49,7 @@
"@ant-design/icons": "^5.0.1",
"@rc-component/father-plugin": "^2.0.2",
"@rc-component/np": "^1.0.0",
+ "@rc-component/dialog": "^1.7.0",
"@testing-library/jest-dom": "^6.4.0",
"@testing-library/react": "^15.0.6",
"@types/jest": "^30.0.0",
diff --git a/src/Preview/index.tsx b/src/Preview/index.tsx
index 2aab1c8..bd4f67c 100644
--- a/src/Preview/index.tsx
+++ b/src/Preview/index.tsx
@@ -332,10 +332,6 @@ const Preview: React.FC = props => {
if (open) {
const { keyCode } = event;
- if (keyCode === KeyCode.ESC) {
- onClose?.();
- }
-
if (showLeftOrRightSwitches) {
if (keyCode === KeyCode.LEFT) {
onActive(-1);
@@ -380,6 +376,12 @@ const Preview: React.FC = props => {
}
}, [open]);
+ const onEsc: PortalProps['onEsc'] = ({ top }) => {
+ if (top) {
+ onClose?.();
+ }
+ };
+
// ========================== Render ==========================
const bodyStyle: React.CSSProperties = {
...styles.body,
@@ -389,7 +391,13 @@ const Preview: React.FC = props => {
}
return (
-
+
{
const MockPreview = (props: any) => {
@@ -1052,6 +1053,25 @@ describe('Preview', () => {
expect(afterOpenChange).toHaveBeenCalledTimes(2);
});
+ it('Esc closes preview then modal', () => {
+ const onClose = jest.fn();
+
+ const { baseElement, getByRole } = render(
+ ,
+ );
+
+ fireEvent.click(getByRole('img'));
+ expect(baseElement.querySelector('.rc-image-preview')).toBeTruthy();
+
+ fireEvent.keyDown(window, { key: 'Escape' });
+ expect(baseElement.querySelector('.rc-image-preview')).toBeFalsy();
+
+ fireEvent.keyDown(window, { key: 'Escape' });
+ expect(onClose).toHaveBeenCalled();
+ });
+
it('not modify preview image size', () => {
render(