@fringeworks/react-defer-rendering 0.8.0 → 0.9.0

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 (172) hide show
  1. package/README.ja.md +313 -319
  2. package/README.md +313 -319
  3. package/_usePromiseState.cjs +13 -20
  4. package/_usePromiseState.d.cts +5 -2
  5. package/_usePromiseState.d.mts +6 -3
  6. package/_usePromiseState.mjs +10 -16
  7. package/_virtual/_rolldown/runtime.cjs +1 -2
  8. package/constants.cjs +0 -1
  9. package/constants.d.cts +3 -4
  10. package/constants.d.mts +3 -4
  11. package/index.cjs +41 -44
  12. package/index.d.cts +15 -4
  13. package/index.d.mts +15 -4
  14. package/index.mjs +4 -7
  15. package/package.json +113 -31
  16. package/types.cjs +1 -0
  17. package/types.d.cts +7 -8
  18. package/types.d.mts +7 -8
  19. package/useDeferUntilAsyncComplete/index.cjs +4 -4
  20. package/useDeferUntilAsyncComplete/index.d.cts +1 -1
  21. package/useDeferUntilAsyncComplete/index.d.mts +1 -1
  22. package/useDeferUntilAsyncComplete/index.mjs +1 -3
  23. package/useDeferUntilAsyncComplete/types.cjs +1 -0
  24. package/useDeferUntilAsyncComplete/types.d.cts +3 -4
  25. package/useDeferUntilAsyncComplete/types.d.mts +3 -4
  26. package/useDeferUntilAsyncComplete/useDeferUntilAsyncComplete.cjs +7 -5
  27. package/useDeferUntilAsyncComplete/useDeferUntilAsyncComplete.d.cts +0 -1
  28. package/useDeferUntilAsyncComplete/useDeferUntilAsyncComplete.d.mts +2 -4
  29. package/useDeferUntilAsyncComplete/useDeferUntilAsyncComplete.mjs +2 -1
  30. package/useDeferUntilBreakpoint/index.cjs +4 -4
  31. package/useDeferUntilBreakpoint/index.d.cts +1 -1
  32. package/useDeferUntilBreakpoint/index.d.mts +1 -1
  33. package/useDeferUntilBreakpoint/index.mjs +1 -3
  34. package/useDeferUntilBreakpoint/types.cjs +1 -0
  35. package/useDeferUntilBreakpoint/types.d.cts +5 -5
  36. package/useDeferUntilBreakpoint/types.d.mts +5 -5
  37. package/useDeferUntilBreakpoint/useDeferUntilBreakpoint.cjs +29 -9
  38. package/useDeferUntilBreakpoint/useDeferUntilBreakpoint.d.cts +0 -1
  39. package/useDeferUntilBreakpoint/useDeferUntilBreakpoint.d.mts +2 -4
  40. package/useDeferUntilBreakpoint/useDeferUntilBreakpoint.mjs +25 -6
  41. package/useDeferUntilCallThreshold/index.cjs +4 -4
  42. package/useDeferUntilCallThreshold/index.d.cts +1 -1
  43. package/useDeferUntilCallThreshold/index.d.mts +1 -1
  44. package/useDeferUntilCallThreshold/index.mjs +1 -3
  45. package/useDeferUntilCallThreshold/types.cjs +1 -0
  46. package/useDeferUntilCallThreshold/types.d.cts +3 -4
  47. package/useDeferUntilCallThreshold/types.d.mts +3 -4
  48. package/useDeferUntilCallThreshold/useDeferUntilCallThreshold.cjs +32 -19
  49. package/useDeferUntilCallThreshold/useDeferUntilCallThreshold.d.cts +0 -1
  50. package/useDeferUntilCallThreshold/useDeferUntilCallThreshold.d.mts +2 -4
  51. package/useDeferUntilCallThreshold/useDeferUntilCallThreshold.mjs +27 -15
  52. package/useDeferUntilChange/index.cjs +4 -4
  53. package/useDeferUntilChange/index.d.cts +1 -1
  54. package/useDeferUntilChange/index.d.mts +1 -1
  55. package/useDeferUntilChange/index.mjs +1 -3
  56. package/useDeferUntilChange/types.cjs +1 -0
  57. package/useDeferUntilChange/types.d.cts +3 -4
  58. package/useDeferUntilChange/types.d.mts +3 -4
  59. package/useDeferUntilChange/useDeferUntilChange.cjs +6 -9
  60. package/useDeferUntilChange/useDeferUntilChange.d.cts +0 -1
  61. package/useDeferUntilChange/useDeferUntilChange.d.mts +2 -4
  62. package/useDeferUntilChange/useDeferUntilChange.mjs +2 -4
  63. package/useDeferUntilDate/index.cjs +4 -4
  64. package/useDeferUntilDate/index.d.cts +1 -1
  65. package/useDeferUntilDate/index.d.mts +1 -1
  66. package/useDeferUntilDate/index.mjs +1 -3
  67. package/useDeferUntilDate/types.cjs +1 -0
  68. package/useDeferUntilDate/types.d.cts +3 -4
  69. package/useDeferUntilDate/types.d.mts +3 -4
  70. package/useDeferUntilDate/useDeferUntilDate.cjs +13 -4
  71. package/useDeferUntilDate/useDeferUntilDate.d.cts +0 -1
  72. package/useDeferUntilDate/useDeferUntilDate.d.mts +2 -4
  73. package/useDeferUntilDate/useDeferUntilDate.mjs +10 -4
  74. package/useDeferUntilIntersected/index.cjs +4 -4
  75. package/useDeferUntilIntersected/index.d.cts +1 -1
  76. package/useDeferUntilIntersected/index.d.mts +1 -1
  77. package/useDeferUntilIntersected/index.mjs +1 -3
  78. package/useDeferUntilIntersected/types.cjs +1 -0
  79. package/useDeferUntilIntersected/types.d.cts +8 -9
  80. package/useDeferUntilIntersected/types.d.mts +8 -9
  81. package/useDeferUntilIntersected/useDeferUntilIntersected.cjs +14 -13
  82. package/useDeferUntilIntersected/useDeferUntilIntersected.d.cts +0 -1
  83. package/useDeferUntilIntersected/useDeferUntilIntersected.d.mts +2 -4
  84. package/useDeferUntilIntersected/useDeferUntilIntersected.mjs +10 -8
  85. package/useDeferUntilOnReady/index.cjs +4 -4
  86. package/useDeferUntilOnReady/index.d.cts +1 -1
  87. package/useDeferUntilOnReady/index.d.mts +1 -1
  88. package/useDeferUntilOnReady/index.mjs +1 -3
  89. package/useDeferUntilOnReady/types.cjs +1 -0
  90. package/useDeferUntilOnReady/types.d.cts +3 -4
  91. package/useDeferUntilOnReady/types.d.mts +3 -4
  92. package/useDeferUntilOnReady/useDeferUntilOnReady.cjs +28 -21
  93. package/useDeferUntilOnReady/useDeferUntilOnReady.d.cts +2 -2
  94. package/useDeferUntilOnReady/useDeferUntilOnReady.d.mts +4 -5
  95. package/useDeferUntilOnReady/useDeferUntilOnReady.mjs +23 -15
  96. package/useDeferUntilReady/index.cjs +4 -4
  97. package/useDeferUntilReady/index.d.cts +1 -1
  98. package/useDeferUntilReady/index.d.mts +1 -1
  99. package/useDeferUntilReady/index.mjs +1 -3
  100. package/useDeferUntilReady/types.cjs +1 -0
  101. package/useDeferUntilReady/types.d.cts +2 -4
  102. package/useDeferUntilReady/types.d.mts +2 -4
  103. package/useDeferUntilReady/useDeferUntilReady.cjs +20 -32
  104. package/useDeferUntilReady/useDeferUntilReady.d.cts +0 -1
  105. package/useDeferUntilReady/useDeferUntilReady.d.mts +2 -4
  106. package/useDeferUntilReady/useDeferUntilReady.mjs +18 -29
  107. package/useDeferUntilRender/index.cjs +4 -4
  108. package/useDeferUntilRender/index.d.cts +1 -1
  109. package/useDeferUntilRender/index.d.mts +1 -1
  110. package/useDeferUntilRender/index.mjs +1 -3
  111. package/useDeferUntilRender/types.cjs +1 -0
  112. package/useDeferUntilRender/types.d.cts +5 -5
  113. package/useDeferUntilRender/types.d.mts +5 -5
  114. package/useDeferUntilRender/useDeferUntilRender.cjs +31 -12
  115. package/useDeferUntilRender/useDeferUntilRender.d.cts +0 -1
  116. package/useDeferUntilRender/useDeferUntilRender.d.mts +2 -4
  117. package/useDeferUntilRender/useDeferUntilRender.mjs +26 -8
  118. package/useDeferUntilResolved/index.cjs +4 -4
  119. package/useDeferUntilResolved/index.d.cts +1 -1
  120. package/useDeferUntilResolved/index.d.mts +1 -1
  121. package/useDeferUntilResolved/index.mjs +1 -3
  122. package/useDeferUntilResolved/types.cjs +1 -0
  123. package/useDeferUntilResolved/types.d.cts +3 -4
  124. package/useDeferUntilResolved/types.d.mts +3 -4
  125. package/useDeferUntilResolved/useDeferUntilResolved.cjs +8 -5
  126. package/useDeferUntilResolved/useDeferUntilResolved.d.cts +0 -1
  127. package/useDeferUntilResolved/useDeferUntilResolved.d.mts +2 -4
  128. package/useDeferUntilResolved/useDeferUntilResolved.mjs +3 -1
  129. package/useDeferUntilTimeout/index.cjs +4 -4
  130. package/useDeferUntilTimeout/index.d.cts +1 -1
  131. package/useDeferUntilTimeout/index.d.mts +1 -1
  132. package/useDeferUntilTimeout/index.mjs +1 -3
  133. package/useDeferUntilTimeout/types.cjs +1 -0
  134. package/useDeferUntilTimeout/types.d.cts +3 -4
  135. package/useDeferUntilTimeout/types.d.mts +3 -4
  136. package/useDeferUntilTimeout/useDeferUntilTimeout.cjs +23 -21
  137. package/useDeferUntilTimeout/useDeferUntilTimeout.d.cts +0 -1
  138. package/useDeferUntilTimeout/useDeferUntilTimeout.d.mts +2 -4
  139. package/useDeferUntilTimeout/useDeferUntilTimeout.mjs +16 -14
  140. package/useDeferUntilTrue/index.cjs +4 -4
  141. package/useDeferUntilTrue/index.d.cts +1 -1
  142. package/useDeferUntilTrue/index.d.mts +1 -1
  143. package/useDeferUntilTrue/index.mjs +1 -3
  144. package/useDeferUntilTrue/types.cjs +1 -0
  145. package/useDeferUntilTrue/types.d.cts +2 -4
  146. package/useDeferUntilTrue/types.d.mts +2 -4
  147. package/useDeferUntilTrue/useDeferUntilTrue.cjs +6 -5
  148. package/useDeferUntilTrue/useDeferUntilTrue.d.cts +0 -1
  149. package/useDeferUntilTrue/useDeferUntilTrue.d.mts +2 -4
  150. package/useDeferUntilWebFontReady/index.cjs +4 -4
  151. package/useDeferUntilWebFontReady/index.d.cts +1 -1
  152. package/useDeferUntilWebFontReady/index.d.mts +1 -1
  153. package/useDeferUntilWebFontReady/index.mjs +1 -3
  154. package/useDeferUntilWebFontReady/types.cjs +1 -0
  155. package/useDeferUntilWebFontReady/types.d.cts +6 -7
  156. package/useDeferUntilWebFontReady/types.d.mts +6 -7
  157. package/useDeferUntilWebFontReady/useDeferUntilWebFontReady.cjs +23 -14
  158. package/useDeferUntilWebFontReady/useDeferUntilWebFontReady.d.cts +0 -1
  159. package/useDeferUntilWebFontReady/useDeferUntilWebFontReady.d.mts +2 -4
  160. package/useDeferUntilWebFontReady/useDeferUntilWebFontReady.mjs +16 -9
  161. package/useDeferUntilScrolled/index.cjs +0 -5
  162. package/useDeferUntilScrolled/index.d.cts +0 -3
  163. package/useDeferUntilScrolled/index.d.mts +0 -3
  164. package/useDeferUntilScrolled/index.mjs +0 -5
  165. package/useDeferUntilScrolled/types.cjs +0 -0
  166. package/useDeferUntilScrolled/types.d.cts +0 -29
  167. package/useDeferUntilScrolled/types.d.mts +0 -29
  168. package/useDeferUntilScrolled/types.mjs +0 -1
  169. package/useDeferUntilScrolled/useDeferUntilScrolled.cjs +0 -94
  170. package/useDeferUntilScrolled/useDeferUntilScrolled.d.cts +0 -14
  171. package/useDeferUntilScrolled/useDeferUntilScrolled.d.mts +0 -15
  172. package/useDeferUntilScrolled/useDeferUntilScrolled.mjs +0 -91
