@fluent-windows/hooks
Version:
Fluent-Windows React hooks.
78 lines (66 loc) • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var React = _interopRequireWildcard(require("react"));
var _useGlobal = _interopRequireDefault(require("../useGlobal"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/**
* Create [Reveal Highlight](https://docs.microsoft.com/en-us/windows/uwp/design/style/reveal) Effects.
*
* Demo
* import { useReveal } from '@fluent-windows/hooks'
*
* const [RevealWrapper] = useReveal(66)
*
* <RevealWrapper><div>1</div></RevealWrapper>
* <RevealWrapper><div>2</div></RevealWrapper>
* <RevealWrapper><div>3</div></RevealWrapper>
*/
var global = (0, _useGlobal["default"])();
var createRevealWrapper = function createRevealWrapper(gradientSize, lightColor) {
var RevealWrapper = function RevealWrapper(_ref) {
var children = _ref.children;
var ref = React.useRef();
var listener = React.useCallback(function (e) {
global.requestAnimationFrame(function () {
var rect = ref.current && ref.current.getBoundingClientRect();
if (ref.current && rect) {
var x = e.pageX - rect.left - global.scrollX;
var y = e.pageY - rect.top - global.scrollY;
ref.current.style.setProperty('--x', x + 'px');
ref.current.style.setProperty('--y', y + 'px');
}
});
}, [ref]);
React.useEffect(function () {
global.addEventListener('mousemove', listener);
return function () {
global.removeEventListener('mousemove', listener);
};
}, [listener]);
var gradient = React.useMemo(function () {
return "radial-gradient(circle ".concat(gradientSize, "px at var(--x) var(--y), ").concat(lightColor, ", rgba(255,255,255,0))");
}, []);
return React.createElement("div", {
ref: ref,
style: {
background: gradient,
margin: 1,
padding: 1
}
}, React.cloneElement(children));
};
return RevealWrapper;
};
function useReveal() {
var gradientSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 80;
var lightColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'rgba(160, 160, 160, 1)';
var RevealWrapper = createRevealWrapper(gradientSize, lightColor);
return [RevealWrapper];
}
var _default = useReveal;
exports["default"] = _default;