@koine/react 2.0.0-beta.76 → 2.0.0-beta.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/FaviconTags.cjs.d.ts +2 -0
  2. package/FaviconTags.cjs.default.js +1 -0
  3. package/FaviconTags.cjs.js +12 -0
  4. package/FaviconTags.cjs.mjs +2 -0
  5. package/FaviconTags.esm.js +7 -0
  6. package/Meta.cjs.d.ts +2 -0
  7. package/Meta.cjs.default.js +1 -0
  8. package/Meta.cjs.js +12 -0
  9. package/Meta.cjs.mjs +2 -0
  10. package/Meta.esm.js +7 -0
  11. package/NoJs.cjs.d.ts +2 -0
  12. package/NoJs.cjs.default.js +1 -0
  13. package/NoJs.cjs.js +14 -0
  14. package/NoJs.cjs.mjs +2 -0
  15. package/NoJs.esm.js +9 -0
  16. package/Polymorphic.cjs.d.ts +1 -0
  17. package/Polymorphic.cjs.default.js +1 -0
  18. package/Polymorphic.cjs.js +2 -0
  19. package/Polymorphic.cjs.mjs +2 -0
  20. package/Polymorphic.esm.js +1 -0
  21. package/README.md +1 -0
  22. package/calendar.cjs.d.ts +1 -0
  23. package/calendar.cjs.default.js +1 -0
  24. package/calendar.cjs.js +588 -0
  25. package/calendar.cjs.mjs +2 -0
  26. package/calendar.esm.js +561 -0
  27. package/classed.cjs.d.ts +2 -0
  28. package/classed.cjs.default.js +1 -0
  29. package/classed.cjs.js +48 -0
  30. package/classed.cjs.mjs +2 -0
  31. package/classed.d.ts +1 -1
  32. package/classed.esm.js +43 -0
  33. package/createUseMediaQueryWidth.cjs.d.ts +2 -0
  34. package/createUseMediaQueryWidth.cjs.default.js +1 -0
  35. package/createUseMediaQueryWidth.cjs.js +45 -0
  36. package/createUseMediaQueryWidth.cjs.mjs +2 -0
  37. package/createUseMediaQueryWidth.esm.js +40 -0
  38. package/extendComponent.cjs.d.ts +2 -0
  39. package/extendComponent.cjs.default.js +1 -0
  40. package/extendComponent.cjs.js +16 -0
  41. package/extendComponent.cjs.mjs +2 -0
  42. package/extendComponent.esm.js +11 -0
  43. package/forms.cjs.d.ts +1 -0
  44. package/forms.cjs.default.js +1 -0
  45. package/forms.cjs.js +37 -0
  46. package/forms.cjs.mjs +2 -0
  47. package/forms.esm.js +32 -0
  48. package/index.cjs.d.ts +1 -0
  49. package/index.cjs.default.js +1 -0
  50. package/index.cjs.js +63 -0
  51. package/index.cjs.mjs +2 -0
  52. package/index.esm.js +30 -0
  53. package/mergeRefs.cjs.d.ts +2 -0
  54. package/mergeRefs.cjs.default.js +1 -0
  55. package/mergeRefs.cjs.js +19 -0
  56. package/mergeRefs.cjs.mjs +2 -0
  57. package/mergeRefs.esm.js +14 -0
  58. package/package.json +110 -122
  59. package/types.cjs.d.ts +1 -0
  60. package/types.cjs.default.js +1 -0
  61. package/types.cjs.js +2 -0
  62. package/types.cjs.mjs +2 -0
  63. package/types.esm.js +1 -0
  64. package/useAsyncFn.cjs.d.ts +2 -0
  65. package/useAsyncFn.cjs.default.js +1 -0
  66. package/useAsyncFn.cjs.js +33 -0
  67. package/useAsyncFn.cjs.mjs +2 -0
  68. package/useAsyncFn.esm.js +28 -0
  69. package/useFirstMountState.cjs.d.ts +2 -0
  70. package/useFirstMountState.cjs.default.js +1 -0
  71. package/useFirstMountState.cjs.js +17 -0
  72. package/useFirstMountState.cjs.mjs +2 -0
  73. package/useFirstMountState.esm.js +12 -0
  74. package/useFixedOffset.cjs.d.ts +2 -0
  75. package/useFixedOffset.cjs.default.js +1 -0
  76. package/useFixedOffset.cjs.js +49 -0
  77. package/useFixedOffset.cjs.mjs +2 -0
  78. package/useFixedOffset.esm.js +44 -0
  79. package/useFocus.cjs.d.ts +2 -0
  80. package/useFocus.cjs.default.js +1 -0
  81. package/useFocus.cjs.js +16 -0
  82. package/useFocus.cjs.mjs +2 -0
  83. package/useFocus.esm.js +11 -0
  84. package/useInterval.cjs.d.ts +2 -0
  85. package/useInterval.cjs.default.js +1 -0
  86. package/useInterval.cjs.js +27 -0
  87. package/useInterval.cjs.mjs +2 -0
  88. package/useInterval.esm.js +22 -0
  89. package/useIsomorphicLayoutEffect.cjs.d.ts +2 -0
  90. package/useIsomorphicLayoutEffect.cjs.default.js +1 -0
  91. package/useIsomorphicLayoutEffect.cjs.js +11 -0
  92. package/useIsomorphicLayoutEffect.cjs.mjs +2 -0
  93. package/useIsomorphicLayoutEffect.d.ts +2 -2
  94. package/useIsomorphicLayoutEffect.esm.js +6 -0
  95. package/useKeyUp.cjs.d.ts +2 -0
  96. package/useKeyUp.cjs.default.js +1 -0
  97. package/useKeyUp.cjs.js +23 -0
  98. package/useKeyUp.cjs.mjs +2 -0
  99. package/useKeyUp.esm.js +18 -0
  100. package/useMeasure.cjs.d.ts +2 -0
  101. package/useMeasure.cjs.default.js +1 -0
  102. package/useMeasure.cjs.js +126 -0
  103. package/useMeasure.cjs.mjs +2 -0
  104. package/useMeasure.esm.js +121 -0
  105. package/useMountedState.cjs.d.ts +2 -0
  106. package/useMountedState.cjs.default.js +1 -0
  107. package/useMountedState.cjs.js +20 -0
  108. package/useMountedState.cjs.mjs +2 -0
  109. package/useMountedState.esm.js +15 -0
  110. package/useNavigateAway.cjs.d.ts +2 -0
  111. package/useNavigateAway.cjs.default.js +1 -0
  112. package/useNavigateAway.cjs.js +32 -0
  113. package/useNavigateAway.cjs.mjs +2 -0
  114. package/useNavigateAway.esm.js +27 -0
  115. package/usePrevious.cjs.d.ts +2 -0
  116. package/usePrevious.cjs.default.js +1 -0
  117. package/usePrevious.cjs.js +16 -0
  118. package/usePrevious.cjs.mjs +2 -0
  119. package/usePrevious.esm.js +11 -0
  120. package/usePreviousRef.cjs.d.ts +2 -0
  121. package/usePreviousRef.cjs.default.js +1 -0
  122. package/usePreviousRef.cjs.js +16 -0
  123. package/usePreviousRef.cjs.mjs +2 -0
  124. package/usePreviousRef.esm.js +11 -0
  125. package/useScrollPosition.cjs.d.ts +2 -0
  126. package/useScrollPosition.cjs.default.js +1 -0
  127. package/useScrollPosition.cjs.js +65 -0
  128. package/useScrollPosition.cjs.mjs +2 -0
  129. package/useScrollPosition.esm.js +60 -0
  130. package/useScrollThreshold.cjs.d.ts +2 -0
  131. package/useScrollThreshold.cjs.default.js +1 -0
  132. package/useScrollThreshold.cjs.js +33 -0
  133. package/useScrollThreshold.cjs.mjs +2 -0
  134. package/useScrollThreshold.esm.js +28 -0
  135. package/useScrollTo.cjs.d.ts +2 -0
  136. package/useScrollTo.cjs.default.js +1 -0
  137. package/useScrollTo.cjs.js +25 -0
  138. package/useScrollTo.cjs.mjs +2 -0
  139. package/useScrollTo.esm.js +20 -0
  140. package/useSmoothScroll.cjs.d.ts +2 -0
  141. package/useSmoothScroll.cjs.default.js +1 -0
  142. package/useSmoothScroll.cjs.js +40 -0
  143. package/useSmoothScroll.cjs.mjs +2 -0
  144. package/useSmoothScroll.esm.js +35 -0
  145. package/useSpinDelay.cjs.d.ts +2 -0
  146. package/useSpinDelay.cjs.default.js +1 -0
  147. package/useSpinDelay.cjs.js +43 -0
  148. package/useSpinDelay.cjs.mjs +2 -0
  149. package/useSpinDelay.esm.js +38 -0
  150. package/useTraceUpdate.cjs.d.ts +2 -0
  151. package/useTraceUpdate.cjs.default.js +1 -0
  152. package/useTraceUpdate.cjs.js +24 -0
  153. package/useTraceUpdate.cjs.mjs +2 -0
  154. package/useTraceUpdate.esm.js +19 -0
  155. package/useUpdateEffect.cjs.d.ts +2 -0
  156. package/useUpdateEffect.cjs.default.js +1 -0
  157. package/useUpdateEffect.cjs.js +18 -0
  158. package/useUpdateEffect.cjs.mjs +2 -0
  159. package/useUpdateEffect.esm.js +13 -0
  160. package/useWindowSize.cjs.d.ts +2 -0
  161. package/useWindowSize.cjs.default.js +1 -0
  162. package/useWindowSize.cjs.js +27 -0
  163. package/useWindowSize.cjs.mjs +2 -0
  164. package/useWindowSize.esm.js +22 -0
  165. package/FaviconTags.js +0 -1
  166. package/Meta.js +0 -1
  167. package/NoJs.js +0 -1
  168. package/Polymorphic.js +0 -1
  169. package/calendar/CalendarDaygridCell.js +0 -1
  170. package/calendar/CalendarDaygridNav.js +0 -1
  171. package/calendar/CalendarDaygridTable.js +0 -1
  172. package/calendar/CalendarLegend.js +0 -1
  173. package/calendar/calendar-api-google.js +0 -1
  174. package/calendar/types.js +0 -1
  175. package/calendar/useCalendar.js +0 -1
  176. package/calendar/useDateLocale.js +0 -1
  177. package/calendar/utils.js +0 -1
  178. package/calendar.js +0 -1
  179. package/cjs/FaviconTags.d.ts +0 -9
  180. package/cjs/FaviconTags.js +0 -1
  181. package/cjs/Meta.d.ts +0 -5
  182. package/cjs/Meta.js +0 -1
  183. package/cjs/NoJs.d.ts +0 -3
  184. package/cjs/NoJs.js +0 -1
  185. package/cjs/Polymorphic.d.ts +0 -26
  186. package/cjs/Polymorphic.js +0 -1
  187. package/cjs/calendar/CalendarDaygridCell.d.ts +0 -35
  188. package/cjs/calendar/CalendarDaygridCell.js +0 -1
  189. package/cjs/calendar/CalendarDaygridNav.d.ts +0 -27
  190. package/cjs/calendar/CalendarDaygridNav.js +0 -1
  191. package/cjs/calendar/CalendarDaygridTable.d.ts +0 -25
  192. package/cjs/calendar/CalendarDaygridTable.js +0 -1
  193. package/cjs/calendar/CalendarLegend.d.ts +0 -18
  194. package/cjs/calendar/CalendarLegend.js +0 -1
  195. package/cjs/calendar/calendar-api-google.d.ts +0 -10
  196. package/cjs/calendar/calendar-api-google.js +0 -1
  197. package/cjs/calendar/types.d.ts +0 -62
  198. package/cjs/calendar/types.js +0 -1
  199. package/cjs/calendar/useCalendar.d.ts +0 -35
  200. package/cjs/calendar/useCalendar.js +0 -1
  201. package/cjs/calendar/useDateLocale.d.ts +0 -2
  202. package/cjs/calendar/useDateLocale.js +0 -1
  203. package/cjs/calendar/utils.d.ts +0 -11
  204. package/cjs/calendar/utils.js +0 -1
  205. package/cjs/calendar.d.ts +0 -7
  206. package/cjs/calendar.js +0 -1
  207. package/cjs/classed.d.ts +0 -8
  208. package/cjs/classed.js +0 -1
  209. package/cjs/createUseMediaQueryWidth.d.ts +0 -6
  210. package/cjs/createUseMediaQueryWidth.js +0 -1
  211. package/cjs/extendComponent.d.ts +0 -16
  212. package/cjs/extendComponent.js +0 -1
  213. package/cjs/forms/antispam.d.ts +0 -27
  214. package/cjs/forms/antispam.js +0 -1
  215. package/cjs/forms.d.ts +0 -1
  216. package/cjs/forms.js +0 -1
  217. package/cjs/index.d.ts +0 -28
  218. package/cjs/index.js +0 -1
  219. package/cjs/mergeRefs.d.ts +0 -2
  220. package/cjs/mergeRefs.js +0 -1
  221. package/cjs/package.json +0 -31
  222. package/cjs/types.d.ts +0 -2
  223. package/cjs/types.js +0 -1
  224. package/cjs/useAsyncFn.d.ts +0 -24
  225. package/cjs/useAsyncFn.js +0 -1
  226. package/cjs/useFirstMountState.d.ts +0 -2
  227. package/cjs/useFirstMountState.js +0 -1
  228. package/cjs/useFixedOffset.d.ts +0 -2
  229. package/cjs/useFixedOffset.js +0 -1
  230. package/cjs/useFocus.d.ts +0 -2
  231. package/cjs/useFocus.js +0 -1
  232. package/cjs/useInterval.d.ts +0 -2
  233. package/cjs/useInterval.js +0 -1
  234. package/cjs/useIsomorphicLayoutEffect.d.ts +0 -3
  235. package/cjs/useIsomorphicLayoutEffect.js +0 -1
  236. package/cjs/useKeyUp.d.ts +0 -2
  237. package/cjs/useKeyUp.js +0 -1
  238. package/cjs/useMeasure.d.ts +0 -22
  239. package/cjs/useMeasure.js +0 -1
  240. package/cjs/useMountedState.d.ts +0 -2
  241. package/cjs/useMountedState.js +0 -1
  242. package/cjs/useNavigateAway.d.ts +0 -3
  243. package/cjs/useNavigateAway.js +0 -1
  244. package/cjs/usePrevious.d.ts +0 -2
  245. package/cjs/usePrevious.js +0 -1
  246. package/cjs/usePreviousRef.d.ts +0 -2
  247. package/cjs/usePreviousRef.js +0 -1
  248. package/cjs/useReveal.d.ts +0 -13
  249. package/cjs/useReveal.js +0 -1
  250. package/cjs/useScrollPosition.d.ts +0 -7
  251. package/cjs/useScrollPosition.js +0 -1
  252. package/cjs/useScrollThreshold.d.ts +0 -2
  253. package/cjs/useScrollThreshold.js +0 -1
  254. package/cjs/useScrollTo.d.ts +0 -2
  255. package/cjs/useScrollTo.js +0 -1
  256. package/cjs/useSmoothScroll.d.ts +0 -2
  257. package/cjs/useSmoothScroll.js +0 -1
  258. package/cjs/useSpinDelay.d.ts +0 -2
  259. package/cjs/useSpinDelay.js +0 -1
  260. package/cjs/useTraceUpdate.d.ts +0 -2
  261. package/cjs/useTraceUpdate.js +0 -1
  262. package/cjs/useUpdateEffect.d.ts +0 -3
  263. package/cjs/useUpdateEffect.js +0 -1
  264. package/cjs/useWindowSize.d.ts +0 -3
  265. package/cjs/useWindowSize.js +0 -1
  266. package/classed.js +0 -1
  267. package/createUseMediaQueryWidth.js +0 -1
  268. package/extendComponent.js +0 -1
  269. package/forms/antispam.js +0 -1
  270. package/forms.js +0 -1
  271. package/index.js +0 -1
  272. package/mergeRefs.js +0 -1
  273. package/types.js +0 -1
  274. package/useAsyncFn.js +0 -1
  275. package/useFirstMountState.js +0 -1
  276. package/useFixedOffset.js +0 -1
  277. package/useFocus.js +0 -1
  278. package/useInterval.js +0 -1
  279. package/useIsomorphicLayoutEffect.js +0 -1
  280. package/useKeyUp.js +0 -1
  281. package/useMeasure.js +0 -1
  282. package/useMountedState.js +0 -1
  283. package/useNavigateAway.js +0 -1
  284. package/usePrevious.js +0 -1
  285. package/usePreviousRef.js +0 -1
  286. package/useReveal.js +0 -1
  287. package/useScrollPosition.js +0 -1
  288. package/useScrollThreshold.js +0 -1
  289. package/useScrollTo.js +0 -1
  290. package/useSmoothScroll.js +0 -1
  291. package/useSpinDelay.js +0 -1
  292. package/useTraceUpdate.js +0 -1
  293. package/useUpdateEffect.js +0 -1
  294. package/useWindowSize.js +0 -1
