@cloudcome/utils-browser 1.2.18 → 1.4.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/dist/index.cjs CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  /**
4
4
  * `@cloudcome/utils-browser` 版本号
5
5
  */
6
- var VERSION = "1.2.18";
6
+ var VERSION = "1.4.0";
7
7
  //#endregion
8
8
  exports.VERSION = VERSION;
9
9
 
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * `@cloudcome/utils-browser` 版本号
4
4
  */
5
- var VERSION = "1.2.18";
5
+ var VERSION = "1.4.0";
6
6
  //#endregion
7
7
  export { VERSION };
8
8
 
package/dist/timer.cjs CHANGED
@@ -4,37 +4,58 @@ let _cloudcome_utils_core_timer = require("@cloudcome/utils-core/timer");
4
4
  /**
5
5
  * 创建一个基于 `requestAnimationFrame` 的间隔定时器
6
6
  *
7
- * @param callback - 每次间隔执行的回调函数,接收定时器状态和可选的 `next` 函数
7
+ * @example
8
+ * ```typescript
9
+ * // 无 condition
10
+ * frameInterval({
11
+ * runner: (state) => console.log(state.times),
12
+ * })
13
+ *
14
+ * // 有 condition,T 自动推断为 number
15
+ * frameInterval({
16
+ * condition: (state) => state.times,
17
+ * runner: (state) => state.data.toFixed(2),
18
+ * })
19
+ * ```
20
+ *
8
21
  * @param options - 配置选项
9
22
  * @returns {TimerHandler} 返回包含控制方法的对象
10
23
  */
