UNPKG

1.19 kBPlain TextView Raw
1import * as React from "react";
2import { createComponent } from "reakit-system/createComponent";
3import { createHook } from "reakit-system/createHook";
4import { shallowEqual } from "reakit-utils/shallowEqual";
5import { ROLE_KEYS } from "./__keys";
6
7export type RoleOptions = {
8 /**
9 * Options passed to `reakit-system-*`
10 * @private
11 */
12 unstable_system?: any;
13};
14
15export type RoleHTMLProps = React.HTMLAttributes<any> &
16 React.RefAttributes<any> & {
17 /**
18 * Function returned by the hook to wrap the element to which html props
19 * will be passed.
20 */
21 wrapElement?: (element: React.ReactNode) => React.ReactNode;
22 };
23
24export type RoleProps = RoleOptions & RoleHTMLProps;
25
26export const useRole = createHook<RoleOptions, RoleHTMLProps>({
27 name: "Role",
28 keys: ROLE_KEYS,
29 propsAreEqual(prev, next) {
30 const { unstable_system: prevSystem, ...prevProps } = prev;
31 const { unstable_system: nextSystem, ...nextProps } = next;
32 if (prevSystem !== nextSystem && !shallowEqual(prevSystem, nextSystem)) {
33 return false;
34 }
35 return shallowEqual(prevProps, nextProps);
36 },
37});
38
39export const Role = createComponent({
40 as: "div",
41 useHook: useRole,
42});