@pawover/kit 0.0.0-alpha.9 → 0.0.0-beta.2

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 (83) hide show
  1. package/dist/enums.d.ts +25 -0
  2. package/dist/enums.d.ts.map +1 -0
  3. package/dist/enums.js +25 -0
  4. package/dist/enums.js.map +1 -0
  5. package/dist/hooks-alova.d.ts +23 -0
  6. package/dist/hooks-alova.d.ts.map +1 -0
  7. package/dist/hooks-alova.js +39 -0
  8. package/dist/hooks-alova.js.map +1 -0
  9. package/dist/hooks-react.d.ts +89 -0
  10. package/dist/hooks-react.d.ts.map +1 -0
  11. package/dist/hooks-react.js +340 -0
  12. package/dist/hooks-react.js.map +1 -0
  13. package/dist/index.d.ts +2445 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +1430 -1
  16. package/dist/index.js.map +1 -0
  17. package/dist/patches-fetchEventSource.d.ts +806 -0
  18. package/dist/patches-fetchEventSource.d.ts.map +1 -0
  19. package/dist/patches-fetchEventSource.js +315 -0
  20. package/dist/patches-fetchEventSource.js.map +1 -0
  21. package/dist/vite.d.ts +13 -0
  22. package/dist/vite.d.ts.map +1 -0
  23. package/dist/vite.js +23 -0
  24. package/dist/vite.js.map +1 -0
  25. package/dist/zod.d.ts +105 -0
  26. package/dist/zod.d.ts.map +1 -0
  27. package/dist/zod.js +138 -0
  28. package/dist/zod.js.map +1 -0
  29. package/metadata.json +160 -0
  30. package/package.json +51 -35
  31. package/dist/enums/index.js +0 -20
  32. package/dist/hooks/react/index.js +0 -5
  33. package/dist/hooks/react/useCreation.js +0 -19
  34. package/dist/hooks/react/useLatest.js +0 -13
  35. package/dist/hooks/react/useMount.js +0 -29
  36. package/dist/hooks/react/useResponsive.js +0 -59
  37. package/dist/hooks/react/useUnmount.js +0 -18
  38. package/dist/types/enums/index.d.ts +0 -20
  39. package/dist/types/hooks/react/index.d.ts +0 -5
  40. package/dist/types/hooks/react/useCreation.d.ts +0 -10
  41. package/dist/types/hooks/react/useLatest.d.ts +0 -8
  42. package/dist/types/hooks/react/useMount.d.ts +0 -11
  43. package/dist/types/hooks/react/useResponsive.d.ts +0 -16
  44. package/dist/types/hooks/react/useUnmount.d.ts +0 -7
  45. package/dist/types/index.d.ts +0 -1
  46. package/dist/types/utils/array.d.ts +0 -76
  47. package/dist/types/utils/clone.d.ts +0 -13
  48. package/dist/types/utils/index.d.ts +0 -7
  49. package/dist/types/utils/object.d.ts +0 -54
  50. package/dist/types/utils/string.d.ts +0 -15
  51. package/dist/types/utils/to.d.ts +0 -5
  52. package/dist/types/utils/tree/index.d.ts +0 -6
  53. package/dist/types/utils/tree/rowsToTree.d.ts +0 -10
  54. package/dist/types/utils/tree/treeFilter.d.ts +0 -6
  55. package/dist/types/utils/tree/treeFind.d.ts +0 -8
  56. package/dist/types/utils/tree/treeForEach.d.ts +0 -5
  57. package/dist/types/utils/tree/treeMap.d.ts +0 -6
  58. package/dist/types/utils/tree/treeToRows.d.ts +0 -9
  59. package/dist/types/utils/tree/types.d.ts +0 -24
  60. package/dist/types/utils/typeof.d.ts +0 -37
  61. package/dist/types/zod/index.d.ts +0 -3
  62. package/dist/types/zod/primitive.d.ts +0 -32
  63. package/dist/types/zod/validator/input.d.ts +0 -27
  64. package/dist/types/zod/validator/societal.d.ts +0 -39
  65. package/dist/utils/array.js +0 -196
  66. package/dist/utils/clone.js +0 -75
  67. package/dist/utils/index.js +0 -7
  68. package/dist/utils/object.js +0 -149
  69. package/dist/utils/string.js +0 -73
  70. package/dist/utils/to.js +0 -16
  71. package/dist/utils/tree/index.js +0 -6
  72. package/dist/utils/tree/rowsToTree.js +0 -35
  73. package/dist/utils/tree/treeFilter.js +0 -92
  74. package/dist/utils/tree/treeFind.js +0 -82
  75. package/dist/utils/tree/treeForEach.js +0 -60
  76. package/dist/utils/tree/treeMap.js +0 -79
  77. package/dist/utils/tree/treeToRows.js +0 -13
  78. package/dist/utils/tree/types.js +0 -10
  79. package/dist/utils/typeof.js +0 -149
  80. package/dist/zod/index.js +0 -3
  81. package/dist/zod/primitive.js +0 -32
  82. package/dist/zod/validator/input.js +0 -39
  83. package/dist/zod/validator/societal.js +0 -57
