nhanh-pure-function 4.3.0 → 4.5.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/Animate/index.d.ts +2 -2
- package/dist/Element/Runtime/drop.d.ts +45 -0
- package/dist/Element/Runtime/index.d.ts +2 -1
- package/dist/Math/index.d.ts +17 -3
- package/dist/Utility/Runtime/index.d.ts +2 -0
- package/dist/Utility/Runtime/shortcutKey.d.ts +98 -0
- package/dist/Utility/Runtime/undoRedoHistory.d.ts +88 -0
- package/dist/Utility/index.d.ts +1 -0
- package/dist/Valid/index.d.ts +1 -1
- package/dist/index.cjs.js +3 -3
- package/dist/index.d.ts +1 -5
- package/dist/index.es.js +2408 -1938
- package/package.json +1 -1
package/dist/Animate/index.d.ts
CHANGED
|
@@ -10,11 +10,11 @@ export declare function _Animate_Schedule(callback: (schedule: number) => void,
|
|
|
10
10
|
* @param initialMin - 振荡器初始最小值
|
|
11
11
|
* @param initialMax - 振荡器初始最大值
|
|
12
12
|
* @param initialSteps - 从最小值到最大值所需的动画步数
|
|
13
|
-
* @param callback -
|
|
13
|
+
* @param callback - 每帧回调 `(value, direction)`:`value` 为经 `precision` 处理后的当前值;`direction` 为本帧步进方向(`1` 朝向 `max`,`-1` 朝向 `min`),触边翻转后传入
|
|
14
14
|
* @param precision - 数值精度(保留小数位数,默认4位)
|
|
15
15
|
* @returns 振荡器控制对象,包含播放/暂停/参数更新等方法
|
|
16
16
|
*/
|
|
17
|
-
export declare function _Animate_CreateOscillator(initialMin: number, initialMax: number, initialSteps: number, callback: (value: number) => void, precision?: number): {
|
|
17
|
+
export declare function _Animate_CreateOscillator(initialMin: number, initialMax: number, initialSteps: number, callback: (value: number, direction: 1 | -1) => void, precision?: number): {
|
|
18
18
|
/** 启动/继续动画 */
|
|
19
19
|
play(target?: number): void;
|
|
20
20
|
/** 暂停动画 */
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** 自定义拖拽校验与提取器 */
|
|
2
|
+
export interface CustomDropValidator {
|
|
3
|
+
/**
|
|
4
|
+
* 悬停拦截:拖拽进入/悬停时触发。
|
|
5
|
+
* 此时出于安全策略无法读取文件内容,仅能通过暴露的 types 判断是否允许拖入。
|
|
6
|
+
*/
|
|
7
|
+
matchTypes: (types: readonly string[]) => boolean;
|
|
8
|
+
/**
|
|
9
|
+
* 精确提取:拖拽放下(drop)时触发。
|
|
10
|
+
* 遍历 dataTransfer.items 的每一项,返回 true 代表将该项提取并交由回调处理。
|
|
11
|
+
*/
|
|
12
|
+
matchItem: (item: DataTransferItem) => boolean;
|
|
13
|
+
}
|
|
14
|
+
/** 拖放区接受的拖拽数据类型 */
|
|
15
|
+
export type DropTargetType = "text" | "file" | "image" | "video" | "audio" | "application" | `.${string}` | `${string}/${string}` | (string & {}) | CustomDropValidator;
|
|
16
|
+
/** 单一拖放规则配置 */
|
|
17
|
+
export interface DropZoneRule {
|
|
18
|
+
/** 允许传入单一类型或多种类型组合的数组 */
|
|
19
|
+
targetType?: DropTargetType | DropTargetType[];
|
|
20
|
+
/** 拖放回调 */
|
|
21
|
+
dropCallback: (data: any[]) => void;
|
|
22
|
+
/** 当前规则匹配成功时的激活回调 */
|
|
23
|
+
activeCallback?: (active: boolean) => void;
|
|
24
|
+
}
|
|
25
|
+
/** 注册拖放区时的配置 */
|
|
26
|
+
export type DropZoneOption = {
|
|
27
|
+
/** 拖放区元素 */
|
|
28
|
+
dom: HTMLElement | string;
|
|
29
|
+
/** 拖放区全局激活回调(只要有任意规则匹配就会触发) */
|
|
30
|
+
activeCallback?: (active: boolean) => void;
|
|
31
|
+
} & (DropZoneRule | {
|
|
32
|
+
/** 多规则配置(允许对不同类型独立处理) */
|
|
33
|
+
rules: DropZoneRule[];
|
|
34
|
+
});
|
|
35
|
+
export declare class _Element_DropZoneManager {
|
|
36
|
+
private entries;
|
|
37
|
+
private extractRules;
|
|
38
|
+
add(config: DropZoneOption): void;
|
|
39
|
+
delete(dom: HTMLElement | string): void;
|
|
40
|
+
destroy(): void;
|
|
41
|
+
private onDragEnter;
|
|
42
|
+
private onDragLeave;
|
|
43
|
+
private onDragOver;
|
|
44
|
+
private onDrop;
|
|
45
|
+
}
|
package/dist/Math/index.d.ts
CHANGED
|
@@ -55,9 +55,23 @@ export declare function _Math_GetBoundaryIntersection(startPoint: [number, numbe
|
|
|
55
55
|
*/
|
|
56
56
|
export declare const _Math_Degree: Math;
|
|
57
57
|
/**
|
|
58
|
-
* 根据控制点与参数 t,用 De Casteljau 计算 Bézier
|
|
58
|
+
* 根据控制点与参数 t,用 De Casteljau 计算 Bézier 曲线上的点和方向弧度。
|
|
59
|
+
*
|
|
60
|
+
* 【为什么可以这样获取方向】
|
|
61
|
+
* 根据 De Casteljau 算法的特性,当循环降维到倒数第二层(只剩最后 2 个点)时,
|
|
62
|
+
* 这两点连线的方向 [p1 - p0] 刚好就是曲线在该点处的切线向量。
|
|
63
|
+
* 此时使用 Math.atan2 即可直接换算出切线方向的弧度,无需单独执行求导公式。
|
|
64
|
+
*
|
|
59
65
|
* @param nodes 控制点
|
|
60
66
|
* @param progress 曲线参数,通常取 [0, 1]
|
|
61
|
-
* @returns
|
|
67
|
+
* @returns 曲线上的点和方向 [x, y, radian]
|
|
62
68
|
*/
|
|
63
|
-
export declare function _Math_GetBezierCurveNodes(nodes: [number, number][], progress: number): [number, number];
|
|
69
|
+
export declare function _Math_GetBezierCurveNodes(nodes: [number, number][], progress: number): [number, number, number];
|
|
70
|
+
/**
|
|
71
|
+
* 根据宽高比与参数 progress,计算椭圆上的点(中心在原点)。
|
|
72
|
+
* @param aspectRatio 宽高比(width / height),即 X 半轴与 Y 半轴之比
|
|
73
|
+
* @param progress 曲线参数,通常取 [0, 1],表示沿椭圆一周的位置
|
|
74
|
+
* @param normalizeToUnitSquare 为 true 时将坐标归一化到 [0,1]×[0,1](外接矩形内)
|
|
75
|
+
* @returns 椭圆上的点 [x, y]
|
|
76
|
+
*/
|
|
77
|
+
export declare function _Math_GetEllipsePoints(aspectRatio: number, progress: number, normalizeToUnitSquare?: boolean): [number, number];
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/** `bind` 时传入的配置项 */
|
|
2
|
+
interface ShortcutOptions {
|
|
3
|
+
/** 匹配成功后的回调 */
|
|
4
|
+
callback: (event: KeyboardEvent) => void;
|
|
5
|
+
/** 多步序列之间的分隔符,默认 `","` */
|
|
6
|
+
sequenceDelimiter?: string;
|
|
7
|
+
/** 单步组合键内各键的分隔符,默认 `"+"` */
|
|
8
|
+
chordDelimiter?: string;
|
|
9
|
+
/** CSS 选择器,仅在匹配元素内生效;未设置则全局生效 */
|
|
10
|
+
scope?: string;
|
|
11
|
+
/** `scope` 的判定依据:`click` 用最近点击目标,`hover` 用最近悬停目标 */
|
|
12
|
+
scopeType?: "click" | "hover";
|
|
13
|
+
/** 多步序列中,相邻两步之间的最大间隔(毫秒),默认 `5000` */
|
|
14
|
+
timeout?: number;
|
|
15
|
+
/** 为 `true` 时,在 input / textarea / contentEditable 内也响应快捷键 */
|
|
16
|
+
enableInInput?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* 是否允许长按按键时重复触发回调,默认 `false`。
|
|
19
|
+
* 适用于如 `+`、`-`、方向键等需要连续操作的场景。
|
|
20
|
+
*/
|
|
21
|
+
allowRepeat?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* 允许重复触发时的最小时间间隔(毫秒)。
|
|
24
|
+
* 由于操作系统的原生长按触发频率不可控且通常极高,利用该属性对重复事件进行节流。
|
|
25
|
+
*/
|
|
26
|
+
repeatInterval?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 全局快捷键管理器
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ **注意**:本组件会在全局 `window` 上绑定多个事件监听器。
|
|
32
|
+
* 为了防止内存泄漏及非预期的快捷键触发,**在组件卸载或页面关闭时,必须显式调用 `.destroy()` 方法**。
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* const manager = new _Utility_ShortcutManager();
|
|
36
|
+
* // 离开页面时
|
|
37
|
+
* manager.destroy();
|
|
38
|
+
*/
|
|
39
|
+
export declare class _Utility_ShortcutManager {
|
|
40
|
+
private static activeInstances;
|
|
41
|
+
/** 最近一次 `mousedown` 的目标,供 `scopeType: "click"` 使用 */
|
|
42
|
+
private lastClickDom?;
|
|
43
|
+
/** 最近一次 `mouseover` 的目标,供 `scopeType: "hover"` 使用 */
|
|
44
|
+
private lastHoverDom?;
|
|
45
|
+
/** 当前仍按下的键(已 normalize),顺序与物理按下顺序一致 */
|
|
46
|
+
private downKeys;
|
|
47
|
+
/** 注册表:`bind` 时的原始 `key` 字符串 → 运行时绑定 */
|
|
48
|
+
private bindings;
|
|
49
|
+
/** 为 `true` 时在控制台输出 keydown / keyup 日志 */
|
|
50
|
+
private debug;
|
|
51
|
+
constructor(debug?: boolean);
|
|
52
|
+
/**
|
|
53
|
+
* 注册快捷键。
|
|
54
|
+
* @param key 配置字符串,如 `"control+a"` 或 `"g,i"`(两步序列)
|
|
55
|
+
* @param options 回调与其它选项
|
|
56
|
+
*/
|
|
57
|
+
bind(key: string | string[], options: ShortcutOptions): void;
|
|
58
|
+
/** 移除指定 `key` 的绑定并清理其超时定时器 */
|
|
59
|
+
unbind(key: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* 彻底销毁当前实例,清空所有快捷键绑定,并移除全局 window 事件监听器。
|
|
62
|
+
*
|
|
63
|
+
* ⚠️ **调用时机**:在单页应用(如 Vue/React 组件卸载)或不需要快捷键时**务必调用**。
|
|
64
|
+
*/
|
|
65
|
+
destroy(): void;
|
|
66
|
+
private handleMouseOver;
|
|
67
|
+
private handleMouseDown;
|
|
68
|
+
/** 窗口失焦时清空按下状态,避免 `keyup` 未触发导致的状态残留 */
|
|
69
|
+
private clearKeys;
|
|
70
|
+
private handleKeyDown;
|
|
71
|
+
private handleKeyUp;
|
|
72
|
+
/**
|
|
73
|
+
* 遍历所有绑定:校验作用域与输入上下文后,用数组匹配当前步骤;
|
|
74
|
+
* 完全匹配则推进序列或触发回调,前缀匹配则等待,否则重置。
|
|
75
|
+
*/
|
|
76
|
+
private checkBindings;
|
|
77
|
+
/** 启动多步序列超时;超时未按下一步则重置 `currentIndex` */
|
|
78
|
+
private startSequenceTimer;
|
|
79
|
+
private resetBinding;
|
|
80
|
+
private isValidScope;
|
|
81
|
+
/**
|
|
82
|
+
* 默认在可编辑控件内禁用快捷键,避免与浏览器/输入法默认行为冲突。
|
|
83
|
+
*/
|
|
84
|
+
private isValidContext;
|
|
85
|
+
/**
|
|
86
|
+
* 将配置串与 `KeyboardEvent.key` 统一为小写别名,便于与 `event.key` 比较。
|
|
87
|
+
* 例如 `ctrl` → `control`,`cmd` → `meta`。
|
|
88
|
+
*/
|
|
89
|
+
private normalizeKey;
|
|
90
|
+
/** 当前按下键与预期组合键在长度与顺序上完全一致 */
|
|
91
|
+
private isExactMatch;
|
|
92
|
+
/**
|
|
93
|
+
* 当前按下键是预期组合键的有序前缀(尚缺后续键)。
|
|
94
|
+
* 使用逐元素比较,避免字符串 `startsWith` 误匹配(如 `"S"` 匹配 `"Shift,a"`)。
|
|
95
|
+
*/
|
|
96
|
+
private isPrefixMatch;
|
|
97
|
+
}
|
|
98
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
interface _Utility_UndoRedoConfig<T> {
|
|
2
|
+
/** 存储上限;`0` 或负数表示无限制。超出时自动淘汰最早的记录。默认为 50 */
|
|
3
|
+
maxSize?: number;
|
|
4
|
+
/** 自定义克隆/结构共享函数。若不传,则默认直接引用赋值 */
|
|
5
|
+
clone?: (value: T) => T;
|
|
6
|
+
/** 初始状态快照 */
|
|
7
|
+
initialState?: T;
|
|
8
|
+
}
|
|
9
|
+
interface _Utility_UndoRedoRecord<T> {
|
|
10
|
+
/** 历史快照数据 */
|
|
11
|
+
state: T;
|
|
12
|
+
/** 记录产生的时间戳 */
|
|
13
|
+
timestamp: number;
|
|
14
|
+
}
|
|
15
|
+
/** 订阅者回调函数类型 */
|
|
16
|
+
type _Utility_UndoRedoListener<T> = (current: Readonly<T> | undefined) => void;
|
|
17
|
+
/**
|
|
18
|
+
* 通用历史记录状态机
|
|
19
|
+
*/
|
|
20
|
+
export declare class _Utility_UndoRedoHistory<T> {
|
|
21
|
+
private stack;
|
|
22
|
+
private _index;
|
|
23
|
+
private _maxSize;
|
|
24
|
+
private cloneFn;
|
|
25
|
+
private listeners;
|
|
26
|
+
constructor(config?: _Utility_UndoRedoConfig<T>);
|
|
27
|
+
/** 获取最大存储上限 */
|
|
28
|
+
get maxSize(): number;
|
|
29
|
+
/** 动态调整最大存储上限,超出时自动裁剪 */
|
|
30
|
+
set maxSize(value: number);
|
|
31
|
+
/** 当前所处的历史记录索引位置 */
|
|
32
|
+
get index(): number;
|
|
33
|
+
/** 历史栈中的总记录数 */
|
|
34
|
+
get length(): number;
|
|
35
|
+
/** 历史栈是否为空 */
|
|
36
|
+
get isEmpty(): boolean;
|
|
37
|
+
/** 当前游标处的只读状态快照;栈为空时返回 `undefined` */
|
|
38
|
+
get current(): Readonly<T> | undefined;
|
|
39
|
+
/** 是否可以执行撤销(Undo) */
|
|
40
|
+
get canUndo(): boolean;
|
|
41
|
+
/** 是否可以执行重做(Redo) */
|
|
42
|
+
get canRedo(): boolean;
|
|
43
|
+
/** 剩余可撤销的步数 */
|
|
44
|
+
get undoCount(): number;
|
|
45
|
+
/** 剩余可重做的步数 */
|
|
46
|
+
get redoCount(): number;
|
|
47
|
+
/**
|
|
48
|
+
* 记录一个新状态。
|
|
49
|
+
* 会自动裁剪掉当前索引之后的“未来(Redo)”分支,并处理容量超限。
|
|
50
|
+
*/
|
|
51
|
+
push(state: T): void;
|
|
52
|
+
/**
|
|
53
|
+
* 仅更新当前位置的快照,不产生新的历史节点,不裁剪未来分支。
|
|
54
|
+
* 常用于高频连续变更的中间状态同步
|
|
55
|
+
*/
|
|
56
|
+
replace(state: T): void;
|
|
57
|
+
/**
|
|
58
|
+
* 撤销一步
|
|
59
|
+
* @returns 是否撤销成功
|
|
60
|
+
*/
|
|
61
|
+
undo(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* 重进一步
|
|
64
|
+
* @returns 是否重进成功
|
|
65
|
+
*/
|
|
66
|
+
redo(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* 跳转到指定的历史索引位置
|
|
69
|
+
*/
|
|
70
|
+
jump(index: number): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* 清空所有历史记录并重置状态
|
|
73
|
+
*/
|
|
74
|
+
clear(): void;
|
|
75
|
+
/**
|
|
76
|
+
* 支持多重事件监听。返回一个取消订阅的函数,便于在组件销毁时规避内存泄漏。
|
|
77
|
+
*/
|
|
78
|
+
subscribe(listener: _Utility_UndoRedoListener<T>): () => void;
|
|
79
|
+
/**
|
|
80
|
+
* 返回整个历史栈的外部只读镜像,专门用于调试、分析或序列化暂存,防止内部数据被篡改。
|
|
81
|
+
*/
|
|
82
|
+
snapshot(): readonly Readonly<_Utility_UndoRedoRecord<T>>[];
|
|
83
|
+
/** 内部超出容量时的核心裁剪逻辑 */
|
|
84
|
+
private trimOverflow;
|
|
85
|
+
/** 统一通知所有订阅者 */
|
|
86
|
+
private notify;
|
|
87
|
+
}
|
|
88
|
+
export {};
|
package/dist/Utility/index.d.ts
CHANGED
package/dist/Valid/index.d.ts
CHANGED
|
@@ -71,7 +71,7 @@ export declare function _Valid_CheckConnectionWithXHR(url: string): Promise<unkn
|
|
|
71
71
|
*/
|
|
72
72
|
export declare class _Valid_FileTypeChecker {
|
|
73
73
|
private static cachedEntries;
|
|
74
|
-
constructor();
|
|
74
|
+
private constructor();
|
|
75
75
|
/**
|
|
76
76
|
* 检查给定URL的文件类型
|
|
77
77
|
* @param {string} url - 文件的URL
|