diff --git a/e2e/fixtures/nav-link-item-with-hash/doc/index.mdx b/e2e/fixtures/nav-link-item-with-hash/doc/index.mdx
index 5437d9816..a432730c0 100644
--- a/e2e/fixtures/nav-link-item-with-hash/doc/index.mdx
+++ b/e2e/fixtures/nav-link-item-with-hash/doc/index.mdx
@@ -5,3 +5,4 @@ pageType: custom
contentA
contentB
+contentC
diff --git a/e2e/fixtures/nav-link-item-with-hash/rspress.config.ts b/e2e/fixtures/nav-link-item-with-hash/rspress.config.ts
index e5d9fa813..3f651736a 100644
--- a/e2e/fixtures/nav-link-item-with-hash/rspress.config.ts
+++ b/e2e/fixtures/nav-link-item-with-hash/rspress.config.ts
@@ -18,6 +18,11 @@ export default defineConfig({
link: '#pageB',
position: 'right',
},
+ {
+ text: 'PageC',
+ link: '#pageC',
+ position: 'right',
+ },
],
},
});
diff --git a/e2e/tests/nav-link-item-with-hash.test.ts b/e2e/tests/nav-link-item-with-hash.test.ts
index 1c5fdb540..e51fbee93 100644
--- a/e2e/tests/nav-link-item-with-hash.test.ts
+++ b/e2e/tests/nav-link-item-with-hash.test.ts
@@ -28,4 +28,18 @@ test.describe('basic test', async () => {
await page.locator('.rspress-nav-menu a').nth(1).click();
expect(page.url()).toContain('index#pageB');
});
+
+ test('Close the hamburger menu when clicking on an item in mobile view', async ({
+ page,
+ }) => {
+ await page.setViewportSize({ width: 375, height: 812 });
+
+ await page.goto(`http://localhost:${appPort}/`);
+
+ await page.locator('.rspress-mobile-hamburger').click();
+ await expect(page.locator('.rspress-nav-screen')).toBeVisible();
+
+ await page.getByRole('link', { name: 'PageC' }).click();
+ await expect(page.locator('.rspress-nav-screen')).not.toBeVisible();
+ });
});
diff --git a/packages/theme-default/src/components/Link/index.tsx b/packages/theme-default/src/components/Link/index.tsx
index d083d25fb..604cf392b 100644
--- a/packages/theme-default/src/components/Link/index.tsx
+++ b/packages/theme-default/src/components/Link/index.tsx
@@ -97,7 +97,10 @@ export function Link(props: LinkProps) {
className={`${styles.link} ${className} cursor-pointer`}
rel={rel}
target={target}
- onClick={handleNavigate}
+ onClick={event => {
+ rest.onClick?.(event);
+ handleNavigate(event);
+ }}
href={withBaseUrl}
>
{children}
diff --git a/packages/theme-default/src/components/Nav/NavMenuSingleItem.tsx b/packages/theme-default/src/components/Nav/NavMenuSingleItem.tsx
index e651c67b2..d4cc5111c 100644
--- a/packages/theme-default/src/components/Nav/NavMenuSingleItem.tsx
+++ b/packages/theme-default/src/components/Nav/NavMenuSingleItem.tsx
@@ -13,6 +13,7 @@ interface Props {
base: string;
rightIcon?: React.ReactNode;
compact?: boolean;
+ onClick?: () => void;
}
export function NavMenuSingleItem(
@@ -24,7 +25,7 @@ export function NavMenuSingleItem(
);
return (
-
+
- menuItem.position ?? DEFAULT_NAV_POSTION;
+ menuItem.position ?? DEFAULT_NAV_POSITION;
// eslint-disable-next-line react/prop-types
const leftMenuItems = menuItems.filter(item => getPosition(item) === 'left');
// eslint-disable-next-line react/prop-types
diff --git a/packages/theme-default/src/components/NavHambmger/index.tsx b/packages/theme-default/src/components/NavHambmger/index.tsx
index e0331ecd6..908a0833b 100644
--- a/packages/theme-default/src/components/NavHambmger/index.tsx
+++ b/packages/theme-default/src/components/NavHambmger/index.tsx
@@ -18,13 +18,14 @@ export function NavHamburger(props: Props) {