@@ -0,0 +1,25 @@
1
+ //#region src/enums/grid.d.ts
2
+ type BREAK_POINT_TOKEN_TYPE = Record<keyof typeof BREAK_POINT_TOKEN_ENUM, number>;
3
+ /** 屏幕响应断点 token 配置 */
4
+ declare const BREAK_POINT_TOKEN_ENUM: {
5
+ readonly XS: 576;
6
+ readonly XSMin: 576;
7
+ readonly XSMax: 767;
8
+ readonly SM: 768;
9
+ readonly SMMin: 768;
10
+ readonly SMMax: 991;
11
+ readonly MD: 992;
12
+ readonly MDMin: 992;
13
+ readonly MDMax: 1199;
14
+ readonly LG: 1200;
15
+ readonly LGMin: 1200;
16
+ readonly LGMax: 1599;
17
+ readonly XL: 1600;
18
+ readonly XLMin: 1600;
19
+ readonly XLMax: 1919;
20
+ readonly XXL: 1920;
21
+ readonly XXLMin: 1920;
22
+ };
23
+ //#endregion
24
+ export { BREAK_POINT_TOKEN_ENUM, BREAK_POINT_TOKEN_TYPE };
25
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","names":[],"sources":["../src/enums/grid.ts"],"sourcesContent":[],"mappings":";KAAY,sBAAA,GAAyB,oBAAoB;AAAzD;AAEa,cAAA,sBAkBH,EAAA"}
package/dist/enums.js ADDED
@@ -0,0 +1,25 @@
1
+ //#region src/enums/grid.ts
2
+ /** 屏幕响应断点 token 配置 */
3
+ const BREAK_POINT_TOKEN_ENUM = {
4
+ XS: 576,
5
+ XSMin: 576,
6
+ XSMax: 767,
7
+ SM: 768,
8
+ SMMin: 768,
9
+ SMMax: 991,
10
+ MD: 992,
11
+ MDMin: 992,
12
+ MDMax: 1199,
13
+ LG: 1200,
14
+ LGMin: 1200,
15
+ LGMax: 1599,
16
+ XL: 1600,
17
+ XLMin: 1600,
18
+ XLMax: 1919,
19
+ XXL: 1920,
20
+ XXLMin: 1920
21
+ };
22
+
23
+ //#endregion
24
+ export { BREAK_POINT_TOKEN_ENUM };
25
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","names":[],"sources":["../src/enums/grid.ts"],"sourcesContent":["export type BREAK_POINT_TOKEN_TYPE = Record<keyof typeof BREAK_POINT_TOKEN_ENUM, number>;\n/** 屏幕响应断点 token 配置 */\nexport const BREAK_POINT_TOKEN_ENUM = {\n XS: 576,\n XSMin: 576,\n XSMax: 767,\n SM: 768,\n SMMin: 768,\n SMMax: 991,\n MD: 992,\n MDMin: 992,\n MDMax: 1199,\n LG: 1200,\n LGMin: 1200,\n LGMax: 1599,\n XL: 1600,\n XLMin: 1600,\n XLMax: 1919,\n XXL: 1920,\n XXLMin: 1920,\n} as const;\n"],"mappings":";;AAEA,MAAa,yBAAyB;CACpC,IAAI;CACJ,OAAO;CACP,OAAO;CACP,IAAI;CACJ,OAAO;CACP,OAAO;CACP,IAAI;CACJ,OAAO;CACP,OAAO;CACP,IAAI;CACJ,OAAO;CACP,OAAO;CACP,IAAI;CACJ,OAAO;CACP,OAAO;CACP,KAAK;CACL,QAAQ;CACT"}
@@ -0,0 +1,23 @@
1
+ import * as alova_client0 from "alova/client";
2
+ import { AlovaFrontMiddlewareContext, AlovaMethodHandler, CompleteHandler, ErrorHandler, RequestHookConfig, SuccessHandler, WatcherHookConfig } from "alova/client";
3
+ import { AlovaGenerics, Method } from "alova";
4
+
5
+ //#region src/hooks/alova/useAlovaRequest.d.ts
6
+ interface HookConfig$1<AG extends AlovaGenerics, Args extends any[]> extends RequestHookConfig<AG, Args> {
7
+ onBeforeRequest?: (context: AlovaFrontMiddlewareContext<AG, Args>) => void;
8
+ onSuccess?: SuccessHandler<AG, Args>;
9
+ onError?: ErrorHandler<AG, Args>;
10
+ onComplete?: CompleteHandler<AG, Args>;
11
+ }
12
+ declare function useAlovaRequest<AG extends AlovaGenerics, Args extends any[] = any[]>(methodHandler: Method<AG> | AlovaMethodHandler<AG, Args>, hookConfig?: HookConfig$1<AG, Args> | undefined): alova_client0.UseHookExposure<AG, Args, unknown>;
13
+ //#endregion
14
+ //#region src/hooks/alova/useAlovaWatcher.d.ts
15
+ interface HookConfig<AG extends AlovaGenerics, Args extends any[]> extends WatcherHookConfig<AG, Args> {
16
+ onSuccess?: SuccessHandler<AG, Args>;
17
+ onError?: ErrorHandler<AG, Args>;
18
+ onComplete?: CompleteHandler<AG, Args>;
19
+ }
20
+ declare function useAlovaWatcher<AG extends AlovaGenerics, Args extends any[] = any[]>(methodHandler: Method<AG> | AlovaMethodHandler<AG, Args>, watchingStates: AG["StatesExport"]["Watched"][], hookConfig?: HookConfig<AG, Args>): alova_client0.UseHookExposure<AG, Args, unknown>;
21
+ //#endregion
22
+ export { useAlovaRequest, useAlovaWatcher };
23
+ //# sourceMappingURL=hooks-alova.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-alova.d.ts","names":[],"sources":["../src/hooks/alova/useAlovaRequest.ts","../src/hooks/alova/useAlovaWatcher.ts"],"sourcesContent":[],"mappings":";;;;;UAaU,wBAAsB,2CAA2C,kBAAkB,IAAI;8BACnE,4BAA4B,IAAI;cAChD,eAAe,IAAI;EAFvB,OAAA,CAAA,EAGE,YAHQ,CAGK,EAHL,EAGS,IAHT,CAAA;EAAY,UAAA,CAAA,EAIjB,eAJiB,CAID,EAJC,EAIG,IAJH,CAAA;;AAAiE,iBAOjF,eAPiF,CAAA,WAOtD,aAPsD,EAAA,aAAA,GAAA,EAAA,GAAA,GAAA,EAAA,CAAA,CAAA,aAAA,EAQhF,MARgF,CAQzE,EARyE,CAAA,GAQnE,kBARmE,CAQhD,EARgD,EAQ5C,IAR4C,CAAA,EAAA,UAAA,CAAA,EASlF,YATkF,CASvE,EATuE,EASnE,IATmE,CAAA,GAAA,SAAA,CAAA,EASlD,aAAA,CAAA,eATkD,CASlD,EATkD,EASlD,IATkD,EAAA,OAAA,CAAA;;;UCDvF,sBAAsB,2CAA2C,kBAAkB,IAAI;cACnF,eAAe,IAAI;YACrB,aAAa,IAAI;EDDnB,UAAA,CAAA,ECEK,eDFK,CCEW,EDFX,ECEe,IDFf,CAAA;;AAAyE,iBCK7E,eDL6E,CAAA,WCKlD,aDLkD,EAAA,aAAA,GAAA,EAAA,GAAA,GAAA,EAAA,CAAA,CAAA,aAAA,ECM5E,MDN4E,CCMrE,EDNqE,CAAA,GCM/D,kBDN+D,CCM5C,EDN4C,ECMxC,IDNwC,CAAA,EAAA,cAAA,ECO3E,EDP2E,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,EAAA,EAAA,UAAA,CAAA,ECQ/E,UDR+E,CCQpE,EDRoE,ECQhE,IDRgE,CAAA,CAAA,ECQtD,aAAA,CAAA,eDRsD,CCQtD,EDRsD,ECQtD,IDRsD,EAAA,OAAA,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { useRequest, useWatcher } from "alova/client";
2
+
3
+ //#region src/hooks/alova/useAlovaRequest.ts
4
+ function useAlovaRequest(methodHandler, hookConfig) {
5
+ const config = hookConfig || {};
6
+ config.immediate ?? (config.immediate = true);
7
+ if (config.onBeforeRequest) {
8
+ const middleware = config.middleware;
9
+ config.middleware = async (context, next) => {
10
+ config.onBeforeRequest?.(context);
11
+ if (middleware) {
12
+ async function run() {
13
+ await next();
14
+ }
15
+ await middleware?.(context, run);
16
+ } else await next();
17
+ };
18
+ }
19
+ const exposure = useRequest(methodHandler, config);
20
+ if (config.onSuccess) exposure.onSuccess(config.onSuccess);
21
+ if (config.onError) exposure.onError(config.onError);
22
+ if (config.onComplete) exposure.onComplete(config.onComplete);
23
+ return exposure;
24
+ }
25
+
26
+ //#endregion
27
+ //#region src/hooks/alova/useAlovaWatcher.ts
28
+ function useAlovaWatcher(methodHandler, watchingStates, hookConfig = {}) {
29
+ const config = hookConfig || {};
30
+ const exposure = useWatcher(methodHandler, watchingStates, config);
31
+ if (config.onSuccess) exposure.onSuccess(config.onSuccess);
32
+ if (config.onError) exposure.onError(config.onError);
33
+ if (config.onComplete) exposure.onComplete(config.onComplete);
34
+ return exposure;
35
+ }
36
+
37
+ //#endregion
38
+ export { useAlovaRequest, useAlovaWatcher };
39
+ //# sourceMappingURL=hooks-alova.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-alova.js","names":[],"sources":["../src/hooks/alova/useAlovaRequest.ts","../src/hooks/alova/useAlovaWatcher.ts"],"sourcesContent":["/* eslint-disable ts/no-explicit-any */\n\nimport type { AlovaGenerics, Method } from \"alova\";\nimport {\n type AlovaFrontMiddlewareContext,\n type AlovaMethodHandler,\n type CompleteHandler,\n type ErrorHandler,\n type RequestHookConfig,\n type SuccessHandler,\n useRequest,\n} from \"alova/client\";\n\ninterface HookConfig<AG extends AlovaGenerics, Args extends any[]> extends RequestHookConfig<AG, Args> {\n onBeforeRequest?: (context: AlovaFrontMiddlewareContext<AG, Args>) => void;\n onSuccess?: SuccessHandler<AG, Args>;\n onError?: ErrorHandler<AG, Args>;\n onComplete?: CompleteHandler<AG, Args>;\n}\n\nexport function useAlovaRequest<AG extends AlovaGenerics, Args extends any[] = any[]>(\n methodHandler: Method<AG> | AlovaMethodHandler<AG, Args>,\n hookConfig?: HookConfig<AG, Args> | undefined,\n) {\n const config = hookConfig || {};\n config.immediate ??= true;\n\n if (config.onBeforeRequest) {\n const middleware = config.middleware;\n config.middleware = async (context, next) => {\n config.onBeforeRequest?.(context);\n\n if (middleware) {\n async function run() {\n await next();\n }\n await middleware?.(context, run);\n } else {\n await next();\n }\n };\n }\n\n const exposure = useRequest(methodHandler, config);\n\n if (config.onSuccess) {\n exposure.onSuccess(config.onSuccess);\n }\n if (config.onError) {\n exposure.onError(config.onError);\n }\n if (config.onComplete) {\n exposure.onComplete(config.onComplete);\n }\n\n return exposure;\n}\n","/* eslint-disable ts/no-explicit-any */\n\nimport type { AlovaGenerics, Method } from \"alova\";\nimport {\n type AlovaMethodHandler,\n type CompleteHandler,\n type ErrorHandler,\n type SuccessHandler,\n type WatcherHookConfig,\n useWatcher,\n} from \"alova/client\";\n\ninterface HookConfig<AG extends AlovaGenerics, Args extends any[]> extends WatcherHookConfig<AG, Args> {\n onSuccess?: SuccessHandler<AG, Args>;\n onError?: ErrorHandler<AG, Args>;\n onComplete?: CompleteHandler<AG, Args>;\n}\n\nexport function useAlovaWatcher<AG extends AlovaGenerics, Args extends any[] = any[]>(\n methodHandler: Method<AG> | AlovaMethodHandler<AG, Args>,\n watchingStates: AG[\"StatesExport\"][\"Watched\"][],\n hookConfig: HookConfig<AG, Args> = {},\n) {\n const config = hookConfig || {};\n const exposure = useWatcher(methodHandler, watchingStates, config);\n\n if (config.onSuccess) {\n exposure.onSuccess(config.onSuccess);\n }\n if (config.onError) {\n exposure.onError(config.onError);\n }\n if (config.onComplete) {\n exposure.onComplete(config.onComplete);\n }\n\n return exposure;\n}\n"],"mappings":";;;AAoBA,SAAgB,gBACd,eACA,YACA;CACA,MAAM,SAAS,cAAc,EAAE;AAC/B,QAAO,cAAP,OAAO,YAAc;AAErB,KAAI,OAAO,iBAAiB;EAC1B,MAAM,aAAa,OAAO;AAC1B,SAAO,aAAa,OAAO,SAAS,SAAS;AAC3C,UAAO,kBAAkB,QAAQ;AAEjC,OAAI,YAAY;IACd,eAAe,MAAM;AACnB,WAAM,MAAM;;AAEd,UAAM,aAAa,SAAS,IAAI;SAEhC,OAAM,MAAM;;;CAKlB,MAAM,WAAW,WAAW,eAAe,OAAO;AAElD,KAAI,OAAO,UACT,UAAS,UAAU,OAAO,UAAU;AAEtC,KAAI,OAAO,QACT,UAAS,QAAQ,OAAO,QAAQ;AAElC,KAAI,OAAO,WACT,UAAS,WAAW,OAAO,WAAW;AAGxC,QAAO;;;;;ACrCT,SAAgB,gBACd,eACA,gBACA,aAAmC,EAAE,EACrC;CACA,MAAM,SAAS,cAAc,EAAE;CAC/B,MAAM,WAAW,WAAW,eAAe,gBAAgB,OAAO;AAElE,KAAI,OAAO,UACT,UAAS,UAAU,OAAO,UAAU;AAEtC,KAAI,OAAO,QACT,UAAS,QAAQ,OAAO,QAAQ;AAElC,KAAI,OAAO,WACT,UAAS,WAAW,OAAO,WAAW;AAGxC,QAAO"}
@@ -0,0 +1,89 @@
1
+ import { DependencyList, EffectCallback, RefObject } from "react";
2
+
3
+ //#region src/hooks/react/useCreation.d.ts
4
+
5
+ /**
6
+ * useCreation
7
+ * @reference https://ahooks.js.org/zh-CN/hooks/use-creation
8
+ *
9
+ * @template T
10
+ * @param {() => T} factory
11
+ * @param {DependencyList} deps
12
+ */
13
+ declare function useCreation<T>(factory: () => T, deps: DependencyList): T;
14
+ //#endregion
15
+ //#region src/hooks/react/useLatest.d.ts
16
+ /**
17
+ * 返回当前最新值的 Hook
18
+ * @reference https://ahooks.js.org/zh-CN/hooks/use-latest
19
+ *
20
+ * @template T
21
+ * @param {T} value
22
+ */
23
+ declare function useLatest<T>(value: T): RefObject<T>;
24
+ //#endregion
25
+ //#region src/hooks/react/useMount.d.ts
26
+ type MountCallback = EffectCallback | AnyAsyncFunction;
27
+ /**
28
+ * 在组件初始化时执行的 Hook
29
+ * - 即使在严格模式下也只执行一次
30
+ * @reference https://ahooks.js.org/hooks/use-mount
31
+ *
32
+ * @param {MountCallback} effect 副作用函数
33
+ */
34
+ declare function useMount(effect: MountCallback): void;
35
+ //#endregion
36
+ //#region src/enums/grid.d.ts
37
+ type BREAK_POINT_TOKEN_TYPE = Record<keyof typeof BREAK_POINT_TOKEN_ENUM, number>;
38
+ /** 屏幕响应断点 token 配置 */
39
+ declare const BREAK_POINT_TOKEN_ENUM: {
40
+ readonly XS: 576;
41
+ readonly XSMin: 576;
42
+ readonly XSMax: 767;
43
+ readonly SM: 768;
44
+ readonly SMMin: 768;
45
+ readonly SMMax: 991;
46
+ readonly MD: 992;
47
+ readonly MDMin: 992;
48
+ readonly MDMax: 1199;
49
+ readonly LG: 1200;
50
+ readonly LGMin: 1200;
51
+ readonly LGMax: 1599;
52
+ readonly XL: 1600;
53
+ readonly XLMin: 1600;
54
+ readonly XLMax: 1919;
55
+ readonly XXL: 1920;
56
+ readonly XXLMin: 1920;
57
+ };
58
+ //#endregion
59
+ //#region src/hooks/react/useResponsive.d.ts
60
+ type Breakpoint = "xxl" | "xl" | "lg" | "md" | "sm" | "xs";
61
+ type ResponsiveValues = Record<Breakpoint, boolean>;
62
+ interface ResponsiveHookOptions {
63
+ /**
64
+ * 紧凑布局断点
65
+ * - 低于此断点时使用紧凑布局
66
+ * @default "xl"
67
+ */
68
+ compactBreakPoint?: Breakpoint;
69
+ /** 屏幕响应断点 token 配置 */
70
+ breakPointTokens?: BREAK_POINT_TOKEN_TYPE;
71
+ }
72
+ declare function useResponsive(options?: ResponsiveHookOptions): {
73
+ responsive: ResponsiveValues;
74
+ current: Breakpoint;
75
+ isCompact: boolean;
76
+ breakPointTokens: BREAK_POINT_TOKEN_TYPE;
77
+ };
78
+ //#endregion
79
+ //#region src/hooks/react/useUnmount.d.ts
80
+ /**
81
+ * 在组件卸载时执行的 Hook
82
+ * @reference https://ahooks.js.org/zh-CN/hooks/use-unmount
83
+ *
84
+ * @param {AnyFunction} effect 副作用函数
85
+ */
86
+ declare function useUnmount(effect: AnyFunction): void;
87
+ //#endregion
88
+ export { ResponsiveHookOptions, useCreation, useLatest, useMount, useResponsive, useUnmount };
89
+ //# sourceMappingURL=hooks-react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-react.d.ts","names":[],"sources":["../src/hooks/react/useCreation.ts","../src/hooks/react/useLatest.ts","../src/hooks/react/useMount.ts","../src/enums/grid.ts","../src/hooks/react/useResponsive.ts","../src/hooks/react/useUnmount.ts"],"sourcesContent":[],"mappings":";;;;;;AAiBA;;;;;;iBAAgB,8BAA8B,SAAS,iBAAc;;;;;AAArE;;;;;iBCRgB,oBAAoB,IAAI,UAAU;;;KCL7C,aAAA,GAAgB,iBAAiB;;AFatC;;;;;;iBEJgB,QAAA,SAAiB;;;KCbrB,sBAAA,GAAyB,oBAAoB;;cAE5C;EHeG,SAAA,EAAA,EAAA,GAAW;EAAmB,SAAA,KAAA,EAAA,GAAA;EAAS,SAAA,KAAA,EAAA,GAAA;EAAc,SAAA,EAAA,EAAA,GAAA;EAAA,SAAA,KAAA,EAAA,GAAA;;;;ECRrD,SAAA,KAAS,EAAA,IAAA;EAAW,SAAA,EAAA,EAAA,IAAA;EAAc,SAAA,KAAA,EAAA,IAAA;EAAV,SAAA,KAAA,EAAA,IAAA;EAAS,SAAA,EAAA,EAAA,IAAA;;;;ECL5C,SAAA,MAAA,EAAa,IAAA;AASlB,CAAA;;;KETK,UAAA;KAGA,gBAAA,GAAmB,OAAO;AJUf,UIFC,qBAAA,CJEU;EAAmB;;;;;sBIIxB;;EHZN,gBAAS,CAAA,EGcJ,sBHdI;;AAAyB,iBGgBlC,aAAA,CHhBkC,OAAA,CAAA,EGgBV,qBHhBU,CAAA,EAAA;EAAV,UAAA,kBAAA;EAAS,OAAA,YAAA;;;;;;;;;ADQjD;;;AAAqE,iBKPrD,UAAA,CLOqD,MAAA,EKPlC,WLOkC,CAAA,EAAA,IAAA"}
@@ -0,0 +1,340 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+
3
+ //#region src/utils/typeof/types.ts
4
+ const PROTOTYPE_TAGS = {
5
+ abortSignal: "[object AbortSignal]",
6
+ array: "[object Array]",
7
+ asyncFunction: "[object AsyncFunction]",
8
+ asyncGeneratorFunction: "[object AsyncGeneratorFunction]",
9
+ bigInt: "[object BigInt]",
10
+ blob: "[object Blob]",
11
+ boolean: "[object Boolean]",
12
+ date: "[object Date]",
13
+ error: "[object Error]",
14
+ file: "[object File]",
15
+ function: "[object Function]",
16
+ generatorFunction: "[object GeneratorFunction]",
17
+ map: "[object Map]",
18
+ null: "[object Null]",
19
+ number: "[object Number]",
20
+ object: "[object Object]",
21
+ promise: "[object Promise]",
22
+ readableStream: "[object ReadableStream]",
23
+ regExp: "[object RegExp]",
24
+ set: "[object Set]",
25
+ string: "[object String]",
26
+ symbol: "[object Symbol]",
27
+ undefined: "[object Undefined]",
28
+ URLSearchParams: "[object URLSearchParams]",
29
+ weakMap: "[object WeakMap]",
30
+ weakSet: "[object WeakSet]",
31
+ webSocket: "[object WebSocket]",
32
+ window: "[object Window]"
33
+ };
34
+ function resolvePrototypeString(value) {
35
+ return Object.prototype.toString.call(value);
36
+ }
37
+
38
+ //#endregion
39
+ //#region src/utils/typeof/isBoolean.ts
40
+ function isBoolean(value) {
41
+ return typeof value === "boolean";
42
+ }
43
+
44
+ //#endregion
45
+ //#region src/utils/typeof/isObject.ts
46
+ /**
47
+ * 判断是否为对象类型
48
+ * - 可选是否检查原型为 `Object.prototype`,防止原型链污染
49
+ *
50
+ * @param value 待检查值
51
+ * @param prototypeCheck 是否进行原型检查,默认 `true`
52
+ */
53
+ function isObject(value, prototypeCheck = true) {
54
+ const check = resolvePrototypeString(value) === PROTOTYPE_TAGS.object;
55
+ return prototypeCheck ? check && Object.getPrototypeOf(value) === Object.prototype : check;
56
+ }
57
+
58
+ //#endregion
59
+ //#region src/utils/typeof/isDate.ts
60
+ function isDate(value) {
61
+ if (!isObject(value)) return false;
62
+ try {
63
+ return resolvePrototypeString(value) === PROTOTYPE_TAGS.date && typeof value["getTime"] === "function";
64
+ } catch (error) {
65
+ return false;
66
+ }
67
+ }
68
+
69
+ //#endregion
70
+ //#region src/utils/typeof/isEqual.ts
71
+ /**
72
+ * 检查给定的值是否相等
73
+ * @reference https://github.com/radashi-org/radashi/blob/main/src/typed/isEqual.ts
74
+ *
75
+ * @param {T} x
76
+ * @param {T} y
77
+ */
78
+ function isEqual(x, y) {
79
+ if (Object.is(x, y)) return true;
80
+ if (isDate(x) && isDate(y)) return x.getTime() === y.getTime();
81
+ if (isRegExp(x) && isRegExp(y)) return x.toString() === y.toString();
82
+ if (typeof x !== "object" || x === null || typeof y !== "object" || y === null) return false;
83
+ const keysX = Reflect.ownKeys(x);
84
+ const keysY = Reflect.ownKeys(y);
85
+ if (keysX.length !== keysY.length) return false;
86
+ for (const key of keysX) {
87
+ if (!Reflect.has(y, key)) return false;
88
+ if (!isEqual(x[key], y[key])) return false;
89
+ }
90
+ return true;
91
+ }
92
+
93
+ //#endregion
94
+ //#region src/utils/typeof/isFunction.ts
95
+ function isFunction(value) {
96
+ return typeof value === "function";
97
+ }
98
+
99
+ //#endregion
100
+ //#region src/utils/typeof/isPromise.ts
101
+ function isPromise(value) {
102
+ return resolvePrototypeString(value) === PROTOTYPE_TAGS.promise;
103
+ }
104
+ function isPromiseLike(value) {
105
+ return isPromise(value) || isObject(value) && isFunction(value["then"]);
106
+ }
107
+
108
+ //#endregion
109
+ //#region src/utils/typeof/isRegExp.ts
110
+ function isRegExp(value) {
111
+ if (!isObject(value)) return false;
112
+ try {
113
+ const regex = value;
114
+ return resolvePrototypeString(value) === PROTOTYPE_TAGS.regExp && isString(regex.source) && isString(regex.flags) && isBoolean(regex.global) && isFunction(regex.test);
115
+ } catch (error) {
116
+ return false;
117
+ }
118
+ }
119
+
120
+ //#endregion
121
+ //#region src/utils/typeof/isString.ts
122
+ /**
123
+ * 检查 value 是否为 string 类型
124
+ *
125
+ * @param value 待检查值
126
+ * @param checkEmpty 是否排除空字符串
127
+ */
128
+ function isString(value, checkEmpty = false) {
129
+ return typeof value === "string" && (!checkEmpty || !!value.length);
130
+ }
131
+
132
+ //#endregion
133
+ //#region src/utils/object/objectKeys.ts
134
+ /**
135
+ * 返回对象的可枚举属性和方法的名称
136
+ * - `Object.keys` 始终返回 `string[]` 类型,此函数可以返回具体类型
137
+ *
138
+ * @param obj 对象
139
+ */
140
+ function objectKeys(obj) {
141
+ return Object.keys(obj);
142
+ }
143
+
144
+ //#endregion
145
+ //#region src/utils/object/objectAssign.ts
146
+ /**
147
+ * 递归地将第二个对象合并到第一个对象的副本中
148
+ * - 只有普通对象才会递归合并
149
+ *
150
+ * @param initial 初始对象
151
+ * @param override 待合并对象
152
+ */
153
+ function objectAssign(initial, override) {
154
+ if (!isObject(initial) || !isObject(override)) return initial ?? override ?? {};
155
+ const proto = Object.getPrototypeOf(initial);
156
+ const assigned = proto ? { ...initial } : Object.assign(Object.create(proto), initial);
157
+ for (const key of Object.keys(override)) assigned[key] = isObject(initial[key]) && isObject(override[key]) ? objectAssign(initial[key], override[key]) : override[key];
158
+ return assigned;
159
+ }
160
+
161
+ //#endregion
162
+ //#region src/hooks/react/useCreation.ts
163
+ /**
164
+ * useCreation
165
+ * @reference https://ahooks.js.org/zh-CN/hooks/use-creation
166
+ *
167
+ * @template T
168
+ * @param {() => T} factory
169
+ * @param {DependencyList} deps
170
+ */
171
+ function useCreation(factory, deps) {
172
+ const { current } = useRef({
173
+ deps,
174
+ result: void 0,
175
+ isInitialized: false
176
+ });
177
+ if (current.isInitialized === false || !isEqual(current.deps, deps)) {
178
+ current.deps = deps;
179
+ current.result = factory();
180
+ current.isInitialized = true;
181
+ }
182
+ return current.result;
183
+ }
184
+
185
+ //#endregion
186
+ //#region src/hooks/react/useLatest.ts
187
+ /**
188
+ * 返回当前最新值的 Hook
189
+ * @reference https://ahooks.js.org/zh-CN/hooks/use-latest
190
+ *
191
+ * @template T
192
+ * @param {T} value
193
+ */
194
+ function useLatest(value) {
195
+ const ref = useRef(value);
196
+ ref.current = value;
197
+ return ref;
198
+ }
199
+
200
+ //#endregion
201
+ //#region src/hooks/react/useMount.ts
202
+ /**
203
+ * 在组件初始化时执行的 Hook
204
+ * - 即使在严格模式下也只执行一次
205
+ * @reference https://ahooks.js.org/hooks/use-mount
206
+ *
207
+ * @param {MountCallback} effect 副作用函数
208
+ */
209
+ function useMount(effect) {
210
+ if (!isFunction(effect)) console.error(`useMount expected parameter is a function, but got ${typeof effect}`);
211
+ const isMountedRef = useRef(false);
212
+ const effectRef = useLatest(effect);
213
+ useEffect(() => {
214
+ if (isMountedRef.current) return;
215
+ isMountedRef.current = true;
216
+ const result = effectRef.current?.();
217
+ if (isPromiseLike(result)) return;
218
+ return result;
219
+ }, []);
220
+ }
221
+
222
+ //#endregion
223
+ //#region src/enums/grid.ts
224
+ /** 屏幕响应断点 token 配置 */
225
+ const BREAK_POINT_TOKEN_ENUM = {
226
+ XS: 576,
227
+ XSMin: 576,
228
+ XSMax: 767,
229
+ SM: 768,
230
+ SMMin: 768,
231
+ SMMax: 991,
232
+ MD: 992,
233
+ MDMin: 992,
234
+ MDMax: 1199,
235
+ LG: 1200,
236
+ LGMin: 1200,
237
+ LGMax: 1599,
238
+ XL: 1600,
239
+ XLMin: 1600,
240
+ XLMax: 1919,
241
+ XXL: 1920,
242
+ XXLMin: 1920
243
+ };
244
+
245
+ //#endregion
246
+ //#region src/hooks/react/useResponsive.ts
247
+ const subscriberList = /* @__PURE__ */ new Set();
248
+ const { XS, SM, MD, LG, XL, XXL } = BREAK_POINT_TOKEN_ENUM;
249
+ const defaultResponsiveValues = {
250
+ xxl: false,
251
+ xl: false,
252
+ lg: false,
253
+ md: false,
254
+ sm: false,
255
+ xs: false
256
+ };
257
+ let responsiveConfig = {
258
+ xxl: XXL,
259
+ xl: XL,
260
+ lg: LG,
261
+ md: MD,
262
+ sm: SM,
263
+ xs: XS
264
+ };
265
+ let responsiveValues = { ...defaultResponsiveValues };
266
+ function useResponsive(options) {
267
+ const { compactBreakPoint = "xl", breakPointTokens = {} } = options || {};
268
+ const tokens = objectAssign(BREAK_POINT_TOKEN_ENUM, breakPointTokens);
269
+ responsiveConfig = {
270
+ xxl: tokens.XXL,
271
+ xl: tokens.XL,
272
+ lg: tokens.LG,
273
+ md: tokens.MD,
274
+ sm: tokens.SM,
275
+ xs: tokens.XS
276
+ };
277
+ calculate();
278
+ const [responsive, setResponsive] = useState(responsiveValues);
279
+ const isCompact = !responsive[compactBreakPoint];
280
+ const current = objectKeys(defaultResponsiveValues).find((key) => responsive[key] === true) || "xs";
281
+ useEffect(() => {
282
+ addListener();
283
+ const subscriber = () => {
284
+ setResponsive(responsiveValues);
285
+ };
286
+ subscriberList.add(subscriber);
287
+ return () => {
288
+ subscriberList.delete(subscriber);
289
+ if (subscriberList.size === 0) removeListener();
290
+ };
291
+ }, []);
292
+ return {
293
+ responsive,
294
+ current,
295
+ isCompact,
296
+ breakPointTokens: tokens
297
+ };
298
+ }
299
+ function resizeListener() {
300
+ const oldInfo = responsiveValues;
301
+ calculate();
302
+ if (oldInfo === responsiveValues) return;
303
+ for (const subscriber of subscriberList) subscriber();
304
+ }
305
+ function addListener() {
306
+ window.addEventListener("resize", resizeListener);
307
+ }
308
+ function removeListener() {
309
+ window.removeEventListener("resize", resizeListener);
310
+ }
311
+ function calculate() {
312
+ const width = window.innerWidth;
313
+ const newValues = { ...defaultResponsiveValues };
314
+ let shouldUpdate = false;
315
+ for (const key of objectKeys(responsiveConfig)) {
316
+ newValues[key] = width >= responsiveConfig[key];
317
+ if (newValues[key] !== responsiveValues[key]) shouldUpdate = true;
318
+ }
319
+ if (shouldUpdate) responsiveValues = newValues;
320
+ }
321
+
322
+ //#endregion
323
+ //#region src/hooks/react/useUnmount.ts
324
+ /**
325
+ * 在组件卸载时执行的 Hook
326
+ * @reference https://ahooks.js.org/zh-CN/hooks/use-unmount
327
+ *
328
+ * @param {AnyFunction} effect 副作用函数
329
+ */
330
+ function useUnmount(effect) {
331
+ if (!isFunction(effect)) console.error(`useUnmount expected parameter is a function, got ${typeof effect}`);
332
+ const effectRef = useLatest(effect);
333
+ useEffect(() => () => {
334
+ effectRef.current?.();
335
+ }, []);
336
+ }
337
+
338
+ //#endregion
339
+ export { useCreation, useLatest, useMount, useResponsive, useUnmount };
340
+ //# sourceMappingURL=hooks-react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-react.js","names":["defaultResponsiveValues: ResponsiveValues","responsiveConfig: ResponsiveConfig","responsiveValues: ResponsiveValues","tokens: BREAK_POINT_TOKEN_TYPE"],"sources":["../src/utils/typeof/types.ts","../src/utils/typeof/isBoolean.ts","../src/utils/typeof/isObject.ts","../src/utils/typeof/isDate.ts","../src/utils/typeof/isEqual.ts","../src/utils/typeof/isFunction.ts","../src/utils/typeof/isPromise.ts","../src/utils/typeof/isRegExp.ts","../src/utils/typeof/isString.ts","../src/utils/object/objectKeys.ts","../src/utils/object/objectAssign.ts","../src/hooks/react/useCreation.ts","../src/hooks/react/useLatest.ts","../src/hooks/react/useMount.ts","../src/enums/grid.ts","../src/hooks/react/useResponsive.ts","../src/hooks/react/useUnmount.ts"],"sourcesContent":["export const PROTOTYPE_TAGS = {\n abortSignal: \"[object AbortSignal]\",\n array: \"[object Array]\",\n asyncFunction: \"[object AsyncFunction]\",\n asyncGeneratorFunction: \"[object AsyncGeneratorFunction]\",\n bigInt: \"[object BigInt]\",\n blob: \"[object Blob]\",\n boolean: \"[object Boolean]\",\n date: \"[object Date]\",\n error: \"[object Error]\",\n file: \"[object File]\",\n function: \"[object Function]\",\n generatorFunction: \"[object GeneratorFunction]\",\n map: \"[object Map]\",\n null: \"[object Null]\",\n number: \"[object Number]\",\n object: \"[object Object]\",\n promise: \"[object Promise]\",\n readableStream: \"[object ReadableStream]\",\n regExp: \"[object RegExp]\",\n set: \"[object Set]\",\n string: \"[object String]\",\n symbol: \"[object Symbol]\",\n undefined: \"[object Undefined]\",\n URLSearchParams: \"[object URLSearchParams]\",\n weakMap: \"[object WeakMap]\",\n weakSet: \"[object WeakSet]\",\n webSocket: \"[object WebSocket]\",\n window: \"[object Window]\",\n} as const;\n\nexport const TYPED_ARRAY_TAGS = new Set([\n \"[object Int8Array]\",\n \"[object Uint8Array]\",\n \"[object Uint8ClampedArray]\",\n \"[object Int16Array]\",\n \"[object Uint16Array]\",\n \"[object Int32Array]\",\n \"[object Uint32Array]\",\n \"[object Float32Array]\",\n \"[object Float64Array]\",\n \"[object BigInt64Array]\",\n \"[object BigUint64Array]\",\n]);\n\nexport function resolvePrototypeString(value: unknown) {\n return Object.prototype.toString.call(value);\n}\n","export function isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 判断是否为对象类型\n * - 可选是否检查原型为 `Object.prototype`,防止原型链污染\n *\n * @param value 待检查值\n * @param prototypeCheck 是否进行原型检查,默认 `true`\n */\nexport function isObject(value: unknown, prototypeCheck = true): value is Record<PropertyKey, unknown> {\n const check = resolvePrototypeString(value) === PROTOTYPE_TAGS.object;\n\n return prototypeCheck ? check && Object.getPrototypeOf(value) === Object.prototype : check;\n}\n","import { isObject } from \"./isObject\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isDate(value: unknown): value is Date {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.date && typeof (value)[\"getTime\"] === \"function\";\n } catch (error) {\n return false;\n }\n}\n","import { isDate, isRegExp } from \".\";\n\n/**\n * 检查给定的值是否相等\n * @reference https://github.com/radashi-org/radashi/blob/main/src/typed/isEqual.ts\n *\n * @param {T} x\n * @param {T} y\n */\nexport function isEqual<T>(x: T, y: T): boolean {\n if (Object.is(x, y)) {\n return true;\n }\n if (isDate(x) && isDate(y)) {\n return x.getTime() === y.getTime();\n }\n if (isRegExp(x) && isRegExp(y)) {\n return x.toString() === y.toString();\n }\n if (typeof x !== \"object\" || x === null || typeof y !== \"object\" || y === null) {\n return false;\n }\n\n const keysX = Reflect.ownKeys(x) as (keyof typeof x)[];\n const keysY = Reflect.ownKeys(y);\n if (keysX.length !== keysY.length) {\n return false;\n }\n\n for (const key of keysX) {\n if (!Reflect.has(y, key)) {\n return false;\n }\n if (!isEqual(x[key], y[key])) {\n return false;\n }\n }\n\n return true;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isFunction(value: unknown): value is AnyFunction {\n return typeof value === \"function\";\n}\n\nexport function isAsyncFunction(value: unknown): value is AnyAsyncFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.asyncFunction;\n}\n\nexport function isGeneratorFunction(value: unknown): value is AnyGeneratorFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.generatorFunction;\n}\n\nexport function isAsyncGeneratorFunction(value: unknown): value is AnyAsyncGeneratorFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.asyncGeneratorFunction;\n}\n","import { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isPromise(value: unknown): value is Promise<unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.promise;\n}\n\nexport function isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return isPromise(value) || (isObject(value) && isFunction(value[\"then\"]));\n}\n","import { isBoolean, isFunction, isObject, isString } from \".\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isRegExp(value: unknown): value is RegExp {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n const regex = value as unknown as RegExp;\n\n return (\n resolvePrototypeString(value) === PROTOTYPE_TAGS.regExp &&\n isString(regex.source) &&\n isString(regex.flags) &&\n isBoolean(regex.global) &&\n isFunction(regex.test)\n );\n } catch (error) {\n return false;\n }\n}\n","/**\n * 检查 value 是否为 string 类型\n *\n * @param value 待检查值\n * @param checkEmpty 是否排除空字符串\n */\nexport function isString(value: unknown, checkEmpty = false): value is string {\n return typeof value === \"string\" && (!checkEmpty || !!value.length);\n}\n","/**\n * 返回对象的可枚举属性和方法的名称\n * - `Object.keys` 始终返回 `string[]` 类型,此函数可以返回具体类型\n *\n * @param obj 对象\n */\nexport function objectKeys<O extends AnyObject>(obj: O): (keyof O)[] {\n return Object.keys(obj);\n}\n","import type { Assign } from \"radashi\";\nimport { isObject } from \"../typeof\";\n\n/**\n * 递归地将第二个对象合并到第一个对象的副本中\n * - 只有普通对象才会递归合并\n *\n * @param initial 初始对象\n * @param override 待合并对象\n */\nexport function objectAssign<I extends PlainObject, O extends PlainObject>(initial: I, override: O): Assign<I, O> {\n if (!isObject(initial) || !isObject(override)) {\n return (initial ?? override ?? {}) as Assign<I, O>;\n }\n\n const proto = Object.getPrototypeOf(initial);\n const assigned = proto ? { ...initial } : Object.assign(Object.create(proto), initial);\n\n for (const key of Object.keys(override)) {\n assigned[key] = isObject(initial[key]) && isObject(override[key]) ? objectAssign(initial[key], override[key]) : override[key];\n }\n\n return assigned;\n}\n","import { useRef, type DependencyList } from \"react\";\nimport { isEqual } from \"src/utils\";\n\ninterface RefObject<T> {\n deps: DependencyList;\n result: T;\n isInitialized: boolean;\n}\n\n/**\n * useCreation\n * @reference https://ahooks.js.org/zh-CN/hooks/use-creation\n *\n * @template T\n * @param {() => T} factory\n * @param {DependencyList} deps\n */\nexport function useCreation<T>(factory: () => T, deps: DependencyList) {\n const { current } = useRef<RefObject<T>>({ deps, result: undefined!, isInitialized: false });\n\n if (current.isInitialized === false || !isEqual(current.deps, deps)) {\n current.deps = deps;\n current.result = factory();\n current.isInitialized = true;\n }\n\n return current.result;\n}\n\n","import { useRef, type RefObject } from \"react\";\n\n/**\n * 返回当前最新值的 Hook\n * @reference https://ahooks.js.org/zh-CN/hooks/use-latest\n *\n * @template T\n * @param {T} value\n */\nexport function useLatest<T>(value: T): RefObject<T> {\n const ref = useRef(value);\n ref.current = value;\n\n return ref;\n}\n\n","import { useEffect, useRef, type EffectCallback } from \"react\";\nimport { isFunction, isPromiseLike } from \"src/utils\";\nimport { useLatest } from \"./useLatest\";\n\ntype MountCallback = EffectCallback | AnyAsyncFunction;\n\n/**\n * 在组件初始化时执行的 Hook\n * - 即使在严格模式下也只执行一次\n * @reference https://ahooks.js.org/hooks/use-mount\n *\n * @param {MountCallback} effect 副作用函数\n */\nexport function useMount(effect: MountCallback) {\n if (!isFunction(effect)) {\n console.error(`useMount expected parameter is a function, but got ${typeof effect}`);\n }\n\n const isMountedRef = useRef(false);\n const effectRef = useLatest(effect);\n\n useEffect(() => {\n if (isMountedRef.current) {\n return;\n }\n\n isMountedRef.current = true;\n const result = effectRef.current?.();\n // If fn returns a Promise, don't return it as cleanup function\n if (isPromiseLike(result)) {\n return;\n }\n\n return result as ReturnType<EffectCallback>;\n }, []);\n}\n\n","export type BREAK_POINT_TOKEN_TYPE = Record<keyof typeof BREAK_POINT_TOKEN_ENUM, number>;\n/** 屏幕响应断点 token 配置 */\nexport const BREAK_POINT_TOKEN_ENUM = {\n XS: 576,\n XSMin: 576,\n XSMax: 767,\n SM: 768,\n SMMin: 768,\n SMMax: 991,\n MD: 992,\n MDMin: 992,\n MDMax: 1199,\n LG: 1200,\n LGMin: 1200,\n LGMax: 1599,\n XL: 1600,\n XLMin: 1600,\n XLMax: 1919,\n XXL: 1920,\n XXLMin: 1920,\n} as const;\n","import { useEffect, useState } from \"react\";\nimport { BREAK_POINT_TOKEN_ENUM, type BREAK_POINT_TOKEN_TYPE } from \"src/enums\";\nimport { objectAssign, objectKeys } from \"src/utils\";\n\ntype Breakpoint = \"xxl\" | \"xl\" | \"lg\" | \"md\" | \"sm\" | \"xs\";\ntype Subscriber = () => void;\ntype ResponsiveConfig = Record<Breakpoint, number>;\ntype ResponsiveValues = Record<Breakpoint, boolean>;\n\nconst subscriberList = new Set<Subscriber>();\nconst { XS, SM, MD, LG, XL, XXL } = BREAK_POINT_TOKEN_ENUM;\nconst defaultResponsiveValues: ResponsiveValues = { xxl: false, xl: false, lg: false, md: false, sm: false, xs: false };\nlet responsiveConfig: ResponsiveConfig = { xxl: XXL, xl: XL, lg: LG, md: MD, sm: SM, xs: XS };\nlet responsiveValues: ResponsiveValues = { ...defaultResponsiveValues };\n\nexport interface ResponsiveHookOptions {\n /**\n * 紧凑布局断点\n * - 低于此断点时使用紧凑布局\n * @default \"xl\"\n */\n compactBreakPoint?: Breakpoint;\n /** 屏幕响应断点 token 配置 */\n breakPointTokens?: BREAK_POINT_TOKEN_TYPE;\n}\nexport function useResponsive(options?: ResponsiveHookOptions) {\n const { compactBreakPoint = \"xl\", breakPointTokens = {} } = options || {};\n const tokens: BREAK_POINT_TOKEN_TYPE = objectAssign(BREAK_POINT_TOKEN_ENUM, breakPointTokens);\n responsiveConfig = { xxl: tokens.XXL, xl: tokens.XL, lg: tokens.LG, md: tokens.MD, sm: tokens.SM, xs: tokens.XS };\n\n calculate();\n\n const [responsive, setResponsive] = useState<ResponsiveValues>(responsiveValues);\n const isCompact = !responsive[compactBreakPoint];\n const current = objectKeys(defaultResponsiveValues).find((key) => responsive[key] === true) || \"xs\";\n\n useEffect(() => {\n addListener();\n\n const subscriber = () => {\n setResponsive(responsiveValues);\n };\n\n subscriberList.add(subscriber);\n\n return () => {\n subscriberList.delete(subscriber);\n\n if (subscriberList.size === 0) {\n removeListener();\n }\n };\n }, []);\n\n return { responsive, current, isCompact, breakPointTokens: tokens };\n}\n\nfunction resizeListener() {\n const oldInfo = responsiveValues;\n calculate();\n\n if (oldInfo === responsiveValues) {\n return;\n }\n\n for (const subscriber of subscriberList) {\n subscriber();\n }\n}\nfunction addListener() {\n window.addEventListener(\"resize\", resizeListener);\n}\nfunction removeListener() {\n window.removeEventListener(\"resize\", resizeListener);\n}\nfunction calculate() {\n const width = window.innerWidth;\n const newValues = { ...defaultResponsiveValues };\n let shouldUpdate = false;\n\n for (const key of objectKeys(responsiveConfig)) {\n newValues[key] = width >= responsiveConfig[key];\n if (newValues[key] !== responsiveValues[key]) {\n shouldUpdate = true;\n }\n }\n if (shouldUpdate) {\n responsiveValues = newValues;\n }\n}\n\n","import { useEffect } from \"react\";\nimport { isFunction } from \"src/utils\";\nimport { useLatest } from \"./useLatest\";\n\n/**\n * 在组件卸载时执行的 Hook\n * @reference https://ahooks.js.org/zh-CN/hooks/use-unmount\n *\n * @param {AnyFunction} effect 副作用函数\n */\nexport function useUnmount(effect: AnyFunction) {\n if (!isFunction(effect)) {\n console.error(`useUnmount expected parameter is a function, got ${typeof effect}`);\n }\n\n const effectRef = useLatest(effect);\n\n useEffect(\n () => () => {\n effectRef.current?.();\n },\n [],\n );\n}\n\n"],"mappings":"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"}