@@ -1,5 +1,5 @@
1
- 'use client';
1
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
2
+ const require_useDeferUntilOnReady_useDeferUntilOnReady = require("./useDeferUntilOnReady.cjs");
2
3
 
3
- const require_useDeferUntilOnReady_useDeferUntilOnReady = require('./useDeferUntilOnReady.cjs');
4
-
5
- module.exports = require_useDeferUntilOnReady_useDeferUntilOnReady;
4
+ exports.default = require_useDeferUntilOnReady_useDeferUntilOnReady.default;
5
+ exports.useDeferUntilOnReady = require_useDeferUntilOnReady_useDeferUntilOnReady.default;
@@ -1,3 +1,3 @@
1
1
  import { UseDeferUntilOnReadyOptions } from "./types.cjs";
2
2
  import useDeferUntilOnReady from "./useDeferUntilOnReady.cjs";
3
- export { type UseDeferUntilOnReadyOptions, useDeferUntilOnReady as default };
3
+ export { type UseDeferUntilOnReadyOptions, useDeferUntilOnReady as default, useDeferUntilOnReady };
@@ -1,3 +1,3 @@
1
1
  import { UseDeferUntilOnReadyOptions } from "./types.mjs";
2
2
  import useDeferUntilOnReady from "./useDeferUntilOnReady.mjs";
