diff --git a/bun.lock b/bun.lock index 1e1496f6..2c3e1828 100644 --- a/bun.lock +++ b/bun.lock @@ -64,7 +64,7 @@ "wouter": "*", }, "peerDependencies": { - "preact": "^10.0.0", + "preact": "^10.0.0 || ^11.0.0-0", }, }, }, diff --git a/packages/wouter-preact/package.json b/packages/wouter-preact/package.json index 0df21c98..f4be2d79 100644 --- a/packages/wouter-preact/package.json +++ b/packages/wouter-preact/package.json @@ -63,7 +63,7 @@ }, "license": "Unlicense", "peerDependencies": { - "preact": "^10.0.0" + "preact": "^10.0.0 || ^11.0.0-0" }, "dependencies": { "regexparam": "^3.0.0" diff --git a/packages/wouter-preact/types/index.d.ts b/packages/wouter-preact/types/index.d.ts index d615e7fb..e6100798 100644 --- a/packages/wouter-preact/types/index.d.ts +++ b/packages/wouter-preact/types/index.d.ts @@ -6,6 +6,7 @@ import { FunctionComponent, ComponentType, ComponentChildren, + Ref, } from "preact"; import { @@ -105,16 +106,30 @@ type AsChildProps = | ({ asChild?: false } & DefaultElementProps) | ({ asChild: true } & ComponentProps); -type HTMLLinkAttributes = Omit & { +// Preact 11 no longer exposes DOM attribute and event handler types on the +// `JSX` namespace, so derive them in a way that works with Preact 10 and 11. +type HTMLLinkAttributes = Omit< + JSX.IntrinsicElements["a"], + "className" | "ref" +> & { className?: string | undefined | ((isActive: boolean) => string | undefined); + ref?: Ref; }; +type ElementMouseEventHandler = { + bivarianceHack( + event: Omit & { + readonly currentTarget: Element; + } + ): void; +}["bivarianceHack"]; + export type LinkProps = NavigationalProps & AsChildProps< Omit & { children: ComponentChildren; - onClick?: JSX.MouseEventHandler; + onClick?: ElementMouseEventHandler; }, HTMLLinkAttributes >;