diff --git a/packages/chronicle/src/components/mdx/link.tsx b/packages/chronicle/src/components/mdx/link.tsx
index 18f30d6f..73cccc47 100644
--- a/packages/chronicle/src/components/mdx/link.tsx
+++ b/packages/chronicle/src/components/mdx/link.tsx
@@ -1,10 +1,12 @@
import { Link as ApsaraLink } from '@raystack/apsara';
-import type { ComponentProps } from 'react';
-import { Link as RouterLink } from 'react-router';
+import type { ComponentProps, MouseEvent } from 'react';
+import { useNavigate } from 'react-router';
type LinkProps = ComponentProps<'a'>;
-export function Link({ href, children, ...props }: LinkProps) {
+export function Link({ href, children, onClick: onClickProp, ...props }: LinkProps) {
+ const navigate = useNavigate();
+
if (!href) {
return {children};
}
@@ -12,14 +14,6 @@ export function Link({ href, children, ...props }: LinkProps) {
const isExternal = href.startsWith('http://') || href.startsWith('https://');
const isAnchor = href.startsWith('#');
- if (isAnchor) {
- return (
-
- {children}
-
- );
- }
-
if (isExternal) {
return (
+ {children}
+
+ );
+ }
+
+ const onClick = (e: MouseEvent) => {
+ if (
+ e.defaultPrevented ||
+ e.button !== 0 ||
+ e.metaKey ||
+ e.ctrlKey ||
+ e.shiftKey ||
+ e.altKey
+ ) {
+ return;
+ }
+
+ onClickProp?.(e);
+ if (e.defaultPrevented) return;
+
+ e.preventDefault();
+ navigate(href);
+ };
+
return (
-
+
{children}
-
+
);
}
diff --git a/packages/chronicle/src/pages/DocsPage.tsx b/packages/chronicle/src/pages/DocsPage.tsx
index 94a0206f..3ebb7928 100644
--- a/packages/chronicle/src/pages/DocsPage.tsx
+++ b/packages/chronicle/src/pages/DocsPage.tsx
@@ -30,7 +30,7 @@ export function DocsPage({ slug }: DocsPageProps) {
/>