@itwin/itwinui-react
Version:
A react component library for iTwinUI
43 lines (42 loc) • 1.37 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true,
});
function _export(target, all) {
for (var name in all)
Object.defineProperty(target, name, {
enumerable: true,
get: all[name],
});
}
_export(exports, {
Portal: function () {
return Portal;
},
PortalContainerContext: function () {
return PortalContainerContext;
},
usePortalTo: function () {
return usePortalTo;
},
});
const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react'));
const _reactdom = /*#__PURE__*/ _interop_require_wildcard._(
require('react-dom'),
);
const _useIsClient = require('../hooks/useIsClient.js');
const PortalContainerContext = _react.createContext(null);
const Portal = (props) => {
let { portal = true, children } = props;
let isClient = (0, _useIsClient.useIsClient)();
let portalTo = usePortalTo(portal);
if (!isClient) return null;
return portalTo ? _reactdom.createPortal(children, portalTo) : children;
};
const usePortalTo = (portal) => {
let portalContainer = _react.useContext(PortalContainerContext);
if ('boolean' == typeof portal) return portal ? portalContainer : null;
let portalTo = 'function' == typeof portal.to ? portal.to() : portal.to;
return portalTo ?? portalContainer;
};