sendou.ink/app/components/elements/Popover.tsx
Kalle cb8669acc3
New calendar UI, more filters & persisted filters (#2318)
* 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
2025-05-24 17:13:30 +03:00

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>
);
}