react-decoy
Version:
<p align="center" role="heading" aria-level="1"><picture><source srcset="https://codeberg.org/colingourlay/react-decoy/raw/branch/master/assets/logo-block.svg" media="(max-width: 640px)" /><img title="React Decoy" alt="React Decoy" src="https://codeberg.o
87 lines (82 loc) • 2.56 kB
JavaScript
import React, { useRef, useLayoutEffect } from 'react';
function activeLayoutEffect(el) {
if (!el) {
return;
}
var cloneEl = el.cloneNode(true);
var parentEl = el.parentElement;
if (parentEl) {
parentEl.insertBefore(cloneEl, el);
parentEl.removeChild(el);
}
return function () {
if (parentEl) {
parentEl.insertBefore(el, cloneEl);
parentEl.removeChild(cloneEl);
}
};
}
function Decoy(_ref) {
var _ref$active = _ref.active,
active = _ref$active === void 0 ? false : _ref$active,
_ref$as = _ref.as,
as = _ref$as === void 0 ? 'div' : _ref$as,
children = _ref.children;
var ref = useRef();
useLayoutEffect(function () {
if (!active) {
return;
}
return activeLayoutEffect(ref.current);
}, [active]);
return React.createElement(as, {
children: children,
ref: ref
});
}
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (-1 !== e.indexOf(n)) continue;
t[n] = r[n];
}
return t;
}
function _toPrimitive(t, r) {
if ("object" != typeof t || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != typeof i) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == typeof i ? i : i + "";
}
function getDisplayName(Component) {
return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Component';
}
var withDecoy = function withDecoy(Component, _temp) {
var _ref = _temp === void 0 ? {} : _temp,
_ref$activePropName = _ref.activePropName,
activePropName = _ref$activePropName === void 0 ? 'decoy' : _ref$activePropName,
_ref$asPropName = _ref.asPropName,
asPropName = _ref$asPropName === void 0 ? 'decoy-as' : _ref$asPropName;
function WithDecoy(props) {
var active = props[activePropName],
as = props[asPropName],
componentProps = _objectWithoutPropertiesLoose(props, [activePropName, asPropName].map(_toPropertyKey));
return React.createElement(Decoy, {
active: active,
as: as
}, React.createElement(Component, Object.assign({}, componentProps)));
}
WithDecoy.displayName = "withDecoy(" + getDisplayName(Component) + ")";
return WithDecoy;
};
export { Decoy, withDecoy };
//# sourceMappingURL=react-decoy.esm.js.map