3
- export { type UseDeferUntilOnReadyOptions, useDeferUntilOnReady as default };
3
+ export { type UseDeferUntilOnReadyOptions, useDeferUntilOnReady as default, useDeferUntilOnReady };
@@ -1,5 +1,3 @@
1
- 'use client';
2
-
3
1
  import useDeferUntilOnReady from "./useDeferUntilOnReady.mjs";
4
2
 
5
- export { useDeferUntilOnReady as default };
3
+ export { useDeferUntilOnReady as default, useDeferUntilOnReady };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -1,8 +1,8 @@
1
1
  import { UseDeferUntilReadyOptions } from "../useDeferUntilReady/types.cjs";
2
+ import "../useDeferUntilReady/index.cjs";
2
3
  import { ReactNode } from "react";
3
-
4
4
  //#region src/useDeferUntilOnReady/types.d.ts
5
- type UseDeferUntilOnReadyOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = UseDeferUntilReadyOptions<P, E> & {
5
+ export type UseDeferUntilOnReadyOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = UseDeferUntilReadyOptions<P, E> & {
6
6
  /**
7
7
  * onReadyのデバウンス時間(ミリ秒)
8
8
  * 未指定の場合は即時処理
@@ -19,5 +19,4 @@ type UseDeferUntilOnReadyOptions<P extends ReactNode = ReactNode, E extends Reac
19
19
  */
20
20
  onPendingDelay?: number;
21
21
  };
22
- //#endregion
23
- export { UseDeferUntilOnReadyOptions };
22
+ //#endregion
@@ -1,8 +1,8 @@
1
1
  import { UseDeferUntilReadyOptions } from "../useDeferUntilReady/types.mjs";
2
+ import "../useDeferUntilReady/index.mjs";
2
3
  import { ReactNode } from "react";
3
-
4
4
  //#region src/useDeferUntilOnReady/types.d.ts
5
- type UseDeferUntilOnReadyOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = UseDeferUntilReadyOptions<P, E> & {
5
+ export type UseDeferUntilOnReadyOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = UseDeferUntilReadyOptions<P, E> & {
6
6
  /**
7
7
  * onReadyのデバウンス時間(ミリ秒)
8
8
  * 未指定の場合は即時処理
@@ -19,5 +19,4 @@ type UseDeferUntilOnReadyOptions<P extends ReactNode = ReactNode, E extends Reac
19
19
  */
20
20
  onPendingDelay?: number;
21
21
  };
22
- //#endregion
23
- export { UseDeferUntilOnReadyOptions };
22
+ //#endregion
@@ -1,16 +1,15 @@
1
1
  'use client';
2
2
 
3
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
4
- const require_constants = require('../constants.cjs');
5
- const require_useDeferUntilReady_useDeferUntilReady = require('../useDeferUntilReady/useDeferUntilReady.cjs');
6
- require('../useDeferUntilReady/index.cjs');
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
+ const require_constants = require("../constants.cjs");
5
+ const require_useDeferUntilReady_useDeferUntilReady = require("../useDeferUntilReady/useDeferUntilReady.cjs");
6
+ require("../useDeferUntilReady/index.cjs");
7
7
  let react = require("react");
8
- let _fringeworks_utils_timer_debounce = require("@fringeworks/utils/timer/debounce");
9
- _fringeworks_utils_timer_debounce = require_runtime.__toESM(_fringeworks_utils_timer_debounce, 1);
10
8
 
11
9
  //#region src/useDeferUntilOnReady/useDeferUntilOnReady.tsx
12
10
  /**
13
- * 戻り値として返す`onReady`が実行されるまで描画を遅延させるhook
11
+ * 戻り値として返す`onReady`が実行されるまで描画を遅延させるhook\
12
+ * どのハンドラーを呼んだ場合も、待機中の状態の変更は取り消され、最後に呼んだハンドラーの状態になる
14
13
  * @param target 描画対象のノード
15
14
  * @param options オプション
16
15
  * @returns state('pending', 'ready', 'fallback')と状態に応じたノードと状態変更用のハンドラー
@@ -18,20 +17,28 @@ _fringeworks_utils_timer_debounce = require_runtime.__toESM(_fringeworks_utils_t
18
17
  function useDeferUntilOnReady(target, options = {}) {
19
18
  const { onReadyDelay, onFallbackDelay, onPendingDelay, ...opts } = options;
20
19
  const [state, setState] = (0, react.useState)(require_constants.RenderingState.pending);
21
- const onReady = (0, react.useMemo)(() => {
22
- const fn = () => setState(require_constants.RenderingState.ready);
23
- return onReadyDelay != null ? (0, _fringeworks_utils_timer_debounce.default)(fn, onReadyDelay) : fn;
24
- }, [onReadyDelay]);
25
- const onFallback = (0, react.useMemo)(() => {
26
- const fn = () => setState(require_constants.RenderingState.fallback);
27
- return onFallbackDelay != null ? (0, _fringeworks_utils_timer_debounce.default)(fn, onFallbackDelay) : fn;
28
- }, [onFallbackDelay]);
29
- const onPending = (0, react.useMemo)(() => {
30
- const fn = () => setState(require_constants.RenderingState.pending);
31
- return onPendingDelay != null ? (0, _fringeworks_utils_timer_debounce.default)(fn, onPendingDelay) : fn;
32
- }, [onPendingDelay]);
20
+ const timerRef = (0, react.useRef)(void 0);
21
+ const cancel = (0, react.useCallback)(() => {
22
+ clearTimeout(timerRef.current);
23
+ timerRef.current = void 0;
24
+ }, []);
25
+ const changeState = (0, react.useCallback)((nextState, delay) => {
26
+ cancel();
27
+ if (delay == null) {
28
+ setState(nextState);
29
+ return;
30
+ }
31
+ timerRef.current = setTimeout(() => {
32
+ timerRef.current = void 0;
33
+ setState(nextState);
34
+ }, delay);
35
+ }, [cancel]);
36
+ (0, react.useEffect)(() => cancel, [cancel]);
37
+ const onReady = (0, react.useCallback)(() => changeState(require_constants.RenderingState.ready, onReadyDelay), [changeState, onReadyDelay]);
38
+ const onFallback = (0, react.useCallback)(() => changeState(require_constants.RenderingState.fallback, onFallbackDelay), [changeState, onFallbackDelay]);
39
+ const onPending = (0, react.useCallback)(() => changeState(require_constants.RenderingState.pending, onPendingDelay), [changeState, onPendingDelay]);
33
40
  return {
34
- ...require_useDeferUntilReady_useDeferUntilReady(target, state, opts),
41
+ ...require_useDeferUntilReady_useDeferUntilReady.default(target, state, opts),
35
42
  onPending,
36
43
  onFallback,
37
44
  onReady
@@ -39,4 +46,4 @@ function useDeferUntilOnReady(target, options = {}) {
39
46
  }
40
47
 
41
48
  //#endregion
42
- module.exports = useDeferUntilOnReady;
49
+ exports.default = useDeferUntilOnReady;
@@ -1,10 +1,10 @@
1
1
  import { DeferRenderingWithHandlersResult } from "../types.cjs";
2
2
  import { UseDeferUntilOnReadyOptions } from "./types.cjs";
3
3
  import { ReactNode } from "react";
4
-
5
4
  //#region src/useDeferUntilOnReady/useDeferUntilOnReady.d.ts
6
5
  /**
7
- * 戻り値として返す`onReady`が実行されるまで描画を遅延させるhook
6
+ * 戻り値として返す`onReady`が実行されるまで描画を遅延させるhook\
7
+ * どのハンドラーを呼んだ場合も、待機中の状態の変更は取り消され、最後に呼んだハンドラーの状態になる
8
8
  * @param target 描画対象のノード
9
9
  * @param options オプション
10
10
  * @returns state('pending', 'ready', 'fallback')と状態に応じたノードと状態変更用のハンドラー
@@ -1,14 +1,13 @@
1
1
  import { DeferRenderingWithHandlersResult } from "../types.mjs";
2
2
  import { UseDeferUntilOnReadyOptions } from "./types.mjs";
3
3
  import { ReactNode } from "react";
4
-
5
4
  //#region src/useDeferUntilOnReady/useDeferUntilOnReady.d.ts
6
5
  /**
7
- * 戻り値として返す`onReady`が実行されるまで描画を遅延させるhook
6
+ * 戻り値として返す`onReady`が実行されるまで描画を遅延させるhook\
7
+ * どのハンドラーを呼んだ場合も、待機中の状態の変更は取り消され、最後に呼んだハンドラーの状態になる
8
8
  * @param target 描画対象のノード
9
9
  * @param options オプション
10
10
  * @returns state('pending', 'ready', 'fallback')と状態に応じたノードと状態変更用のハンドラー
11
11
  */
12
- declare function useDeferUntilOnReady<T extends ReactNode, P extends ReactNode = ReactNode, E extends ReactNode = ReactNode>(target: T, options?: UseDeferUntilOnReadyOptions<P, E>): DeferRenderingWithHandlersResult<T | P | E>;
13
- //#endregion
14
- export { useDeferUntilOnReady as default };
12
+ export default function useDeferUntilOnReady<T extends ReactNode, P extends ReactNode = ReactNode, E extends ReactNode = ReactNode>(target: T, options?: UseDeferUntilOnReadyOptions<P, E>): DeferRenderingWithHandlersResult<T | P | E>;
13
+ //#endregion
@@ -3,12 +3,12 @@
3
3
  import { RenderingState } from "../constants.mjs";
4
4
  import useDeferUntilReady from "../useDeferUntilReady/useDeferUntilReady.mjs";
5
5
  import "../useDeferUntilReady/index.mjs";
6
- import { useMemo, useState } from "react";
7
- import debounce from "@fringeworks/utils/timer/debounce";
6
+ import { useCallback, useEffect, useRef, useState } from "react";
8
7
 
9
8
  //#region src/useDeferUntilOnReady/useDeferUntilOnReady.tsx
10
9
  /**
11
- * 戻り値として返す`onReady`が実行されるまで描画を遅延させるhook
10
+ * 戻り値として返す`onReady`が実行されるまで描画を遅延させるhook\
11
+ * どのハンドラーを呼んだ場合も、待機中の状態の変更は取り消され、最後に呼んだハンドラーの状態になる
12
12
  * @param target 描画対象のノード
13
13
  * @param options オプション
14
14
  * @returns state('pending', 'ready', 'fallback')と状態に応じたノードと状態変更用のハンドラー
@@ -16,18 +16,26 @@ import debounce from "@fringeworks/utils/timer/debounce";
16
16
  function useDeferUntilOnReady(target, options = {}) {
17
17
  const { onReadyDelay, onFallbackDelay, onPendingDelay, ...opts } = options;
18
18
  const [state, setState] = useState(RenderingState.pending);
19
- const onReady = useMemo(() => {
20
- const fn = () => setState(RenderingState.ready);
21
- return onReadyDelay != null ? debounce(fn, onReadyDelay) : fn;
22
- }, [onReadyDelay]);
23
- const onFallback = useMemo(() => {
24
- const fn = () => setState(RenderingState.fallback);
25
- return onFallbackDelay != null ? debounce(fn, onFallbackDelay) : fn;
26
- }, [onFallbackDelay]);
27
- const onPending = useMemo(() => {
28
- const fn = () => setState(RenderingState.pending);
29
- return onPendingDelay != null ? debounce(fn, onPendingDelay) : fn;
30
- }, [onPendingDelay]);
19
+ const timerRef = useRef(void 0);
20
+ const cancel = useCallback(() => {
21
+ clearTimeout(timerRef.current);
22
+ timerRef.current = void 0;
23
+ }, []);
24
+ const changeState = useCallback((nextState, delay) => {
25
+ cancel();
26
+ if (delay == null) {
27
+ setState(nextState);
28
+ return;
29
+ }
30
+ timerRef.current = setTimeout(() => {
31
+ timerRef.current = void 0;
32
+ setState(nextState);
33
+ }, delay);
34
+ }, [cancel]);
35
+ useEffect(() => cancel, [cancel]);
36
+ const onReady = useCallback(() => changeState(RenderingState.ready, onReadyDelay), [changeState, onReadyDelay]);
37
+ const onFallback = useCallback(() => changeState(RenderingState.fallback, onFallbackDelay), [changeState, onFallbackDelay]);
38
+ const onPending = useCallback(() => changeState(RenderingState.pending, onPendingDelay), [changeState, onPendingDelay]);
31
39
  return {
32
40
  ...useDeferUntilReady(target, state, opts),
33
41
  onPending,
@@ -1,5 +1,5 @@
1
- 'use client';
1
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
2
+ const require_useDeferUntilReady_useDeferUntilReady = require("./useDeferUntilReady.cjs");
2
3
 
3
- const require_useDeferUntilReady_useDeferUntilReady = require('./useDeferUntilReady.cjs');
4
-
5
- module.exports = require_useDeferUntilReady_useDeferUntilReady;
4
+ exports.default = require_useDeferUntilReady_useDeferUntilReady.default;
5
+ exports.useDeferUntilReady = require_useDeferUntilReady_useDeferUntilReady.default;
@@ -1,3 +1,3 @@
1
1
  import { UseDeferUntilReadyOptions } from "./types.cjs";
2
2
  import useDeferUntilReady from "./useDeferUntilReady.cjs";
3
- export { type UseDeferUntilReadyOptions, useDeferUntilReady as default };
3
+ export { type UseDeferUntilReadyOptions, useDeferUntilReady as default, useDeferUntilReady };
@@ -1,3 +1,3 @@
1
1
  import { UseDeferUntilReadyOptions } from "./types.mjs";
2
2
  import useDeferUntilReady from "./useDeferUntilReady.mjs";
3
- export { type UseDeferUntilReadyOptions, useDeferUntilReady as default };
3
+ export { type UseDeferUntilReadyOptions, useDeferUntilReady as default, useDeferUntilReady };
@@ -1,5 +1,3 @@
1
- 'use client';
2
-
3
1
  import useDeferUntilReady from "./useDeferUntilReady.mjs";
4
2
 
5
- export { useDeferUntilReady as default };
3
+ export { useDeferUntilReady as default, useDeferUntilReady };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -1,7 +1,5 @@
1
1
  import { DeferRenderingWithFallbackOptionsBase } from "../types.cjs";
2
2
  import { ReactNode } from "react";
3
-
4
3
  //#region src/useDeferUntilReady/types.d.ts
5
- type UseDeferUntilReadyOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = DeferRenderingWithFallbackOptionsBase<P, E>;
6
- //#endregion
7
- export { UseDeferUntilReadyOptions };
4
+ export type UseDeferUntilReadyOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = DeferRenderingWithFallbackOptionsBase<P, E>;
5
+ //#endregion
@@ -1,7 +1,5 @@
1
1
  import { DeferRenderingWithFallbackOptionsBase } from "../types.mjs";
2
2
  import { ReactNode } from "react";
3
-
4
3
  //#region src/useDeferUntilReady/types.d.ts
5
- type UseDeferUntilReadyOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = DeferRenderingWithFallbackOptionsBase<P, E>;
6
- //#endregion
7
- export { UseDeferUntilReadyOptions };
4
+ export type UseDeferUntilReadyOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = DeferRenderingWithFallbackOptionsBase<P, E>;
5
+ //#endregion
@@ -1,9 +1,7 @@
1
1
  'use client';
2
2
 
3
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
4
- const require_constants = require('../constants.cjs');
5
- let _fringeworks_react_utils_hooks_useIsMounted = require("@fringeworks/react-utils/hooks/useIsMounted");
6
- _fringeworks_react_utils_hooks_useIsMounted = require_runtime.__toESM(_fringeworks_react_utils_hooks_useIsMounted, 1);
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
+ const require_constants = require("../constants.cjs");
7
5
  let react = require("react");
8
6
 
9
7
  //#region src/useDeferUntilReady/useDeferUntilReady.tsx
@@ -16,45 +14,35 @@ let react = require("react");
16
14
  */
17
15
  function useDeferUntilReady(target, state, options = {}) {
18
16
  const { pending, fallback, pendingDefer, fallbackDefer, readyDefer, preserveOnceFallback, preserveOnceReady } = options;
19
- const latestStateRef = (0, react.useRef)(null);
20
- const latestState = latestStateRef.current;
21
- let currentState = state;
22
- if (preserveOnceReady && latestState === require_constants.RenderingState.ready) currentState = latestState;
23
- else if (preserveOnceFallback && latestState === require_constants.RenderingState.fallback) currentState = latestState;
24
- latestStateRef.current = currentState;
17
+ const [preservedState, setPreservedState] = (0, react.useState)(null);
18
+ const isPreserved = preserveOnceReady && preservedState === require_constants.RenderingState.ready || preserveOnceFallback && preservedState === require_constants.RenderingState.fallback;
19
+ const currentState = isPreserved && preservedState ? preservedState : state;
20
+ if (!isPreserved && (preserveOnceReady && state === require_constants.RenderingState.ready || preserveOnceFallback && state === require_constants.RenderingState.fallback)) setPreservedState(state);
25
21
  const defer = {
26
22
  pending: pendingDefer,
27
23
  fallback: fallbackDefer,
28
24
  ready: readyDefer
29
25
  }[currentState];
30
- const deferRef = (0, react.useRef)(defer);
31
- deferRef.current = defer;
32
26
  const [shownState, setShownState] = (0, react.useState)(() => defer == null ? currentState : null);
33
- const isMounted = (0, _fringeworks_react_utils_hooks_useIsMounted.default)();
27
+ if (defer == null && shownState !== currentState) setShownState(currentState);
34
28
  (0, react.useEffect)(() => {
35
- const defer = deferRef.current;
36
- if (defer == null) {
29
+ if (defer == null) return;
30
+ const timeoutId = setTimeout(() => {
37
31
  setShownState(currentState);
38
- return;
39
- } else {
40
- const timeoutId = setTimeout(() => {
41
- if (isMounted()) setShownState(currentState);
42
- }, defer);
43
- return () => {
44
- clearTimeout(timeoutId);
45
- };
46
- }
47
- }, [currentState]);
48
- const node = shownState == null ? null : {
49
- pending,
50
- fallback,
51
- ready: target
52
- }[shownState];
32
+ }, defer);
33
+ return () => {
34
+ clearTimeout(timeoutId);
35
+ };
36
+ }, [currentState, defer]);
53
37
  return {
54
38
  state: currentState,
55
- node
39
+ node: shownState == null ? null : {
40
+ pending,
41
+ fallback,
42
+ ready: target
43
+ }[shownState]
56
44
  };
57
45
  }
