@chenzy-design/core 0.3.1 → 0.4.1
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,275 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { createAudioPlayer, normalizeAudioUrl, clampVolume, clampTime, } from './audio-player.js';
|
|
3
|
+
/** 一个可断言的假 <audio> 适配器:记录调用并维护一份内部媒体状态。 */
|
|
4
|
+
function makeAdapter(overrides = {}) {
|
|
5
|
+
const media = { currentTime: 0, duration: 120, volume: 1, playbackRate: 1 };
|
|
6
|
+
const play = vi.fn(() => { });
|
|
7
|
+
const pause = vi.fn(() => { });
|
|
8
|
+
const adapter = {
|
|
9
|
+
play,
|
|
10
|
+
pause,
|
|
11
|
+
getCurrentTime: () => media.currentTime,
|
|
12
|
+
setCurrentTime: (s) => {
|
|
13
|
+
media.currentTime = s;
|
|
14
|
+
},
|
|
15
|
+
getDuration: () => media.duration,
|
|
16
|
+
getVolume: () => media.volume,
|
|
17
|
+
setVolume: (v) => {
|
|
18
|
+
media.volume = v;
|
|
19
|
+
},
|
|
20
|
+
getPlaybackRate: () => media.playbackRate,
|
|
21
|
+
setPlaybackRate: (v) => {
|
|
22
|
+
media.playbackRate = v;
|
|
23
|
+
},
|
|
24
|
+
...overrides,
|
|
25
|
+
};
|
|
26
|
+
return { adapter, media, play, pause };
|
|
27
|
+
}
|
|
28
|
+
describe('normalizeAudioUrl — audioUrl 四形态归一(对齐 Semi)', () => {
|
|
29
|
+
it('string → 单曲', () => {
|
|
30
|
+
expect(normalizeAudioUrl('a.mp3')).toEqual([{ src: 'a.mp3' }]);
|
|
31
|
+
});
|
|
32
|
+
it('AudioInfo → 单曲带 title/cover', () => {
|
|
33
|
+
expect(normalizeAudioUrl({ src: 'a.mp3', title: 'A', cover: 'a.png' })).toEqual([
|
|
34
|
+
{ src: 'a.mp3', title: 'A', cover: 'a.png' },
|
|
35
|
+
]);
|
|
36
|
+
});
|
|
37
|
+
it('string[] → 多曲,丢弃空串', () => {
|
|
38
|
+
expect(normalizeAudioUrl(['a.mp3', '', 'b.mp3'])).toEqual([
|
|
39
|
+
{ src: 'a.mp3' },
|
|
40
|
+
{ src: 'b.mp3' },
|
|
41
|
+
]);
|
|
42
|
+
});
|
|
43
|
+
it('AudioInfo[] → 多曲,丢弃无 src 项', () => {
|
|
44
|
+
const input = [
|
|
45
|
+
{ src: 'a.mp3', title: 'A' },
|
|
46
|
+
{ title: 'no-src' },
|
|
47
|
+
{ src: 'b.mp3', cover: 'b.png' },
|
|
48
|
+
];
|
|
49
|
+
expect(normalizeAudioUrl(input)).toEqual([
|
|
50
|
+
{ src: 'a.mp3', title: 'A' },
|
|
51
|
+
{ src: 'b.mp3', cover: 'b.png' },
|
|
52
|
+
]);
|
|
53
|
+
});
|
|
54
|
+
it('空/无效输入 → []', () => {
|
|
55
|
+
expect(normalizeAudioUrl(undefined)).toEqual([]);
|
|
56
|
+
expect(normalizeAudioUrl(null)).toEqual([]);
|
|
57
|
+
expect(normalizeAudioUrl('')).toEqual([]);
|
|
58
|
+
expect(normalizeAudioUrl([])).toEqual([]);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('clamp helpers', () => {
|
|
62
|
+
it('clampVolume 钳制 [0,100]', () => {
|
|
63
|
+
expect(clampVolume(-5)).toBe(0);
|
|
64
|
+
expect(clampVolume(50)).toBe(50);
|
|
65
|
+
expect(clampVolume(150)).toBe(100);
|
|
66
|
+
expect(clampVolume(NaN)).toBe(0);
|
|
67
|
+
});
|
|
68
|
+
it('clampTime 钳制 [0,total]', () => {
|
|
69
|
+
expect(clampTime(-1, 100)).toBe(0);
|
|
70
|
+
expect(clampTime(50, 100)).toBe(50);
|
|
71
|
+
expect(clampTime(200, 100)).toBe(100);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('createAudioPlayer — statusClick 播放/暂停', () => {
|
|
75
|
+
it('切换 isPlaying 并调用 play/pause', () => {
|
|
76
|
+
const { adapter, play, pause } = makeAdapter();
|
|
77
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
78
|
+
expect(p.getState().isPlaying).toBe(false);
|
|
79
|
+
p.handleStatusClick();
|
|
80
|
+
expect(p.getState().isPlaying).toBe(true);
|
|
81
|
+
expect(play).toHaveBeenCalledTimes(1);
|
|
82
|
+
p.handleStatusClick();
|
|
83
|
+
expect(p.getState().isPlaying).toBe(false);
|
|
84
|
+
expect(pause).toHaveBeenCalledTimes(1);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('createAudioPlayer — trackChange 上下曲边界', () => {
|
|
88
|
+
it('多曲 next/prev 取模循环(对齐 Semi:末曲 next 绕回首曲、首曲 prev 绕到末曲)', () => {
|
|
89
|
+
const { adapter } = makeAdapter();
|
|
90
|
+
const p = createAudioPlayer(adapter, { audioUrl: ['a.mp3', 'b.mp3', 'c.mp3'] });
|
|
91
|
+
expect(p.isMultiTrack()).toBe(true);
|
|
92
|
+
expect(p.getState().currentTrackIndex).toBe(0);
|
|
93
|
+
// 首曲 prev 绕到末曲((0-1+3)%3=2,对齐 Semi)
|
|
94
|
+
p.handleTrackChange('prev');
|
|
95
|
+
expect(p.getState().currentTrackIndex).toBe(2);
|
|
96
|
+
p.handleTrackChange('next'); // (2+1)%3=0 绕回首曲
|
|
97
|
+
expect(p.getState().currentTrackIndex).toBe(0);
|
|
98
|
+
p.handleTrackChange('next');
|
|
99
|
+
expect(p.getState().currentTrackIndex).toBe(1);
|
|
100
|
+
p.handleTrackChange('next');
|
|
101
|
+
expect(p.getState().currentTrackIndex).toBe(2);
|
|
102
|
+
// 末曲 next 绕回首曲((2+1)%3=0)
|
|
103
|
+
p.handleTrackChange('next');
|
|
104
|
+
expect(p.getState().currentTrackIndex).toBe(0);
|
|
105
|
+
});
|
|
106
|
+
it('切曲重置进度', () => {
|
|
107
|
+
const { adapter } = makeAdapter();
|
|
108
|
+
const p = createAudioPlayer(adapter, { audioUrl: ['a.mp3', 'b.mp3'] });
|
|
109
|
+
p.handleTimeChange(30);
|
|
110
|
+
expect(p.getState().currentTime).toBe(30);
|
|
111
|
+
p.handleTrackChange('next');
|
|
112
|
+
expect(p.getState().currentTime).toBe(0);
|
|
113
|
+
expect(p.getState().totalTime).toBe(0);
|
|
114
|
+
});
|
|
115
|
+
it('单曲 trackChange no-op', () => {
|
|
116
|
+
const { adapter } = makeAdapter();
|
|
117
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
118
|
+
expect(p.isMultiTrack()).toBe(false);
|
|
119
|
+
p.handleTrackChange('next');
|
|
120
|
+
expect(p.getState().currentTrackIndex).toBe(0);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('createAudioPlayer — timeChange / seek 钳制', () => {
|
|
124
|
+
it('timeChange 钳到 [0,totalTime] 并写 audio', () => {
|
|
125
|
+
const { adapter, media } = makeAdapter();
|
|
126
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
127
|
+
p.initAudioState(); // totalTime=120
|
|
128
|
+
expect(p.getState().totalTime).toBe(120);
|
|
129
|
+
p.handleTimeChange(50);
|
|
130
|
+
expect(p.getState().currentTime).toBe(50);
|
|
131
|
+
expect(media.currentTime).toBe(50);
|
|
132
|
+
p.handleTimeChange(999);
|
|
133
|
+
expect(p.getState().currentTime).toBe(120);
|
|
134
|
+
p.handleTimeChange(-10);
|
|
135
|
+
expect(p.getState().currentTime).toBe(0);
|
|
136
|
+
});
|
|
137
|
+
it('seek 按 skipDuration 相对跳,并钳制', () => {
|
|
138
|
+
const { adapter } = makeAdapter();
|
|
139
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3', skipDuration: 15 });
|
|
140
|
+
p.initAudioState(); // totalTime=120
|
|
141
|
+
p.handleTimeChange(30);
|
|
142
|
+
p.handleSeek(1); // +15 → 45
|
|
143
|
+
expect(p.getState().currentTime).toBe(45);
|
|
144
|
+
p.handleSeek(-1); // -15 → 30
|
|
145
|
+
expect(p.getState().currentTime).toBe(30);
|
|
146
|
+
p.handleTimeChange(10);
|
|
147
|
+
p.handleSeek(-1); // 10-15 → 钳到 0
|
|
148
|
+
expect(p.getState().currentTime).toBe(0);
|
|
149
|
+
});
|
|
150
|
+
it('skipDuration 默认 10', () => {
|
|
151
|
+
const { adapter } = makeAdapter();
|
|
152
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
153
|
+
p.initAudioState();
|
|
154
|
+
p.handleTimeChange(20);
|
|
155
|
+
p.handleSeek(1);
|
|
156
|
+
expect(p.getState().currentTime).toBe(30);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('createAudioPlayer — speedChange', () => {
|
|
160
|
+
it('写倍速到 audio 并存 state', () => {
|
|
161
|
+
const { adapter, media } = makeAdapter();
|
|
162
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
163
|
+
p.handleSpeedChange({ label: '2.0x', value: 2 });
|
|
164
|
+
expect(media.playbackRate).toBe(2);
|
|
165
|
+
expect(p.getState().playbackRate).toEqual({ label: '2.0x', value: 2 });
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
describe('createAudioPlayer — refresh 重播', () => {
|
|
169
|
+
it('无错误:仅 currentTime 归零,不自动播放、不改 isPlaying(对齐 Semi handleRefresh)', () => {
|
|
170
|
+
const { adapter, media, play } = makeAdapter();
|
|
171
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
172
|
+
p.handleTimeChange(60);
|
|
173
|
+
p.handleRefresh();
|
|
174
|
+
expect(media.currentTime).toBe(0);
|
|
175
|
+
expect(p.getState().currentTime).toBe(0);
|
|
176
|
+
// 对齐 Semi:不播放、不改 isPlaying(初始 false)。
|
|
177
|
+
expect(p.getState().isPlaying).toBe(false);
|
|
178
|
+
expect(play).not.toHaveBeenCalled();
|
|
179
|
+
});
|
|
180
|
+
it('错误态:调 adapter.reload() 重载并清 isError(对齐 Semi handleRefresh error 分支)', () => {
|
|
181
|
+
const { adapter, media } = makeAdapter();
|
|
182
|
+
const reload = vi.fn();
|
|
183
|
+
// 补齐 reload(makeAdapter 可能未提供)。
|
|
184
|
+
const withReload = { ...adapter, reload };
|
|
185
|
+
const p = createAudioPlayer(withReload, { audioUrl: 'a.mp3' });
|
|
186
|
+
p.errorHandler();
|
|
187
|
+
expect(p.getState().isError).toBe(true);
|
|
188
|
+
p.handleRefresh();
|
|
189
|
+
expect(reload).toHaveBeenCalledTimes(1);
|
|
190
|
+
expect(p.getState().isError).toBe(false);
|
|
191
|
+
void media;
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe('createAudioPlayer — volumeChange 钳制', () => {
|
|
195
|
+
it('钳到 [0,100] 并写 audio(0–1)', () => {
|
|
196
|
+
const { adapter, media } = makeAdapter();
|
|
197
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
198
|
+
p.handleVolumeChange(50);
|
|
199
|
+
expect(p.getState().volume).toBe(50);
|
|
200
|
+
expect(media.volume).toBe(0.5);
|
|
201
|
+
p.handleVolumeChange(150);
|
|
202
|
+
expect(p.getState().volume).toBe(100);
|
|
203
|
+
expect(media.volume).toBe(1);
|
|
204
|
+
p.handleVolumeChange(-20);
|
|
205
|
+
expect(p.getState().volume).toBe(0);
|
|
206
|
+
expect(media.volume).toBe(0);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('createAudioPlayer — endHandler(对齐 Semi)', () => {
|
|
210
|
+
it('多曲未到末曲:切下一曲', () => {
|
|
211
|
+
const { adapter } = makeAdapter();
|
|
212
|
+
const p = createAudioPlayer(adapter, { audioUrl: ['a.mp3', 'b.mp3'] });
|
|
213
|
+
p.endHandler();
|
|
214
|
+
expect(p.getState().currentTrackIndex).toBe(1);
|
|
215
|
+
});
|
|
216
|
+
it('单曲:停止播放', () => {
|
|
217
|
+
const { adapter } = makeAdapter();
|
|
218
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
219
|
+
p.handleStatusClick();
|
|
220
|
+
p.endHandler();
|
|
221
|
+
expect(p.getState().isPlaying).toBe(false);
|
|
222
|
+
});
|
|
223
|
+
it('多曲末曲:ended 绕回首曲并续播(对齐 Semi 循环连播)', () => {
|
|
224
|
+
const { adapter } = makeAdapter();
|
|
225
|
+
const p = createAudioPlayer(adapter, { audioUrl: ['a.mp3', 'b.mp3'] });
|
|
226
|
+
p.handleTrackChange('next'); // → 末曲 index=1
|
|
227
|
+
expect(p.getState().currentTrackIndex).toBe(1);
|
|
228
|
+
p.endHandler(); // 末曲 ended → (1+1)%2=0 绕回首曲
|
|
229
|
+
expect(p.getState().currentTrackIndex).toBe(0);
|
|
230
|
+
// handleTrackChange 设 isPlaying=true(切曲自动播放,对齐 Semi resetAudioState)。
|
|
231
|
+
expect(p.getState().isPlaying).toBe(true);
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
describe('createAudioPlayer — errorHandler / initAudioState / subscribe', () => {
|
|
235
|
+
it('errorHandler 置 isError 并停播', () => {
|
|
236
|
+
const { adapter } = makeAdapter();
|
|
237
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
238
|
+
p.errorHandler();
|
|
239
|
+
expect(p.getState().isError).toBe(true);
|
|
240
|
+
expect(p.getState().isPlaying).toBe(false);
|
|
241
|
+
});
|
|
242
|
+
it('initAudioState 从 audio 回读时长/音量/倍速', () => {
|
|
243
|
+
const { adapter } = makeAdapter({ getDuration: () => 200, getVolume: () => 0.8 });
|
|
244
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3', autoPlay: true });
|
|
245
|
+
p.initAudioState();
|
|
246
|
+
const s = p.getState();
|
|
247
|
+
expect(s.totalTime).toBe(200);
|
|
248
|
+
expect(s.volume).toBe(80);
|
|
249
|
+
expect(s.isPlaying).toBe(true);
|
|
250
|
+
});
|
|
251
|
+
it('subscribe 收到状态更新,取消后不再收到', () => {
|
|
252
|
+
const { adapter } = makeAdapter();
|
|
253
|
+
const p = createAudioPlayer(adapter, { audioUrl: 'a.mp3' });
|
|
254
|
+
const seen = [];
|
|
255
|
+
const unsub = p.subscribe((s) => seen.push(s.isPlaying));
|
|
256
|
+
p.handleStatusClick();
|
|
257
|
+
expect(seen).toEqual([true]);
|
|
258
|
+
unsub();
|
|
259
|
+
p.handleStatusClick();
|
|
260
|
+
expect(seen).toEqual([true]);
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
describe('createAudioPlayer — setAudioUrl 重置与 index 钳制', () => {
|
|
264
|
+
it('换更短列表时 index 钳到末尾', () => {
|
|
265
|
+
const { adapter } = makeAdapter();
|
|
266
|
+
const p = createAudioPlayer(adapter, { audioUrl: ['a.mp3', 'b.mp3', 'c.mp3'] });
|
|
267
|
+
p.handleTrackChange('next');
|
|
268
|
+
p.handleTrackChange('next'); // index=2
|
|
269
|
+
p.setAudioUrl(['x.mp3']);
|
|
270
|
+
expect(p.getState().currentTrackIndex).toBe(0);
|
|
271
|
+
expect(p.isMultiTrack()).toBe(false);
|
|
272
|
+
expect(p.getCurrentTrack()).toEqual({ src: 'x.mp3' });
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
//# sourceMappingURL=audio-player.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-player.test.js","sourceRoot":"","sources":["../src/audio-player.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,SAAS,GAEV,MAAM,mBAAmB,CAAC;AAE3B,2CAA2C;AAC3C,SAAS,WAAW,CAAC,YAAyC,EAAE;IAC9D,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC5E,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAuB;QAClC,IAAI;QACJ,KAAK;QACL,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW;QACvC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;YACpB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ;QACjC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM;QAC7B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACf,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,eAAe,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY;QACzC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;YACrB,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,GAAG,SAAS;KACb,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9E,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;SAC7C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,EAAE,GAAG,EAAE,OAAO,EAAE;YAChB,EAAE,GAAG,EAAE,OAAO,EAAE;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,KAAK,GAAG;YACZ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;YAC5B,EAAE,KAAK,EAAE,QAAQ,EAAgC;YACjD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;SACjC,CAAC;QACF,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACvC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;YAC5B,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACtB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAEtC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACtB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/C,oCAAoC;QACpC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/C,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB;QAC9C,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/C,0BAA0B;QAC1B,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QAChB,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,gBAAgB;QACpC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEzC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3C,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9E,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,gBAAgB;QACpC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEvB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;QAC5B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE1C,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;QAC7B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE1C,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;QACjC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC,CAAC,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,sCAAsC;QACtC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACvB,gCAAgC;QAChC,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,iBAAiB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,KAAK,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAE5D,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/B,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7B,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACjB,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACtB,CAAC,CAAC,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe;QAC5C,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,4BAA4B;QAC5C,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,sEAAsE;QACtE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC7E,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,KAAK,EAAE,CAAC;QACR,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;QACvC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/back-top.d.ts
CHANGED
|
@@ -6,7 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
/** easeInOutCubic — smooth acceleration then deceleration, t in [0,1] → [0,1]. */
|
|
8
8
|
export declare function easeInOutCubic(t: number): number;
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* true if the button should be visible given the current scroll position.
|
|
11
|
+
* 对齐 Semi foundation:`scrollTop > visibilityHeight`(严格大于,边界处不显)。
|
|
12
|
+
*/
|
|
10
13
|
export declare function isAboveThreshold(scrollTop: number, visibilityHeight: number): boolean;
|
|
11
14
|
/**
|
|
12
15
|
* Interpolate the scroll position at elapsed `elapsed` ms of a `duration` ms
|
package/dist/back-top.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"back-top.d.ts","sourceRoot":"","sources":["../src/back-top.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED
|
|
1
|
+
{"version":3,"file":"back-top.d.ts","sourceRoot":"","sources":["../src/back-top.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAErF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIxF"}
|
package/dist/back-top.js
CHANGED
|
@@ -12,9 +12,12 @@ export function easeInOutCubic(t) {
|
|
|
12
12
|
return 1;
|
|
13
13
|
return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* true if the button should be visible given the current scroll position.
|
|
17
|
+
* 对齐 Semi foundation:`scrollTop > visibilityHeight`(严格大于,边界处不显)。
|
|
18
|
+
*/
|
|
16
19
|
export function isAboveThreshold(scrollTop, visibilityHeight) {
|
|
17
|
-
return scrollTop
|
|
20
|
+
return scrollTop > visibilityHeight;
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* Interpolate the scroll position at elapsed `elapsed` ms of a `duration` ms
|
package/dist/back-top.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"back-top.js","sourceRoot":"","sources":["../src/back-top.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"back-top.js","sourceRoot":"","sources":["../src/back-top.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,gBAAwB;IAC1E,OAAO,SAAS,GAAG,gBAAgB,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAe,EAAE,QAAgB;IAC9E,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/back-top.test.js
CHANGED
|
@@ -18,9 +18,10 @@ describe('easeInOutCubic', () => {
|
|
|
18
18
|
});
|
|
19
19
|
});
|
|
20
20
|
describe('isAboveThreshold', () => {
|
|
21
|
-
|
|
21
|
+
// 对齐 Semi foundation:`scrollTop > visibilityHeight`(严格大于,边界处不显)。
|
|
22
|
+
it('flips just past the threshold (strict >, matches Semi)', () => {
|
|
22
23
|
expect(isAboveThreshold(399, 400)).toBe(false);
|
|
23
|
-
expect(isAboveThreshold(400, 400)).toBe(
|
|
24
|
+
expect(isAboveThreshold(400, 400)).toBe(false);
|
|
24
25
|
expect(isAboveThreshold(401, 400)).toBe(true);
|
|
25
26
|
});
|
|
26
27
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"back-top.test.js","sourceRoot":"","sources":["../src/back-top.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAChD,6CAA6C;QAC7C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,2DAA2D;QAC3D,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"back-top.test.js","sourceRoot":"","sources":["../src/back-top.test.ts"],"names":[],"mappings":"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"}
|
package/dist/calendar.d.ts
CHANGED
|
@@ -1,63 +1,151 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Framework-agnostic Calendar event algorithms — aligned to Semi Design's
|
|
3
|
+
* `@douyinfe/semi-foundation/calendar/eventUtil` + `foundation`.
|
|
4
|
+
*
|
|
5
|
+
* Four view modes: day / week / month / range. Pure functions only; no DOM,
|
|
6
|
+
* no framework deps. The render layer (Calendar.svelte) supplies `children`
|
|
7
|
+
* for each event and turns the numeric positions here into inline styles.
|
|
8
|
+
*
|
|
9
|
+
* Semi event model: an EventObject carries a `key` (required, unique) and an
|
|
10
|
+
* optional `start` / `end` / `allDay`. Content is the render layer's business
|
|
11
|
+
* (Semi: `children`); this module never touches it beyond passing it through.
|
|
5
12
|
*/
|
|
6
13
|
import { isSameDay } from './date.js';
|
|
7
14
|
export type CalendarEventKey = string | number;
|
|
15
|
+
/** Semi EventObject. `children` is opaque render content (any). */
|
|
8
16
|
export interface CalendarEvent {
|
|
9
17
|
key: CalendarEventKey;
|
|
10
|
-
|
|
11
|
-
start: Date;
|
|
12
|
-
/** event end (inclusive day for multi-day; same day as start if omitted) */
|
|
18
|
+
start?: Date;
|
|
13
19
|
end?: Date;
|
|
14
|
-
title: string;
|
|
15
|
-
/** category accent color (any CSS color); render layer falls back to a token */
|
|
16
|
-
color?: string;
|
|
17
20
|
allDay?: boolean;
|
|
18
|
-
|
|
21
|
+
/** opaque render content (Semi: children); render layer owns it */
|
|
22
|
+
children?: unknown;
|
|
23
|
+
[x: string]: unknown;
|
|
19
24
|
}
|
|
20
|
-
|
|
21
|
-
export
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
export declare function addDaysLocal(d: Date, n: number): Date;
|
|
26
|
+
export declare function addHoursLocal(d: Date, n: number): Date;
|
|
27
|
+
export declare function endOfDay(d: Date): Date;
|
|
28
|
+
export declare function startOfMonth(d: Date): Date;
|
|
29
|
+
export declare function endOfMonth(d: Date): Date;
|
|
30
|
+
export declare function startOfWeek(d: Date, weekStartsOn?: WeekStartsOn): Date;
|
|
31
|
+
export declare function endOfWeek(d: Date, weekStartsOn?: WeekStartsOn): Date;
|
|
32
|
+
export declare function isSameMonth(a: Date, b: Date): boolean;
|
|
33
|
+
export declare function isSameWeek(a: Date, b: Date, weekStartsOn?: WeekStartsOn): boolean;
|
|
34
|
+
/** whole calendar days b - a (positive when b is later) */
|
|
35
|
+
export declare function differenceInCalendarDays(b: Date, a: Date): number;
|
|
36
|
+
export declare function isBefore(a: Date, b: Date): boolean;
|
|
37
|
+
export declare function isAfter(a: Date, b: Date): boolean;
|
|
38
|
+
export declare function isWeekend(d: Date): boolean;
|
|
39
|
+
/** ISO-ish week-of-month index (1-based) for a date, given weekStartsOn */
|
|
40
|
+
export declare function getWeekOfMonth(date: Date, weekStartsOn?: WeekStartsOn): number;
|
|
41
|
+
/** number of week rows the month spans, given weekStartsOn */
|
|
42
|
+
export declare function getWeeksInMonth(date: Date, weekStartsOn?: WeekStartsOn): number;
|
|
43
|
+
export type WeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
44
|
+
export declare const round: (value: number) => number;
|
|
45
|
+
/** fraction of the day [0,1) at which `value`'s clock time falls (Semi getPos) */
|
|
46
|
+
export declare function getPos(value: Date): number;
|
|
47
|
+
interface DatedEvent extends CalendarEvent {
|
|
48
|
+
/** the calendar day this (possibly split) copy belongs to */
|
|
49
|
+
date: Date;
|
|
28
50
|
}
|
|
29
|
-
/** true if `date` falls within [start, end] (inclusive, day granularity). */
|
|
30
|
-
export declare function eventCoversDay(event: CalendarEvent, date: Date): boolean;
|
|
31
51
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
52
|
+
* Normalize a single event: if it has no start, default start = end - 1h (or
|
|
53
|
+
* start-of-day if that would cross a day boundary); symmetric for missing end.
|
|
54
|
+
* (Semi amendEvent)
|
|
34
55
|
*/
|
|
35
|
-
export declare function
|
|
56
|
+
export declare function amendEvent(event: CalendarEvent): CalendarEvent | undefined;
|
|
57
|
+
/** split a spanned all-day event into one copy per covered day (Semi parseAllDayEvent) */
|
|
58
|
+
export declare function parseAllDayEvent(event: CalendarEvent, allDay?: boolean, currDate?: Date): DatedEvent[];
|
|
36
59
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
60
|
+
* Split an event into per-day copies (Semi parseEvent). Same-day timed events
|
|
61
|
+
* stay whole; timed events spanning < 24h split into a head (to end-of-day) and
|
|
62
|
+
* a tail (start-of-next-day); longer/all-day span into daily all-day copies.
|
|
39
63
|
*/
|
|
40
|
-
export declare function
|
|
41
|
-
/**
|
|
42
|
-
export declare function
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
64
|
+
export declare function parseEvent(event: CalendarEvent): DatedEvent[];
|
|
65
|
+
/** split all events into all-day vs timed buckets (Semi _parseEvents) */
|
|
66
|
+
export declare function parseEvents(events: readonly CalendarEvent[]): {
|
|
67
|
+
allDay: DatedEvent[];
|
|
68
|
+
day: DatedEvent[];
|
|
69
|
+
};
|
|
70
|
+
/** group dated events into a Map keyed by start-of-day string (Semi convertEventsArrToMap) */
|
|
71
|
+
export declare function convertEventsArrToMap(arr: readonly DatedEvent[], key: 'start' | 'date', normalize: ((v: Date) => Date) | null): Map<string, DatedEvent[]>;
|
|
72
|
+
/** a timed event positioned on a single day's [0,1] vertical axis */
|
|
73
|
+
export interface PositionedDayEvent {
|
|
74
|
+
key: CalendarEventKey;
|
|
75
|
+
children: unknown;
|
|
76
|
+
/** fraction [0,1] where the event starts on the day */
|
|
77
|
+
startPos: number;
|
|
78
|
+
/** fraction [0,1] where the event ends on the day */
|
|
79
|
+
endPos: number;
|
|
80
|
+
/** horizontal offset for side-by-side overlaps, e.g. "50%" or 0 */
|
|
81
|
+
left: string | number;
|
|
82
|
+
allDay: boolean;
|
|
83
|
+
}
|
|
84
|
+
/** compute a timed event's startPos/endPos on its day (Semi renderDailyEvent) */
|
|
85
|
+
export declare function renderDailyEvent(event: DatedEvent): {
|
|
86
|
+
startPos: number;
|
|
87
|
+
endPos: number;
|
|
88
|
+
children: unknown;
|
|
89
|
+
allDay: boolean;
|
|
90
|
+
key: CalendarEventKey;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Timed events for one calendar day, positioned and offset for overlaps
|
|
94
|
+
* (Semi getParseDailyEvents). Events sharing an identical [startPos,endPos]
|
|
95
|
+
* are laid out side-by-side via the `left` percentage.
|
|
96
|
+
*/
|
|
97
|
+
export declare function getDailyEvents(events: readonly DatedEvent[], date: Date): {
|
|
98
|
+
day: PositionedDayEvent[];
|
|
99
|
+
allDay: DatedEvent[];
|
|
100
|
+
};
|
|
101
|
+
/** a spanned all-day event positioned across the week/range top row */
|
|
102
|
+
export interface PositionedSpanEvent {
|
|
103
|
+
key: CalendarEventKey;
|
|
104
|
+
children: unknown;
|
|
105
|
+
/** fraction [0,1] of the row width where the bar starts */
|
|
106
|
+
leftPos: number;
|
|
107
|
+
/** fraction (0,1] of the row width the bar occupies */
|
|
108
|
+
width: number;
|
|
109
|
+
/** vertical stacking row index (0-based) */
|
|
110
|
+
topInd: number;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Lay out all-day/spanned events across a date range (week or multi-day view).
|
|
114
|
+
* `rangeStart` inclusive, `rangeEnd` exclusive (Semi's left-closed-right-open).
|
|
115
|
+
*/
|
|
116
|
+
export declare function parseSpanEvents(allDayEvents: readonly DatedEvent[], rangeStart: Date, rangeEnd: Date): PositionedSpanEvent[];
|
|
117
|
+
/** week-scoped span layout (Semi parseWeeklyAllDayEvents) */
|
|
118
|
+
export declare function parseWeekSpanEvents(allDayEvents: readonly DatedEvent[], weekStart: Date, weekStartsOn?: WeekStartsOn): PositionedSpanEvent[];
|
|
119
|
+
/** the all-day bucket (start-of-day keyed) for a set of events, for span layout */
|
|
120
|
+
export declare function allDayEventMap(events: readonly CalendarEvent[]): DatedEvent[];
|
|
121
|
+
/** number of stacking rows a span layout needs (Semi calcRowHeight) */
|
|
122
|
+
export declare function calcRowHeight(events: readonly PositionedSpanEvent[]): number;
|
|
123
|
+
/** one date cell descriptor for month/week header rendering */
|
|
124
|
+
export interface DateObj {
|
|
125
|
+
ind: number;
|
|
126
|
+
date: Date;
|
|
127
|
+
dayString: string;
|
|
128
|
+
weekday: string;
|
|
129
|
+
isToday: boolean;
|
|
130
|
+
isWeekend: boolean;
|
|
131
|
+
isSameMonth?: boolean;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Month event layout: for each week row (0-based), the events laid out as a
|
|
135
|
+
* grid (day[]) plus a flat display list of positioned span bars, so the render
|
|
136
|
+
* layer can cap to N per cell and show "+remaining". (Semi getParseMonthlyEvents)
|
|
137
|
+
*/
|
|
138
|
+
export interface MonthWeekEvents {
|
|
139
|
+
/** display[col] → span events stacked in this week, by topInd */
|
|
140
|
+
display: PositionedSpanEvent[];
|
|
141
|
+
/** day[col][topInd] → event occupying that cell/row (for +N counting) */
|
|
142
|
+
day: (PositionedSpanEvent | DatedEvent | undefined)[][];
|
|
51
143
|
}
|
|
52
144
|
/**
|
|
53
|
-
*
|
|
54
|
-
* day
|
|
55
|
-
*
|
|
56
|
-
* is clamped into [fromHour, toHour]. Everything else covering the day (all-day
|
|
57
|
-
* flagged, or multi-day events whose start falls on another day) goes to
|
|
58
|
-
* `allDay`. Pure: no DOM, no mutation of inputs.
|
|
145
|
+
* Lay out a month's events by week row (Semi getParseMonthlyEvents). Returns a
|
|
146
|
+
* map week-index → { day, display }. The render layer counts how many events a
|
|
147
|
+
* given day cell holds beyond `itemLimit` for the "+N" affordance.
|
|
59
148
|
*/
|
|
60
|
-
export declare function
|
|
61
|
-
/** re-export for convenience so the render layer imports calendar bits from one place */
|
|
149
|
+
export declare function getMonthEvents(events: readonly CalendarEvent[], displayValue: Date, weekStartsOn?: WeekStartsOn): Record<number, MonthWeekEvents>;
|
|
62
150
|
export { isSameDay };
|
|
63
151
|
//# sourceMappingURL=calendar.d.ts.map
|
package/dist/calendar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"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"}
|