mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-24 06:58:10 -05:00
* Add types * Delete stuff * wip * findAllBetweenTwoTimestamps refactor * wip * wip * wip * wip * wip * wip * wip * Fixes * wip * wip * Fix InfoPopover button styling * wip * wip * wip * Merge branch 'rewrite' into new-calendar * wip * wip * wip * wip * Rename myform -> sendouform * wip * wip * wip * wip * wip * wip * wip * wip * wip * rename * fix test
50 lines
1.0 KiB
TypeScript
50 lines
1.0 KiB
TypeScript
import clsx from "clsx";
|
|
import {
|
|
Dialog,
|
|
DialogTrigger,
|
|
Popover,
|
|
type PopoverProps,
|
|
} from "react-aria-components";
|
|
|
|
/**
|
|
* A reusable popover component that wraps around a trigger element (SendouButton or Button from React Aria Components library).
|
|
* Supports controlled and uncontrolled open states.
|
|
*
|
|
* @example
|
|
* ```tsx
|
|
* <SendouPopover
|
|
* trigger={<SendouButton>Click me</SendouButton>}
|
|
* >
|
|
* Popover content goes here!
|
|
* </SendouPopover>
|
|
* ```
|
|
*/
|
|
export function SendouPopover({
|
|
children,
|
|
trigger,
|
|
popoverClassName,
|
|
placement,
|
|
onOpenChange,
|
|
isOpen,
|
|
}: {
|
|
children: React.ReactNode;
|
|
trigger: React.ReactNode;
|
|
popoverClassName?: string;
|
|
placement?: PopoverProps["placement"];
|
|
onOpenChange?: PopoverProps["onOpenChange"];
|
|
isOpen?: boolean;
|
|
}) {
|
|
return (
|
|
<DialogTrigger isOpen={isOpen}>
|
|
{trigger}
|
|
<Popover
|
|
className={clsx("sendou-popover-content", popoverClassName)}
|
|
placement={placement}
|
|
onOpenChange={onOpenChange}
|
|
>
|
|
<Dialog>{children}</Dialog>
|
|
</Popover>
|
|
</DialogTrigger>
|
|
);
|
|
}
|