58
46
 
59
47
  //#endregion
60
- module.exports = useDeferUntilReady;
48
+ exports.default = useDeferUntilReady;
@@ -2,7 +2,6 @@ import { RenderingState } from "../constants.cjs";
2
2
  import { DeferRenderingResult } from "../types.cjs";
3
3
  import { UseDeferUntilReadyOptions } from "./types.cjs";
4
4
  import { ReactNode } from "react";
5
-
6
5
  //#region src/useDeferUntilReady/useDeferUntilReady.d.ts
7
6
  /**
8
7
  * ステートが'ready'になるまで描画を遅延させるhook
@@ -2,7 +2,6 @@ import { RenderingState } from "../constants.mjs";
2
2
  import { DeferRenderingResult } from "../types.mjs";
3
3
  import { UseDeferUntilReadyOptions } from "./types.mjs";
4
4
  import { ReactNode } from "react";
5
-
6
5
  //#region src/useDeferUntilReady/useDeferUntilReady.d.ts
7
6
  /**
8
7
  * ステートが'ready'になるまで描画を遅延させるhook
@@ -11,6 +10,5 @@ import { ReactNode } from "react";
11
10
  * @param options オプション
12
11
  * @returns state('pending', 'ready', 'fallback')と状態に応じたノード
13
12
  */
