UNPKG

@fluent-windows/hooks

Version:
78 lines (66 loc) 3.29 kB
"use strict"; 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;