@wordpress/block-editor
Version:
55 lines (48 loc) • 1.56 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createElement } from "@wordpress/element";
/**
* WordPress dependencies
*/
import { useContext, useMemo } from '@wordpress/element';
import { privateApis, __experimentalToolbarContext as ToolbarContext, ToolbarGroup, __experimentalUseSlotFills as useSlotFills } from '@wordpress/components';
import warning from '@wordpress/warning';
/**
* Internal dependencies
*/
import groups from './groups';
import { unlock } from '../../lock-unlock';
const {
ComponentsContext
} = unlock(privateApis);
export default function BlockControlsSlot({
group = 'default',
...props
}) {
const toolbarState = useContext(ToolbarContext);
const contextState = useContext(ComponentsContext);
const fillProps = useMemo(() => ({
forwardedContext: [[ToolbarContext.Provider, {
value: toolbarState
}], [ComponentsContext.Provider, {
value: contextState
}]]
}), [toolbarState, contextState]);
const Slot = groups[group]?.Slot;
const fills = useSlotFills(Slot?.__unstableName);
if (!Slot) {
typeof process !== "undefined" && process.env && process.env.NODE_ENV !== "production" ? warning(`Unknown BlockControls group "${group}" provided.`) : void 0;
return null;
}
if (!fills?.length) {
return null;
}
const slot = createElement(Slot, _extends({}, props, {
bubblesVirtually: true,
fillProps: fillProps
}));
if (group === 'default') {
return slot;
}
return createElement(ToolbarGroup, null, slot);
}
//# sourceMappingURL=slot.js.map