14
- declare function useDeferUntilReady<T extends ReactNode, P extends ReactNode = ReactNode, E extends ReactNode = ReactNode>(target: T, state: RenderingState, options?: UseDeferUntilReadyOptions<P, E>): DeferRenderingResult<T | P | E>;
15
- //#endregion
16
- export { useDeferUntilReady as default };
13
+ export default function useDeferUntilReady<T extends ReactNode, P extends ReactNode = ReactNode, E extends ReactNode = ReactNode>(target: T, state: RenderingState, options?: UseDeferUntilReadyOptions<P, E>): DeferRenderingResult<T | P | E>;
14
+ //#endregion
@@ -1,8 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { RenderingState } from "../constants.mjs";
4
- import useIsMounted from "@fringeworks/react-utils/hooks/useIsMounted";
5
- import { useEffect, useRef, useState } from "react";
4
+ import { useEffect, useState } from "react";
6
5
 
7
6
  //#region src/useDeferUntilReady/useDeferUntilReady.tsx
8
7
  /**
@@ -14,43 +13,33 @@ import { useEffect, useRef, useState } from "react";
14
13
  */
15
14
  function useDeferUntilReady(target, state, options = {}) {
16
15
  const { pending, fallback, pendingDefer, fallbackDefer, readyDefer, preserveOnceFallback, preserveOnceReady } = options;
17
- const latestStateRef = useRef(null);
18
- const latestState = latestStateRef.current;
19
- let currentState = state;
20
- if (preserveOnceReady && latestState === RenderingState.ready) currentState = latestState;
21
- else if (preserveOnceFallback && latestState === RenderingState.fallback) currentState = latestState;
22
- latestStateRef.current = currentState;
16
+ const [preservedState, setPreservedState] = useState(null);
17
+ const isPreserved = preserveOnceReady && preservedState === RenderingState.ready || preserveOnceFallback && preservedState === RenderingState.fallback;
18
+ const currentState = isPreserved && preservedState ? preservedState : state;
19
+ if (!isPreserved && (preserveOnceReady && state === RenderingState.ready || preserveOnceFallback && state === RenderingState.fallback)) setPreservedState(state);
23
20
  const defer = {
24
21
  pending: pendingDefer,
25
22
  fallback: fallbackDefer,
26
23
  ready: readyDefer
27
24
  }[currentState];
28
- const deferRef = useRef(defer);
29
- deferRef.current = defer;
30
25
  const [shownState, setShownState] = useState(() => defer == null ? currentState : null);
31
- const isMounted = useIsMounted();
26
+ if (defer == null && shownState !== currentState) setShownState(currentState);
32
27
  useEffect(() => {
33
- const defer = deferRef.current;
34
- if (defer == null) {
28
+ if (defer == null) return;
29
+ const timeoutId = setTimeout(() => {
35
30
  setShownState(currentState);
36
- return;
37
- } else {
38
- const timeoutId = setTimeout(() => {
39
- if (isMounted()) setShownState(currentState);
40
- }, defer);
41
- return () => {
42
- clearTimeout(timeoutId);
43
- };
44
- }
45
- }, [currentState]);
46
- const node = shownState == null ? null : {
47
- pending,
48
- fallback,
49
- ready: target
50
- }[shownState];
31
+ }, defer);
32
+ return () => {
33
+ clearTimeout(timeoutId);
34
+ };
35
+ }, [currentState, defer]);
51
36
  return {
52
37
  state: currentState,
53
- node
38
+ node: shownState == null ? null : {
39
+ pending,
40
+ fallback,
41
+ ready: target
42
+ }[shownState]
54
43
  };