@@ -0,0 +1,2 @@
1
+ export * from "./useIsomorphicLayoutEffect";
2
+ export { default } from "./useIsomorphicLayoutEffect";
@@ -0,0 +1 @@
1
+ exports._default = require('./useIsomorphicLayoutEffect.cjs.js').default;
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var utils = require('@koine/utils');
7
+
8
+ let useIsomorphicLayoutEffect = utils.isBrowser ? react.useLayoutEffect : react.useEffect;
9
+
10
+ exports["default"] = useIsomorphicLayoutEffect;
11
+ exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
@@ -0,0 +1,2 @@
1
+ export * from './useIsomorphicLayoutEffect.cjs.js';
2
+ export { _default as default } from './useIsomorphicLayoutEffect.cjs.default.js';
@@ -1,3 +1,3 @@
1
- import { useEffect } from "react";
2
- export declare let useIsomorphicLayoutEffect: typeof useEffect;
1
+ import { useLayoutEffect } from "react";
2
+ export declare let useIsomorphicLayoutEffect: typeof useLayoutEffect;
3
3
  export default useIsomorphicLayoutEffect;
@@ -0,0 +1,6 @@
1
+ import { useLayoutEffect, useEffect } from 'react';
2
+ import { isBrowser } from '@koine/utils';
3
+
4
+ let useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;
5
+
6
+ export { useIsomorphicLayoutEffect as default, useIsomorphicLayoutEffect };
@@ -0,0 +1,2 @@
1
+ export * from "./useKeyUp";
2
+ export { default } from "./useKeyUp";
@@ -0,0 +1 @@
1
+ exports._default = require('./useKeyUp.cjs.js').default;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var dom = require('@koine/dom');
7
+
8
+ let useKeyUp = (callback, deps = []) => {
9
+ react.useEffect(() => {
10
+ const listener = dom.on(window, "keyup", (event) => {
11
+ if (!event.ctrlKey &&
12
+ !event.altKey &&
13
+ !event.shiftKey &&
14
+ !event.metaKey) {
15
+ callback(event);
16
+ }
17
+ });
18
+ return listener;
19
+ }, [callback, ...deps]);
20
+ };
21
+
22
+ exports["default"] = useKeyUp;
23
+ exports.useKeyUp = useKeyUp;
@@ -0,0 +1,2 @@
1
+ export * from './useKeyUp.cjs.js';
2
+ export { _default as default } from './useKeyUp.cjs.default.js';
@@ -0,0 +1,18 @@
1
+ import { useEffect } from 'react';
2
+ import { on } from '@koine/dom';
3
+
4
+ let useKeyUp = (callback, deps = []) => {
5
+ useEffect(() => {
6
+ const listener = on(window, "keyup", (event) => {
7
+ if (!event.ctrlKey &&
8
+ !event.altKey &&
9
+ !event.shiftKey &&
10
+ !event.metaKey) {
11
+ callback(event);
12
+ }
13
+ });
14
+ return listener;
15
+ }, [callback, ...deps]);
16
+ };
17
+
18
+ export { useKeyUp as default, useKeyUp };
@@ -0,0 +1,2 @@
1
+ export * from "./useMeasure";
2
+ export { default } from "./useMeasure";
@@ -0,0 +1 @@
1
+ exports._default = require('./useMeasure.cjs.js').default;
@@ -0,0 +1,126 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var utils = require('@koine/utils');
7
+ var dom = require('@koine/dom');
8
+
9
+ let observer;
10
+ let findScrollContainers = (element) => {
11
+ const result = [];
12
+ if (!element || element === document.body)
13
+ return result;
14
+ const { overflow, overflowX, overflowY } = window.getComputedStyle(element);
15
+ if ([overflow, overflowX, overflowY].some((prop) => prop === "auto" || prop === "scroll"))
16
+ result.push(element);
17
+ return [...result, ...findScrollContainers(element.parentElement)];
18
+ };
19
+ const keys = [
20
+ "x",
21
+ "y",
22
+ "top",
23
+ "bottom",
24
+ "left",
25
+ "right",
26
+ "width",
27
+ "height",
28
+ ];
29
+ const areBoundsEqual = (a, b) => keys.every((key) => a[key] === b[key]);
30
+ let useMeasure = (options) => {
31
+ const { scroll = false } = options || {};
32
+ const [bounds, setBounds] = react.useState({
33
+ left: 0,
34
+ top: 0,
35
+ width: 0,
36
+ height: 0,
37
+ bottom: 0,
38
+ right: 0,
39
+ x: 0,
40
+ y: 0,
41
+ });
42
+ const state = react.useRef([
43
+ null,
44
+ null,
45
+ null,
46
+ bounds,
47
+ ]);
48
+ const mounted = react.useRef(false);
49
+ react.useEffect(() => {
50
+ mounted.current = true;
51
+ return () => void (mounted.current = false);
52
+ }, []);
53
+ const [forceRefresh, , scrollChange] = react.useMemo(() => {
54
+ const callback = (..._args) => {
55
+ const [element, , , lastBounds] = state.current;
56
+ if (!element)
57
+ return;
58
+ const size = element.getBoundingClientRect();
59
+ Object.freeze(size);
60
+ if (mounted.current && !areBoundsEqual(lastBounds, size)) {
61
+ state.current[3] = size;
62
+ setBounds(size);
63
+ }
64
+ };
65
+ const debouncedCallback = utils.debounce(callback);
66
+ return [callback, debouncedCallback, debouncedCallback];
67
+ }, [setBounds]);
68
+ function removeListeners() {
69
+ const [, scrollContainers, resizeObserver] = state.current;
70
+ if (scrollContainers) {
71
+ scrollContainers.forEach((element) => dom.off(element, "scroll", scrollChange));
72
+ state.current[1] = null;
73
+ }
74
+ if (resizeObserver) {
75
+ resizeObserver.disconnect();
76
+ state.current[2] = null;
77
+ }
78
+ }
79
+ function addListeners() {
80
+ const [element, scrollContainers] = state.current;
81
+ if (!element)
82
+ return;
83
+ if (!observer && ResizeObserver) {
84
+ observer = new ResizeObserver(scrollChange);
85
+ state.current[2] = observer;
86
+ observer.observe(element);
87
+ if (scroll && scrollContainers) {
88
+ scrollContainers.forEach((scrollContainer) => dom.on(scrollContainer, "scroll", scrollChange, {
89
+ capture: true,
90
+ passive: true,
91
+ }));
92
+ }
93
+ }
94
+ }
95
+ const ref = (node) => {
96
+ if (!node || node === state.current[0])
97
+ return;
98
+ removeListeners();
99
+ state.current[0] = node;
100
+ state.current[1] = findScrollContainers(node);
101
+ addListeners();
102
+ };
103
+ react.useEffect(() => {
104
+ if (scroll) {
105
+ const listener = dom.listenScrollDebounced(0, forceRefresh, 100);
106
+ return listener;
107
+ }
108
+ return utils.noop;
109
+ }, [scroll, forceRefresh]);
110
+ react.useEffect(() => {
111
+ const listener = dom.listenResizeDebounced(0, forceRefresh, 100);
112
+ return listener;
113
+ }, [forceRefresh]);
114
+ react.useEffect(() => {
115
+ removeListeners();
116
+ addListeners();
117
+ }, [scroll]);
118
+ react.useEffect(() => {
119
+ forceRefresh();
120
+ return removeListeners;
121
+ }, []);
122
+ return [ref, bounds, forceRefresh];
123
+ };
124
+
125
+ exports["default"] = useMeasure;
126
+ exports.useMeasure = useMeasure;
@@ -0,0 +1,2 @@
1
+ export * from './useMeasure.cjs.js';
2
+ export { _default as default } from './useMeasure.cjs.default.js';
@@ -0,0 +1,121 @@
1
+ import { useState, useRef, useEffect, useMemo } from 'react';
2
+ import { debounce, noop } from '@koine/utils';
3
+ import { listenScrollDebounced, listenResizeDebounced, off, on } from '@koine/dom';
4
+
5
+ let observer;
6
+ let findScrollContainers = (element) => {
7
+ const result = [];
8
+ if (!element || element === document.body)
9
+ return result;
10
+ const { overflow, overflowX, overflowY } = window.getComputedStyle(element);
11
+ if ([overflow, overflowX, overflowY].some((prop) => prop === "auto" || prop === "scroll"))
12
+ result.push(element);
13
+ return [...result, ...findScrollContainers(element.parentElement)];
14
+ };
15
+ const keys = [
16
+ "x",
17
+ "y",
18
+ "top",
19
+ "bottom",
20
+ "left",
21
+ "right",
22
+ "width",
23
+ "height",
24
+ ];
25
+ const areBoundsEqual = (a, b) => keys.every((key) => a[key] === b[key]);
26
+ let useMeasure = (options) => {
27
+ const { scroll = false } = options || {};
28
+ const [bounds, setBounds] = useState({
29
+ left: 0,
30
+ top: 0,
31
+ width: 0,
32
+ height: 0,
33
+ bottom: 0,
34
+ right: 0,
35
+ x: 0,
36
+ y: 0,
37
+ });
38
+ const state = useRef([
39
+ null,
40
+ null,
41
+ null,
42
+ bounds,
43
+ ]);
44
+ const mounted = useRef(false);
45
+ useEffect(() => {
46
+ mounted.current = true;
47
+ return () => void (mounted.current = false);
48
+ }, []);
49
+ const [forceRefresh, , scrollChange] = useMemo(() => {
50
+ const callback = (..._args) => {
51
+ const [element, , , lastBounds] = state.current;
52
+ if (!element)
53
+ return;
54
+ const size = element.getBoundingClientRect();
55
+ Object.freeze(size);
56
+ if (mounted.current && !areBoundsEqual(lastBounds, size)) {
57
+ state.current[3] = size;
58
+ setBounds(size);
59
+ }
60
+ };
61
+ const debouncedCallback = debounce(callback);
62
+ return [callback, debouncedCallback, debouncedCallback];
63
+ }, [setBounds]);
64
+ function removeListeners() {
65
+ const [, scrollContainers, resizeObserver] = state.current;
66
+ if (scrollContainers) {
67
+ scrollContainers.forEach((element) => off(element, "scroll", scrollChange));
68
+ state.current[1] = null;
69
+ }
70
+ if (resizeObserver) {
71
+ resizeObserver.disconnect();
72
+ state.current[2] = null;
73
+ }
74
+ }
75
+ function addListeners() {
76
+ const [element, scrollContainers] = state.current;
77
+ if (!element)
78
+ return;
79
+ if (!observer && ResizeObserver) {
80
+ observer = new ResizeObserver(scrollChange);
81
+ state.current[2] = observer;
82
+ observer.observe(element);
83
+ if (scroll && scrollContainers) {
84
+ scrollContainers.forEach((scrollContainer) => on(scrollContainer, "scroll", scrollChange, {
85
+ capture: true,
86
+ passive: true,
87
+ }));
88
+ }
89
+ }
90
+ }
91
+ const ref = (node) => {
92
+ if (!node || node === state.current[0])
93
+ return;
94
+ removeListeners();
95
+ state.current[0] = node;
96
+ state.current[1] = findScrollContainers(node);
97
+ addListeners();
98
+ };
99
+ useEffect(() => {
100
+ if (scroll) {
101
+ const listener = listenScrollDebounced(0, forceRefresh, 100);
102
+ return listener;
103
+ }
104
+ return noop;
105
+ }, [scroll, forceRefresh]);
106
+ useEffect(() => {
107
+ const listener = listenResizeDebounced(0, forceRefresh, 100);
108
+ return listener;
109
+ }, [forceRefresh]);
110
+ useEffect(() => {
111
+ removeListeners();
112
+ addListeners();
113
+ }, [scroll]);
114
+ useEffect(() => {
115
+ forceRefresh();
116
+ return removeListeners;
117
+ }, []);
118
+ return [ref, bounds, forceRefresh];
119
+ };
120
+
121
+ export { useMeasure as default, useMeasure };
@@ -0,0 +1,2 @@
1
+ export * from "./useMountedState";
2
+ export { default } from "./useMountedState";
@@ -0,0 +1 @@
1
+ exports._default = require('./useMountedState.cjs.js').default;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+
7
+ let useMountedState = () => {
8
+ const mountedRef = react.useRef(false);
9
+ const get = react.useCallback(() => mountedRef.current, []);
10
+ react.useEffect(() => {
11
+ mountedRef.current = true;
12
+ return () => {
13
+ mountedRef.current = false;
14
+ };
15
+ }, []);
16
+ return get;
17
+ };
18
+
19
+ exports["default"] = useMountedState;
20
+ exports.useMountedState = useMountedState;
@@ -0,0 +1,2 @@
1
+ export * from './useMountedState.cjs.js';
2
+ export { _default as default } from './useMountedState.cjs.default.js';
@@ -0,0 +1,15 @@
1
+ import { useRef, useCallback, useEffect } from 'react';
2
+
3
+ let useMountedState = () => {
4
+ const mountedRef = useRef(false);
5
+ const get = useCallback(() => mountedRef.current, []);
6
+ useEffect(() => {
7
+ mountedRef.current = true;
8
+ return () => {
9
+ mountedRef.current = false;
10
+ };
11
+ }, []);
12
+ return get;
13
+ };
14
+
15
+ export { useMountedState as default, useMountedState };
@@ -0,0 +1,2 @@
1
+ export * from "./useNavigateAway";
2
+ export { default } from "./useNavigateAway";
@@ -0,0 +1 @@
1
+ exports._default = require('./useNavigateAway.cjs.js').default;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var dom = require('@koine/dom');
7
+
8
+ let useNavigateAway = (handler) => {
9
+ const beforeUnloadHandlerRef = react.useRef();
10
+ react.useEffect(() => {
11
+ beforeUnloadHandlerRef.current = (event) => {
12
+ const customMessageOrCondition = handler(event);
13
+ if (customMessageOrCondition) {
14
+ event.preventDefault();
15
+ }
16
+ if (typeof customMessageOrCondition === "string") {
17
+ return (event.returnValue = customMessageOrCondition);
18
+ }
19
+ if (event.defaultPrevented) {
20
+ return (event.returnValue = "");
21
+ }
22
+ return;
23
+ };
24
+ }, [handler]);
25
+ react.useEffect(() => {
26
+ const listenerBeforeunload = dom.on(window, "beforeunload", (event) => beforeUnloadHandlerRef.current?.(event));
27
+ return listenerBeforeunload;
28
+ }, []);
29
+ };
30
+
31
+ exports["default"] = useNavigateAway;
32
+ exports.useNavigateAway = useNavigateAway;
@@ -0,0 +1,2 @@
1
+ export * from './useNavigateAway.cjs.js';
2
+ export { _default as default } from './useNavigateAway.cjs.default.js';
@@ -0,0 +1,27 @@
1
+ import { useRef, useEffect } from 'react';
2
+ import { on } from '@koine/dom';
3
+
4
+ let useNavigateAway = (handler) => {
5
+ const beforeUnloadHandlerRef = useRef();
6
+ useEffect(() => {
7
+ beforeUnloadHandlerRef.current = (event) => {
8
+ const customMessageOrCondition = handler(event);
9
+ if (customMessageOrCondition) {
10
+ event.preventDefault();
11
+ }
12
+ if (typeof customMessageOrCondition === "string") {
13
+ return (event.returnValue = customMessageOrCondition);
14
+ }
15
+ if (event.defaultPrevented) {
16
+ return (event.returnValue = "");
17
+ }
18
+ return;
19
+ };
20
+ }, [handler]);
21
+ useEffect(() => {
22
+ const listenerBeforeunload = on(window, "beforeunload", (event) => beforeUnloadHandlerRef.current?.(event));
23
+ return listenerBeforeunload;
24
+ }, []);
25
+ };
26
+
27
+ export { useNavigateAway as default, useNavigateAway };
@@ -0,0 +1,2 @@
1
+ export * from "./usePrevious";
2
+ export { default } from "./usePrevious";
@@ -0,0 +1 @@
1
+ exports._default = require('./usePrevious.cjs.js').default;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+
7
+ let usePrevious = (state, defaulValue) => {
8
+ const [tuple, setTuple] = react.useState([state, defaulValue]);
9
+ if (tuple[1] !== state) {
10
+ setTuple([tuple[1], state]);
11
+ }
12
+ return tuple[0];
13
+ };
14
+
15
+ exports["default"] = usePrevious;
16
+ exports.usePrevious = usePrevious;
@@ -0,0 +1,2 @@
1
+ export * from './usePrevious.cjs.js';
2
+ export { _default as default } from './usePrevious.cjs.default.js';
@@ -0,0 +1,11 @@
1
+ import { useState } from 'react';
2
+
3
+ let usePrevious = (state, defaulValue) => {
4
+ const [tuple, setTuple] = useState([state, defaulValue]);
5
+ if (tuple[1] !== state) {
6
+ setTuple([tuple[1], state]);
7
+ }
8
+ return tuple[0];
9
+ };
10
+
11
+ export { usePrevious as default, usePrevious };
@@ -0,0 +1,2 @@
1
+ export * from "./usePreviousRef";
2
+ export { default } from "./usePreviousRef";
@@ -0,0 +1 @@
1
+ exports._default = require('./usePreviousRef.cjs.js').default;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+
7
+ let usePreviousRef = (value) => {
8
+ const ref = react.useRef();
9
+ react.useEffect(() => {
10
+ ref.current = value;
11
+ });
12
+ return ref.current;
13
+ };
14
+
15
+ exports["default"] = usePreviousRef;
16
+ exports.usePreviousRef = usePreviousRef;
@@ -0,0 +1,2 @@
1
+ export * from './usePreviousRef.cjs.js';
2
+ export { _default as default } from './usePreviousRef.cjs.default.js';
@@ -0,0 +1,11 @@
1
+ import { useRef, useEffect } from 'react';
2
+
3
+ let usePreviousRef = (value) => {
4
+ const ref = useRef();
5
+ useEffect(() => {
6
+ ref.current = value;
7
+ });
8
+ return ref.current;
9
+ };
10
+
11
+ export { usePreviousRef as default, usePreviousRef };
@@ -0,0 +1,2 @@
1
+ export * from "./useScrollPosition";
2
+ export { default } from "./useScrollPosition";
@@ -0,0 +1 @@
1
+ exports._default = require('./useScrollPosition.cjs.js').default;
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var utils = require('@koine/utils');
7
+ var dom = require('@koine/dom');
8
+ var useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.cjs.js');
9
+
10
+ const zeroPosition = { x: 0, y: 0 };
11
+ const getClientRect = (element) => element?.getBoundingClientRect();
12
+ const getScrollPosition = (element, boundingElement) => {
13
+ if (!utils.isBrowser) {
14
+ return zeroPosition;
15
+ }
16
+ if (!boundingElement) {
17
+ return { x: window.scrollX, y: window.scrollY };
18
+ }
19
+ const targetPosition = getClientRect(element?.current || document.body);
20
+ const containerPosition = getClientRect(boundingElement.current);
21
+ if (!targetPosition) {
22
+ return zeroPosition;
23
+ }
24
+ return containerPosition
25
+ ? {
26
+ x: (containerPosition.x || 0) - (targetPosition.x || 0),
27
+ y: (containerPosition.y || 0) - (targetPosition.y || 0),
28
+ }
29
+ : { x: targetPosition.left, y: targetPosition.top };
30
+ };
31
+ let useScrollPosition = (effect, deps = [], element, boundingElement, wait) => {
32
+ const position = react.useRef(getScrollPosition(null, boundingElement));
33
+ let throttleTimeout = null;
34
+ const callBack = () => {
35
+ const current = getScrollPosition(element, boundingElement);
36
+ effect(current, position.current);
37
+ position.current = current;
38
+ throttleTimeout = null;
39
+ };
40
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
41
+ if (!utils.isBrowser) {
42
+ return undefined;
43
+ }
44
+ const handleScroll = () => {
45
+ if (wait) {
46
+ if (throttleTimeout === null) {
47
+ throttleTimeout = window.setTimeout(callBack, wait);
48
+ }
49
+ }
50
+ else {
51
+ callBack();
52
+ }
53
+ };
54
+ const listener = dom.listenScroll(handleScroll, boundingElement?.current);
55
+ return () => {
56
+ listener();
57
+ if (throttleTimeout) {
58
+ clearTimeout(throttleTimeout);
59
+ }
60
+ };
61
+ }, deps);
62
+ };
63
+
64
+ exports["default"] = useScrollPosition;
65
+ exports.useScrollPosition = useScrollPosition;
@@ -0,0 +1,2 @@
1
+ export * from './useScrollPosition.cjs.js';
2
+ export { _default as default } from './useScrollPosition.cjs.default.js';