11
- function frameInterval(callback, options) {
24
+ function frameInterval(options) {
25
+ const { runner, condition, leading, trailing } = options;
12
26
  let rafId;
13
- const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = (0, _cloudcome_utils_core_timer.makeInterval)((call) => {
14
- rafId = requestAnimationFrame(call);
15
- }, callback);
27
+ const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = (0, _cloudcome_utils_core_timer.makeInterval)({
28
+ dispatcher: (call) => {
29
+ rafId = requestAnimationFrame(call);
30
+ },
31
+ runner,
32
+ condition,
33
+ leading: leading ?? false,
34
+ trailing
35
+ });
16
36
  return {
17
37
  start() {
18
38
  if (!canStart()) return;
19
- if (options?.leading) start();
20
- else rafId = requestAnimationFrame(start);
39
+ start();
21
40
  },
22
41
  stop() {
23
42
  if (!canStop()) return;
24
- if (options?.trailing) execute();
25
- cancelAnimationFrame(rafId);
26
43
  stop();
44
+ cancelAnimationFrame(rafId);
27
45
  },
28
46
  pause() {
29
47
  if (!canPause()) return;
30
- if (options?.trailing) execute();
31
- cancelAnimationFrame(rafId);
32
48
  pause();
49
+ cancelAnimationFrame(rafId);
33
50
  },
34
51
  resume(immediate) {
35
52
  if (!canResume()) return;
36
- if (immediate || options?.leading) resume();
37
- else rafId = requestAnimationFrame(resume);
53
+ if (immediate || leading) resume();
54
+ else rafId = requestAnimationFrame(() => resume());
55
+ },
56
+ execute() {
57
+ cancelAnimationFrame(rafId);
58
+ execute();
38
59
  }
39
60
  };
40
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"timer.cjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import { makeInterval, type TimerHandler, type TimerOptions, type TimerState } from '@cloudcome/utils-core/timer';\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @param callback - 每次间隔执行的回调函数,接收定时器状态和可选的 `next` 函数\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval(\n callback: (state: TimerState, next?: () => void) => unknown,\n options?: TimerOptions,\n): TimerHandler {\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval((call) => {\n rafId = requestAnimationFrame(call);\n }, callback);\n\n return {\n start() {\n if (!canStart()) return;\n\n if (options?.leading) {\n start();\n } else {\n rafId = requestAnimationFrame(start);\n }\n },\n\n stop() {\n if (!canStop()) return;\n if (options?.trailing) execute();\n\n cancelAnimationFrame(rafId);\n stop();\n },\n\n pause() {\n if (!canPause()) return;\n if (options?.trailing) execute();\n\n cancelAnimationFrame(rafId);\n pause();\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n\n if (immediate || options?.leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(resume);\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,cACd,UACA,SACc;CACd,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,aAAA,GAAA,4BAAA,eAA0B,SAAS;EAC7G,QAAQ,sBAAsB,KAAK;IAClC,SAAS;CAEZ,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GAEjB,IAAI,SAAS,SACX,OAAO;QAEP,QAAQ,sBAAsB,MAAM;;EAIxC,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,IAAI,SAAS,UAAU,SAAS;GAEhC,qBAAqB,MAAM;GAC3B,MAAM;;EAGR,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,IAAI,SAAS,UAAU,SAAS;GAEhC,qBAAqB,MAAM;GAC3B,OAAO;;EAGT,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAElB,IAAI,aAAa,SAAS,SACxB,QAAQ;QAER,QAAQ,sBAAsB,OAAO;;EAG1C"}
1
+ {"version":3,"file":"timer.cjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {\n makeInterval,\n type TimerHandler,\n type TimerStateBase,\n type TimerState,\n type MakeIntervalOptions,\n} from '@cloudcome/utils-core/timer';\n\n/**\n * frameInterval 配置选项\n * @template T - condition 函数返回值类型\n */\nexport type FrameIntervalOptions<T> = {\n /**\n * 条件函数,每次执行前调用,返回值存入 state.data\n * 支持同步或异步返回值\n * 抛错时跳过本次 runner 执行,继续下一次调度\n */\n condition?: (state: TimerStateBase) => T;\n /**\n * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态\n */\n runner: (state: TimerState<Awaited<T>>) => unknown;\n /**\n * 是否在定时器启动时立即执行一次,默认为 false\n */\n leading?: boolean;\n /**\n * 是否在定时器停止或暂停时额外执行一次(trailing edge)\n */\n trailing?: boolean;\n};\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @example\n * ```typescript\n * // 无 condition\n * frameInterval({\n * runner: (state) => console.log(state.times),\n * })\n *\n * // 有 condition,T 自动推断为 number\n * frameInterval({\n * condition: (state) => state.times,\n * runner: (state) => state.data.toFixed(2),\n * })\n * ```\n *\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler {\n const { runner, condition, leading, trailing } = options;\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({\n dispatcher: (call) => {\n rafId = requestAnimationFrame(call);\n },\n runner: runner as MakeIntervalOptions<T>['runner'],\n condition,\n leading: leading ?? false,\n trailing,\n });\n\n return {\n start() {\n if (!canStart()) return;\n start();\n },\n\n stop() {\n if (!canStop()) return;\n stop();\n cancelAnimationFrame(rafId);\n },\n\n pause() {\n if (!canPause()) return;\n pause();\n cancelAnimationFrame(rafId);\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n if (immediate || leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(() => resume());\n }\n },\n\n execute() {\n cancelAnimationFrame(rafId);\n execute();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,cAAwB,SAAgD;CACtF,MAAM,EAAE,QAAQ,WAAW,SAAS,aAAa;CACjD,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,aAAA,GAAA,4BAAA,cAAyB;EACnG,aAAa,SAAS;GACpB,QAAQ,sBAAsB,KAAK;;EAE7B;EACR;EACA,SAAS,WAAW;EACpB;EACD,CAAC;CAEF,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;;EAGT,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,MAAM;GACN,qBAAqB,MAAM;;EAG7B,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;GACP,qBAAqB,MAAM;;EAG7B,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAClB,IAAI,aAAa,SACf,QAAQ;QAER,QAAQ,4BAA4B,QAAQ,CAAC;;EAIjD,UAAU;GACR,qBAAqB,MAAM;GAC3B,SAAS;;EAEZ"}
package/dist/timer.d.ts CHANGED
@@ -1,9 +1,46 @@
1
- import { TimerHandler, TimerOptions, TimerState } from '@cloudcome/utils-core/timer';
1
+ import { TimerHandler, TimerStateBase, TimerState } from '@cloudcome/utils-core/timer';
2
+ /**
3
+ * frameInterval 配置选项
4
+ * @template T - condition 函数返回值类型
5
+ */
6
+ export type FrameIntervalOptions<T> = {
7
+ /**
8
+ * 条件函数,每次执行前调用,返回值存入 state.data
9
+ * 支持同步或异步返回值
10
+ * 抛错时跳过本次 runner 执行,继续下一次调度
11
+ */
12
+ condition?: (state: TimerStateBase) => T;
13
+ /**
14
+ * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态
15
+ */
16
+ runner: (state: TimerState<Awaited<T>>) => unknown;
17
+ /**
18
+ * 是否在定时器启动时立即执行一次,默认为 false
19
+ */
20
+ leading?: boolean;
21
+ /**
22
+ * 是否在定时器停止或暂停时额外执行一次(trailing edge)
23
+ */
24
+ trailing?: boolean;
25
+ };
2
26
  /**
3
27
  * 创建一个基于 `requestAnimationFrame` 的间隔定时器
4
28
  *
5
- * @param callback - 每次间隔执行的回调函数,接收定时器状态和可选的 `next` 函数
29
+ * @example
30
+ * ```typescript
31
+ * // 无 condition
32
+ * frameInterval({
33
+ * runner: (state) => console.log(state.times),
34
+ * })
35
+ *
36
+ * // 有 condition,T 自动推断为 number
37
+ * frameInterval({
38
+ * condition: (state) => state.times,
39
+ * runner: (state) => state.data.toFixed(2),
40
+ * })
41
+ * ```
42
+ *
6
43
  * @param options - 配置选项
7
44
  * @returns {TimerHandler} 返回包含控制方法的对象
8
45
  */
9
- export declare function frameInterval(callback: (state: TimerState, next?: () => void) => unknown, options?: TimerOptions): TimerHandler;
46
+ export declare function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler;
package/dist/timer.mjs CHANGED
@@ -3,37 +3,58 @@ import { makeInterval } from "@cloudcome/utils-core/timer";
3
3
  /**
4
4
  * 创建一个基于 `requestAnimationFrame` 的间隔定时器
5
5
  *
6
- * @param callback - 每次间隔执行的回调函数,接收定时器状态和可选的 `next` 函数
6
+ * @example
7
+ * ```typescript
8
+ * // 无 condition
9
+ * frameInterval({
10
+ * runner: (state) => console.log(state.times),
11
+ * })
12
+ *
13
+ * // 有 condition,T 自动推断为 number
14
+ * frameInterval({
15
+ * condition: (state) => state.times,
16
+ * runner: (state) => state.data.toFixed(2),
17
+ * })
18
+ * ```
19
+ *
7
20
  * @param options - 配置选项
8
21
  * @returns {TimerHandler} 返回包含控制方法的对象
9
22
  */
10
- function frameInterval(callback, options) {
23
+ function frameInterval(options) {
24
+ const { runner, condition, leading, trailing } = options;
11
25
  let rafId;
12
- const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval((call) => {
13
- rafId = requestAnimationFrame(call);
14
- }, callback);
26
+ const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({
27
+ dispatcher: (call) => {
28
+ rafId = requestAnimationFrame(call);
29
+ },
30
+ runner,
31
+ condition,
32
+ leading: leading ?? false,
33
+ trailing
34
+ });
15
35
  return {
16
36
  start() {
17
37
  if (!canStart()) return;
18
- if (options?.leading) start();
19
- else rafId = requestAnimationFrame(start);
38
+ start();
20
39
  },
21
40
  stop() {
22
41
  if (!canStop()) return;
23
- if (options?.trailing) execute();
24
- cancelAnimationFrame(rafId);
25
42
  stop();
43
+ cancelAnimationFrame(rafId);
26
44
  },
27
45
  pause() {
28
46
  if (!canPause()) return;
29
- if (options?.trailing) execute();
30
- cancelAnimationFrame(rafId);
31
47
  pause();
48
+ cancelAnimationFrame(rafId);
32
49
  },
33
50
  resume(immediate) {
34
51
  if (!canResume()) return;
35
- if (immediate || options?.leading) resume();
36
- else rafId = requestAnimationFrame(resume);
52
+ if (immediate || leading) resume();
53
+ else rafId = requestAnimationFrame(() => resume());
54
+ },
55
+ execute() {
56
+ cancelAnimationFrame(rafId);
57
+ execute();
37
58
  }
38
59
  };
39
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"timer.mjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import { makeInterval, type TimerHandler, type TimerOptions, type TimerState } from '@cloudcome/utils-core/timer';\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @param callback - 每次间隔执行的回调函数,接收定时器状态和可选的 `next` 函数\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval(\n callback: (state: TimerState, next?: () => void) => unknown,\n options?: TimerOptions,\n): TimerHandler {\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval((call) => {\n rafId = requestAnimationFrame(call);\n }, callback);\n\n return {\n start() {\n if (!canStart()) return;\n\n if (options?.leading) {\n start();\n } else {\n rafId = requestAnimationFrame(start);\n }\n },\n\n stop() {\n if (!canStop()) return;\n if (options?.trailing) execute();\n\n cancelAnimationFrame(rafId);\n stop();\n },\n\n pause() {\n if (!canPause()) return;\n if (options?.trailing) execute();\n\n cancelAnimationFrame(rafId);\n pause();\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n\n if (immediate || options?.leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(resume);\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,cACd,UACA,SACc;CACd,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,YAAY,cAAc,SAAS;EAC7G,QAAQ,sBAAsB,KAAK;IAClC,SAAS;CAEZ,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GAEjB,IAAI,SAAS,SACX,OAAO;QAEP,QAAQ,sBAAsB,MAAM;;EAIxC,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,IAAI,SAAS,UAAU,SAAS;GAEhC,qBAAqB,MAAM;GAC3B,MAAM;;EAGR,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,IAAI,SAAS,UAAU,SAAS;GAEhC,qBAAqB,MAAM;GAC3B,OAAO;;EAGT,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAElB,IAAI,aAAa,SAAS,SACxB,QAAQ;QAER,QAAQ,sBAAsB,OAAO;;EAG1C"}
1
+ {"version":3,"file":"timer.mjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {\n makeInterval,\n type TimerHandler,\n type TimerStateBase,\n type TimerState,\n type MakeIntervalOptions,\n} from '@cloudcome/utils-core/timer';\n\n/**\n * frameInterval 配置选项\n * @template T - condition 函数返回值类型\n */\nexport type FrameIntervalOptions<T> = {\n /**\n * 条件函数,每次执行前调用,返回值存入 state.data\n * 支持同步或异步返回值\n * 抛错时跳过本次 runner 执行,继续下一次调度\n */\n condition?: (state: TimerStateBase) => T;\n /**\n * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态\n */\n runner: (state: TimerState<Awaited<T>>) => unknown;\n /**\n * 是否在定时器启动时立即执行一次,默认为 false\n */\n leading?: boolean;\n /**\n * 是否在定时器停止或暂停时额外执行一次(trailing edge)\n */\n trailing?: boolean;\n};\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @example\n * ```typescript\n * // 无 condition\n * frameInterval({\n * runner: (state) => console.log(state.times),\n * })\n *\n * // 有 condition,T 自动推断为 number\n * frameInterval({\n * condition: (state) => state.times,\n * runner: (state) => state.data.toFixed(2),\n * })\n * ```\n *\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler {\n const { runner, condition, leading, trailing } = options;\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({\n dispatcher: (call) => {\n rafId = requestAnimationFrame(call);\n },\n runner: runner as MakeIntervalOptions<T>['runner'],\n condition,\n leading: leading ?? false,\n trailing,\n });\n\n return {\n start() {\n if (!canStart()) return;\n start();\n },\n\n stop() {\n if (!canStop()) return;\n stop();\n cancelAnimationFrame(rafId);\n },\n\n pause() {\n if (!canPause()) return;\n pause();\n cancelAnimationFrame(rafId);\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n if (immediate || leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(() => resume());\n }\n },\n\n execute() {\n cancelAnimationFrame(rafId);\n execute();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,cAAwB,SAAgD;CACtF,MAAM,EAAE,QAAQ,WAAW,SAAS,aAAa;CACjD,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,YAAY,aAAa;EACnG,aAAa,SAAS;GACpB,QAAQ,sBAAsB,KAAK;;EAE7B;EACR;EACA,SAAS,WAAW;EACpB;EACD,CAAC;CAEF,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;;EAGT,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,MAAM;GACN,qBAAqB,MAAM;;EAG7B,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;GACP,qBAAqB,MAAM;;EAG7B,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAClB,IAAI,aAAa,SACf,QAAQ;QAER,QAAQ,4BAA4B,QAAQ,CAAC;;EAIjD,UAAU;GACR,qBAAqB,MAAM;GAC3B,SAAS;;EAEZ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudcome/utils-browser",
3
- "version": "1.2.18",
3
+ "version": "1.4.0",
4
4
  "description": "cloudcome utils for browser",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -105,7 +105,7 @@
105
105
  "node": ">=22"
106
106
  },
107
107
  "dependencies": {
108
- "@cloudcome/utils-core": "~1.20.1"
108
+ "@cloudcome/utils-core": "~1.22.0"
109
109
  },
110
110
  "keywords": [
111
111
  "cloudcome",