55
44
  }
56
45
 
@@ -1,5 +1,5 @@
1
- 'use client';
1
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
2
+ const require_useDeferUntilRender_useDeferUntilRender = require("./useDeferUntilRender.cjs");
2
3
 
3
- const require_useDeferUntilRender_useDeferUntilRender = require('./useDeferUntilRender.cjs');
4
-
5
- module.exports = require_useDeferUntilRender_useDeferUntilRender;
4
+ exports.default = require_useDeferUntilRender_useDeferUntilRender.default;
5
+ exports.useDeferUntilRender = require_useDeferUntilRender_useDeferUntilRender.default;
@@ -1,3 +1,3 @@
1
1
  import { UseDeferUntilRenderOptions } from "./types.cjs";
2
2
  import useDeferUntilRender from "./useDeferUntilRender.cjs";
3
- export { type UseDeferUntilRenderOptions, useDeferUntilRender as default };
3
+ export { type UseDeferUntilRenderOptions, useDeferUntilRender as default, useDeferUntilRender };
@@ -1,3 +1,3 @@
1
1
  import { UseDeferUntilRenderOptions } from "./types.mjs";
2
2
  import useDeferUntilRender from "./useDeferUntilRender.mjs";
3
- export { type UseDeferUntilRenderOptions, useDeferUntilRender as default };
3
+ export { type UseDeferUntilRenderOptions, useDeferUntilRender as default, useDeferUntilRender };
@@ -1,5 +1,3 @@
1
- 'use client';
2
-
3
1
  import useDeferUntilRender from "./useDeferUntilRender.mjs";
