@chenzy-design/core 0.2.1 → 0.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/ai-chat-dialogue.d.ts +300 -0
- package/dist/ai-chat-dialogue.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.js +699 -0
- package/dist/ai-chat-dialogue.js.map +1 -0
- package/dist/ai-chat-dialogue.test.d.ts +2 -0
- package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.test.js +338 -0
- package/dist/ai-chat-dialogue.test.js.map +1 -0
- package/dist/ai-chat-input.d.ts +191 -0
- package/dist/ai-chat-input.d.ts.map +1 -0
- package/dist/ai-chat-input.js +274 -0
- package/dist/ai-chat-input.js.map +1 -0
- package/dist/ai-chat-input.test.d.ts +2 -0
- package/dist/ai-chat-input.test.d.ts.map +1 -0
- package/dist/ai-chat-input.test.js +339 -0
- package/dist/ai-chat-input.test.js.map +1 -0
- package/dist/audio-player.d.ts +154 -0
- package/dist/audio-player.d.ts.map +1 -0
- package/dist/audio-player.js +254 -0
- package/dist/audio-player.js.map +1 -0
- package/dist/audio-player.test.d.ts +2 -0
- package/dist/audio-player.test.d.ts.map +1 -0
- package/dist/audio-player.test.js +275 -0
- package/dist/audio-player.test.js.map +1 -0
- package/dist/back-top.d.ts +4 -1
- package/dist/back-top.d.ts.map +1 -1
- package/dist/back-top.js +5 -2
- package/dist/back-top.js.map +1 -1
- package/dist/back-top.test.js +3 -2
- package/dist/back-top.test.js.map +1 -1
- package/dist/calendar.d.ts +132 -44
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +413 -70
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.test.js +160 -76
- package/dist/calendar.test.js.map +1 -1
- package/dist/chat.d.ts +172 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +210 -0
- package/dist/chat.js.map +1 -0
- package/dist/chat.test.d.ts +2 -0
- package/dist/chat.test.d.ts.map +1 -0
- package/dist/chat.test.js +181 -0
- package/dist/chat.test.js.map +1 -0
- package/dist/code-highlight.d.ts +30 -0
- package/dist/code-highlight.d.ts.map +1 -0
- package/dist/code-highlight.js +37 -0
- package/dist/code-highlight.js.map +1 -0
- package/dist/code-highlight.test.d.ts +2 -0
- package/dist/code-highlight.test.d.ts.map +1 -0
- package/dist/code-highlight.test.js +36 -0
- package/dist/code-highlight.test.js.map +1 -0
- package/dist/collapsible.d.ts +41 -0
- package/dist/collapsible.d.ts.map +1 -0
- package/dist/collapsible.js +33 -0
- package/dist/collapsible.js.map +1 -0
- package/dist/collapsible.test.d.ts +2 -0
- package/dist/collapsible.test.d.ts.map +1 -0
- package/dist/collapsible.test.js +57 -0
- package/dist/collapsible.test.js.map +1 -0
- package/dist/color-value.d.ts +60 -0
- package/dist/color-value.d.ts.map +1 -0
- package/dist/color-value.js +165 -0
- package/dist/color-value.js.map +1 -0
- package/dist/color-value.test.d.ts +2 -0
- package/dist/color-value.test.d.ts.map +1 -0
- package/dist/color-value.test.js +104 -0
- package/dist/color-value.test.js.map +1 -0
- package/dist/config-provider.d.ts +76 -37
- package/dist/config-provider.d.ts.map +1 -1
- package/dist/config-provider.js +107 -32
- package/dist/config-provider.js.map +1 -1
- package/dist/config-provider.test.js +123 -60
- package/dist/config-provider.test.js.map +1 -1
- package/dist/cropper.d.ts +164 -0
- package/dist/cropper.d.ts.map +1 -0
- package/dist/cropper.js +841 -0
- package/dist/cropper.js.map +1 -0
- package/dist/cropper.test.d.ts +2 -0
- package/dist/cropper.test.d.ts.map +1 -0
- package/dist/cropper.test.js +259 -0
- package/dist/cropper.test.js.map +1 -0
- package/dist/drag-move.d.ts +119 -0
- package/dist/drag-move.d.ts.map +1 -0
- package/dist/drag-move.js +237 -0
- package/dist/drag-move.js.map +1 -0
- package/dist/drag-move.test.d.ts +2 -0
- package/dist/drag-move.test.d.ts.map +1 -0
- package/dist/drag-move.test.js +304 -0
- package/dist/drag-move.test.js.map +1 -0
- package/dist/editable.d.ts +24 -4
- package/dist/editable.d.ts.map +1 -1
- package/dist/editable.js +18 -0
- package/dist/editable.js.map +1 -1
- package/dist/editable.test.js +55 -2
- package/dist/editable.test.js.map +1 -1
- package/dist/ellipsis.d.ts +13 -0
- package/dist/ellipsis.d.ts.map +1 -1
- package/dist/ellipsis.js +36 -0
- package/dist/ellipsis.js.map +1 -1
- package/dist/ellipsis.test.js +37 -1
- package/dist/ellipsis.test.js.map +1 -1
- package/dist/form-path.d.ts +19 -0
- package/dist/form-path.d.ts.map +1 -0
- package/dist/form-path.js +97 -0
- package/dist/form-path.js.map +1 -0
- package/dist/form-path.test.d.ts +2 -0
- package/dist/form-path.test.d.ts.map +1 -0
- package/dist/form-path.test.js +57 -0
- package/dist/form-path.test.js.map +1 -0
- package/dist/form-validate.d.ts +13 -0
- package/dist/form-validate.d.ts.map +1 -0
- package/dist/form-validate.js +204 -0
- package/dist/form-validate.js.map +1 -0
- package/dist/form.d.ts +91 -18
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +170 -115
- package/dist/form.js.map +1 -1
- package/dist/form.test.js +349 -76
- package/dist/form.test.js.map +1 -1
- package/dist/highlight.d.ts +42 -32
- package/dist/highlight.d.ts.map +1 -1
- package/dist/highlight.js +67 -41
- package/dist/highlight.js.map +1 -1
- package/dist/highlight.test.js +73 -32
- package/dist/highlight.test.js.map +1 -1
- package/dist/hotkeys.d.ts +151 -0
- package/dist/hotkeys.d.ts.map +1 -0
- package/dist/hotkeys.js +188 -0
- package/dist/hotkeys.js.map +1 -0
- package/dist/hotkeys.test.d.ts +2 -0
- package/dist/hotkeys.test.d.ts.map +1 -0
- package/dist/hotkeys.test.js +170 -0
- package/dist/hotkeys.test.js.map +1 -0
- package/dist/index.d.ts +33 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -13
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +34 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +54 -0
- package/dist/input.js.map +1 -0
- package/dist/input.test.d.ts +2 -0
- package/dist/input.test.d.ts.map +1 -0
- package/dist/input.test.js +56 -0
- package/dist/input.test.js.map +1 -0
- package/dist/markdown-render.d.ts +49 -0
- package/dist/markdown-render.d.ts.map +1 -0
- package/dist/markdown-render.js +61 -0
- package/dist/markdown-render.js.map +1 -0
- package/dist/markdown-render.test.d.ts +2 -0
- package/dist/markdown-render.test.d.ts.map +1 -0
- package/dist/markdown-render.test.js +106 -0
- package/dist/markdown-render.test.js.map +1 -0
- package/dist/notification.d.ts +40 -31
- package/dist/notification.d.ts.map +1 -1
- package/dist/notification.js +86 -70
- package/dist/notification.js.map +1 -1
- package/dist/notification.test.js +62 -39
- package/dist/notification.test.js.map +1 -1
- package/dist/numeral.d.ts +32 -0
- package/dist/numeral.d.ts.map +1 -0
- package/dist/numeral.js +67 -0
- package/dist/numeral.js.map +1 -0
- package/dist/numeral.test.d.ts +2 -0
- package/dist/numeral.test.d.ts.map +1 -0
- package/dist/numeral.test.js +59 -0
- package/dist/numeral.test.js.map +1 -0
- package/dist/overflow-list.d.ts +9 -40
- package/dist/overflow-list.d.ts.map +1 -1
- package/dist/overflow-list.js +9 -70
- package/dist/overflow-list.js.map +1 -1
- package/dist/overflow-list.test.js +1 -122
- package/dist/overflow-list.test.js.map +1 -1
- package/dist/pagination.d.ts +17 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +48 -0
- package/dist/pagination.js.map +1 -1
- package/dist/pagination.test.js +40 -1
- package/dist/pagination.test.js.map +1 -1
- package/dist/pincode.d.ts +79 -0
- package/dist/pincode.d.ts.map +1 -0
- package/dist/pincode.js +119 -0
- package/dist/pincode.js.map +1 -0
- package/dist/pincode.test.d.ts +2 -0
- package/dist/pincode.test.d.ts.map +1 -0
- package/dist/pincode.test.js +151 -0
- package/dist/pincode.test.js.map +1 -0
- package/dist/progress.d.ts +32 -30
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +257 -64
- package/dist/progress.js.map +1 -1
- package/dist/progress.test.js +50 -47
- package/dist/progress.test.js.map +1 -1
- package/dist/resizable.d.ts +200 -0
- package/dist/resizable.d.ts.map +1 -0
- package/dist/resizable.js +329 -0
- package/dist/resizable.js.map +1 -0
- package/dist/resizable.test.d.ts +2 -0
- package/dist/resizable.test.d.ts.map +1 -0
- package/dist/resizable.test.js +302 -0
- package/dist/resizable.test.js.map +1 -0
- package/dist/scroll-list.d.ts +69 -62
- package/dist/scroll-list.d.ts.map +1 -1
- package/dist/scroll-list.js +103 -144
- package/dist/scroll-list.js.map +1 -1
- package/dist/scroll-list.test.js +100 -110
- package/dist/scroll-list.test.js.map +1 -1
- package/dist/sidebar.d.ts +46 -0
- package/dist/sidebar.d.ts.map +1 -0
- package/dist/sidebar.js +65 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/sidebar.test.d.ts +2 -0
- package/dist/sidebar.test.d.ts.map +1 -0
- package/dist/sidebar.test.js +88 -0
- package/dist/sidebar.test.js.map +1 -0
- package/dist/spin.d.ts +5 -5
- package/dist/spin.d.ts.map +1 -1
- package/dist/spin.js +13 -39
- package/dist/spin.js.map +1 -1
- package/dist/spin.test.js +2 -26
- package/dist/spin.test.js.map +1 -1
- package/dist/toast.d.ts +33 -30
- package/dist/toast.d.ts.map +1 -1
- package/dist/toast.js +77 -72
- package/dist/toast.js.map +1 -1
- package/dist/toast.test.js +63 -37
- package/dist/toast.test.js.map +1 -1
- package/dist/tree.d.ts +22 -5
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +61 -9
- package/dist/tree.js.map +1 -1
- package/dist/tree.test.js +72 -1
- package/dist/tree.test.js.map +1 -1
- package/dist/user-guide.d.ts +73 -0
- package/dist/user-guide.d.ts.map +1 -0
- package/dist/user-guide.js +95 -0
- package/dist/user-guide.js.map +1 -0
- package/dist/user-guide.test.d.ts +2 -0
- package/dist/user-guide.test.d.ts.map +1 -0
- package/dist/user-guide.test.js +109 -0
- package/dist/user-guide.test.js.map +1 -0
- package/dist/video-player.d.ts +196 -0
- package/dist/video-player.d.ts.map +1 -0
- package/dist/video-player.js +461 -0
- package/dist/video-player.js.map +1 -0
- package/dist/video-player.test.d.ts +2 -0
- package/dist/video-player.test.d.ts.map +1 -0
- package/dist/video-player.test.js +435 -0
- package/dist/video-player.test.js.map +1 -0
- package/package.json +17 -1
- package/dist/banner.d.ts +0 -19
- package/dist/banner.d.ts.map +0 -1
- package/dist/banner.js +0 -20
- package/dist/banner.js.map +0 -1
- package/dist/banner.test.d.ts +0 -2
- package/dist/banner.test.d.ts.map +0 -1
- package/dist/banner.test.js +0 -29
- package/dist/banner.test.js.map +0 -1
- package/dist/breakpoints.d.ts +0 -30
- package/dist/breakpoints.d.ts.map +0 -1
- package/dist/breakpoints.js +0 -45
- package/dist/breakpoints.js.map +0 -1
- package/dist/breakpoints.test.d.ts +0 -2
- package/dist/breakpoints.test.d.ts.map +0 -1
- package/dist/breakpoints.test.js +0 -46
- package/dist/breakpoints.test.js.map +0 -1
- package/dist/lottie-icon.d.ts +0 -88
- package/dist/lottie-icon.d.ts.map +0 -1
- package/dist/lottie-icon.js +0 -84
- package/dist/lottie-icon.js.map +0 -1
- package/dist/lottie-icon.test.d.ts +0 -2
- package/dist/lottie-icon.test.d.ts.map +0 -1
- package/dist/lottie-icon.test.js +0 -88
- package/dist/lottie-icon.test.js.map +0 -1
- package/dist/sider.d.ts +0 -26
- package/dist/sider.d.ts.map +0 -1
- package/dist/sider.js +0 -55
- package/dist/sider.js.map +0 -1
- package/dist/sider.test.d.ts +0 -2
- package/dist/sider.test.d.ts.map +0 -1
- package/dist/sider.test.js +0 -29
- package/dist/sider.test.js.map +0 -1
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { createResizeDrag, computeGroupResize, clamp as clampResize, snapToGrid, snapToPoints, hasDirection, getPixelSize, judgeConstraint, adjustNewSize, } from './resizable.js';
|
|
3
|
+
// ---- fake document so we can drive pointer events without a real DOM ----
|
|
4
|
+
function makeFakeDoc() {
|
|
5
|
+
const listeners = new Map();
|
|
6
|
+
const doc = {
|
|
7
|
+
addEventListener(type, fn) {
|
|
8
|
+
if (!listeners.has(type))
|
|
9
|
+
listeners.set(type, new Set());
|
|
10
|
+
listeners.get(type).add(fn);
|
|
11
|
+
},
|
|
12
|
+
removeEventListener(type, fn) {
|
|
13
|
+
listeners.get(type)?.delete(fn);
|
|
14
|
+
},
|
|
15
|
+
fire(type, e) {
|
|
16
|
+
for (const fn of listeners.get(type) ?? [])
|
|
17
|
+
fn(e);
|
|
18
|
+
},
|
|
19
|
+
count(type) {
|
|
20
|
+
return listeners.get(type)?.size ?? 0;
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
return doc;
|
|
24
|
+
}
|
|
25
|
+
const pe = (x, y) => ({ clientX: x, clientY: y });
|
|
26
|
+
describe('numeric helpers', () => {
|
|
27
|
+
it('clamp', () => {
|
|
28
|
+
expect(clampResize(5, 0, 10)).toBe(5);
|
|
29
|
+
expect(clampResize(-1, 0, 10)).toBe(0);
|
|
30
|
+
expect(clampResize(99, 0, 10)).toBe(10);
|
|
31
|
+
});
|
|
32
|
+
it('snapToGrid', () => {
|
|
33
|
+
expect(snapToGrid(23, 10)).toBe(20);
|
|
34
|
+
expect(snapToGrid(26, 10)).toBe(30);
|
|
35
|
+
expect(snapToGrid(26, 0)).toBe(26); // no snap
|
|
36
|
+
});
|
|
37
|
+
it('snapToPoints', () => {
|
|
38
|
+
expect(snapToPoints(105, [100, 200], 20)).toBe(100); // within gap
|
|
39
|
+
expect(snapToPoints(160, [100, 200], 20)).toBe(160); // outside gap -> unchanged
|
|
40
|
+
expect(snapToPoints(160, [100, 200], 0)).toBe(200); // gap 0 -> always nearest
|
|
41
|
+
expect(snapToPoints(50, undefined, 10)).toBe(50); // no targets
|
|
42
|
+
expect(snapToPoints(50, [], 10)).toBe(50); // empty targets
|
|
43
|
+
});
|
|
44
|
+
it('hasDirection', () => {
|
|
45
|
+
expect(hasDirection('topRight', 'top')).toBe(true);
|
|
46
|
+
expect(hasDirection('topRight', 'right')).toBe(true);
|
|
47
|
+
expect(hasDirection('topRight', 'left')).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
it('getPixelSize parses px/%/number', () => {
|
|
50
|
+
expect(getPixelSize('120px', 500)).toBe(120);
|
|
51
|
+
expect(getPixelSize('50%', 500)).toBe(250);
|
|
52
|
+
expect(getPixelSize(80, 500)).toBe(80);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('createResizeDrag — single axis x (Table column case)', () => {
|
|
56
|
+
it('clamps to min and writes size on move; min covers Table MIN_COL_WIDTH', () => {
|
|
57
|
+
const doc = makeFakeDoc();
|
|
58
|
+
const sizes = [];
|
|
59
|
+
const drag = createResizeDrag({
|
|
60
|
+
axis: 'x',
|
|
61
|
+
direction: 'right',
|
|
62
|
+
getStart: () => ({ width: 100 }),
|
|
63
|
+
min: 40,
|
|
64
|
+
onMove: (s) => sizes.push(s.width),
|
|
65
|
+
ownerDocument: doc,
|
|
66
|
+
});
|
|
67
|
+
drag.start(pe(0, 0), 'right');
|
|
68
|
+
expect(doc.count('pointermove')).toBe(1);
|
|
69
|
+
doc.fire('pointermove', pe(50, 0)); // +50 => 150
|
|
70
|
+
doc.fire('pointermove', pe(-100, 0)); // -100 => clamp 40
|
|
71
|
+
expect(sizes).toEqual([150, 40]);
|
|
72
|
+
doc.fire('pointerup', pe(-100, 0));
|
|
73
|
+
expect(doc.count('pointermove')).toBe(0); // detached
|
|
74
|
+
expect(drag.isDragging()).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it('left direction grows toward negative delta', () => {
|
|
77
|
+
const doc = makeFakeDoc();
|
|
78
|
+
const sizes = [];
|
|
79
|
+
const drag = createResizeDrag({
|
|
80
|
+
axis: 'x',
|
|
81
|
+
direction: 'left',
|
|
82
|
+
getStart: () => ({ width: 100 }),
|
|
83
|
+
onMove: (s) => sizes.push(s.width),
|
|
84
|
+
ownerDocument: doc,
|
|
85
|
+
});
|
|
86
|
+
drag.start(pe(0, 0), 'left');
|
|
87
|
+
doc.fire('pointermove', pe(-30, 0)); // left: 100 - (-30) = 130
|
|
88
|
+
expect(sizes).toEqual([130]);
|
|
89
|
+
});
|
|
90
|
+
it('respects max bound', () => {
|
|
91
|
+
const doc = makeFakeDoc();
|
|
92
|
+
const sizes = [];
|
|
93
|
+
const drag = createResizeDrag({
|
|
94
|
+
axis: 'x',
|
|
95
|
+
getStart: () => ({ width: 100 }),
|
|
96
|
+
max: 120,
|
|
97
|
+
onMove: (s) => sizes.push(s.width),
|
|
98
|
+
ownerDocument: doc,
|
|
99
|
+
});
|
|
100
|
+
drag.start(pe(0, 0), 'right');
|
|
101
|
+
doc.fire('pointermove', pe(500, 0));
|
|
102
|
+
expect(sizes).toEqual([120]);
|
|
103
|
+
});
|
|
104
|
+
it('grid snaps the moving size', () => {
|
|
105
|
+
const doc = makeFakeDoc();
|
|
106
|
+
const sizes = [];
|
|
107
|
+
const drag = createResizeDrag({
|
|
108
|
+
axis: 'x',
|
|
109
|
+
getStart: () => ({ width: 100 }),
|
|
110
|
+
grid: [25, 25],
|
|
111
|
+
onMove: (s) => sizes.push(s.width),
|
|
112
|
+
ownerDocument: doc,
|
|
113
|
+
});
|
|
114
|
+
drag.start(pe(0, 0), 'right');
|
|
115
|
+
doc.fire('pointermove', pe(11, 0)); // 111 -> snap 25 -> 100
|
|
116
|
+
doc.fire('pointermove', pe(20, 0)); // 120 -> snap 25 -> 125
|
|
117
|
+
expect(sizes).toEqual([100, 125]);
|
|
118
|
+
});
|
|
119
|
+
it('scale divides the delta', () => {
|
|
120
|
+
const doc = makeFakeDoc();
|
|
121
|
+
const sizes = [];
|
|
122
|
+
const drag = createResizeDrag({
|
|
123
|
+
axis: 'x',
|
|
124
|
+
getStart: () => ({ width: 100 }),
|
|
125
|
+
scale: 2,
|
|
126
|
+
onMove: (s) => sizes.push(s.width),
|
|
127
|
+
ownerDocument: doc,
|
|
128
|
+
});
|
|
129
|
+
drag.start(pe(0, 0), 'right');
|
|
130
|
+
doc.fire('pointermove', pe(100, 0)); // 100/2 = 50 -> 150
|
|
131
|
+
expect(sizes).toEqual([150]);
|
|
132
|
+
});
|
|
133
|
+
it('snap sticks to the nearest target within snapGap', () => {
|
|
134
|
+
const doc = makeFakeDoc();
|
|
135
|
+
const sizes = [];
|
|
136
|
+
const drag = createResizeDrag({
|
|
137
|
+
axis: 'x',
|
|
138
|
+
getStart: () => ({ width: 100 }),
|
|
139
|
+
snap: { x: [100, 200, 300] },
|
|
140
|
+
snapGap: 20,
|
|
141
|
+
onMove: (s) => sizes.push(s.width),
|
|
142
|
+
ownerDocument: doc,
|
|
143
|
+
});
|
|
144
|
+
drag.start(pe(0, 0), 'right');
|
|
145
|
+
doc.fire('pointermove', pe(90, 0)); // 190 within 20 of 200 -> 200
|
|
146
|
+
doc.fire('pointermove', pe(60, 0)); // 160 not within 20 of any -> 160
|
|
147
|
+
doc.fire('pointermove', pe(105, 0)); // 205 within 20 of 200 -> 200
|
|
148
|
+
expect(sizes).toEqual([200, 160, 200]);
|
|
149
|
+
});
|
|
150
|
+
it('getBoundMax caps the size at the bound element', () => {
|
|
151
|
+
const doc = makeFakeDoc();
|
|
152
|
+
const sizes = [];
|
|
153
|
+
const drag = createResizeDrag({
|
|
154
|
+
axis: 'x',
|
|
155
|
+
getStart: () => ({ width: 100 }),
|
|
156
|
+
getBoundMax: () => ({ maxWidth: 250 }),
|
|
157
|
+
onMove: (s) => sizes.push(s.width),
|
|
158
|
+
ownerDocument: doc,
|
|
159
|
+
});
|
|
160
|
+
drag.start(pe(0, 0), 'right');
|
|
161
|
+
doc.fire('pointermove', pe(100, 0)); // 200 < 250 -> 200
|
|
162
|
+
doc.fire('pointermove', pe(300, 0)); // 400 capped at 250
|
|
163
|
+
expect(sizes).toEqual([200, 250]);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('createResizeDrag — lifecycle', () => {
|
|
167
|
+
it('fires onStart / onEnd and detaches on up', () => {
|
|
168
|
+
const doc = makeFakeDoc();
|
|
169
|
+
const onStart = vi.fn();
|
|
170
|
+
const onEnd = vi.fn();
|
|
171
|
+
const drag = createResizeDrag({
|
|
172
|
+
axis: 'y',
|
|
173
|
+
getStart: () => ({ height: 200 }),
|
|
174
|
+
onStart,
|
|
175
|
+
onEnd,
|
|
176
|
+
ownerDocument: doc,
|
|
177
|
+
});
|
|
178
|
+
drag.start(pe(0, 0), 'bottom');
|
|
179
|
+
expect(onStart).toHaveBeenCalledWith('bottom', expect.anything());
|
|
180
|
+
doc.fire('pointerup', pe(0, 30));
|
|
181
|
+
expect(onEnd).toHaveBeenCalledWith({ width: 0, height: 230 }, 'bottom', expect.anything());
|
|
182
|
+
expect(doc.count('pointerup')).toBe(0);
|
|
183
|
+
});
|
|
184
|
+
it('destroy() detaches leftover listeners (unmount safety net)', () => {
|
|
185
|
+
const doc = makeFakeDoc();
|
|
186
|
+
const drag = createResizeDrag({
|
|
187
|
+
axis: 'x',
|
|
188
|
+
getStart: () => ({ width: 100 }),
|
|
189
|
+
ownerDocument: doc,
|
|
190
|
+
});
|
|
191
|
+
drag.start(pe(0, 0), 'right');
|
|
192
|
+
expect(doc.count('pointermove')).toBe(1);
|
|
193
|
+
drag.destroy();
|
|
194
|
+
expect(doc.count('pointermove')).toBe(0);
|
|
195
|
+
expect(doc.count('pointerup')).toBe(0);
|
|
196
|
+
});
|
|
197
|
+
it('lockAspectRatio drives height from width on corner drag', () => {
|
|
198
|
+
const doc = makeFakeDoc();
|
|
199
|
+
const sizes = [];
|
|
200
|
+
const drag = createResizeDrag({
|
|
201
|
+
axis: 'xy',
|
|
202
|
+
getStart: () => ({ width: 100, height: 50 }), // ratio 2
|
|
203
|
+
lockAspectRatio: true,
|
|
204
|
+
onMove: (s) => sizes.push({ width: s.width, height: s.height }),
|
|
205
|
+
ownerDocument: doc,
|
|
206
|
+
});
|
|
207
|
+
drag.start(pe(0, 0), 'bottomRight');
|
|
208
|
+
doc.fire('pointermove', pe(100, 0)); // width 200 -> height 100 (ratio 2)
|
|
209
|
+
expect(sizes[0]).toEqual({ width: 200, height: 100 });
|
|
210
|
+
});
|
|
211
|
+
it('lockAspectRatioExtra offsets the driven axis (Semi lockAspectRatioExtra*)', () => {
|
|
212
|
+
const doc = makeFakeDoc();
|
|
213
|
+
const sizes = [];
|
|
214
|
+
const drag = createResizeDrag({
|
|
215
|
+
axis: 'xy',
|
|
216
|
+
getStart: () => ({ width: 100, height: 50 }),
|
|
217
|
+
lockAspectRatio: 2, // explicit ratio 2
|
|
218
|
+
lockAspectRatioExtraHeight: 10,
|
|
219
|
+
lockAspectRatioExtraWidth: 4,
|
|
220
|
+
onMove: (s) => sizes.push({ width: s.width, height: s.height }),
|
|
221
|
+
ownerDocument: doc,
|
|
222
|
+
});
|
|
223
|
+
drag.start(pe(0, 0), 'bottomRight'); // horizontal edge -> height driven from width
|
|
224
|
+
doc.fire('pointermove', pe(100, 0)); // width 200 -> height = (200-4)/2 + 10 = 108
|
|
225
|
+
expect(sizes[0]).toEqual({ width: 200, height: 108 });
|
|
226
|
+
});
|
|
227
|
+
it('boundsByDirection only caps the dragged edge axis (Semi boundsByDirection)', () => {
|
|
228
|
+
const doc = makeFakeDoc();
|
|
229
|
+
const sizes = [];
|
|
230
|
+
const drag = createResizeDrag({
|
|
231
|
+
axis: 'xy',
|
|
232
|
+
getStart: () => ({ width: 100, height: 100 }),
|
|
233
|
+
getBoundMax: () => ({ maxWidth: 150, maxHeight: 150 }),
|
|
234
|
+
boundsByDirection: true,
|
|
235
|
+
onMove: (s) => sizes.push({ width: s.width, height: s.height }),
|
|
236
|
+
ownerDocument: doc,
|
|
237
|
+
});
|
|
238
|
+
// right edge: only width is capped; height is uncapped (no top/bottom in dir)
|
|
239
|
+
drag.start(pe(0, 0), 'right');
|
|
240
|
+
doc.fire('pointermove', pe(300, 300)); // width 400 -> capped 150; height stays 100
|
|
241
|
+
expect(sizes[0]).toEqual({ width: 150, height: 100 });
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
describe('computeGroupResize — coupling + conservation', () => {
|
|
245
|
+
const base = {
|
|
246
|
+
direction: 'horizontal',
|
|
247
|
+
parentSize: 400,
|
|
248
|
+
lastItemSize: 200,
|
|
249
|
+
nextItemSize: 200,
|
|
250
|
+
lastItemPercent: 50,
|
|
251
|
+
nextItemPercent: 50,
|
|
252
|
+
last: {},
|
|
253
|
+
next: {},
|
|
254
|
+
};
|
|
255
|
+
it('one grows, one shrinks; sum conserved', () => {
|
|
256
|
+
const r = computeGroupResize({ ...base, delta: 40 });
|
|
257
|
+
expect(r.lastNewSize).toBe(240);
|
|
258
|
+
expect(r.nextNewSize).toBe(160);
|
|
259
|
+
expect(r.lastNewPercent + r.nextNewPercent).toBeCloseTo(100);
|
|
260
|
+
});
|
|
261
|
+
it('clamps last to min and gives the remainder to next', () => {
|
|
262
|
+
const r = computeGroupResize({
|
|
263
|
+
...base,
|
|
264
|
+
delta: -180, // last would be 20, below min 100px
|
|
265
|
+
last: { min: '100px' },
|
|
266
|
+
});
|
|
267
|
+
expect(r.lastNewSize).toBe(100);
|
|
268
|
+
expect(r.nextNewSize).toBe(300); // 200+200-100
|
|
269
|
+
expect(r.lastNewPercent + r.nextNewPercent).toBeCloseTo(100);
|
|
270
|
+
});
|
|
271
|
+
it('clamps next to min when it would underflow', () => {
|
|
272
|
+
const r = computeGroupResize({
|
|
273
|
+
...base,
|
|
274
|
+
delta: 180, // next would be 20, below min 100px
|
|
275
|
+
next: { min: '100px' },
|
|
276
|
+
});
|
|
277
|
+
expect(r.nextNewSize).toBe(100);
|
|
278
|
+
expect(r.lastNewSize).toBe(300);
|
|
279
|
+
});
|
|
280
|
+
it('honors percent min/max against parentSize', () => {
|
|
281
|
+
const r = computeGroupResize({
|
|
282
|
+
...base,
|
|
283
|
+
delta: 400, // last would blow past max
|
|
284
|
+
last: { max: '75%' }, // 300px
|
|
285
|
+
});
|
|
286
|
+
expect(r.lastNewSize).toBe(300);
|
|
287
|
+
expect(r.nextNewSize).toBe(100);
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
describe('constraint helpers', () => {
|
|
291
|
+
it('judgeConstraint flags out-of-range', () => {
|
|
292
|
+
expect(judgeConstraint(30, '40px', '200px', 400)).toBe(true);
|
|
293
|
+
expect(judgeConstraint(300, '40px', '200px', 400)).toBe(true);
|
|
294
|
+
expect(judgeConstraint(100, '40px', '200px', 400)).toBe(false);
|
|
295
|
+
});
|
|
296
|
+
it('adjustNewSize clamps with offset', () => {
|
|
297
|
+
expect(adjustNewSize(10, '40px', '200px', 400, 5)).toBe(45);
|
|
298
|
+
expect(adjustNewSize(999, '40px', '200px', 400)).toBe(200);
|
|
299
|
+
expect(adjustNewSize(100, '40px', '200px', 400)).toBe(100);
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
//# sourceMappingURL=resizable.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resizable.test.js","sourceRoot":"","sources":["../src/resizable.test.ts"],"names":[],"mappings":"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"}
|
package/dist/scroll-list.d.ts
CHANGED
|
@@ -1,81 +1,88 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
2
|
+
* ScrollList / ScrollItem helpers — framework-agnostic picker math.
|
|
3
|
+
*
|
|
4
|
+
* 严格对齐 Semi Design(semi-foundation/scrollList)。Semi 的 itemFoundation 是有
|
|
5
|
+
* 状态、直接操作真实 DOM 的类;本层遵循 chenzy-design headless 哲学,只抽出**纯函数**
|
|
6
|
+
* 几何 / 文案 / 缓动数学,DOM 读写(节点搬移、getBoundingClientRect)由 svelte 渲染层
|
|
7
|
+
* 用这些函数实现,无 DOM、无框架依赖、无内部可变状态。
|
|
8
|
+
*
|
|
9
|
+
* 对齐来源:
|
|
10
|
+
* - scrollItem.tsx `scrollToNode` / `scrollToCenter` → {@link centerOffset}
|
|
11
|
+
* - itemFoundation `getNearestNodeInfo`(选区中线找最近非禁用节点) → {@link nearestIndex}
|
|
12
|
+
* - scrollTo.ts(semi-animation 驱动 scrollTop) → {@link scrollFrame}
|
|
13
|
+
* (已核 semi-animation 源码:scrollTo 传 `{duration}` 不传 easing → wrapValue 走 bezier 分支 →
|
|
14
|
+
* getEasing(undefined)='linear'=cubic-bezier(.25,.25,.75,.75),数学上即线性。故本层用**线性**缓动,
|
|
15
|
+
* 非弹簧、非 ease-out。)
|
|
16
|
+
* - renderItemList `transform`(选中项文案变换) → {@link resolveItemText}
|
|
17
|
+
* - constants.ts `DEFAULT_ITEM_HEIGHT=36` / `DEFAULT_SCROLL_DURATION=120`
|
|
8
18
|
*/
|
|
9
|
-
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
19
|
+
/** ScrollItem.mode:wheel(滚轮,居中吸附)| normal(普通列表,点击选中)。对齐 Semi strings.MODE。 */
|
|
20
|
+
export type ScrollItemMode = 'wheel' | 'normal';
|
|
21
|
+
/** Semi scrollList numbers 常量。 */
|
|
22
|
+
export declare const SCROLL_LIST_DEFAULT_ITEM_HEIGHT = 36;
|
|
23
|
+
export declare const SCROLL_LIST_DEFAULT_SCROLL_DURATION = 120;
|
|
24
|
+
/**
|
|
25
|
+
* 单项数据(对齐 Semi itemFoundation `Item`)。
|
|
26
|
+
* value 任意;text 缺省时用 value 展示;transform 选中态文案变换(优先于 ScrollItem.transform)。
|
|
27
|
+
*/
|
|
28
|
+
export interface ScrollItemData {
|
|
29
|
+
value: unknown;
|
|
30
|
+
text?: string;
|
|
13
31
|
disabled?: boolean;
|
|
32
|
+
transform?: (value: unknown, text: string) => string;
|
|
33
|
+
[x: string]: unknown;
|
|
34
|
+
}
|
|
35
|
+
/** onSelect 回调载荷(对齐 Semi notifySelectItem:展开 item + value + type + index)。 */
|
|
36
|
+
export interface ScrollItemSelectPayload {
|
|
37
|
+
value: unknown;
|
|
38
|
+
/** 选中项在 list 中的原始索引(cycled 下已取模回 [0,len))。 */
|
|
39
|
+
index: number;
|
|
40
|
+
/** ScrollItem.type,用于外层区分是哪一列。 */
|
|
41
|
+
type?: string | number;
|
|
42
|
+
[x: string]: unknown;
|
|
14
43
|
}
|
|
15
|
-
/** Map a scrollTop offset to the centered item index (clamped to range). */
|
|
16
|
-
export declare function offsetToIndex(scrollTop: number, itemHeight: number, count: number): number;
|
|
17
|
-
/** The scrollTop that centers a given index. */
|
|
18
|
-
export declare function indexToOffset(index: number, itemHeight: number): number;
|
|
19
|
-
/** Index of an item by value, or -1. */
|
|
20
|
-
export declare function indexOfValue(items: readonly ScrollListItem[], value: ScrollListValue | undefined): number;
|
|
21
44
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
45
|
+
* 解析一项应展示的文案(对齐 Semi renderItemList)。
|
|
46
|
+
* selected 时优先用 transform(item.transform > 公共 transform)变换,否则 text ?? String(value)。
|
|
24
47
|
*/
|
|
25
|
-
export declare function
|
|
26
|
-
/** First enabled index (for Home / value resolution), or -1 if all disabled. */
|
|
27
|
-
export declare function firstEnabledIndex(items: readonly ScrollListItem[]): number;
|
|
28
|
-
/** Last enabled index (for End), or -1 if all disabled. */
|
|
29
|
-
export declare function lastEnabledIndex(items: readonly ScrollListItem[]): number;
|
|
30
|
-
export type ScrollListKey = 'ArrowUp' | 'ArrowDown' | 'PageUp' | 'PageDown' | 'Home' | 'End';
|
|
48
|
+
export declare function resolveItemText(item: ScrollItemData, selected: boolean, commonTransform?: (value: unknown, text: string) => string): string;
|
|
31
49
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
50
|
+
* 把某 index 的项**居中**到视窗中线所需的 scrollTop(对齐 Semi scrollToNode):
|
|
51
|
+
* targetTop = node.offsetTop - (wrapperHeight - itemHeight) / 2。
|
|
52
|
+
* offsetTop = index * itemHeight(含 ul 顶部 `:before` 空白,见样式)。
|
|
35
53
|
*/
|
|
36
|
-
export declare function
|
|
37
|
-
/** 正取模(结果恒非负),把任意整数索引折回 [0, count)。 */
|
|
38
|
-
export declare function wrapIndex(index: number, count: number): number;
|
|
54
|
+
export declare function centerOffset(index: number, itemHeight: number, wrapperHeight: number, topPadding?: number): number;
|
|
39
55
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
56
|
+
* 给定当前 scrollTop 与视窗高度,求中线最近的**非禁用**项索引(对齐 getNearestNodeInfo)。
|
|
57
|
+
* 中线在视窗几何正中;每项中心 = topPadding + (i + 0.5) * itemHeight - scrollTop。
|
|
58
|
+
* 返回 -1 表示无可选项(全禁用 / 空)。
|
|
42
59
|
*/
|
|
43
|
-
export declare function
|
|
60
|
+
export declare function nearestIndex(scrollTop: number, itemHeight: number, wrapperHeight: number, count: number, isDisabled: (index: number) => boolean, topPadding?: number): number;
|
|
61
|
+
/** 正取模:把任意整数索引折回 [0, count)(cycled 用)。对齐 Semi `index % list.length` 语义(负值也回正)。 */
|
|
62
|
+
export declare function wrapIndex(index: number, count: number): number;
|
|
44
63
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
64
|
+
* cubic ease-out(先快后缓)。t ∈ [0,1]。通用缓动工具。
|
|
65
|
+
* 注意:ScrollList 落定**不**用它——Semi scrollTo 用的是线性(见 {@link scrollFrame})。
|
|
47
66
|
*/
|
|
48
|
-
export declare function
|
|
67
|
+
export declare function easeOut(t: number): number;
|
|
49
68
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
69
|
+
* 缓动滚动的单帧 scrollTop(照搬 Semi scrollTo.ts:from→to over duration,**线性**)。
|
|
70
|
+
* Semi 的 scrollTo 只传 duration 不传 easing → semi-animation 落到 'linear' bezier
|
|
71
|
+
* (cubic-bezier(.25,.25,.75,.75),即匀速 y=x)。故此处用线性插值 `elapsed/duration`。
|
|
72
|
+
* elapsed>=duration 或 duration<=0 时返回 to(落定)。渲染层用 rAF 逐帧调用并写 el.scrollTop。
|
|
53
73
|
*/
|
|
54
|
-
export declare function
|
|
55
|
-
export interface MomentumStep {
|
|
56
|
-
/** 本帧后的速度(px/ms)。 */
|
|
57
|
-
velocity: number;
|
|
58
|
-
/** 本帧位移增量(px,velocity*dt 的积分近似)。 */
|
|
59
|
-
delta: number;
|
|
60
|
-
/** 速度是否已低于阈值(应停止动画进入吸附)。 */
|
|
61
|
-
done: boolean;
|
|
62
|
-
}
|
|
74
|
+
export declare function scrollFrame(from: number, to: number, elapsed: number, duration: number): number;
|
|
63
75
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* @param minV 停止阈值(px/ms),默认 0.02
|
|
76
|
+
* cycled 头部要补多少「份」完整数据,才能让首节点越过上缓冲区顶(对齐 Semi shouldPrepend)。
|
|
77
|
+
* 照搬 Semi while 循环:`while (baseTop + itemHeight >= wrapperTop - wrapperHeight*ratio) { count++; baseTop -= listHeight }`,
|
|
78
|
+
* 参数化为相对坐标 `firstTop = firstNodeTop - wrapperTop`(首 li 顶相对视窗顶的偏移,可负),不读 DOM。
|
|
79
|
+
* ratio=缓冲区为视窗高度的倍数(init 时 2,滚动调整时 1,对齐 Semi)。
|
|
69
80
|
*/
|
|
70
|
-
export declare function
|
|
81
|
+
export declare function shouldPrepend(firstTop: number, count: number, itemHeight: number, wrapperHeight: number, ratio?: number): number;
|
|
71
82
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* @param velocity 当前速度(px/ms)
|
|
76
|
-
* @param itemHeight 行高
|
|
77
|
-
* @param count 行数
|
|
78
|
-
* @param projection 速度前瞻系数(默认 80:v*80 px 的滑行预估)
|
|
83
|
+
* cycled 尾部要补多少「份」完整数据,才能让尾节点越过下缓冲区底(对齐 Semi shouldAppend)。
|
|
84
|
+
* 照搬 Semi while 循环:`while (baseTop <= wrapperTop + wrapperHeight*ratio) { count++; baseTop += listHeight }`,
|
|
85
|
+
* 参数化为相对坐标 `lastTop = lastNodeTop - wrapperTop`(尾 li 顶相对视窗顶的偏移),不读 DOM。
|
|
79
86
|
*/
|
|
80
|
-
export declare function
|
|
87
|
+
export declare function shouldAppend(lastTop: number, count: number, itemHeight: number, wrapperHeight: number, ratio?: number): number;
|
|
81
88
|
//# sourceMappingURL=scroll-list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-list.d.ts","sourceRoot":"","sources":["../src/scroll-list.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scroll-list.d.ts","sourceRoot":"","sources":["../src/scroll-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD,kCAAkC;AAClC,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAClD,eAAO,MAAM,mCAAmC,MAAM,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GACzD,MAAM,CAMR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,UAAU,SAAI,GACb,MAAM,CAGR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,EACtC,UAAU,SAAI,GACb,MAAM,CAeR;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI/F;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,SAAI,GACR,MAAM,CAYR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,SAAI,GACR,MAAM,CAYR"}
|