@fringeworks/react-defer-rendering 0.8.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.
- package/LICENSE +21 -0
- package/README.ja.md +319 -0
- package/README.md +319 -0
- package/_usePromiseState.cjs +42 -0
- package/_usePromiseState.d.cts +11 -0
- package/_usePromiseState.d.mts +12 -0
- package/_usePromiseState.mjs +40 -0
- package/_virtual/_rolldown/runtime.cjs +29 -0
- package/constants.cjs +14 -0
- package/constants.d.cts +15 -0
- package/constants.d.mts +15 -0
- package/constants.mjs +12 -0
- package/index.cjs +46 -0
- package/index.d.cts +31 -0
- package/index.d.mts +31 -0
- package/index.mjs +32 -0
- package/package.json +91 -0
- package/types.cjs +0 -0
- package/types.d.cts +82 -0
- package/types.d.mts +82 -0
- package/types.mjs +1 -0
- package/useDeferUntilAsyncComplete/index.cjs +5 -0
- package/useDeferUntilAsyncComplete/index.d.cts +3 -0
- package/useDeferUntilAsyncComplete/index.d.mts +3 -0
- package/useDeferUntilAsyncComplete/index.mjs +5 -0
- package/useDeferUntilAsyncComplete/types.cjs +0 -0
- package/useDeferUntilAsyncComplete/types.d.cts +7 -0
- package/useDeferUntilAsyncComplete/types.d.mts +7 -0
- package/useDeferUntilAsyncComplete/types.mjs +1 -0
- package/useDeferUntilAsyncComplete/useDeferUntilAsyncComplete.cjs +20 -0
- package/useDeferUntilAsyncComplete/useDeferUntilAsyncComplete.d.cts +14 -0
- package/useDeferUntilAsyncComplete/useDeferUntilAsyncComplete.d.mts +15 -0
- package/useDeferUntilAsyncComplete/useDeferUntilAsyncComplete.mjs +20 -0
- package/useDeferUntilBreakpoint/index.cjs +5 -0
- package/useDeferUntilBreakpoint/index.d.cts +3 -0
- package/useDeferUntilBreakpoint/index.d.mts +3 -0
- package/useDeferUntilBreakpoint/index.mjs +5 -0
- package/useDeferUntilBreakpoint/types.cjs +0 -0
- package/useDeferUntilBreakpoint/types.d.cts +20 -0
- package/useDeferUntilBreakpoint/types.d.mts +20 -0
- package/useDeferUntilBreakpoint/types.mjs +1 -0
- package/useDeferUntilBreakpoint/useDeferUntilBreakpoint.cjs +44 -0
- package/useDeferUntilBreakpoint/useDeferUntilBreakpoint.d.cts +14 -0
- package/useDeferUntilBreakpoint/useDeferUntilBreakpoint.d.mts +15 -0
- package/useDeferUntilBreakpoint/useDeferUntilBreakpoint.mjs +42 -0
- package/useDeferUntilCallThreshold/index.cjs +5 -0
- package/useDeferUntilCallThreshold/index.d.cts +3 -0
- package/useDeferUntilCallThreshold/index.d.mts +3 -0
- package/useDeferUntilCallThreshold/index.mjs +5 -0
- package/useDeferUntilCallThreshold/types.cjs +0 -0
- package/useDeferUntilCallThreshold/types.d.cts +23 -0
- package/useDeferUntilCallThreshold/types.d.mts +23 -0
- package/useDeferUntilCallThreshold/types.mjs +1 -0
- package/useDeferUntilCallThreshold/useDeferUntilCallThreshold.cjs +55 -0
- package/useDeferUntilCallThreshold/useDeferUntilCallThreshold.d.cts +13 -0
- package/useDeferUntilCallThreshold/useDeferUntilCallThreshold.d.mts +14 -0
- package/useDeferUntilCallThreshold/useDeferUntilCallThreshold.mjs +55 -0
- package/useDeferUntilChange/index.cjs +5 -0
- package/useDeferUntilChange/index.d.cts +3 -0
- package/useDeferUntilChange/index.d.mts +3 -0
- package/useDeferUntilChange/index.mjs +5 -0
- package/useDeferUntilChange/types.cjs +0 -0
- package/useDeferUntilChange/types.d.cts +7 -0
- package/useDeferUntilChange/types.d.mts +7 -0
- package/useDeferUntilChange/types.mjs +1 -0
- package/useDeferUntilChange/useDeferUntilChange.cjs +30 -0
- package/useDeferUntilChange/useDeferUntilChange.d.cts +14 -0
- package/useDeferUntilChange/useDeferUntilChange.d.mts +15 -0
- package/useDeferUntilChange/useDeferUntilChange.mjs +28 -0
- package/useDeferUntilDate/index.cjs +5 -0
- package/useDeferUntilDate/index.d.cts +3 -0
- package/useDeferUntilDate/index.d.mts +3 -0
- package/useDeferUntilDate/index.mjs +5 -0
- package/useDeferUntilDate/types.cjs +0 -0
- package/useDeferUntilDate/types.d.cts +7 -0
- package/useDeferUntilDate/types.d.mts +7 -0
- package/useDeferUntilDate/types.mjs +1 -0
- package/useDeferUntilDate/useDeferUntilDate.cjs +21 -0
- package/useDeferUntilDate/useDeferUntilDate.d.cts +14 -0
- package/useDeferUntilDate/useDeferUntilDate.d.mts +15 -0
- package/useDeferUntilDate/useDeferUntilDate.mjs +21 -0
- package/useDeferUntilIntersected/index.cjs +5 -0
- package/useDeferUntilIntersected/index.d.cts +3 -0
- package/useDeferUntilIntersected/index.d.mts +3 -0
- package/useDeferUntilIntersected/index.mjs +5 -0
- package/useDeferUntilIntersected/types.cjs +0 -0
- package/useDeferUntilIntersected/types.d.cts +31 -0
- package/useDeferUntilIntersected/types.d.mts +31 -0
- package/useDeferUntilIntersected/types.mjs +1 -0
- package/useDeferUntilIntersected/useDeferUntilIntersected.cjs +60 -0
- package/useDeferUntilIntersected/useDeferUntilIntersected.d.cts +14 -0
- package/useDeferUntilIntersected/useDeferUntilIntersected.d.mts +15 -0
- package/useDeferUntilIntersected/useDeferUntilIntersected.mjs +58 -0
- package/useDeferUntilOnReady/index.cjs +5 -0
- package/useDeferUntilOnReady/index.d.cts +3 -0
- package/useDeferUntilOnReady/index.d.mts +3 -0
- package/useDeferUntilOnReady/index.mjs +5 -0
- package/useDeferUntilOnReady/types.cjs +0 -0
- package/useDeferUntilOnReady/types.d.cts +23 -0
- package/useDeferUntilOnReady/types.d.mts +23 -0
- package/useDeferUntilOnReady/types.mjs +1 -0
- package/useDeferUntilOnReady/useDeferUntilOnReady.cjs +42 -0
- package/useDeferUntilOnReady/useDeferUntilOnReady.d.cts +13 -0
- package/useDeferUntilOnReady/useDeferUntilOnReady.d.mts +14 -0
- package/useDeferUntilOnReady/useDeferUntilOnReady.mjs +40 -0
- package/useDeferUntilReady/index.cjs +5 -0
- package/useDeferUntilReady/index.d.cts +3 -0
- package/useDeferUntilReady/index.d.mts +3 -0
- package/useDeferUntilReady/index.mjs +5 -0
- package/useDeferUntilReady/types.cjs +0 -0
- package/useDeferUntilReady/types.d.cts +7 -0
- package/useDeferUntilReady/types.d.mts +7 -0
- package/useDeferUntilReady/types.mjs +1 -0
- package/useDeferUntilReady/useDeferUntilReady.cjs +60 -0
- package/useDeferUntilReady/useDeferUntilReady.d.cts +15 -0
- package/useDeferUntilReady/useDeferUntilReady.d.mts +16 -0
- package/useDeferUntilReady/useDeferUntilReady.mjs +58 -0
- package/useDeferUntilRender/index.cjs +5 -0
- package/useDeferUntilRender/index.d.cts +3 -0
- package/useDeferUntilRender/index.d.mts +3 -0
- package/useDeferUntilRender/index.mjs +5 -0
- package/useDeferUntilRender/types.cjs +0 -0
- package/useDeferUntilRender/types.d.cts +25 -0
- package/useDeferUntilRender/types.d.mts +25 -0
- package/useDeferUntilRender/types.mjs +1 -0
- package/useDeferUntilRender/useDeferUntilRender.cjs +53 -0
- package/useDeferUntilRender/useDeferUntilRender.d.cts +14 -0
- package/useDeferUntilRender/useDeferUntilRender.d.mts +15 -0
- package/useDeferUntilRender/useDeferUntilRender.mjs +51 -0
- package/useDeferUntilResolved/index.cjs +5 -0
- package/useDeferUntilResolved/index.d.cts +3 -0
- package/useDeferUntilResolved/index.d.mts +3 -0
- package/useDeferUntilResolved/index.mjs +5 -0
- package/useDeferUntilResolved/types.cjs +0 -0
- package/useDeferUntilResolved/types.d.cts +7 -0
- package/useDeferUntilResolved/types.d.mts +7 -0
- package/useDeferUntilResolved/types.mjs +1 -0
- package/useDeferUntilResolved/useDeferUntilResolved.cjs +21 -0
- package/useDeferUntilResolved/useDeferUntilResolved.d.cts +14 -0
- package/useDeferUntilResolved/useDeferUntilResolved.d.mts +15 -0
- package/useDeferUntilResolved/useDeferUntilResolved.mjs +21 -0
- package/useDeferUntilScrolled/index.cjs +5 -0
- package/useDeferUntilScrolled/index.d.cts +3 -0
- package/useDeferUntilScrolled/index.d.mts +3 -0
- package/useDeferUntilScrolled/index.mjs +5 -0
- package/useDeferUntilScrolled/types.cjs +0 -0
- package/useDeferUntilScrolled/types.d.cts +29 -0
- package/useDeferUntilScrolled/types.d.mts +29 -0
- package/useDeferUntilScrolled/types.mjs +1 -0
- package/useDeferUntilScrolled/useDeferUntilScrolled.cjs +94 -0
- package/useDeferUntilScrolled/useDeferUntilScrolled.d.cts +14 -0
- package/useDeferUntilScrolled/useDeferUntilScrolled.d.mts +15 -0
- package/useDeferUntilScrolled/useDeferUntilScrolled.mjs +91 -0
- package/useDeferUntilTimeout/index.cjs +5 -0
- package/useDeferUntilTimeout/index.d.cts +3 -0
- package/useDeferUntilTimeout/index.d.mts +3 -0
- package/useDeferUntilTimeout/index.mjs +5 -0
- package/useDeferUntilTimeout/types.cjs +0 -0
- package/useDeferUntilTimeout/types.d.cts +7 -0
- package/useDeferUntilTimeout/types.d.mts +7 -0
- package/useDeferUntilTimeout/types.mjs +1 -0
- package/useDeferUntilTimeout/useDeferUntilTimeout.cjs +40 -0
- package/useDeferUntilTimeout/useDeferUntilTimeout.d.cts +14 -0
- package/useDeferUntilTimeout/useDeferUntilTimeout.d.mts +15 -0
- package/useDeferUntilTimeout/useDeferUntilTimeout.mjs +37 -0
- package/useDeferUntilTrue/index.cjs +5 -0
- package/useDeferUntilTrue/index.d.cts +3 -0
- package/useDeferUntilTrue/index.d.mts +3 -0
- package/useDeferUntilTrue/index.mjs +5 -0
- package/useDeferUntilTrue/types.cjs +0 -0
- package/useDeferUntilTrue/types.d.cts +7 -0
- package/useDeferUntilTrue/types.d.mts +7 -0
- package/useDeferUntilTrue/types.mjs +1 -0
- package/useDeferUntilTrue/useDeferUntilTrue.cjs +20 -0
- package/useDeferUntilTrue/useDeferUntilTrue.d.cts +14 -0
- package/useDeferUntilTrue/useDeferUntilTrue.d.mts +15 -0
- package/useDeferUntilTrue/useDeferUntilTrue.mjs +20 -0
- package/useDeferUntilWebFontReady/index.cjs +5 -0
- package/useDeferUntilWebFontReady/index.d.cts +3 -0
- package/useDeferUntilWebFontReady/index.d.mts +3 -0
- package/useDeferUntilWebFontReady/index.mjs +5 -0
- package/useDeferUntilWebFontReady/types.cjs +0 -0
- package/useDeferUntilWebFontReady/types.d.cts +49 -0
- package/useDeferUntilWebFontReady/types.d.mts +49 -0
- package/useDeferUntilWebFontReady/types.mjs +1 -0
- package/useDeferUntilWebFontReady/useDeferUntilWebFontReady.cjs +93 -0
- package/useDeferUntilWebFontReady/useDeferUntilWebFontReady.d.cts +16 -0
- package/useDeferUntilWebFontReady/useDeferUntilWebFontReady.d.mts +17 -0
- package/useDeferUntilWebFontReady/useDeferUntilWebFontReady.mjs +90 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use client';
|
|
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);
|
|
7
|
+
let react = require("react");
|
|
8
|
+
|
|
9
|
+
//#region src/useDeferUntilReady/useDeferUntilReady.tsx
|
|
10
|
+
/**
|
|
11
|
+
* ステートが'ready'になるまで描画を遅延させるhook
|
|
12
|
+
* @param target 描画対象のノード
|
|
13
|
+
* @param state ステート('pending', 'ready', 'fallback')
|
|
14
|
+
* @param options オプション
|
|
15
|
+
* @returns state('pending', 'ready', 'fallback')と状態に応じたノード
|
|
16
|
+
*/
|
|
17
|
+
function useDeferUntilReady(target, state, options = {}) {
|
|
18
|
+
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;
|
|
25
|
+
const defer = {
|
|
26
|
+
pending: pendingDefer,
|
|
27
|
+
fallback: fallbackDefer,
|
|
28
|
+
ready: readyDefer
|
|
29
|
+
}[currentState];
|
|
30
|
+
const deferRef = (0, react.useRef)(defer);
|
|
31
|
+
deferRef.current = defer;
|
|
32
|
+
const [shownState, setShownState] = (0, react.useState)(() => defer == null ? currentState : null);
|
|
33
|
+
const isMounted = (0, _fringeworks_react_utils_hooks_useIsMounted.default)();
|
|
34
|
+
(0, react.useEffect)(() => {
|
|
35
|
+
const defer = deferRef.current;
|
|
36
|
+
if (defer == null) {
|
|
37
|
+
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];
|
|
53
|
+
return {
|
|
54
|
+
state: currentState,
|
|
55
|
+
node
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
module.exports = useDeferUntilReady;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RenderingState } from "../constants.cjs";
|
|
2
|
+
import { DeferRenderingResult } from "../types.cjs";
|
|
3
|
+
import { UseDeferUntilReadyOptions } from "./types.cjs";
|
|
4
|
+
import { ReactNode } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/useDeferUntilReady/useDeferUntilReady.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* ステートが'ready'になるまで描画を遅延させるhook
|
|
9
|
+
* @param target 描画対象のノード
|
|
10
|
+
* @param state ステート('pending', 'ready', 'fallback')
|
|
11
|
+
* @param options オプション
|
|
12
|
+
* @returns state('pending', 'ready', 'fallback')と状態に応じたノード
|
|
13
|
+
*/
|
|
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
|
+
export = useDeferUntilReady;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RenderingState } from "../constants.mjs";
|
|
2
|
+
import { DeferRenderingResult } from "../types.mjs";
|
|
3
|
+
import { UseDeferUntilReadyOptions } from "./types.mjs";
|
|
4
|
+
import { ReactNode } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/useDeferUntilReady/useDeferUntilReady.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* ステートが'ready'になるまで描画を遅延させるhook
|
|
9
|
+
* @param target 描画対象のノード
|
|
10
|
+
* @param state ステート('pending', 'ready', 'fallback')
|
|
11
|
+
* @param options オプション
|
|
12
|
+
* @returns state('pending', 'ready', 'fallback')と状態に応じたノード
|
|
13
|
+
*/
|
|
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 };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { RenderingState } from "../constants.mjs";
|
|
4
|
+
import useIsMounted from "@fringeworks/react-utils/hooks/useIsMounted";
|
|
5
|
+
import { useEffect, useRef, useState } from "react";
|
|
6
|
+
|
|
7
|
+
//#region src/useDeferUntilReady/useDeferUntilReady.tsx
|
|
8
|
+
/**
|
|
9
|
+
* ステートが'ready'になるまで描画を遅延させるhook
|
|
10
|
+
* @param target 描画対象のノード
|
|
11
|
+
* @param state ステート('pending', 'ready', 'fallback')
|
|
12
|
+
* @param options オプション
|
|
13
|
+
* @returns state('pending', 'ready', 'fallback')と状態に応じたノード
|
|
14
|
+
*/
|
|
15
|
+
function useDeferUntilReady(target, state, options = {}) {
|
|
16
|
+
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;
|
|
23
|
+
const defer = {
|
|
24
|
+
pending: pendingDefer,
|
|
25
|
+
fallback: fallbackDefer,
|
|
26
|
+
ready: readyDefer
|
|
27
|
+
}[currentState];
|
|
28
|
+
const deferRef = useRef(defer);
|
|
29
|
+
deferRef.current = defer;
|
|
30
|
+
const [shownState, setShownState] = useState(() => defer == null ? currentState : null);
|
|
31
|
+
const isMounted = useIsMounted();
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
const defer = deferRef.current;
|
|
34
|
+
if (defer == null) {
|
|
35
|
+
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];
|
|
51
|
+
return {
|
|
52
|
+
state: currentState,
|
|
53
|
+
node
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { useDeferUntilReady as default };
|
|
File without changes
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { UseDeferUntilTrueOptions } from "../useDeferUntilTrue/types.cjs";
|
|
2
|
+
import { ReactNode, RefObject } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/useDeferUntilRender/types.d.ts
|
|
5
|
+
type UseDeferUntilRenderOptions<P extends ReactNode = ReactNode> = UseDeferUntilTrueOptions<P> & {
|
|
6
|
+
/**
|
|
7
|
+
* 監視するコンテナーの参照\
|
|
8
|
+
* デフォルトはdocument(文書全体)
|
|
9
|
+
*/
|
|
10
|
+
rootRef?: RefObject<Element | Document | null | undefined>;
|
|
11
|
+
/**
|
|
12
|
+
* DOM変更検知時のデバウンス時間(ミリ秒)
|
|
13
|
+
* デフォルトは100ms
|
|
14
|
+
* @default 100
|
|
15
|
+
*/
|
|
16
|
+
detectionDelay?: number;
|
|
17
|
+
/**
|
|
18
|
+
* SSR時など、実際のエレメントの描画状態を判定できない環境での初期値\
|
|
19
|
+
* デフォルトはfalse
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
initialCondition?: boolean;
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export { UseDeferUntilRenderOptions };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { UseDeferUntilTrueOptions } from "../useDeferUntilTrue/types.mjs";
|
|
2
|
+
import { ReactNode, RefObject } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/useDeferUntilRender/types.d.ts
|
|
5
|
+
type UseDeferUntilRenderOptions<P extends ReactNode = ReactNode> = UseDeferUntilTrueOptions<P> & {
|
|
6
|
+
/**
|
|
7
|
+
* 監視するコンテナーの参照\
|
|
8
|
+
* デフォルトはdocument(文書全体)
|
|
9
|
+
*/
|
|
10
|
+
rootRef?: RefObject<Element | Document | null | undefined>;
|
|
11
|
+
/**
|
|
12
|
+
* DOM変更検知時のデバウンス時間(ミリ秒)
|
|
13
|
+
* デフォルトは100ms
|
|
14
|
+
* @default 100
|
|
15
|
+
*/
|
|
16
|
+
detectionDelay?: number;
|
|
17
|
+
/**
|
|
18
|
+
* SSR時など、実際のエレメントの描画状態を判定できない環境での初期値\
|
|
19
|
+
* デフォルトはfalse
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
initialCondition?: boolean;
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export { UseDeferUntilRenderOptions };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
4
|
+
const require_useDeferUntilTrue_useDeferUntilTrue = require('../useDeferUntilTrue/useDeferUntilTrue.cjs');
|
|
5
|
+
require('../useDeferUntilTrue/index.cjs');
|
|
6
|
+
let react = require("react");
|
|
7
|
+
let _fringeworks_utils_timer_debounce = require("@fringeworks/utils/timer/debounce");
|
|
8
|
+
_fringeworks_utils_timer_debounce = require_runtime.__toESM(_fringeworks_utils_timer_debounce, 1);
|
|
9
|
+
|
|
10
|
+
//#region src/useDeferUntilRender/useDeferUntilRender.tsx
|
|
11
|
+
/**
|
|
12
|
+
* セレクターに一致するエレメントが描画されるまで描画を遅延させるhook
|
|
13
|
+
* @param target 描画対象のノード
|
|
14
|
+
* @param query クエリセレクター(例: '.my-class')(null/undefinedの場合は待たずに描画する)
|
|
15
|
+
* @param options オプション
|
|
16
|
+
* @returns state('pending', 'ready')と状態に応じたノード
|
|
17
|
+
*/
|
|
18
|
+
function useDeferUntilRender(target, query, options = {}) {
|
|
19
|
+
const defaultRootRef = (0, react.useRef)(null);
|
|
20
|
+
const { rootRef = defaultRootRef, detectionDelay = 100, preserveOnceReady, initialCondition = false, ...opts } = options;
|
|
21
|
+
return require_useDeferUntilTrue_useDeferUntilTrue(target, (0, react.useSyncExternalStore)((0, react.useCallback)((onStoreChange) => {
|
|
22
|
+
if (!query) return () => {};
|
|
23
|
+
const root = rootRef.current ?? document;
|
|
24
|
+
if (preserveOnceReady && root.querySelector(query)) return () => {};
|
|
25
|
+
const handleMutation = () => {
|
|
26
|
+
onStoreChange();
|
|
27
|
+
if (preserveOnceReady && root.querySelector(query)) observer.disconnect();
|
|
28
|
+
};
|
|
29
|
+
const debouncedHandleMutation = (0, _fringeworks_utils_timer_debounce.default)(handleMutation, detectionDelay);
|
|
30
|
+
const observer = new MutationObserver(debouncedHandleMutation);
|
|
31
|
+
observer.observe(root, {
|
|
32
|
+
childList: true,
|
|
33
|
+
subtree: true
|
|
34
|
+
});
|
|
35
|
+
return () => {
|
|
36
|
+
observer.disconnect();
|
|
37
|
+
};
|
|
38
|
+
}, [
|
|
39
|
+
query,
|
|
40
|
+
rootRef.current,
|
|
41
|
+
detectionDelay,
|
|
42
|
+
preserveOnceReady
|
|
43
|
+
]), (0, react.useCallback)(() => {
|
|
44
|
+
if (!query) return true;
|
|
45
|
+
return (rootRef.current ?? document).querySelector(query) != null;
|
|
46
|
+
}, [query, rootRef.current]), (0, react.useCallback)(() => !query || initialCondition, [query, initialCondition])), {
|
|
47
|
+
preserveOnceReady,
|
|
48
|
+
...opts
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
module.exports = useDeferUntilRender;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DeferRenderingResult } from "../types.cjs";
|
|
2
|
+
import { UseDeferUntilRenderOptions } from "./types.cjs";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/useDeferUntilRender/useDeferUntilRender.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* セレクターに一致するエレメントが描画されるまで描画を遅延させるhook
|
|
8
|
+
* @param target 描画対象のノード
|
|
9
|
+
* @param query クエリセレクター(例: '.my-class')(null/undefinedの場合は待たずに描画する)
|
|
10
|
+
* @param options オプション
|
|
11
|
+
* @returns state('pending', 'ready')と状態に応じたノード
|
|
12
|
+
*/
|
|
13
|
+
declare function useDeferUntilRender<T extends ReactNode, P extends ReactNode = ReactNode>(target: T, query: string | null | undefined, options?: UseDeferUntilRenderOptions<P>): DeferRenderingResult<T | P>;
|
|
14
|
+
export = useDeferUntilRender;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DeferRenderingResult } from "../types.mjs";
|
|
2
|
+
import { UseDeferUntilRenderOptions } from "./types.mjs";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/useDeferUntilRender/useDeferUntilRender.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* セレクターに一致するエレメントが描画されるまで描画を遅延させるhook
|
|
8
|
+
* @param target 描画対象のノード
|
|
9
|
+
* @param query クエリセレクター(例: '.my-class')(null/undefinedの場合は待たずに描画する)
|
|
10
|
+
* @param options オプション
|
|
11
|
+
* @returns state('pending', 'ready')と状態に応じたノード
|
|
12
|
+
*/
|
|
13
|
+
declare function useDeferUntilRender<T extends ReactNode, P extends ReactNode = ReactNode>(target: T, query: string | null | undefined, options?: UseDeferUntilRenderOptions<P>): DeferRenderingResult<T | P>;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { useDeferUntilRender as default };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import useDeferUntilTrue from "../useDeferUntilTrue/useDeferUntilTrue.mjs";
|
|
4
|
+
import "../useDeferUntilTrue/index.mjs";
|
|
5
|
+
import { useCallback, useRef, useSyncExternalStore } from "react";
|
|
6
|
+
import debounce from "@fringeworks/utils/timer/debounce";
|
|
7
|
+
|
|
8
|
+
//#region src/useDeferUntilRender/useDeferUntilRender.tsx
|
|
9
|
+
/**
|
|
10
|
+
* セレクターに一致するエレメントが描画されるまで描画を遅延させるhook
|
|
11
|
+
* @param target 描画対象のノード
|
|
12
|
+
* @param query クエリセレクター(例: '.my-class')(null/undefinedの場合は待たずに描画する)
|
|
13
|
+
* @param options オプション
|
|
14
|
+
* @returns state('pending', 'ready')と状態に応じたノード
|
|
15
|
+
*/
|
|
16
|
+
function useDeferUntilRender(target, query, options = {}) {
|
|
17
|
+
const defaultRootRef = useRef(null);
|
|
18
|
+
const { rootRef = defaultRootRef, detectionDelay = 100, preserveOnceReady, initialCondition = false, ...opts } = options;
|
|
19
|
+
return useDeferUntilTrue(target, useSyncExternalStore(useCallback((onStoreChange) => {
|
|
20
|
+
if (!query) return () => {};
|
|
21
|
+
const root = rootRef.current ?? document;
|
|
22
|
+
if (preserveOnceReady && root.querySelector(query)) return () => {};
|
|
23
|
+
const handleMutation = () => {
|
|
24
|
+
onStoreChange();
|
|
25
|
+
if (preserveOnceReady && root.querySelector(query)) observer.disconnect();
|
|
26
|
+
};
|
|
27
|
+
const debouncedHandleMutation = debounce(handleMutation, detectionDelay);
|
|
28
|
+
const observer = new MutationObserver(debouncedHandleMutation);
|
|
29
|
+
observer.observe(root, {
|
|
30
|
+
childList: true,
|
|
31
|
+
subtree: true
|
|
32
|
+
});
|
|
33
|
+
return () => {
|
|
34
|
+
observer.disconnect();
|
|
35
|
+
};
|
|
36
|
+
}, [
|
|
37
|
+
query,
|
|
38
|
+
rootRef.current,
|
|
39
|
+
detectionDelay,
|
|
40
|
+
preserveOnceReady
|
|
41
|
+
]), useCallback(() => {
|
|
42
|
+
if (!query) return true;
|
|
43
|
+
return (rootRef.current ?? document).querySelector(query) != null;
|
|
44
|
+
}, [query, rootRef.current]), useCallback(() => !query || initialCondition, [query, initialCondition])), {
|
|
45
|
+
preserveOnceReady,
|
|
46
|
+
...opts
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
//#endregion
|
|
51
|
+
export { useDeferUntilRender as default };
|
|
File without changes
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UseDeferUntilReadyOptions } from "../useDeferUntilReady/types.cjs";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/useDeferUntilResolved/types.d.ts
|
|
5
|
+
type UseDeferUntilResolvedOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = UseDeferUntilReadyOptions<P, E>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { UseDeferUntilResolvedOptions };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UseDeferUntilReadyOptions } from "../useDeferUntilReady/types.mjs";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/useDeferUntilResolved/types.d.ts
|
|
5
|
+
type UseDeferUntilResolvedOptions<P extends ReactNode = ReactNode, E extends ReactNode = ReactNode> = UseDeferUntilReadyOptions<P, E>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { UseDeferUntilResolvedOptions };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
const require__usePromiseState = require('../_usePromiseState.cjs');
|
|
4
|
+
const require_useDeferUntilReady_useDeferUntilReady = require('../useDeferUntilReady/useDeferUntilReady.cjs');
|
|
5
|
+
require('../useDeferUntilReady/index.cjs');
|
|
6
|
+
let react = require("react");
|
|
7
|
+
|
|
8
|
+
//#region src/useDeferUntilResolved/useDeferUntilResolved.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Promiseの完了まで描画を遅延させるhook
|
|
11
|
+
* @param target 描画対象のノード
|
|
12
|
+
* @param promise プロミス(null/undefinedの場合は待たずに描画する)
|
|
13
|
+
* @param options オプション
|
|
14
|
+
* @returns state('pending', 'ready', 'fallback')と状態に応じたノード
|
|
15
|
+
*/
|
|
16
|
+
function useDeferUntilResolved(target, promise, options = {}) {
|
|
17
|
+
return require_useDeferUntilReady_useDeferUntilReady(target, require__usePromiseState((0, react.useMemo)(() => promise ? () => promise : null, [promise])), options);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
module.exports = useDeferUntilResolved;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DeferRenderingResult } from "../types.cjs";
|
|
2
|
+
import { UseDeferUntilResolvedOptions } from "./types.cjs";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/useDeferUntilResolved/useDeferUntilResolved.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Promiseの完了まで描画を遅延させるhook
|
|
8
|
+
* @param target 描画対象のノード
|
|
9
|
+
* @param promise プロミス(null/undefinedの場合は待たずに描画する)
|
|
10
|
+
* @param options オプション
|
|
11
|
+
* @returns state('pending', 'ready', 'fallback')と状態に応じたノード
|
|
12
|
+
*/
|
|
13
|
+
declare function useDeferUntilResolved<T extends ReactNode, P extends ReactNode = ReactNode, E extends ReactNode = ReactNode>(target: T, promise: Promise<unknown> | null | undefined, options?: UseDeferUntilResolvedOptions<P, E>): DeferRenderingResult<T | P | E>;
|
|
14
|
+
export = useDeferUntilResolved;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DeferRenderingResult } from "../types.mjs";
|
|
2
|
+
import { UseDeferUntilResolvedOptions } from "./types.mjs";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/useDeferUntilResolved/useDeferUntilResolved.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Promiseの完了まで描画を遅延させるhook
|
|
8
|
+
* @param target 描画対象のノード
|
|
9
|
+
* @param promise プロミス(null/undefinedの場合は待たずに描画する)
|
|
10
|
+
* @param options オプション
|
|
11
|
+
* @returns state('pending', 'ready', 'fallback')と状態に応じたノード
|
|
12
|
+
*/
|
|
13
|
+
declare function useDeferUntilResolved<T extends ReactNode, P extends ReactNode = ReactNode, E extends ReactNode = ReactNode>(target: T, promise: Promise<unknown> | null | undefined, options?: UseDeferUntilResolvedOptions<P, E>): DeferRenderingResult<T | P | E>;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { useDeferUntilResolved as default };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import usePromiseState from "../_usePromiseState.mjs";
|
|
4
|
+
import useDeferUntilReady from "../useDeferUntilReady/useDeferUntilReady.mjs";
|
|
5
|
+
import "../useDeferUntilReady/index.mjs";
|
|
6
|
+
import { useMemo } from "react";
|
|
7
|
+
|
|
8
|
+
//#region src/useDeferUntilResolved/useDeferUntilResolved.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Promiseの完了まで描画を遅延させるhook
|
|
11
|
+
* @param target 描画対象のノード
|
|
12
|
+
* @param promise プロミス(null/undefinedの場合は待たずに描画する)
|
|
13
|
+
* @param options オプション
|
|
14
|
+
* @returns state('pending', 'ready', 'fallback')と状態に応じたノード
|
|
15
|
+
*/
|
|
16
|
+
function useDeferUntilResolved(target, promise, options = {}) {
|
|
17
|
+
return useDeferUntilReady(target, usePromiseState(useMemo(() => promise ? () => promise : null, [promise])), options);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { useDeferUntilResolved as default };
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { UseDeferUntilTrueOptions } from "../useDeferUntilTrue/types.cjs";
|
|
2
|
+
import { ReactNode, RefObject } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/useDeferUntilScrolled/types.d.ts
|
|
5
|
+
type UseDeferUntilScrolledOptions<P extends ReactNode = ReactNode> = UseDeferUntilTrueOptions<P> & {
|
|
6
|
+
/**
|
|
7
|
+
* 監視するコンテナーの参照
|
|
8
|
+
*/
|
|
9
|
+
rootRef?: RefObject<Element | null | undefined>;
|
|
10
|
+
rootMargin?: number;
|
|
11
|
+
/**
|
|
12
|
+
* スクロールイベントのデバウンス時間(ミリ秒)
|
|
13
|
+
* デフォルトは100ms
|
|
14
|
+
* @default 100
|
|
15
|
+
*/
|
|
16
|
+
detectionDelay?: number;
|
|
17
|
+
/**
|
|
18
|
+
* 検知するスクロールの方向
|
|
19
|
+
*/
|
|
20
|
+
direction?: 'vertical' | 'horizontal';
|
|
21
|
+
/**
|
|
22
|
+
* SSR時など、実際のスクロール位置を判定できない環境での初期値\
|
|
23
|
+
* デフォルトはfalse
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
initialCondition?: boolean;
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { UseDeferUntilScrolledOptions };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { UseDeferUntilTrueOptions } from "../useDeferUntilTrue/types.mjs";
|
|
2
|
+
import { ReactNode, RefObject } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/useDeferUntilScrolled/types.d.ts
|
|
5
|
+
type UseDeferUntilScrolledOptions<P extends ReactNode = ReactNode> = UseDeferUntilTrueOptions<P> & {
|
|
6
|
+
/**
|
|
7
|
+
* 監視するコンテナーの参照
|
|
8
|
+
*/
|
|
9
|
+
rootRef?: RefObject<Element | null | undefined>;
|
|
10
|
+
rootMargin?: number;
|
|
11
|
+
/**
|
|
12
|
+
* スクロールイベントのデバウンス時間(ミリ秒)
|
|
13
|
+
* デフォルトは100ms
|
|
14
|
+
* @default 100
|
|
15
|
+
*/
|
|
16
|
+
detectionDelay?: number;
|
|
17
|
+
/**
|
|
18
|
+
* 検知するスクロールの方向
|
|
19
|
+
*/
|
|
20
|
+
direction?: 'vertical' | 'horizontal';
|
|
21
|
+
/**
|
|
22
|
+
* SSR時など、実際のスクロール位置を判定できない環境での初期値\
|
|
23
|
+
* デフォルトはfalse
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
initialCondition?: boolean;
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { UseDeferUntilScrolledOptions };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|