UNPKG

1.19 kBPlain TextView Raw
1import { createComponent } from "reakit-system/createComponent";
2import { createHook } from "reakit-system/createHook";
3import { useForkRef } from "reakit-utils/useForkRef";
4import {
5 DialogDisclosureOptions,
6 DialogDisclosureHTMLProps,
7 useDialogDisclosure,
8} from "../Dialog/DialogDisclosure";
9import { PopoverStateReturn } from "./PopoverState";
10import { POPOVER_DISCLOSURE_KEYS } from "./__keys";
11
12export type PopoverDisclosureOptions = DialogDisclosureOptions &
13 Pick<Partial<PopoverStateReturn>, "unstable_referenceRef">;
14
15export type PopoverDisclosureHTMLProps = DialogDisclosureHTMLProps;
16
17export type PopoverDisclosureProps = PopoverDisclosureOptions &
18 PopoverDisclosureHTMLProps;
19
20export const usePopoverDisclosure = createHook<
21 PopoverDisclosureOptions,
22 PopoverDisclosureHTMLProps
23>({
24 name: "PopoverDisclosure",
25 compose: useDialogDisclosure,
26 keys: POPOVER_DISCLOSURE_KEYS,
27
28 useProps(options, { ref: htmlRef, ...htmlProps }) {
29 return {
30 ref: useForkRef(options.unstable_referenceRef, htmlRef),
31 ...htmlProps,
32 };
33 },
34});
35
36export const PopoverDisclosure = createComponent({
37 as: "button",
38 memo: true,
39 useHook: usePopoverDisclosure,
40});