4
2
 
5
- export { useDeferUntilRender as default };
3
+ export { useDeferUntilRender as default, useDeferUntilRender };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -1,15 +1,16 @@
1
1
  import { UseDeferUntilTrueOptions } from "../useDeferUntilTrue/types.cjs";
2
+ import "../useDeferUntilTrue/index.cjs";
2
3
  import { ReactNode, RefObject } from "react";
3
-
4
4
  //#region src/useDeferUntilRender/types.d.ts
5
- type UseDeferUntilRenderOptions<P extends ReactNode = ReactNode> = UseDeferUntilTrueOptions<P> & {
5
+ export type UseDeferUntilRenderOptions<P extends ReactNode = ReactNode> = UseDeferUntilTrueOptions<P> & {
6
6
  /**
7
7
  * 監視するコンテナーの参照\
8
8
  * デフォルトはdocument(文書全体)
9
9
  */
10
10
  rootRef?: RefObject<Element | Document | null | undefined>;
11
11
  /**
12
- * DOM変更検知時のデバウンス時間(ミリ秒)
12
+ * DOMの変化を反映するまでの時間(ミリ秒)\
13
+ * この間に続けて変化した場合は、最後の変化から数え直す。0の場合は次のタスクで反映する\
13
14
  * デフォルトは100ms
14
15
  * @default 100
15
16
  */
@@ -21,5 +22,4 @@ type UseDeferUntilRenderOptions<P extends ReactNode = ReactNode> = UseDeferUntil
21
22
  */
22
23
  initialCondition?: boolean;
23
24
  };
24
- //#endregion
25
- export { UseDeferUntilRenderOptions };
25
+ //#endregion
@@ -1,15 +1,16 @@
1
1
  import { UseDeferUntilTrueOptions } from "../useDeferUntilTrue/types.mjs";
2
+ import "../useDeferUntilTrue/index.mjs";
2
3
  import { ReactNode, RefObject } from "react";
3
-
4
4
  //#region src/useDeferUntilRender/types.d.ts
5
- type UseDeferUntilRenderOptions<P extends ReactNode = ReactNode> = UseDeferUntilTrueOptions<P> & {
5
+ export type UseDeferUntilRenderOptions<P extends ReactNode = ReactNode> = UseDeferUntilTrueOptions<P> & {
6
6
  /**
7
7
  * 監視するコンテナーの参照\
8
8
  * デフォルトはdocument(文書全体)
9
9
  */
10
10
  rootRef?: RefObject<Element | Document | null | undefined>;
11
11
  /**
12
- * DOM変更検知時のデバウンス時間(ミリ秒)
12
+ * DOMの変化を反映するまでの時間(ミリ秒)\
13
+ * この間に続けて変化した場合は、最後の変化から数え直す。0の場合は次のタスクで反映する\
13
14
  * デフォルトは100ms
14
15
  * @default 100
15
16
  */
@@ -21,5 +22,4 @@ type UseDeferUntilRenderOptions<P extends ReactNode = ReactNode> = UseDeferUntil
21
22
  */
22
23
  initialCondition?: boolean;
23
24
  };
24
- //#endregion
25
- export { UseDeferUntilRenderOptions };
25
+ //#endregion