'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var react = require('react'); function useCombinedRefs() { for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) { refs[_key] = arguments[_key]; } return react.useMemo(() => node => { refs.forEach(ref => ref(node)); }, // eslint-disable-next-line react-hooks/exhaustive-deps refs); } // https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js const canUseDOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined'; function isWindow(element) { const elementString = Object.prototype.toString.call(element); return elementString === '[object Window]' || // In Electron context the Window object serializes to [object global] elementString === '[object global]'; } function isNode(node) { return 'nodeType' in node; } function getWindow(target) { var _target$ownerDocument, _target$ownerDocument2; if (!target) { return window; } if (isWindow(target)) { return target; } if (!isNode(target)) { return window; } return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window; } function isDocument(node) { const { Document } = getWindow(node); return node instanceof Document; } function isHTMLElement(node) { if (isWindow(node)) { return false; } return node instanceof getWindow(node).HTMLElement; } function isSVGElement(node) { return node instanceof getWindow(node).SVGElement; } function getOwnerDocument(target) { if (!target) { return document; } if (isWindow(target)) { return target.document; } if (!isNode(target)) { return document; } if (isDocument(target)) { return target; } if (isHTMLElement(target) || isSVGElement(target)) { return target.ownerDocument; } return document; } /** * A hook that resolves to useEffect on the server and useLayoutEffect on the client * @param callback {function} Callback function that is invoked when the dependencies of the hook change */ const useIsomorphicLayoutEffect = canUseDOM ? react.useLayoutEffect : react.useEffect; function useEvent(handler) { const handlerRef = react.useRef(handler); useIsomorphicLayoutEffect(() => { handlerRef.current = handler; }); return react.useCallback(function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return handlerRef.current == null ? void 0 : handlerRef.current(...args); }, []); } function useInterval() { const intervalRef = react.useRef(null); const set = react.useCallback((listener, duration) => { intervalRef.current = setInterval(listener, duration); }, []); const clear = react.useCallback(() => { if (intervalRef.current !== null) { clearInterval(intervalRef.current); intervalRef.current = null; } }, []); return [set, clear]; } function useLatestValue(value, dependencies) { if (dependencies === void 0) { dependencies = [value]; } const valueRef = react.useRef(value); useIsomorphicLayoutEffect(() => { if (valueRef.current !== value) { valueRef.current = value; } }, dependencies); return valueRef; } function useLazyMemo(callback, dependencies) { const valueRef = react.useRef(); return react.useMemo(() => { const newValue = callback(valueRef.current); valueRef.current = newValue; return newValue; }, // eslint-disable-next-line react-hooks/exhaustive-deps [...dependencies]); } function useNodeRef(onChange) { const onChangeHandler = useEvent(onChange); const node = react.useRef(null); const setNodeRef = react.useCallback(element => { if (element !== node.current) { onChangeHandler == null ? void 0 : onChangeHandler(element, node.current); } node.current = element; }, //eslint-disable-next-line []); return [node, setNodeRef]; } function usePrevious(value) { const ref = react.useRef(); react.useEffect(() => { ref.current = value; }, [value]); return ref.current; } let ids = {}; function useUniqueId(prefix, value) { return react.useMemo(() => { if (value) { return value; } const id = ids[prefix] == null ? 0 : ids[prefix] + 1; ids[prefix] = id; return prefix + "-" + id; }, [prefix, value]); } function createAdjustmentFn(modifier) { return function (object) { for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { adjustments[_key - 1] = arguments[_key]; } return adjustments.reduce((accumulator, adjustment) => { const entries = Object.entries(adjustment); for (const [key, valueAdjustment] of entries) { const value = accumulator[key]; if (value != null) { accumulator[key] = value + modifier * valueAdjustment; } } return accumulator; }, { ...object }); }; } const add = /*#__PURE__*/createAdjustmentFn(1); const subtract = /*#__PURE__*/createAdjustmentFn(-1); function hasViewportRelativeCoordinates(event) { return 'clientX' in event && 'clientY' in event; } function isKeyboardEvent(event) { if (!event) { return false; } const { KeyboardEvent } = getWindow(event.target); return KeyboardEvent && event instanceof KeyboardEvent; } function isTouchEvent(event) { if (!event) { return false; } const { TouchEvent } = getWindow(event.target); return TouchEvent && event instanceof TouchEvent; } /** * Returns the normalized x and y coordinates for mouse and touch events. */ function getEventCoordinates(event) { if (isTouchEvent(event)) { if (event.touches && event.touches.length) { const { clientX: x, clientY: y } = event.touches[0]; return { x, y }; } else if (event.changedTouches && event.changedTouches.length) { const { clientX: x, clientY: y } = event.changedTouches[0]; return { x, y }; } } if (hasViewportRelativeCoordinates(event)) { return { x: event.clientX, y: event.clientY }; } return null; } const CSS = /*#__PURE__*/Object.freeze({ Translate: { toString(transform) { if (!transform) { return; } const { x, y } = transform; return "translate3d(" + (x ? Math.round(x) : 0) + "px, " + (y ? Math.round(y) : 0) + "px, 0)"; } }, Scale: { toString(transform) { if (!transform) { return; } const { scaleX, scaleY } = transform; return "scaleX(" + scaleX + ") scaleY(" + scaleY + ")"; } }, Transform: { toString(transform) { if (!transform) { return; } return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(' '); } }, Transition: { toString(_ref) { let { property, duration, easing } = _ref; return property + " " + duration + "ms " + easing; } } }); const SELECTOR = 'a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]'; function findFirstFocusableNode(element) { if (element.matches(SELECTOR)) { return element; } return element.querySelector(SELECTOR); } exports.CSS = CSS; exports.add = add; exports.canUseDOM = canUseDOM; exports.findFirstFocusableNode = findFirstFocusableNode; exports.getEventCoordinates = getEventCoordinates; exports.getOwnerDocument = getOwnerDocument; exports.getWindow = getWindow; exports.hasViewportRelativeCoordinates = hasViewportRelativeCoordinates; exports.isDocument = isDocument; exports.isHTMLElement = isHTMLElement; exports.isKeyboardEvent = isKeyboardEvent; exports.isNode = isNode; exports.isSVGElement = isSVGElement; exports.isTouchEvent = isTouchEvent; exports.isWindow = isWindow; exports.subtract = subtract; exports.useCombinedRefs = useCombinedRefs; exports.useEvent = useEvent; exports.useInterval = useInterval; exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect; exports.useLatestValue = useLatestValue; exports.useLazyMemo = useLazyMemo; exports.useNodeRef = useNodeRef; exports.usePrevious = usePrevious; exports.useUniqueId = useUniqueId; //# sourceMappingURL=utilities.cjs.development.js.map