|
1 |
| -import require$$0, { useReducer, useRef, useEffect, useState } from "react"; |
| 1 | +import { useReducer, useRef, useEffect, useState } from "react"; |
2 | 2 | import "idb-keyval";
|
3 | 3 | const encodedJs = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAodCl7cmV0dXJuIG5ldyBQcm9taXNlKChlLG4pPT57dC5vbmNvbXBsZXRlPXQub25zdWNjZXNzPSgpPT5lKHQucmVzdWx0KSx0Lm9uYWJvcnQ9dC5vbmVycm9yPSgpPT5uKHQuZXJyb3IpfSl9ZnVuY3Rpb24gTSh0LGUpe2NvbnN0IG49aW5kZXhlZERCLm9wZW4odCk7bi5vbnVwZ3JhZGVuZWVkZWQ9KCk9Pm4ucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKGUpO2NvbnN0IHI9cChuKTtyZXR1cm4oYSxjKT0+ci50aGVuKG89PmMoby50cmFuc2FjdGlvbihlLGEpLm9iamVjdFN0b3JlKGUpKSl9bGV0IHc7ZnVuY3Rpb24geSgpe3JldHVybiB3fHwodz1NKCJrZXl2YWwtc3RvcmUiLCJrZXl2YWwiKSksd31mdW5jdGlvbiBHKHQsZT15KCkpe3JldHVybiBlKCJyZWFkb25seSIsbj0+cChuLmdldCh0KSkpfWZ1bmN0aW9uIHgodCxlLG49eSgpKXtyZXR1cm4gbigicmVhZHdyaXRlIixyPT4oci5wdXQoZSx0KSxwKHIudHJhbnNhY3Rpb24pKSl9ZnVuY3Rpb24gUih0LGUsbj15KCkpe3JldHVybiBuKCJyZWFkd3JpdGUiLHI9Pm5ldyBQcm9taXNlKChhLGMpPT57ci5nZXQodCkub25zdWNjZXNzPWZ1bmN0aW9uKCl7dHJ5e3IucHV0KGUodGhpcy5yZXN1bHQpLHQpLGEocChyLnRyYW5zYWN0aW9uKSl9Y2F0Y2gobyl7YyhvKX19fSkpfWZ1bmN0aW9uIFUodCxlPXkoKSl7cmV0dXJuIGUoInJlYWR3cml0ZSIsbj0+KG4uZGVsZXRlKHQpLHAobi50cmFuc2FjdGlvbikpKX1mdW5jdGlvbiBOKCl7Y29uc3Qgbj1NKCJ1c2VzdG9yZS1kYiIsInVzZXN0b3JlLWRiIik7cmV0dXJue3JlbW92ZTppPT5VKGksbiksZ2V0RGF0YTppPT5HKGksbiksc2V0RGF0YTooaSxoKT0+eChpLGgsbiksdXBkYXRlRGF0YTooaSxoKT0+UihpLGgsbil9fWNvbnN0IF89KHQsZSk9PmU/dCtlPERhdGUubm93KCk6ITAsRD10PT50eXBlb2YgdD09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KHQpJiZ0IT09bnVsbCxBPSh0LGUsbj17fSk9PihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKHI9PntsZXQgYT1lP2UrIi4iK3I6cjtEKHRbcl0pP0EodFtyXSxhLG4pOm5bYV09QXJyYXkuaXNBcnJheSh0W3JdKT90W3JdLnNvcnQoKTp0W3JdfSksT2JqZWN0LmVudHJpZXMobikuc29ydCgpKSxUPXQ9PnQuZmxhdE1hcChlPT5EKGUpP0EoZSk6W2VdKS5zb3J0KCksST10PT57dmFyIGUsbjtyZXR1cm4obj0oZT10PT1udWxsP3ZvaWQgMDp0Lm1ldGhvZCk9PW51bGw/dm9pZCAwOmUudG9VcHBlckNhc2UoKSkhPW51bGw/bjoiR0VUIn0sTz0odCxlLG4pPT57bGV0IHI9QXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOnR5cGVvZiB0LGE9QXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOnR5cGVvZiBlO3JldHVybiByIT09YT8hMTpyIT09Im9iamVjdCImJnIhPT0iYXJyYXkiP3I9PT1hOm4mJnI9PT0ib2JqZWN0Ij9uLm1hcChjPT50W2NdPT09ZVtjXSkuZXZlcnkoYz0+Yyk6KHI9PT0iYXJyYXkiJiYodD1UKHQpLGU9VChlKSksIW4mJnI9PT0ib2JqZWN0IiYmKHQ9QSh0KSxlPUEoZSkpLEpTT04uc3RyaW5naWZ5KHQpPT09SlNPTi5zdHJpbmdpZnkoZSkpfSxDPXQ9PnQ/bmV3IEZ1bmN0aW9uKGByZXR1cm4gJHtkZWNvZGVVUkkodCl9YCkoKTplPT5lLHtyZW1vdmU6TCxnZXREYXRhOiQsc2V0RGF0YTpQLHVwZGF0ZURhdGE6Rn09TigpLGc9dD0+e2lmKCF0Lm9rfHx0LnN0YXR1cz09PTQwNCl0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIFN0YXR1czogJHt0LnN0YXR1c31gKTtpZih0LnN0YXR1cz09PTQwMyl0aHJvdyBuZXcgRXJyb3IoIlVuYXV0aG9yaXplZCEiKTtyZXR1cm4gdC5qc29uKCl9LG09dD0+e3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6dC5tZXNzYWdlfHwiVW5rbm93biBlcnJvciJ9KX07c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0PT57Y29uc3R7dHlwZTplfT10LmRhdGE7bGV0IG49bmV3IEFib3J0Q29udHJvbGxlcixyPW49PW51bGw/dm9pZCAwOm4uc2lnbmFsO2lmKGU9PT0iY2FuY2VsIiYmKG49PW51bGx8fG4uYWJvcnQoKSksZT09PSJwcmUtZmV0Y2giKXtsZXR7cHJlZmV0Y2g6YX09dC5kYXRhO2EuZm9yRWFjaCgoe21pZGRsZXdhcmU6Yyx1cmw6byxvcHRpb25zOmksbWF4QWdlOmh9KT0+e2xldCBTPUMoYyk7ZmV0Y2goby50b1N0cmluZygpLHtzaWduYWw6ciwuLi5pfSkudGhlbihnKS50aGVuKGQ9PntQKG8udG9TdHJpbmcoKSx7dGltZXN0YW1wOkRhdGUubm93KCksZGF0YTpTKGQpLG1heEFnZTpofSkudGhlbigoKT0+e2NvbnNvbGUubG9nKGBzYXZlZCBwcmVmZXRjaCAke299YCl9KS5jYXRjaCh1PT57Y29uc29sZS5sb2coYGVycm9yIHNhdmluZyBwcmVmZXRjaCAke299YCx1KX0pfSkuY2F0Y2goKCk9Pntjb25zb2xlLmluZm8oIm5vIGRhdGEgZm91bmQiKX0pfSl9aWYoZT09PSJmZXRjaCIpe2xldHtleGlzdGluZ0RhdGE6YSxwcmVmZXJVc2VDYWNoZTpjLHVybDpvLG9wdGlvbnM6aSxtYXhBZ2U6aCxtaWRkbGV3YXJlOlMsdXBkYXRlOmR9PXQuZGF0YTtjb25zdCB1PXM9PntzPUMoUykocyksKCFhfHwhTyhhLHMpKSYmKHNlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6IkRBVEEiLGRhdGE6c30pLFAoby50b1N0cmluZygpLHtkYXRhOnMsdGltZXN0YW1wOkRhdGUubm93KCksbWF4QWdlOmh9KS50aGVuKCgpPT57Y29uc29sZS5pbmZvKCJzYXZlZCBkYXRhIil9KS5jYXRjaCgoKT0+e2NvbnNvbGUuaW5mbygiY291bGRuJ3QgYWNjZXNzIGluZGV4ZWREQiB0byBzYXZlIGRhdGEiKX0pKSxzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJDT01QTEVURSJ9KX07bGV0IGw9SShpKTtsPT09IkRFTEVURSImJihzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJMT0FESU5HIn0pLEwoby50b1N0cmluZygpKSxmZXRjaChvLGkpLnRoZW4oKCk9PntkP2ZldGNoKGQudXJsLGQub3B0aW9ucykudGhlbihnKS50aGVuKHUpLmNhdGNoKHM9Pnt0aHJvdyBzfSk6c2VsZi5wb3N0TWVzc2FnZSh7dHlwZToiQ09NUExFVEUifSl9KS5jYXRjaChtKSksbD09PSJHRVQiJiYoJChvLnRvU3RyaW5nKCkpLnRoZW4ocz0+e2lmKCFzKXRocm93IG5ldyBFcnJvcigibm8gdmFsdWUgZm91bmQgaW4gZGIiKTtpZihfKHM9PW51bGw/dm9pZCAwOnMubWF4QWdlLHM9PW51bGw/dm9pZCAwOnMudGltZXN0YW1wKSl0aHJvdyBMKG8udG9TdHJpbmcoKSksbmV3IEVycm9yKCJkYXRhIGV4cGlyZWQiKTtsZXQgZj1PKHM9PW51bGw/dm9pZCAwOnMuZGF0YSxhKSxFPXt0eXBlOmM/IkRBVEEiOmY/IkNBQ0hFRCI6IlBSRV9MT0FEIixkYXRhOiFjJiZmfHxzPT1udWxsP3ZvaWQgMDpzLmRhdGF9O3NlbGYucG9zdE1lc3NhZ2UoRSl9KS5jYXRjaChzPT57Y29uc29sZS5pbmZvKHM9PW51bGw/dm9pZCAwOnMubWVzc2FnZSksYz0hMX0pLGN8fChzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJMT0FESU5HIn0pLGZldGNoKG8saT97Li4uaSxzaWduYWw6cn06e3NpZ25hbDpyfSkudGhlbihnKS50aGVuKHUpLmNhdGNoKG0pKSksKGw9PT0iUFVUInx8bD09PSJQT1NUIikmJihzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJMT0FESU5HIn0pLGZldGNoKG8saT97Li4uaSxzaWduYWw6cn06e3NpZ25hbDpyfSkudGhlbihnKS50aGVuKHM9PntkP2ZldGNoKGQudXJsLGQub3B0aW9ucykudGhlbihnKS50aGVuKHUpLmNhdGNoKGY9Pnt0aHJvdyBmfSk6RihvLnRvU3RyaW5nKCksZj0+e2xldCBFPURhdGUubm93KCksQj1EKHMpJiZEKGY9PW51bGw/dm9pZCAwOmYuZGF0YSk/ey4uLmYuZGF0YSwuLi5zfTpzO3JldHVybiBzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOmwsZGF0YTpCfSkse3RpbWVzdGFtcDpFLG1heEFnZTpoLGRhdGE6Qn19KS5jYXRjaCgoKT0+e2NvbnNvbGUuaW5mbygidXBkYXRlIHN0b3JlIGZhaWxlZCIpfSkuZmluYWxseSgoKT0+e3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6IkNPTVBMRVRFIn0pfSl9KS5jYXRjaChtKSl9fSl9KSgpOwo=";
|
4 | 4 | const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
|
@@ -37,149 +37,110 @@ function cleanupWorker(worker) {
|
37 | 37 | worker == null ? void 0 : worker.terminate();
|
38 | 38 | worker = void 0;
|
39 | 39 | }
|
40 |
| -const serializeFunction = (f2) => f2 ? encodeURI(f2.toString()) : void 0; |
| 40 | +const serializeFunction = (f) => f ? encodeURI(f.toString()) : void 0; |
41 | 41 | function useFetch() {
|
42 | 42 | const [state, dispatch] = useReducer(reducer, initialState);
|
43 | 43 | const workerRef = useRef();
|
44 |
| - const fetchWorker = async ({ |
45 |
| - url, |
46 |
| - options, |
47 |
| - maxAge = DAY, |
48 |
| - preferUseCache, |
49 |
| - middleware |
50 |
| - }) => { |
| 44 | + const fetchWorker = async ({ url, options, maxAge = DAY, preferUseCache, middleware }) => { |
51 | 45 | let worker = workerRef.current;
|
52 |
| - worker == null ? void 0 : worker.addEventListener("message", ({ |
53 |
| - data: { |
54 |
| - type, |
55 |
| - data |
56 |
| - } |
57 |
| - }) => { |
| 46 | + worker == null ? void 0 : worker.addEventListener("message", ({ data: { type, data } }) => { |
58 | 47 | switch (type) {
|
59 | 48 | case "LOADING":
|
60 |
| - dispatch({ |
61 |
| - type: "loading", |
62 |
| - loading: true |
63 |
| - }); |
| 49 | + dispatch({ type: "loading", loading: true }); |
64 | 50 | break;
|
65 | 51 | case "CACHED":
|
66 | 52 | case "COMPLETE":
|
67 |
| - dispatch({ |
68 |
| - type: "loading", |
69 |
| - loading: false |
70 |
| - }); |
| 53 | + dispatch({ type: "loading", loading: false }); |
71 | 54 | break;
|
72 | 55 | case "DATA":
|
73 |
| - dispatch({ |
74 |
| - type: "data", |
75 |
| - data |
76 |
| - }); |
| 56 | + dispatch({ type: "data", data }); |
77 | 57 | break;
|
78 | 58 | case "PRE_LOAD":
|
79 |
| - dispatch({ |
80 |
| - type: "pre-load", |
81 |
| - data |
82 |
| - }); |
| 59 | + dispatch({ type: "pre-load", data }); |
83 | 60 | break;
|
84 | 61 | default:
|
85 |
| - dispatch({ |
86 |
| - type: "error", |
87 |
| - error: new Error(type) |
88 |
| - }); |
| 62 | + dispatch({ type: "error", error: new Error(type) }); |
89 | 63 | break;
|
90 | 64 | }
|
91 | 65 | });
|
92 |
| - worker == null ? void 0 : worker.postMessage({ |
93 |
| - type: "fetch", |
94 |
| - url, |
95 |
| - options, |
96 |
| - existingData: state.data, |
97 |
| - middleware: serializeFunction(middleware), |
98 |
| - maxAge, |
99 |
| - preferUseCache |
100 |
| - }); |
| 66 | + worker == null ? void 0 : worker.postMessage({ type: "fetch", url, options, existingData: state.data, middleware: serializeFunction(middleware), maxAge, preferUseCache }); |
101 | 67 | };
|
102 | 68 | useEffect(() => {
|
103 | 69 | workerRef.current = new WorkerWrapper();
|
104 | 70 | return () => {
|
105 | 71 | cleanupWorker(workerRef.current);
|
106 | 72 | };
|
107 | 73 | }, []);
|
108 |
| - return { |
109 |
| - fetchWorker, |
110 |
| - ...state |
111 |
| - }; |
| 74 | + return { fetchWorker, ...state }; |
112 | 75 | }
|
113 | 76 | function usePreFetch(prefetch) {
|
114 | 77 | const worker = useRef(new WorkerWrapper());
|
115 | 78 | useEffect(() => {
|
116 | 79 | var _a;
|
117 | 80 | if (prefetch && worker.current) {
|
118 |
| - (_a = worker.current) == null ? void 0 : _a.postMessage({ |
119 |
| - type: "pre-fetch", |
120 |
| - prefetch: prefetch.map((p2) => ({ |
121 |
| - ...p2, |
122 |
| - middleware: serializeFunction(p2.middleware) |
123 |
| - })) |
124 |
| - }); |
| 81 | + (_a = worker.current) == null ? void 0 : _a.postMessage({ type: "pre-fetch", prefetch: prefetch.map((p) => ({ ...p, middleware: serializeFunction(p.middleware) })) }); |
125 | 82 | }
|
126 | 83 | }, [prefetch, worker.current]);
|
127 | 84 | }
|
128 |
| -var jsxRuntime = { exports: {} }; |
129 |
| -var reactJsxRuntime_production_min = {}; |
130 |
| -/** |
131 |
| - * @license React |
132 |
| - * react-jsx-runtime.production.min.js |
133 |
| - * |
134 |
| - * Copyright (c) Facebook, Inc. and its affiliates. |
135 |
| - * |
136 |
| - * This source code is licensed under the MIT license found in the |
137 |
| - * LICENSE file in the root directory of this source tree. |
138 |
| - */ |
139 |
| -var f = require$$0, k = Symbol.for("react.element"), l = Symbol.for("react.fragment"), m = Object.prototype.hasOwnProperty, n = f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p = { key: true, ref: true, __self: true, __source: true }; |
140 |
| -function q(c, a, g) { |
141 |
| - var b, d = {}, e = null, h = null; |
142 |
| - g !== void 0 && (e = "" + g); |
143 |
| - a.key !== void 0 && (e = "" + a.key); |
144 |
| - a.ref !== void 0 && (h = a.ref); |
145 |
| - for (b in a) |
146 |
| - m.call(a, b) && !p.hasOwnProperty(b) && (d[b] = a[b]); |
147 |
| - if (c && c.defaultProps) |
148 |
| - for (b in a = c.defaultProps, a) |
149 |
| - d[b] === void 0 && (d[b] = a[b]); |
150 |
| - return { $$typeof: k, type: c, key: e, ref: h, props: d, _owner: n.current }; |
151 |
| -} |
152 |
| -reactJsxRuntime_production_min.Fragment = l; |
153 |
| -reactJsxRuntime_production_min.jsx = q; |
154 |
| -reactJsxRuntime_production_min.jsxs = q; |
155 |
| -{ |
156 |
| - jsxRuntime.exports = reactJsxRuntime_production_min; |
157 |
| -} |
158 |
| -const jsx = jsxRuntime.exports.jsx; |
159 |
| -const FetchWithIntent = ({ |
160 |
| - children, |
161 |
| - prefetch, |
162 |
| - timeToExcecute = 1e3 |
| 85 | +const useEventListener = ({ |
| 86 | + eventName, |
| 87 | + handler, |
| 88 | + options = {} |
163 | 89 | }) => {
|
| 90 | + const savedHandler = useRef(); |
| 91 | + const removeHanlder = useRef(); |
| 92 | + const { capture, passive, once } = options; |
| 93 | + const element = window.document.body; |
| 94 | + useEffect(() => { |
| 95 | + savedHandler.current = handler; |
| 96 | + }, [handler]); |
| 97 | + useEffect(() => { |
| 98 | + const isSupported = element && element.addEventListener; |
| 99 | + if (!isSupported) { |
| 100 | + return; |
| 101 | + } |
| 102 | + const eventListener = (event) => savedHandler.current && savedHandler.current(event); |
| 103 | + const opts = { capture, passive, once }; |
| 104 | + element.addEventListener(eventName, eventListener, opts); |
| 105 | + const remove = () => element.removeEventListener(eventName, eventListener, opts); |
| 106 | + removeHanlder.current = remove; |
| 107 | + return remove; |
| 108 | + }, [eventName, element, capture, passive, once]); |
| 109 | + return [removeHanlder.current]; |
| 110 | +}; |
| 111 | +function useIntent({ expandTarget = 0, targetRef, prefetch, timeToExcecute = 1e3 }) { |
164 | 112 | const [prefetchConfig, setprefetchConfig] = useState();
|
| 113 | + const [once, setOnce] = useState(false); |
165 | 114 | const timer = useRef();
|
166 | 115 | usePreFetch(prefetchConfig);
|
167 |
| - const handleClearTimeout = () => { |
168 |
| - if (timer.current) { |
169 |
| - clearTimeout(timer.current); |
170 |
| - } |
171 |
| - }; |
172 |
| - const handleMouseEnter = () => { |
173 |
| - handleClearTimeout(); |
174 |
| - timer.current = setTimeout(() => { |
175 |
| - setprefetchConfig(prefetch); |
176 |
| - }, timeToExcecute); |
177 |
| - }; |
178 |
| - useEffect(() => handleClearTimeout, []); |
179 |
| - return /* @__PURE__ */ jsx("div", { |
180 |
| - onMouseEnter: handleMouseEnter, |
181 |
| - onMouseLeave: handleClearTimeout, |
182 |
| - children |
| 116 | + const [remove] = useEventListener({ |
| 117 | + eventName: "mousemove", |
| 118 | + handler: ({ clientX, clientY }) => { |
| 119 | + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l; |
| 120 | + let left = ((_b = (_a = targetRef.current) == null ? void 0 : _a.offsetLeft) != null ? _b : 0) - expandTarget; |
| 121 | + let right = ((_d = (_c = targetRef.current) == null ? void 0 : _c.offsetLeft) != null ? _d : 0) + ((_f = (_e = targetRef.current) == null ? void 0 : _e.offsetWidth) != null ? _f : 0) + expandTarget; |
| 122 | + let top = ((_h = (_g = targetRef.current) == null ? void 0 : _g.offsetTop) != null ? _h : 0) - expandTarget; |
| 123 | + let bottom = ((_j = (_i = targetRef.current) == null ? void 0 : _i.offsetTop) != null ? _j : 0) + ((_l = (_k = targetRef.current) == null ? void 0 : _k.offsetHeight) != null ? _l : 0) + expandTarget; |
| 124 | + if (clientX > left && clientX < right && clientY > top && clientY < bottom) { |
| 125 | + console.info("in target area"); |
| 126 | + if (!timer.current) { |
| 127 | + timer.current = setTimeout(() => { |
| 128 | + setprefetchConfig(prefetch); |
| 129 | + setOnce(true); |
| 130 | + remove && remove(); |
| 131 | + }, timeToExcecute); |
| 132 | + } |
| 133 | + } else { |
| 134 | + if (timer.current) { |
| 135 | + clearTimeout(timer.current); |
| 136 | + timer.current = void 0; |
| 137 | + } |
| 138 | + } |
| 139 | + }, |
| 140 | + options: { passive: true, once } |
183 | 141 | });
|
184 |
| -}; |
185 |
| -export { FetchWithIntent, useFetch, usePreFetch }; |
| 142 | + useEffect(() => () => { |
| 143 | + clearTimeout(timer.current); |
| 144 | + }, []); |
| 145 | +} |
| 146 | +export { useFetch, useIntent, usePreFetch }; |
0 commit comments