feat(ui): expose typed overlay handles

This commit is contained in:
Maofeng
2026-09-28 23:13:39 +08:00
parent 1353dc3145
commit bca874fd30
3 changed files with 30 additions and 8 deletions
+14 -2
View File
@@ -4,11 +4,21 @@ import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog
import { cn } from "../lib/utils" import { cn } from "../lib/utils"
import { Button } from "./button" import { Button } from "./button"
function AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) { type AlertDialogHandle<Payload> = AlertDialogPrimitive.Handle<Payload>
function createAlertDialogHandle<Payload>(): AlertDialogHandle<Payload> {
return AlertDialogPrimitive.createHandle<Payload>()
}
function AlertDialog<Payload = unknown>({
...props
}: AlertDialogPrimitive.Root.Props<Payload>) {
return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} /> return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />
} }
function AlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) { function AlertDialogTrigger<Payload = unknown>({
...props
}: AlertDialogPrimitive.Trigger.Props<Payload>) {
return ( return (
<AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} /> <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />
) )
@@ -170,6 +180,7 @@ function AlertDialogCancel({
} }
export { export {
type AlertDialogHandle,
AlertDialog, AlertDialog,
AlertDialogAction, AlertDialogAction,
AlertDialogCancel, AlertDialogCancel,
@@ -182,4 +193,5 @@ export {
AlertDialogPortal, AlertDialogPortal,
AlertDialogTitle, AlertDialogTitle,
AlertDialogTrigger, AlertDialogTrigger,
createAlertDialogHandle,
} }
+6 -3
View File
@@ -30,13 +30,13 @@ function createDrawerHandle<Payload>(): DrawerHandle<Payload> {
return DrawerPrimitive.createHandle<Payload>() return DrawerPrimitive.createHandle<Payload>()
} }
function Drawer({ function Drawer<Payload = unknown>({
modal = true, modal = true,
showSwipeHandle = false, showSwipeHandle = false,
snapPoints, snapPoints,
swipeDirection = "down", swipeDirection = "down",
...props ...props
}: DrawerPrimitive.Root.Props & { }: DrawerPrimitive.Root.Props<Payload> & {
showSwipeHandle?: boolean showSwipeHandle?: boolean
}) { }) {
const hasSnapPoints = snapPoints != null && snapPoints.length > 0 const hasSnapPoints = snapPoints != null && snapPoints.length > 0
@@ -58,7 +58,9 @@ function Drawer({
) )
} }
function DrawerTrigger({ ...props }: DrawerPrimitive.Trigger.Props) { function DrawerTrigger<Payload = unknown>({
...props
}: DrawerPrimitive.Trigger.Props<Payload>) {
return <DrawerPrimitive.Trigger data-slot="drawer-trigger" {...props} /> return <DrawerPrimitive.Trigger data-slot="drawer-trigger" {...props} />
} }
@@ -217,6 +219,7 @@ function DrawerDescription({
} }
export { export {
type DrawerHandle,
Drawer, Drawer,
DrawerPortal, DrawerPortal,
DrawerOverlay, DrawerOverlay,
+10 -3
View File
@@ -8,15 +8,21 @@ import { Button } from "./button"
import { XIcon } from "./icon" import { XIcon } from "./icon"
import { LocalizedText, uiMessages } from "./i18n" import { LocalizedText, uiMessages } from "./i18n"
function createSheetHandle<Payload>(): SheetPrimitive.Handle<Payload> { type SheetHandle<Payload> = SheetPrimitive.Handle<Payload>
function createSheetHandle<Payload>(): SheetHandle<Payload> {
return SheetPrimitive.createHandle<Payload>() return SheetPrimitive.createHandle<Payload>()
} }
function Sheet({ ...props }: SheetPrimitive.Root.Props) { function Sheet<Payload = unknown>({
...props
}: SheetPrimitive.Root.Props<Payload>) {
return <SheetPrimitive.Root data-slot="sheet" {...props} /> return <SheetPrimitive.Root data-slot="sheet" {...props} />
} }
function SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) { function SheetTrigger<Payload = unknown>({
...props
}: SheetPrimitive.Trigger.Props<Payload>) {
return <SheetPrimitive.Trigger data-slot="sheet-trigger" {...props} /> return <SheetPrimitive.Trigger data-slot="sheet-trigger" {...props} />
} }
@@ -130,6 +136,7 @@ function SheetDescription({
} }
export { export {
type SheetHandle,
Sheet, Sheet,
SheetTrigger, SheetTrigger,
SheetClose, SheetClose,