@primer/react
Version:
An implementation of GitHub's Primer Design System using React
198 lines (194 loc) • 4.97 kB
JavaScript
import { c } from 'react-compiler-runtime';
import { List } from './ActionList/List.js';
import { Item } from './ActionList/Item.js';
import { Divider } from './ActionList/Divider.js';
import 'react';
import { useProvidedStateOrCreate } from '../hooks/useProvidedStateOrCreate.js';
import { jsx } from 'react/jsx-runtime';
import { useProvidedRefOrCreate } from '../hooks/useProvidedRefOrCreate.js';
import { ButtonComponent } from '../Button/Button.js';
import { AnchoredOverlay } from '../AnchoredOverlay/AnchoredOverlay.js';
const ActionMenuItem = props => {
const $ = c(2);
let t0;
if ($[0] !== props) {
t0 = /*#__PURE__*/jsx(Item, {
role: "menuitem",
...props
});
$[0] = props;
$[1] = t0;
} else {
t0 = $[1];
}
return t0;
};
ActionMenuItem.displayName = 'ActionMenu.Item';
const defaultRenderAnchor = props => /*#__PURE__*/jsx(ButtonComponent, {
...props
});
defaultRenderAnchor.displayName = "defaultRenderAnchor";
const ActionMenuBase = t0 => {
const $ = c(35);
let anchorContent;
let externalAnchorRef;
let items;
let listProps;
let onAction;
let open;
let overlayProps;
let setOpen;
let t1;
if ($[0] !== t0) {
({
anchorContent,
renderAnchor: t1,
anchorRef: externalAnchorRef,
onAction,
open,
setOpen,
overlayProps,
items,
...listProps
} = t0);
$[0] = t0;
$[1] = anchorContent;
$[2] = externalAnchorRef;
$[3] = items;
$[4] = listProps;
$[5] = onAction;
$[6] = open;
$[7] = overlayProps;
$[8] = setOpen;
$[9] = t1;
} else {
anchorContent = $[1];
externalAnchorRef = $[2];
items = $[3];
listProps = $[4];
onAction = $[5];
open = $[6];
overlayProps = $[7];
setOpen = $[8];
t1 = $[9];
}
const renderAnchor = t1 === undefined ? defaultRenderAnchor : t1;
const [combinedOpenState, setCombinedOpenState] = useProvidedStateOrCreate(open, setOpen, false);
const anchorRef = useProvidedRefOrCreate(externalAnchorRef);
let t2;
if ($[10] !== setCombinedOpenState) {
t2 = () => setCombinedOpenState(true);
$[10] = setCombinedOpenState;
$[11] = t2;
} else {
t2 = $[11];
}
const onOpen = t2;
let t3;
if ($[12] !== setCombinedOpenState) {
t3 = () => setCombinedOpenState(false);
$[12] = setCombinedOpenState;
$[13] = t3;
} else {
t3 = $[13];
}
const onClose = t3;
let t4;
bb0: {
if (renderAnchor === null) {
t4 = null;
break bb0;
}
let t5;
if ($[14] !== anchorContent || $[15] !== renderAnchor) {
t5 = props => renderAnchor({
"aria-label": "menu",
children: anchorContent,
...props
});
$[14] = anchorContent;
$[15] = renderAnchor;
$[16] = t5;
} else {
t5 = $[16];
}
t4 = t5;
}
const renderMenuAnchor = t4;
let t5;
if ($[17] !== items || $[18] !== onAction || $[19] !== onClose) {
let t6;
if ($[21] !== onAction || $[22] !== onClose) {
t6 = item => ({
...item,
role: "menuitem",
onAction: (props_0, event) => {
var _item$onAction;
const actionCallback = (_item$onAction = item.onAction) !== null && _item$onAction !== void 0 ? _item$onAction : onAction;
actionCallback === null || actionCallback === void 0 ? void 0 : actionCallback(props_0, event);
if (!event.defaultPrevented) {
onClose();
}
}
});
$[21] = onAction;
$[22] = onClose;
$[23] = t6;
} else {
t6 = $[23];
}
t5 = items.map(t6);
$[17] = items;
$[18] = onAction;
$[19] = onClose;
$[20] = t5;
} else {
t5 = $[20];
}
const itemsToRender = t5;
let t6;
if ($[24] !== itemsToRender || $[25] !== listProps) {
t6 = /*#__PURE__*/jsx(List, {
...listProps,
role: "menu",
items: itemsToRender
});
$[24] = itemsToRender;
$[25] = listProps;
$[26] = t6;
} else {
t6 = $[26];
}
let t7;
if ($[27] !== anchorRef || $[28] !== combinedOpenState || $[29] !== onClose || $[30] !== onOpen || $[31] !== overlayProps || $[32] !== renderMenuAnchor || $[33] !== t6) {
t7 = /*#__PURE__*/jsx(AnchoredOverlay, {
renderAnchor: renderMenuAnchor,
anchorRef: anchorRef,
open: combinedOpenState,
onOpen: onOpen,
onClose: onClose,
overlayProps: overlayProps,
children: t6
});
$[27] = anchorRef;
$[28] = combinedOpenState;
$[29] = onClose;
$[30] = onOpen;
$[31] = overlayProps;
$[32] = renderMenuAnchor;
$[33] = t6;
$[34] = t7;
} else {
t7 = $[34];
}
return t7;
};
ActionMenuBase.displayName = 'ActionMenu';
/**
* @deprecated Use ActionMenu with composable API instead. See https://primer.style/react/ActionMenu for more details.
*/
const ActionMenu = Object.assign(ActionMenuBase, {
Divider,
Item: ActionMenuItem
});
export { ActionMenu };