xxf_react 0.8.3 → 0.8.5
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/package.json +1 -1
- package/dist/cache/CacheEntry.d.ts +0 -28
- package/dist/cache/CacheEntry.d.ts.map +0 -1
- package/dist/cache/CacheEntry.js +0 -1
- package/dist/cache/DiskCacheConfig.d.ts +0 -56
- package/dist/cache/DiskCacheConfig.d.ts.map +0 -1
- package/dist/cache/DiskCacheConfig.js +0 -4
- package/dist/cache/DiskLruCache.d.ts +0 -69
- package/dist/cache/DiskLruCache.d.ts.map +0 -1
- package/dist/cache/DiskLruCache.js +0 -305
- package/dist/cache/LruMetadata.d.ts +0 -28
- package/dist/cache/LruMetadata.d.ts.map +0 -1
- package/dist/cache/LruMetadata.js +0 -6
- package/dist/cache/index.d.ts +0 -5
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -2
- package/dist/event-bus/EventBus.d.ts +0 -176
- package/dist/event-bus/EventBus.d.ts.map +0 -1
- package/dist/event-bus/EventBus.js +0 -278
- package/dist/event-bus/EventDemo.d.ts +0 -71
- package/dist/event-bus/EventDemo.d.ts.map +0 -1
- package/dist/event-bus/EventDemo.js +0 -76
- package/dist/event-bus/EventHooks.d.ts +0 -48
- package/dist/event-bus/EventHooks.d.ts.map +0 -1
- package/dist/event-bus/EventHooks.js +0 -73
- package/dist/event-bus/index.d.ts +0 -3
- package/dist/event-bus/index.d.ts.map +0 -1
- package/dist/event-bus/index.js +0 -2
- package/dist/fetch/Fetch.d.ts +0 -9
- package/dist/fetch/Fetch.d.ts.map +0 -1
- package/dist/fetch/Fetch.js +0 -54
- package/dist/fetch/TimeoutError.d.ts +0 -7
- package/dist/fetch/TimeoutError.d.ts.map +0 -1
- package/dist/fetch/TimeoutError.js +0 -23
- package/dist/fetch/index.d.ts +0 -3
- package/dist/fetch/index.d.ts.map +0 -1
- package/dist/fetch/index.js +0 -2
- package/dist/flow/PromiseExt.d.ts +0 -8
- package/dist/flow/PromiseExt.d.ts.map +0 -1
- package/dist/flow/PromiseExt.js +0 -50
- package/dist/flow/PromiseLifecycle.d.ts +0 -33
- package/dist/flow/PromiseLifecycle.d.ts.map +0 -1
- package/dist/flow/PromiseLifecycle.js +0 -37
- package/dist/flow/PromiseLoading.d.ts +0 -25
- package/dist/flow/PromiseLoading.d.ts.map +0 -1
- package/dist/flow/PromiseLoading.js +0 -30
- package/dist/flow/index.d.ts +0 -4
- package/dist/flow/index.d.ts.map +0 -1
- package/dist/flow/index.js +0 -3
- package/dist/foundation/Copy.d.ts +0 -8
- package/dist/foundation/Copy.d.ts.map +0 -1
- package/dist/foundation/Copy.js +0 -21
- package/dist/foundation/Debug.d.ts +0 -7
- package/dist/foundation/Debug.d.ts.map +0 -1
- package/dist/foundation/Debug.js +0 -12
- package/dist/foundation/LayoutSize.d.ts +0 -5
- package/dist/foundation/LayoutSize.d.ts.map +0 -1
- package/dist/foundation/LayoutSize.js +0 -1
- package/dist/foundation/PerformanceMonitor.d.ts +0 -13
- package/dist/foundation/PerformanceMonitor.d.ts.map +0 -1
- package/dist/foundation/PerformanceMonitor.js +0 -26
- package/dist/foundation/index.d.ts +0 -5
- package/dist/foundation/index.d.ts.map +0 -1
- package/dist/foundation/index.js +0 -4
- package/dist/http/api/ApiBuilder.d.ts +0 -251
- package/dist/http/api/ApiBuilder.d.ts.map +0 -1
- package/dist/http/api/ApiBuilder.js +0 -189
- package/dist/http/api/index.d.ts +0 -2
- package/dist/http/api/index.d.ts.map +0 -1
- package/dist/http/api/index.js +0 -1
- package/dist/http/cache/HttpCache.d.ts +0 -59
- package/dist/http/cache/HttpCache.d.ts.map +0 -1
- package/dist/http/cache/HttpCache.js +0 -215
- package/dist/http/cache/index.d.ts +0 -3
- package/dist/http/cache/index.d.ts.map +0 -1
- package/dist/http/cache/index.js +0 -2
- package/dist/http/client/ApiStream.d.ts +0 -80
- package/dist/http/client/ApiStream.d.ts.map +0 -1
- package/dist/http/client/ApiStream.js +0 -190
- package/dist/http/client/HttpClient.d.ts +0 -88
- package/dist/http/client/HttpClient.d.ts.map +0 -1
- package/dist/http/client/HttpClient.js +0 -381
- package/dist/http/client/index.d.ts +0 -3
- package/dist/http/client/index.d.ts.map +0 -1
- package/dist/http/client/index.js +0 -2
- package/dist/http/demo/api-builder.demo.d.ts +0 -102
- package/dist/http/demo/api-builder.demo.d.ts.map +0 -1
- package/dist/http/demo/api-builder.demo.js +0 -343
- package/dist/http/index.d.ts +0 -52
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js +0 -61
- package/dist/http/interceptor/CacheInterceptor.d.ts +0 -112
- package/dist/http/interceptor/CacheInterceptor.d.ts.map +0 -1
- package/dist/http/interceptor/CacheInterceptor.js +0 -6
- package/dist/http/interceptor/DefaultCacheInterceptor.d.ts +0 -53
- package/dist/http/interceptor/DefaultCacheInterceptor.d.ts.map +0 -1
- package/dist/http/interceptor/DefaultCacheInterceptor.js +0 -106
- package/dist/http/interceptor/index.d.ts +0 -3
- package/dist/http/interceptor/index.d.ts.map +0 -1
- package/dist/http/interceptor/index.js +0 -2
- package/dist/http/models/ApiTypes.d.ts +0 -54
- package/dist/http/models/ApiTypes.d.ts.map +0 -1
- package/dist/http/models/ApiTypes.js +0 -4
- package/dist/http/models/CacheConfig.d.ts +0 -58
- package/dist/http/models/CacheConfig.d.ts.map +0 -1
- package/dist/http/models/CacheConfig.js +0 -4
- package/dist/http/models/CacheMode.d.ts +0 -45
- package/dist/http/models/CacheMode.d.ts.map +0 -1
- package/dist/http/models/CacheMode.js +0 -45
- package/dist/http/models/HttpClientConfig.d.ts +0 -90
- package/dist/http/models/HttpClientConfig.d.ts.map +0 -1
- package/dist/http/models/HttpClientConfig.js +0 -4
- package/dist/http/models/RequestConfig.d.ts +0 -67
- package/dist/http/models/RequestConfig.d.ts.map +0 -1
- package/dist/http/models/RequestConfig.js +0 -4
- package/dist/http/models/index.d.ts +0 -24
- package/dist/http/models/index.d.ts.map +0 -1
- package/dist/http/models/index.js +0 -16
- package/dist/http/types.d.ts +0 -13
- package/dist/http/types.d.ts.map +0 -1
- package/dist/http/types.js +0 -14
- package/dist/index.d.ts +0 -15
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -20
- package/dist/layout/button/XButton.d.ts +0 -99
- package/dist/layout/button/XButton.d.ts.map +0 -1
- package/dist/layout/button/XButton.js +0 -131
- package/dist/layout/hover/XHover.d.ts +0 -147
- package/dist/layout/hover/XHover.d.ts.map +0 -1
- package/dist/layout/hover/XHover.js +0 -128
- package/dist/layout/image/XImage.d.ts +0 -35
- package/dist/layout/image/XImage.d.ts.map +0 -1
- package/dist/layout/image/XImage.effects.d.ts +0 -16
- package/dist/layout/image/XImage.effects.d.ts.map +0 -1
- package/dist/layout/image/XImage.effects.js +0 -77
- package/dist/layout/image/XImage.js +0 -261
- package/dist/layout/image/XImage.types.d.ts +0 -130
- package/dist/layout/image/XImage.types.d.ts.map +0 -1
- package/dist/layout/image/XImage.types.js +0 -2
- package/dist/layout/image/XImageGallery.d.ts +0 -76
- package/dist/layout/image/XImageGallery.d.ts.map +0 -1
- package/dist/layout/image/XImageGallery.js +0 -94
- package/dist/layout/image/index.d.ts +0 -12
- package/dist/layout/image/index.d.ts.map +0 -1
- package/dist/layout/image/index.js +0 -4
- package/dist/layout/index.d.ts +0 -12
- package/dist/layout/index.d.ts.map +0 -1
- package/dist/layout/index.js +0 -11
- package/dist/layout/resize/core/ResizeObserverHook.d.ts +0 -41
- package/dist/layout/resize/core/ResizeObserverHook.d.ts.map +0 -1
- package/dist/layout/resize/core/ResizeObserverHook.js +0 -57
- package/dist/layout/resize/core/SizedLayoutContext.d.ts +0 -23
- package/dist/layout/resize/core/SizedLayoutContext.d.ts.map +0 -1
- package/dist/layout/resize/core/SizedLayoutContext.js +0 -23
- package/dist/layout/resize/core/SizedLayoutProps.d.ts +0 -19
- package/dist/layout/resize/core/SizedLayoutProps.d.ts.map +0 -1
- package/dist/layout/resize/core/SizedLayoutProps.js +0 -1
- package/dist/layout/resize/impl/SizedContainer.d.ts +0 -45
- package/dist/layout/resize/impl/SizedContainer.d.ts.map +0 -1
- package/dist/layout/resize/impl/SizedContainer.js +0 -65
- package/dist/layout/resize/impl/SizedLayout.d.ts +0 -45
- package/dist/layout/resize/impl/SizedLayout.d.ts.map +0 -1
- package/dist/layout/resize/impl/SizedLayout.js +0 -65
- package/dist/layout/spinner/XSpinner.d.ts +0 -43
- package/dist/layout/spinner/XSpinner.d.ts.map +0 -1
- package/dist/layout/spinner/XSpinner.js +0 -47
- package/dist/layout/virtualized/VirtualizedConfig.d.ts +0 -16
- package/dist/layout/virtualized/VirtualizedConfig.d.ts.map +0 -1
- package/dist/layout/virtualized/VirtualizedConfig.js +0 -15
- package/dist/layout/visibility/ElementVisibilityHooks.d.ts +0 -13
- package/dist/layout/visibility/ElementVisibilityHooks.d.ts.map +0 -1
- package/dist/layout/visibility/ElementVisibilityHooks.js +0 -119
- package/dist/media/components/XVideo.d.ts +0 -205
- package/dist/media/components/XVideo.d.ts.map +0 -1
- package/dist/media/components/XVideo.js +0 -297
- package/dist/media/components/XVideoBufferingIndicator.d.ts +0 -13
- package/dist/media/components/XVideoBufferingIndicator.d.ts.map +0 -1
- package/dist/media/components/XVideoBufferingIndicator.js +0 -13
- package/dist/media/components/XVideoErrorIndicator.d.ts +0 -15
- package/dist/media/components/XVideoErrorIndicator.d.ts.map +0 -1
- package/dist/media/components/XVideoErrorIndicator.js +0 -19
- package/dist/media/index.d.ts +0 -7
- package/dist/media/index.d.ts.map +0 -1
- package/dist/media/index.js +0 -7
- package/dist/media/playback-queue-store.d.ts +0 -746
- package/dist/media/playback-queue-store.d.ts.map +0 -1
- package/dist/media/playback-queue-store.js +0 -670
- package/dist/media/video-play-safe.d.ts +0 -26
- package/dist/media/video-play-safe.d.ts.map +0 -1
- package/dist/media/video-play-safe.js +0 -56
- package/dist/media/video-state.d.ts +0 -38
- package/dist/media/video-state.d.ts.map +0 -1
- package/dist/media/video-state.js +0 -125
- package/dist/models/ApiPageDataFieldDTO.d.ts +0 -9
- package/dist/models/ApiPageDataFieldDTO.d.ts.map +0 -1
- package/dist/models/ApiPageDataFieldDTO.js +0 -1
- package/dist/models/ApiResponse.d.ts +0 -29
- package/dist/models/ApiResponse.d.ts.map +0 -1
- package/dist/models/ApiResponse.js +0 -32
- package/dist/models/PaginationDTO.d.ts +0 -8
- package/dist/models/PaginationDTO.d.ts.map +0 -1
- package/dist/models/PaginationDTO.js +0 -6
- package/dist/models/index.d.ts +0 -4
- package/dist/models/index.d.ts.map +0 -1
- package/dist/models/index.js +0 -3
- package/dist/refresh/LoadMoreAsync.d.ts +0 -36
- package/dist/refresh/LoadMoreAsync.d.ts.map +0 -1
- package/dist/refresh/LoadMoreAsync.js +0 -55
- package/dist/refresh/index.d.ts +0 -2
- package/dist/refresh/index.d.ts.map +0 -1
- package/dist/refresh/index.js +0 -2
- package/dist/responsive/BrowserAdapter.d.ts +0 -26
- package/dist/responsive/BrowserAdapter.d.ts.map +0 -1
- package/dist/responsive/BrowserAdapter.js +0 -79
- package/dist/responsive/ScreenAdapter.d.ts +0 -2
- package/dist/responsive/ScreenAdapter.d.ts.map +0 -1
- package/dist/responsive/ScreenAdapter.js +0 -5
- package/dist/responsive/index.d.ts +0 -3
- package/dist/responsive/index.d.ts.map +0 -1
- package/dist/responsive/index.js +0 -3
- package/dist/sse/SSEManager.d.ts +0 -21
- package/dist/sse/SSEManager.d.ts.map +0 -1
- package/dist/sse/SSEManager.js +0 -73
- package/dist/sse/SSERegistry.d.ts +0 -20
- package/dist/sse/SSERegistry.d.ts.map +0 -1
- package/dist/sse/SSERegistry.js +0 -36
- package/dist/sse/SSEStatus.d.ts +0 -7
- package/dist/sse/SSEStatus.d.ts.map +0 -1
- package/dist/sse/SSEStatus.js +0 -7
- package/dist/sse/UseSSE.d.ts +0 -13
- package/dist/sse/UseSSE.d.ts.map +0 -1
- package/dist/sse/UseSSE.js +0 -39
- package/dist/sse/index.d.ts +0 -5
- package/dist/sse/index.d.ts.map +0 -1
- package/dist/sse/index.js +0 -5
- package/dist/utils/MIME.d.ts +0 -137
- package/dist/utils/MIME.d.ts.map +0 -1
- package/dist/utils/MIME.js +0 -192
- package/dist/utils/Reload.d.ts +0 -62
- package/dist/utils/Reload.d.ts.map +0 -1
- package/dist/utils/Reload.js +0 -66
- package/dist/utils/ScrollToCenter.d.ts +0 -72
- package/dist/utils/ScrollToCenter.d.ts.map +0 -1
- package/dist/utils/ScrollToCenter.js +0 -145
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -5
- package/dist/utils/url-placholder.d.ts +0 -14
- package/dist/utils/url-placholder.d.ts.map +0 -1
- package/dist/utils/url-placholder.js +0 -17
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Video 安全播放扩展
|
|
3
|
-
* 处理移动端自动播放限制,自动降级为静音播放
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* 安全播放视频
|
|
7
|
-
* 1. 按当前 video.muted 状态尝试播放
|
|
8
|
-
* 2. 如果非静音播放失败,降级为静音再试
|
|
9
|
-
*/
|
|
10
|
-
export async function playSafe(video, options = {}) {
|
|
11
|
-
const { mutedRetry = true, onMutedChange } = options;
|
|
12
|
-
if (!video || !video.parentElement || !document.contains(video)) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
const wasMuted = video.muted;
|
|
16
|
-
try {
|
|
17
|
-
await video.play();
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
// 处理自动播放被阻止的错误
|
|
21
|
-
// - NotAllowedError: Chrome/Firefox 自动播放策略阻止
|
|
22
|
-
// - AbortError: Safari/iOS 自动播放策略阻止(包括低电量模式)
|
|
23
|
-
const isAutoplayBlocked = error instanceof Error &&
|
|
24
|
-
(error.name === 'NotAllowedError' || error.name === 'AbortError');
|
|
25
|
-
if (!isAutoplayBlocked) {
|
|
26
|
-
throw error;
|
|
27
|
-
}
|
|
28
|
-
// 不启用静音重试,直接抛出
|
|
29
|
-
if (!mutedRetry)
|
|
30
|
-
throw error;
|
|
31
|
-
// 已经是静音还失败,直接抛出
|
|
32
|
-
if (wasMuted)
|
|
33
|
-
throw error;
|
|
34
|
-
// 降级为静音播放
|
|
35
|
-
video.muted = true;
|
|
36
|
-
onMutedChange === null || onMutedChange === void 0 ? void 0 : onMutedChange();
|
|
37
|
-
await video.play();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 扩展 HTMLVideoElement 原型
|
|
42
|
-
*/
|
|
43
|
-
export function extendVideoElement() {
|
|
44
|
-
if (typeof HTMLVideoElement === 'undefined')
|
|
45
|
-
return;
|
|
46
|
-
if ('playSafe' in HTMLVideoElement.prototype)
|
|
47
|
-
return;
|
|
48
|
-
Object.defineProperty(HTMLVideoElement.prototype, 'playSafe', {
|
|
49
|
-
value: function (options = {}) {
|
|
50
|
-
return playSafe(this, options);
|
|
51
|
-
},
|
|
52
|
-
writable: true,
|
|
53
|
-
configurable: true,
|
|
54
|
-
enumerable: false,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* VideoState - 视频播放状态接口
|
|
3
|
-
* 用于描述 HTML5 video 元素的完整播放状态
|
|
4
|
-
*/
|
|
5
|
-
export interface VideoState {
|
|
6
|
-
/** 是否正在播放(非暂停且未结束) */
|
|
7
|
-
playing: boolean;
|
|
8
|
-
/** 是否正在缓冲(播放中因数据不足暂停) */
|
|
9
|
-
buffering: boolean;
|
|
10
|
-
/** 是否可以播放(已加载足够数据) */
|
|
11
|
-
canPlay: boolean;
|
|
12
|
-
/** 当前播放时间(秒) */
|
|
13
|
-
currentTime: number;
|
|
14
|
-
/** 视频总时长(秒) */
|
|
15
|
-
duration: number;
|
|
16
|
-
/** 已缓冲的时间点(秒) */
|
|
17
|
-
buffered: number;
|
|
18
|
-
/** 视频原始宽度(像素) */
|
|
19
|
-
videoWidth: number;
|
|
20
|
-
/** 视频原始高度(像素) */
|
|
21
|
-
videoHeight: number;
|
|
22
|
-
/** 是否已播放结束 */
|
|
23
|
-
ended: boolean;
|
|
24
|
-
/** 播放错误信息(无错误时为 null) */
|
|
25
|
-
error: MediaError | null;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* useVideoState - 视频状态管理 Hook
|
|
29
|
-
* @param videoRef - 外部传入的 videoRef,可跨层级(允许 null)
|
|
30
|
-
* @param autoPlay - 是否在 canPlay 后自动播放
|
|
31
|
-
*/
|
|
32
|
-
export declare function useVideoState(videoRef: React.RefObject<HTMLVideoElement | null>, autoPlay?: boolean): {
|
|
33
|
-
playState: VideoState;
|
|
34
|
-
play: () => Promise<void> | undefined;
|
|
35
|
-
pause: () => void | undefined;
|
|
36
|
-
seek: (time: number) => void;
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=video-state.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"video-state.d.ts","sourceRoot":"","sources":["../../src/media/video-state.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,KAAK,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,QAAQ,UAAQ;;;;iBAyH9D,MAAM;EAGzC"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* useVideoState - 视频状态管理 Hook
|
|
4
|
-
* @param videoRef - 外部传入的 videoRef,可跨层级(允许 null)
|
|
5
|
-
* @param autoPlay - 是否在 canPlay 后自动播放
|
|
6
|
-
*/
|
|
7
|
-
export function useVideoState(videoRef, autoPlay = false) {
|
|
8
|
-
const [state, setState] = useState({
|
|
9
|
-
playing: false,
|
|
10
|
-
buffering: false,
|
|
11
|
-
canPlay: false,
|
|
12
|
-
currentTime: 0,
|
|
13
|
-
duration: 0,
|
|
14
|
-
buffered: 0,
|
|
15
|
-
videoWidth: 0,
|
|
16
|
-
videoHeight: 0,
|
|
17
|
-
ended: false,
|
|
18
|
-
error: null,
|
|
19
|
-
});
|
|
20
|
-
// 核心事件回调
|
|
21
|
-
const updatePlaying = useCallback(() => {
|
|
22
|
-
const v = videoRef.current;
|
|
23
|
-
if (!v)
|
|
24
|
-
return;
|
|
25
|
-
setState(s => ({ ...s, playing: !v.paused && !v.ended }));
|
|
26
|
-
}, [videoRef]);
|
|
27
|
-
// 缓冲状态:waiting 时为 true,playing 时为 false
|
|
28
|
-
const setBufferingTrue = useCallback(() => {
|
|
29
|
-
setState(s => ({ ...s, buffering: true }));
|
|
30
|
-
}, []);
|
|
31
|
-
const setBufferingFalse = useCallback(() => {
|
|
32
|
-
setState(s => ({ ...s, buffering: false }));
|
|
33
|
-
}, []);
|
|
34
|
-
const updateCanPlay = useCallback(() => {
|
|
35
|
-
setState(s => ({ ...s, canPlay: true }));
|
|
36
|
-
if (autoPlay) {
|
|
37
|
-
const v = videoRef.current;
|
|
38
|
-
v === null || v === void 0 ? void 0 : v.play().catch(() => { });
|
|
39
|
-
}
|
|
40
|
-
}, [videoRef, autoPlay]);
|
|
41
|
-
const updateTime = useCallback(() => {
|
|
42
|
-
const v = videoRef.current;
|
|
43
|
-
if (!v)
|
|
44
|
-
return;
|
|
45
|
-
setState(s => ({ ...s, currentTime: v.currentTime }));
|
|
46
|
-
}, [videoRef]);
|
|
47
|
-
const updateDuration = useCallback(() => {
|
|
48
|
-
const v = videoRef.current;
|
|
49
|
-
if (!v)
|
|
50
|
-
return;
|
|
51
|
-
setState(s => ({ ...s, duration: v.duration }));
|
|
52
|
-
}, [videoRef]);
|
|
53
|
-
const updateBuffered = useCallback(() => {
|
|
54
|
-
const v = videoRef.current;
|
|
55
|
-
if (!v)
|
|
56
|
-
return;
|
|
57
|
-
setState(s => ({
|
|
58
|
-
...s,
|
|
59
|
-
buffered: v.buffered.length ? v.buffered.end(v.buffered.length - 1) : 0
|
|
60
|
-
}));
|
|
61
|
-
}, [videoRef]);
|
|
62
|
-
const updateSize = useCallback(() => {
|
|
63
|
-
const v = videoRef.current;
|
|
64
|
-
if (!v)
|
|
65
|
-
return;
|
|
66
|
-
setState(s => ({
|
|
67
|
-
...s,
|
|
68
|
-
videoWidth: v.videoWidth,
|
|
69
|
-
videoHeight: v.videoHeight
|
|
70
|
-
}));
|
|
71
|
-
}, [videoRef]);
|
|
72
|
-
const updateEnded = useCallback(() => {
|
|
73
|
-
const v = videoRef.current;
|
|
74
|
-
if (!v)
|
|
75
|
-
return;
|
|
76
|
-
setState(s => ({ ...s, ended: v.ended }));
|
|
77
|
-
}, [videoRef]);
|
|
78
|
-
const updateError = useCallback(() => {
|
|
79
|
-
const v = videoRef.current;
|
|
80
|
-
if (!v)
|
|
81
|
-
return;
|
|
82
|
-
setState(s => ({ ...s, error: v.error }));
|
|
83
|
-
}, [videoRef]);
|
|
84
|
-
useEffect(() => {
|
|
85
|
-
const video = videoRef.current;
|
|
86
|
-
if (!video)
|
|
87
|
-
return;
|
|
88
|
-
// 注册事件
|
|
89
|
-
video.addEventListener('play', updatePlaying); // 播放请求被接受
|
|
90
|
-
video.addEventListener('playing', updatePlaying); // 真正开始播放(有画面)
|
|
91
|
-
video.addEventListener('playing', setBufferingFalse); // 播放时结束缓冲
|
|
92
|
-
video.addEventListener('pause', updatePlaying); // 暂停
|
|
93
|
-
video.addEventListener('waiting', updatePlaying); // 缓冲中(暂时无法播放)
|
|
94
|
-
video.addEventListener('waiting', setBufferingTrue); // 开始缓冲
|
|
95
|
-
video.addEventListener('canplay', updateCanPlay);
|
|
96
|
-
video.addEventListener('timeupdate', updateTime);
|
|
97
|
-
video.addEventListener('durationchange', updateDuration);
|
|
98
|
-
video.addEventListener('progress', updateBuffered);
|
|
99
|
-
video.addEventListener('loadedmetadata', updateSize);
|
|
100
|
-
video.addEventListener('ended', updateEnded);
|
|
101
|
-
video.addEventListener('error', updateError);
|
|
102
|
-
// cleanup
|
|
103
|
-
return () => {
|
|
104
|
-
video.removeEventListener('play', updatePlaying);
|
|
105
|
-
video.removeEventListener('playing', updatePlaying);
|
|
106
|
-
video.removeEventListener('playing', setBufferingFalse);
|
|
107
|
-
video.removeEventListener('pause', updatePlaying);
|
|
108
|
-
video.removeEventListener('waiting', updatePlaying);
|
|
109
|
-
video.removeEventListener('waiting', setBufferingTrue);
|
|
110
|
-
video.removeEventListener('canplay', updateCanPlay);
|
|
111
|
-
video.removeEventListener('timeupdate', updateTime);
|
|
112
|
-
video.removeEventListener('durationchange', updateDuration);
|
|
113
|
-
video.removeEventListener('progress', updateBuffered);
|
|
114
|
-
video.removeEventListener('loadedmetadata', updateSize);
|
|
115
|
-
video.removeEventListener('ended', updateEnded);
|
|
116
|
-
video.removeEventListener('error', updateError);
|
|
117
|
-
};
|
|
118
|
-
}, [videoRef, updatePlaying, setBufferingTrue, setBufferingFalse, updateCanPlay, updateTime, updateDuration, updateBuffered, updateSize, updateEnded, updateError]);
|
|
119
|
-
// 控制方法
|
|
120
|
-
const play = useCallback(() => { var _a; return (_a = videoRef.current) === null || _a === void 0 ? void 0 : _a.play().catch(() => { }); }, [videoRef]);
|
|
121
|
-
const pause = useCallback(() => { var _a; return (_a = videoRef.current) === null || _a === void 0 ? void 0 : _a.pause(); }, [videoRef]);
|
|
122
|
-
const seek = useCallback((time) => { if (videoRef.current)
|
|
123
|
-
videoRef.current.currentTime = time; }, [videoRef]);
|
|
124
|
-
return { playState: state, play, pause, seek };
|
|
125
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ApiPageDataFieldDTO.d.ts","sourceRoot":"","sources":["../../src/models/ApiPageDataFieldDTO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,UAAU,EAAE,aAAa,CAAA;CAC5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 统一 API 响应格式
|
|
3
|
-
*/
|
|
4
|
-
export interface ApiResponse<T> {
|
|
5
|
-
code: number;
|
|
6
|
-
message: string;
|
|
7
|
-
data: T;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* 检查 API 响应是否成功
|
|
11
|
-
*/
|
|
12
|
-
export declare function isApiSuccess(code: number): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* API 错误类
|
|
15
|
-
*/
|
|
16
|
-
export declare class ApiError extends Error {
|
|
17
|
-
code: number;
|
|
18
|
-
constructor(code: number, message: string);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* 从 API 响应中json提取data字段数据,失败时抛出错误
|
|
22
|
-
* @deprecated 请使用 {@link getDataFieldOrThrow} 代替
|
|
23
|
-
*/
|
|
24
|
-
export declare function getDataOrThrow<T>(response: ApiResponse<T>): T;
|
|
25
|
-
/**
|
|
26
|
-
* 从 API 响应中json提取data字段数据,失败时抛出错误
|
|
27
|
-
*/
|
|
28
|
-
export declare function getDataFieldOrThrow<T>(response: ApiResponse<T>): T;
|
|
29
|
-
//# sourceMappingURL=ApiResponse.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ApiResponse.d.ts","sourceRoot":"","sources":["../../src/models/ApiResponse.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,CAAC,CAAA;CACV;AAGD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAC/B,IAAI,EAAE,MAAM,CAAA;gBAEA,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK5C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAE7D;AAGD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAKlE"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 检查 API 响应是否成功
|
|
3
|
-
*/
|
|
4
|
-
export function isApiSuccess(code) {
|
|
5
|
-
return code === 0 || code === 200;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* API 错误类
|
|
9
|
-
*/
|
|
10
|
-
export class ApiError extends Error {
|
|
11
|
-
constructor(code, message) {
|
|
12
|
-
super(`API Error: (${code}) ${message}`);
|
|
13
|
-
this.name = 'ApiError';
|
|
14
|
-
this.code = code;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* 从 API 响应中json提取data字段数据,失败时抛出错误
|
|
19
|
-
* @deprecated 请使用 {@link getDataFieldOrThrow} 代替
|
|
20
|
-
*/
|
|
21
|
-
export function getDataOrThrow(response) {
|
|
22
|
-
return getDataFieldOrThrow(response);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 从 API 响应中json提取data字段数据,失败时抛出错误
|
|
26
|
-
*/
|
|
27
|
-
export function getDataFieldOrThrow(response) {
|
|
28
|
-
if (!isApiSuccess(response.code)) {
|
|
29
|
-
throw new ApiError(response.code, response.message);
|
|
30
|
-
}
|
|
31
|
-
return response.data;
|
|
32
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PaginationDTO.d.ts","sourceRoot":"","sources":["../../src/models/PaginationDTO.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAQ,MAAM,CAAC;IACpB,IAAI,EAAS,MAAM,CAAC;IACpB,KAAK,EAAQ,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,WAAW,GAAI,aAAa,aAAa,KAAG,OAGxD,CAAC"}
|
package/dist/models/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
|
package/dist/models/index.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ApiPageDataFieldDTO } from "../models/ApiPageDataFieldDTO";
|
|
2
|
-
/**
|
|
3
|
-
* 返回一个稳定的回调(empty deps)。
|
|
4
|
-
* 适合不想因 asyncResult 变化频繁重建回调的场景。
|
|
5
|
-
*
|
|
6
|
-
* 用法:
|
|
7
|
-
* const handleLoadMore = useStableHandleLoadMore(asyncResult, setPageNum);
|
|
8
|
-
* // 自定义是否有下一页的判定逻辑
|
|
9
|
-
* // const handleLoadMore = useHandleLoadMoreCustom<TemplatePaginationResponse, UseAsyncReturn<TemplatePaginationResponse>>(asyncResult, setPageNum, (data) => hasNextPage(data?.pagination))
|
|
10
|
-
*
|
|
11
|
-
* 在对应的组件上使用
|
|
12
|
-
* endReached={handleLoadMore}
|
|
13
|
-
* atBottomStateChange={(atBottom) => {
|
|
14
|
-
* if (atBottom) {
|
|
15
|
-
* handleLoadMore()
|
|
16
|
-
* }
|
|
17
|
-
* }}
|
|
18
|
-
*/
|
|
19
|
-
export declare function useHandleLoadMore<TData extends ApiPageDataFieldDTO<any>, TAsyncResult extends {
|
|
20
|
-
loading: boolean;
|
|
21
|
-
error: unknown;
|
|
22
|
-
execute: () => Promise<TData>;
|
|
23
|
-
result?: TData;
|
|
24
|
-
}>(asyncResult: TAsyncResult, setPageNum: (updater: (p: number) => number) => void): () => void;
|
|
25
|
-
/**
|
|
26
|
-
* 可自定义 hasNextPage 判定的版本(名称:useHandleLoadMoreCustom)
|
|
27
|
-
* - hasNextPageFn 接受完整的 TData(可能为 undefined),返回 boolean
|
|
28
|
-
* - 返回稳定回调,内部通过 ref 读取最新 asyncResult 与 hasNextPageFn
|
|
29
|
-
*/
|
|
30
|
-
export declare function useHandleLoadMoreCustom<TData, TAsyncResult extends {
|
|
31
|
-
loading: boolean;
|
|
32
|
-
error: unknown;
|
|
33
|
-
execute?: () => Promise<TData>;
|
|
34
|
-
result?: TData;
|
|
35
|
-
}>(asyncResult: TAsyncResult, setPageNum: (updater: (p: number) => number) => void, hasNextPage: (data: TData | undefined) => boolean): () => void;
|
|
36
|
-
//# sourceMappingURL=LoadMoreAsync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoadMoreAsync.d.ts","sourceRoot":"","sources":["../../src/refresh/LoadMoreAsync.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AAElE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,mBAAmB,CAAC,GAAG,CAAC,EAAE,YAAY,SAAS;IAC3F,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,KAAK,CAAA;CACjB,EACG,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,SAwB/C,IAAI,CAjBZ;AAGD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,SAAS;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC;CAClB,EACG,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,EACpD,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,SAAS,KAAK,OAAO,GAClD,MAAM,IAAI,CA+BZ"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
2
|
-
import { hasNextPage } from "../models/PaginationDTO";
|
|
3
|
-
/**
|
|
4
|
-
* 返回一个稳定的回调(empty deps)。
|
|
5
|
-
* 适合不想因 asyncResult 变化频繁重建回调的场景。
|
|
6
|
-
*
|
|
7
|
-
* 用法:
|
|
8
|
-
* const handleLoadMore = useStableHandleLoadMore(asyncResult, setPageNum);
|
|
9
|
-
* // 自定义是否有下一页的判定逻辑
|
|
10
|
-
* // const handleLoadMore = useHandleLoadMoreCustom<TemplatePaginationResponse, UseAsyncReturn<TemplatePaginationResponse>>(asyncResult, setPageNum, (data) => hasNextPage(data?.pagination))
|
|
11
|
-
*
|
|
12
|
-
* 在对应的组件上使用
|
|
13
|
-
* endReached={handleLoadMore}
|
|
14
|
-
* atBottomStateChange={(atBottom) => {
|
|
15
|
-
* if (atBottom) {
|
|
16
|
-
* handleLoadMore()
|
|
17
|
-
* }
|
|
18
|
-
* }}
|
|
19
|
-
*/
|
|
20
|
-
export function useHandleLoadMore(asyncResult, setPageNum) {
|
|
21
|
-
return useHandleLoadMoreCustom(asyncResult, setPageNum, (data) => hasNextPage(data === null || data === void 0 ? void 0 : data.pagination));
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* 可自定义 hasNextPage 判定的版本(名称:useHandleLoadMoreCustom)
|
|
25
|
-
* - hasNextPageFn 接受完整的 TData(可能为 undefined),返回 boolean
|
|
26
|
-
* - 返回稳定回调,内部通过 ref 读取最新 asyncResult 与 hasNextPageFn
|
|
27
|
-
*/
|
|
28
|
-
export function useHandleLoadMoreCustom(asyncResult, setPageNum, hasNextPage) {
|
|
29
|
-
const ref = useRef(asyncResult);
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
ref.current = asyncResult;
|
|
32
|
-
}, [asyncResult]);
|
|
33
|
-
// 保证读取到最新的判断函数,同时回调保持稳定(不随函数重建)
|
|
34
|
-
const hasNextRef = useRef((d) => hasNextPage(d === null || d === void 0 ? void 0 : d.pagination));
|
|
35
|
-
useEffect(() => {
|
|
36
|
-
hasNextRef.current = hasNextPage;
|
|
37
|
-
}, [hasNextPage]);
|
|
38
|
-
return useCallback(() => {
|
|
39
|
-
var _a;
|
|
40
|
-
const cur = ref.current;
|
|
41
|
-
if (!cur)
|
|
42
|
-
return;
|
|
43
|
-
if (cur.loading)
|
|
44
|
-
return;
|
|
45
|
-
if (cur.error) {
|
|
46
|
-
(_a = cur.execute) === null || _a === void 0 ? void 0 : _a.call(cur);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
// 使用最新的 hasNext 判定
|
|
50
|
-
if (!hasNextRef.current(cur.result))
|
|
51
|
-
return;
|
|
52
|
-
///进行下一页
|
|
53
|
-
setPageNum(p => p + 1);
|
|
54
|
-
}, [setPageNum]);
|
|
55
|
-
}
|
package/dist/refresh/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/refresh/index.ts"],"names":[],"mappings":"AAEA,cAAc,iBAAiB,CAAC"}
|
package/dist/refresh/index.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export type BrowserPlatform = 'mobile' | 'tablet' | 'desktop';
|
|
2
|
-
export type BrowserName = 'Chrome' | 'Safari' | 'Firefox' | 'Edge' | 'IE' | 'Opera' | 'Samsung Internet' | 'Unknown';
|
|
3
|
-
export type BrowserInfo = {
|
|
4
|
-
/** 浏览器名称(标准化) */
|
|
5
|
-
name: BrowserName;
|
|
6
|
-
/** 操作系统 */
|
|
7
|
-
os: string;
|
|
8
|
-
/** 平台类型 */
|
|
9
|
-
platform: BrowserPlatform;
|
|
10
|
-
};
|
|
11
|
-
export declare const parseBrowser: (ua: string) => BrowserInfo;
|
|
12
|
-
export declare const useBrowser: () => BrowserInfo;
|
|
13
|
-
export declare const useBrowserType: () => {
|
|
14
|
-
readonly isMobile: boolean;
|
|
15
|
-
readonly isTablet: boolean;
|
|
16
|
-
readonly isDesktop: boolean;
|
|
17
|
-
readonly isChrome: boolean;
|
|
18
|
-
readonly isSafari: boolean;
|
|
19
|
-
readonly isFirefox: boolean;
|
|
20
|
-
readonly isEdge: boolean;
|
|
21
|
-
readonly isIE: boolean;
|
|
22
|
-
readonly name: BrowserName;
|
|
23
|
-
readonly os: string;
|
|
24
|
-
readonly platform: BrowserPlatform;
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=BrowserAdapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserAdapter.d.ts","sourceRoot":"","sources":["../../src/responsive/BrowserAdapter.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE7D,MAAM,MAAM,WAAW,GACjB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,IAAI,GACJ,OAAO,GACP,kBAAkB,GAClB,SAAS,CAAA;AAEf,MAAM,MAAM,WAAW,GAAG;IACtB,iBAAiB;IACjB,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW;IACX,EAAE,EAAE,MAAM,CAAA;IACV,WAAW;IACX,QAAQ,EAAE,eAAe,CAAA;CAC5B,CAAA;AAgDD,eAAO,MAAM,YAAY,GAAI,IAAI,MAAM,KAAG,WAczC,CAAA;AAGD,eAAO,MAAM,UAAU,mBAEtB,CAAA;AAGD,eAAO,MAAM,cAAc;;;;;;;;;mBA3EjB,WAAW;iBAEb,MAAM;uBAEA,eAAe;CAmG5B,CAAA"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import Bowser from 'bowser';
|
|
2
|
-
/**
|
|
3
|
-
* UA -> BrowserInfo 缓存
|
|
4
|
-
* module scope,天然单例
|
|
5
|
-
*/
|
|
6
|
-
const browserCache = new Map();
|
|
7
|
-
/* ===================== 新增 1:BrowserName 规范化 ===================== */
|
|
8
|
-
const normalizeBrowserName = (name) => {
|
|
9
|
-
switch (name) {
|
|
10
|
-
case 'Chrome':
|
|
11
|
-
case 'Chromium':
|
|
12
|
-
return 'Chrome';
|
|
13
|
-
case 'Safari':
|
|
14
|
-
case 'Mobile Safari':
|
|
15
|
-
return 'Safari';
|
|
16
|
-
case 'Firefox':
|
|
17
|
-
return 'Firefox';
|
|
18
|
-
case 'Microsoft Edge':
|
|
19
|
-
case 'Edge':
|
|
20
|
-
return 'Edge';
|
|
21
|
-
case 'Internet Explorer':
|
|
22
|
-
return 'IE';
|
|
23
|
-
case 'Samsung Internet':
|
|
24
|
-
return 'Samsung Internet';
|
|
25
|
-
case 'Opera':
|
|
26
|
-
return 'Opera';
|
|
27
|
-
default:
|
|
28
|
-
return 'Unknown';
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
/* ===================== 新增 2:platform 兜底 ===================== */
|
|
32
|
-
const normalizePlatform = (platform) => {
|
|
33
|
-
if (platform === 'mobile' || platform === 'tablet') {
|
|
34
|
-
return platform;
|
|
35
|
-
}
|
|
36
|
-
return 'desktop';
|
|
37
|
-
};
|
|
38
|
-
export const parseBrowser = (ua) => {
|
|
39
|
-
const cached = browserCache.get(ua);
|
|
40
|
-
if (cached)
|
|
41
|
-
return cached;
|
|
42
|
-
const parser = Bowser.getParser(ua);
|
|
43
|
-
const info = {
|
|
44
|
-
name: normalizeBrowserName(parser.getBrowserName()),
|
|
45
|
-
os: parser.getOSName() || 'Unknown',
|
|
46
|
-
platform: normalizePlatform(parser.getPlatformType(true)),
|
|
47
|
-
};
|
|
48
|
-
browserCache.set(ua, info);
|
|
49
|
-
return info;
|
|
50
|
-
};
|
|
51
|
-
/// 判断浏览器信息
|
|
52
|
-
export const useBrowser = () => {
|
|
53
|
-
return parseBrowser(navigator.userAgent);
|
|
54
|
-
};
|
|
55
|
-
/// 判断浏览器类型(语义层)
|
|
56
|
-
export const useBrowserType = () => {
|
|
57
|
-
const browser = useBrowser();
|
|
58
|
-
const isMobile = browser.platform === 'mobile';
|
|
59
|
-
const isTablet = browser.platform === 'tablet';
|
|
60
|
-
const isDesktop = browser.platform === 'desktop';
|
|
61
|
-
const isChrome = browser.name === 'Chrome';
|
|
62
|
-
const isSafari = browser.name === 'Safari';
|
|
63
|
-
const isFirefox = browser.name === 'Firefox';
|
|
64
|
-
const isEdge = browser.name === 'Edge';
|
|
65
|
-
const isIE = browser.name === 'IE';
|
|
66
|
-
return {
|
|
67
|
-
...browser,
|
|
68
|
-
// platform
|
|
69
|
-
isMobile,
|
|
70
|
-
isTablet,
|
|
71
|
-
isDesktop,
|
|
72
|
-
// browser
|
|
73
|
-
isChrome,
|
|
74
|
-
isSafari,
|
|
75
|
-
isFirefox,
|
|
76
|
-
isEdge,
|
|
77
|
-
isIE,
|
|
78
|
-
};
|
|
79
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScreenAdapter.d.ts","sourceRoot":"","sources":["../../src/responsive/ScreenAdapter.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,eAExB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/responsive/index.ts"],"names":[],"mappings":"AAEA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
package/dist/responsive/index.js
DELETED
package/dist/sse/SSEManager.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { EventSourceMessage } from '@microsoft/fetch-event-source';
|
|
2
|
-
import { SSEStatus } from "./SSEStatus";
|
|
3
|
-
type Listener = (event: EventSourceMessage) => void;
|
|
4
|
-
type StatusListener = (status: SSEStatus) => void;
|
|
5
|
-
export declare class SSEManager {
|
|
6
|
-
private url;
|
|
7
|
-
private headers;
|
|
8
|
-
private controller;
|
|
9
|
-
private listeners;
|
|
10
|
-
private statusListeners;
|
|
11
|
-
private connecting;
|
|
12
|
-
private status;
|
|
13
|
-
constructor(url: string, headers?: Record<string, string>);
|
|
14
|
-
private setStatus;
|
|
15
|
-
connect(): void;
|
|
16
|
-
disconnect(): void;
|
|
17
|
-
subscribe(listener: Listener): () => boolean;
|
|
18
|
-
subscribeStatus(listener: StatusListener): () => boolean;
|
|
19
|
-
}
|
|
20
|
-
export {};
|
|
21
|
-
//# sourceMappingURL=SSEManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SSEManager.d.ts","sourceRoot":"","sources":["../../src/sse/SSEManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAmB,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAEtC,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AACpD,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;AAElD,qBAAa,UAAU;IAQf,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IARnB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA6B;gBAG/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAIhD,OAAO,CAAC,SAAS;IAYjB,OAAO;IAsCP,UAAU;IAMV,SAAS,CAAC,QAAQ,EAAE,QAAQ;IAO5B,eAAe,CAAC,QAAQ,EAAE,cAAc;CAK3C"}
|