zcw-shared 1.16.2 → 1.18.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/README.md CHANGED
@@ -330,6 +330,12 @@ npx tsx tests/*.test.ts
330
330
 
331
331
  2. **编译依赖**:改动了函数以后,因为playground中引用的是编译后的shared包,所以需要先编译shared包(`npm run build`),test中才能用到最新的代码。
332
332
 
333
+ 3. **文档同步更新**:每次新增新功能或修改现有功能后,**必须**同步更新VitePress文档:
334
+ - 在 `docs/api/` 目录下更新或创建对应的API文档
335
+ - 在 `docs/examples/` 目录下添加使用示例
336
+ - 确保文档中的TypeScript泛型语法使用反引号包裹(如 `Promise<\`File\`>`)以避免Vue编译错误
337
+ - 运行 `npm run docs:dev` 验证文档编译无误
338
+
333
339
  ### 1. 添加新函数
334
340
 
335
341
  ```bash
@@ -342,7 +348,14 @@ types/category.d.ts
342
348
  # 3. 创建测试
343
349
  playground/tests/newFunction.test.ts
344
350
 
345
- # 4. 构建和导出
351
+ # 4. 更新VitePress文档
352
+ docs/api/category.md # API文档
353
+ docs/examples/category.md # 使用示例
354
+
355
+ # 5. 验证文档编译
356
+ npm run docs:dev
357
+
358
+ # 6. 构建和导出
346
359
  npm run build
347
360
  ```
348
361
 
@@ -374,6 +387,9 @@ export function newFunction(
374
387
  # 类型检查
375
388
  npx tsc --noEmit
376
389
 
390
+ # 验证文档编译
391
+ npm run docs:build
392
+
377
393
  # 构建项目
378
394
  npm run build
379
395
 
@@ -409,6 +425,11 @@ npm run publish:major # 主要版本
409
425
  1. **JSDoc注释**:详细的函数说明和参数描述
410
426
  2. **使用示例**:在测试文件中提供实际使用案例
411
427
  3. **类型导出**:确保所有相关类型都可以导入
428
+ 4. **VitePress文档**:
429
+ - **API文档**:在 `docs/api/` 目录下为每个模块创建详细的API文档
430
+ - **示例文档**:在 `docs/examples/` 目录下提供实际使用示例
431
+ - **语法规范**:TypeScript泛型语法必须用反引号包裹(如 `Promise<\`File\`>`)
432
+ - **编译验证**:确保文档能够正常编译,无Vue语法错误
412
433
 
413
434
  ---
414
435
 
@@ -0,0 +1,34 @@
1
+ import type { Ref } from 'vue';
2
+ import type { HTMLElement, Document, MouseEvent, TouchEvent } from '../../references/dom.d';
3
+ import type { Window } from '../../references/browser.d';
4
+ export interface Position {
5
+ x: number;
6
+ y: number;
7
+ }
8
+ export interface DraggableEnvironment {
9
+ document: Document;
10
+ window: Window;
11
+ }
12
+ export interface UseDraggableOptions {
13
+ initialPosition?: Position;
14
+ enabled?: boolean;
15
+ onDragStart?: (position: Position, event: MouseEvent | TouchEvent) => void;
16
+ onDrag?: (position: Position, event: MouseEvent | TouchEvent) => void;
17
+ onDragEnd?: (position: Position, event: MouseEvent | TouchEvent) => void;
18
+ boundary?: {
19
+ minX?: number;
20
+ maxX?: number;
21
+ minY?: number;
22
+ maxY?: number;
23
+ };
24
+ useAbsolutePosition?: boolean;
25
+ useTransform?: boolean;
26
+ }
27
+ export declare function useDraggable(targetRef: Ref<HTMLElement | null>, options: UseDraggableOptions | undefined, env: DraggableEnvironment): {
28
+ position: Ref<Position, Position>;
29
+ isDragging: Ref<boolean, boolean>;
30
+ style: Ref<Record<string, string>, Record<string, string>>;
31
+ reset: () => void;
32
+ cleanup: () => void;
33
+ };
34
+ export default useDraggable;
@@ -0,0 +1,183 @@
1
+ import { ref, onMounted, onUnmounted } from 'vue';
2
+ export function useDraggable(targetRef, options = {}, env) {
3
+ const { initialPosition = { x: 0, y: 0 }, enabled = true, onDragStart, onDrag, onDragEnd, boundary, useAbsolutePosition = true, useTransform = false } = options;
4
+ const position = ref({ ...initialPosition });
5
+ const isDragging = ref(false);
6
+ let startX = 0;
7
+ let startY = 0;
8
+ let initialX = initialPosition.x;
9
+ let initialY = initialPosition.y;
10
+ let positionInitialized = false;
11
+ const applyBoundary = (pos) => {
12
+ if (!boundary)
13
+ return pos;
14
+ const { minX, maxX, minY, maxY } = boundary;
15
+ let { x, y } = pos;
16
+ if (minX !== undefined)
17
+ x = Math.max(minX, x);
18
+ if (maxX !== undefined)
19
+ x = Math.min(maxX, x);
20
+ if (minY !== undefined)
21
+ y = Math.max(minY, y);
22
+ if (maxY !== undefined)
23
+ y = Math.min(maxY, y);
24
+ return { x, y };
25
+ };
26
+ const style = ref({});
27
+ const updateStyle = () => {
28
+ if (!useAbsolutePosition && !useTransform)
29
+ return;
30
+ if (useAbsolutePosition) {
31
+ style.value = {
32
+ position: 'absolute',
33
+ top: `${position.value.y}px`,
34
+ left: `${position.value.x}px`,
35
+ ...(useTransform ? {} : { transform: 'none' })
36
+ };
37
+ }
38
+ else if (useTransform) {
39
+ style.value = {
40
+ transform: `translate(${position.value.x}px, ${position.value.y}px)`
41
+ };
42
+ }
43
+ };
44
+ const updatePosition = (newPosition) => {
45
+ position.value = applyBoundary(newPosition);
46
+ updateStyle();
47
+ };
48
+ const onMouseDown = (e) => {
49
+ if (!enabled || !targetRef.value)
50
+ return;
51
+ e.stopPropagation();
52
+ e.preventDefault();
53
+ if (!positionInitialized && targetRef.value) {
54
+ const rect = targetRef.value.getBoundingClientRect();
55
+ if (!initialPosition.x && !initialPosition.y) {
56
+ initialX = rect.left;
57
+ initialY = rect.top;
58
+ position.value = { x: initialX, y: initialY };
59
+ }
60
+ positionInitialized = true;
61
+ }
62
+ isDragging.value = true;
63
+ startX = e.clientX - position.value.x;
64
+ startY = e.clientY - position.value.y;
65
+ if (onDragStart) {
66
+ onDragStart({ ...position.value }, e);
67
+ }
68
+ env.document.addEventListener('mousemove', onMouseMove, { passive: false });
69
+ env.document.addEventListener('mouseup', onMouseUp);
70
+ };
71
+ const onMouseMove = (e) => {
72
+ if (!isDragging.value)
73
+ return;
74
+ e.preventDefault();
75
+ env.window.requestAnimationFrame(() => {
76
+ const newPosition = {
77
+ x: e.clientX - startX,
78
+ y: e.clientY - startY
79
+ };
80
+ updatePosition(newPosition);
81
+ if (onDrag) {
82
+ onDrag({ ...position.value }, e);
83
+ }
84
+ });
85
+ };
86
+ const onMouseUp = (e) => {
87
+ if (!isDragging.value)
88
+ return;
89
+ isDragging.value = false;
90
+ if (onDragEnd) {
91
+ onDragEnd({ ...position.value }, e);
92
+ }
93
+ env.document.removeEventListener('mousemove', onMouseMove);
94
+ env.document.removeEventListener('mouseup', onMouseUp);
95
+ };
96
+ const onTouchStart = (e) => {
97
+ if (!enabled || !targetRef.value || e.touches.length !== 1)
98
+ return;
99
+ e.stopPropagation();
100
+ if (!positionInitialized && targetRef.value) {
101
+ const rect = targetRef.value.getBoundingClientRect();
102
+ if (!initialPosition.x && !initialPosition.y) {
103
+ initialX = rect.left;
104
+ initialY = rect.top;
105
+ position.value = { x: initialX, y: initialY };
106
+ }
107
+ positionInitialized = true;
108
+ }
109
+ isDragging.value = true;
110
+ const touch = e.touches[0];
111
+ startX = touch.clientX - position.value.x;
112
+ startY = touch.clientY - position.value.y;
113
+ if (onDragStart) {
114
+ onDragStart({ ...position.value }, e);
115
+ }
116
+ env.document.addEventListener('touchmove', onTouchMove, { passive: false });
117
+ env.document.addEventListener('touchend', onTouchEnd);
118
+ env.document.addEventListener('touchcancel', onTouchEnd);
119
+ };
120
+ const onTouchMove = (e) => {
121
+ if (!isDragging.value || e.touches.length !== 1)
122
+ return;
123
+ e.preventDefault();
124
+ env.window.requestAnimationFrame(() => {
125
+ const touch = e.touches[0];
126
+ const newPosition = {
127
+ x: touch.clientX - startX,
128
+ y: touch.clientY - startY
129
+ };
130
+ updatePosition(newPosition);
131
+ if (onDrag) {
132
+ onDrag({ ...position.value }, e);
133
+ }
134
+ });
135
+ };
136
+ const onTouchEnd = (e) => {
137
+ if (!isDragging.value)
138
+ return;
139
+ isDragging.value = false;
140
+ if (onDragEnd) {
141
+ onDragEnd({ ...position.value }, e);
142
+ }
143
+ env.document.removeEventListener('touchmove', onTouchMove);
144
+ env.document.removeEventListener('touchend', onTouchEnd);
145
+ env.document.removeEventListener('touchcancel', onTouchEnd);
146
+ };
147
+ const reset = () => {
148
+ updatePosition({ ...initialPosition });
149
+ positionInitialized = false;
150
+ };
151
+ const cleanup = () => {
152
+ env.document.removeEventListener('mousemove', onMouseMove);
153
+ env.document.removeEventListener('mouseup', onMouseUp);
154
+ env.document.removeEventListener('touchmove', onTouchMove);
155
+ env.document.removeEventListener('touchend', onTouchEnd);
156
+ env.document.removeEventListener('touchcancel', onTouchEnd);
157
+ };
158
+ onMounted(() => {
159
+ const element = targetRef.value;
160
+ if (!element)
161
+ return;
162
+ updateStyle();
163
+ element.addEventListener('mousedown', onMouseDown);
164
+ element.addEventListener('touchstart', onTouchStart);
165
+ });
166
+ onUnmounted(() => {
167
+ const element = targetRef.value;
168
+ if (!element)
169
+ return;
170
+ element.removeEventListener('mousedown', onMouseDown);
171
+ element.removeEventListener('touchstart', onTouchStart);
172
+ cleanup();
173
+ });
174
+ return {
175
+ position,
176
+ isDragging,
177
+ style,
178
+ reset,
179
+ cleanup
180
+ };
181
+ }
182
+ export default useDraggable;
183
+ //# sourceMappingURL=useDraggable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDraggable.js","sourceRoot":"","sources":["../../src/hooks/useDraggable.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zcw-shared",
3
- "version": "1.16.2",
3
+ "version": "1.18.0",
4
4
  "files": [
5
5
  "references",
6
6
  "dist",
@@ -111,6 +111,7 @@
111
111
  "./functions/xml/modifyXml": "./dist/functions/xml/modifyXml.js",
112
112
  "./hooks/useAltool": "./dist/hooks/useAltool.js",
113
113
  "./hooks/useCache": "./dist/hooks/useCache.js",
114
+ "./hooks/useDraggable": "./dist/hooks/useDraggable.js",
114
115
  "./hooks/useLocalStorage": "./dist/hooks/useLocalStorage.js",
115
116
  "./hooks/usePluginSystem": "./dist/hooks/usePluginSystem.js",
116
117
  "./hooks/useSessionStorage": "./dist/hooks/useSessionStorage.js",
@@ -2,14 +2,28 @@
2
2
  import type { BufferSource } from './arraybuffer.d'
3
3
 
4
4
  // Stream 相关类型(基础依赖)
5
- export interface ReadableStreamReader<T> {
5
+ export interface ReadableStreamBYOBReader {
6
+ read<T extends ArrayBufferView>(view: T): Promise<{ done: boolean; value: T }>
7
+ releaseLock(): void
8
+ cancel(reason?: any): Promise<void>
9
+ }
10
+
11
+ export interface ReadableStreamDefaultReader<T> {
6
12
  read(): Promise<{ done: boolean; value: T }>
7
13
  releaseLock(): void
8
14
  cancel(reason?: any): Promise<void>
9
15
  }
10
16
 
17
+ export type ReadableStreamReader<T> = ReadableStreamDefaultReader<T> | ReadableStreamBYOBReader
18
+
19
+ export interface ReadableStreamGetReaderOptions {
20
+ mode?: 'byob'
21
+ }
22
+
11
23
  export interface ReadableStream<T> {
12
- getReader(): ReadableStreamReader<T>
24
+ getReader(): ReadableStreamDefaultReader<Uint8Array>
25
+ getReader(options: { mode: 'byob' }): ReadableStreamBYOBReader
26
+ getReader(options?: ReadableStreamGetReaderOptions): ReadableStreamReader<T>
13
27
  cancel(reason?: any): Promise<void>
14
28
  locked: boolean
15
29
  }
@@ -85,6 +85,10 @@ export interface Window {
85
85
  Uint8Array: Uint8ArrayConstructor
86
86
  DataView: DataViewConstructor
87
87
 
88
+ // 动画API
89
+ requestAnimationFrame: (callback: (time: number) => void) => number
90
+ cancelAnimationFrame: (id: number) => void
91
+
88
92
  // 开发环境标识
89
93
  __DEV__?: boolean
90
94
 
@@ -1,4 +1,5 @@
1
1
  // DOM 相关类型声明
2
+ import type { Blob } from './blob.d'
2
3
 
3
4
  // DOM 元素接口 - 按继承关系组织
4
5
  export interface Element {
@@ -16,6 +17,8 @@ export interface HTMLElement extends Element {
16
17
  right: number
17
18
  bottom: number
18
19
  }
20
+ addEventListener(event: string, handler: (e: any) => void, options?: any): void
21
+ removeEventListener(event: string, handler: (e: any) => void, options?: any): void
19
22
  }
20
23
 
21
24
  export interface HTMLImageElement extends HTMLElement {
@@ -44,11 +47,29 @@ export interface Document {
44
47
  clientWidth: number
45
48
  clientHeight: number
46
49
  }
50
+ addEventListener(event: string, handler: (e: any) => void, options?: any): void
51
+ removeEventListener(event: string, handler: (e: any) => void, options?: any): void
47
52
  }
48
53
 
49
54
  // DOM 事件相关
50
55
  export interface Event {
51
56
  target?: any
57
+ stopPropagation(): void
58
+ preventDefault(): void
59
+ }
60
+
61
+ export interface MouseEvent extends Event {
62
+ clientX: number
63
+ clientY: number
64
+ }
65
+
66
+ export interface Touch {
67
+ clientX: number
68
+ clientY: number
69
+ }
70
+
71
+ export interface TouchEvent extends Event {
72
+ touches: Touch[]
52
73
  }
53
74
 
54
75
  export interface DOMException {