@applemusic-like-lyrics/core 0.5.0 → 0.5.2
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/amll-core.cjs +458 -270
- package/dist/amll-core.cjs.map +1 -1
- package/dist/amll-core.d.cts +140 -81
- package/dist/amll-core.d.mts +140 -81
- package/dist/amll-core.mjs +458 -270
- package/dist/amll-core.mjs.map +1 -1
- package/dist/style.css +148 -80
- package/package.json +4 -4
package/dist/amll-core.d.cts
CHANGED
|
@@ -368,6 +368,58 @@ declare class Spring {
|
|
|
368
368
|
getCurrentPosition(): number;
|
|
369
369
|
}
|
|
370
370
|
//#endregion
|
|
371
|
+
//#region src/lyric-player/dom/interlude-dots.d.ts
|
|
372
|
+
declare class InterludeDots implements HasElement, Disposable {
|
|
373
|
+
private element;
|
|
374
|
+
private dot0;
|
|
375
|
+
private dot1;
|
|
376
|
+
private dot2;
|
|
377
|
+
private left;
|
|
378
|
+
private top;
|
|
379
|
+
private playing;
|
|
380
|
+
private lastStyle;
|
|
381
|
+
private currentInterlude?;
|
|
382
|
+
private currentTime;
|
|
383
|
+
private targetBreatheDuration;
|
|
384
|
+
constructor();
|
|
385
|
+
getElement(): HTMLElement;
|
|
386
|
+
setTransform(left?: number, top?: number): void;
|
|
387
|
+
setInterlude(interlude?: [number, number]): void;
|
|
388
|
+
pause(): void;
|
|
389
|
+
resume(): void;
|
|
390
|
+
update(delta?: number): void;
|
|
391
|
+
dispose(): void;
|
|
392
|
+
}
|
|
393
|
+
//#endregion
|
|
394
|
+
//#region src/lyric-player/base/bottom-line.d.ts
|
|
395
|
+
interface LineTransforms$1 {
|
|
396
|
+
posX: Spring;
|
|
397
|
+
posY: Spring;
|
|
398
|
+
}
|
|
399
|
+
declare class BottomLineEl implements HasElement, Disposable {
|
|
400
|
+
private lyricPlayer;
|
|
401
|
+
private element;
|
|
402
|
+
private left;
|
|
403
|
+
private top;
|
|
404
|
+
private delay;
|
|
405
|
+
lineSize: [number, number];
|
|
406
|
+
readonly lineTransforms: LineTransforms$1;
|
|
407
|
+
private isFocused;
|
|
408
|
+
private blur;
|
|
409
|
+
constructor(lyricPlayer: LyricPlayerBase);
|
|
410
|
+
measureSize(): Promise<[number, number]>;
|
|
411
|
+
private lastStyle;
|
|
412
|
+
show(): void;
|
|
413
|
+
hide(): void;
|
|
414
|
+
setFocused(focused: boolean): void;
|
|
415
|
+
private rebuildStyle;
|
|
416
|
+
getElement(): HTMLElement;
|
|
417
|
+
setTransform(left?: number, top?: number, blur?: number, force?: boolean, delay?: number): void;
|
|
418
|
+
update(delta?: number): void;
|
|
419
|
+
get isInSight(): boolean;
|
|
420
|
+
dispose(): void;
|
|
421
|
+
}
|
|
422
|
+
//#endregion
|
|
371
423
|
//#region src/lyric-player/base/consts.d.ts
|
|
372
424
|
type ValueOf<T extends Record<PropertyKey, unknown>> = T[keyof T];
|
|
373
425
|
/** 歌词中不雅用语的掩码模式 */
|
|
@@ -401,8 +453,7 @@ declare const LayoutAlignAnchor: {
|
|
|
401
453
|
type LayoutAlignAnchor = ValueOf<typeof LayoutAlignAnchor>;
|
|
402
454
|
//#endregion
|
|
403
455
|
//#region src/lyric-player/base/line.d.ts
|
|
404
|
-
interface LineTransforms
|
|
405
|
-
posY: Spring;
|
|
456
|
+
interface LineTransforms {
|
|
406
457
|
scale: Spring;
|
|
407
458
|
}
|
|
408
459
|
/**
|
|
@@ -415,7 +466,7 @@ declare abstract class LyricLineBase extends EventTarget implements Disposable {
|
|
|
415
466
|
protected blur: number;
|
|
416
467
|
protected opacity: number;
|
|
417
468
|
protected delay: number;
|
|
418
|
-
readonly lineTransforms: LineTransforms
|
|
469
|
+
readonly lineTransforms: LineTransforms;
|
|
419
470
|
/**
|
|
420
471
|
* 用于 CJK 词语边界检测的分词器
|
|
421
472
|
*/
|
|
@@ -430,8 +481,8 @@ declare abstract class LyricLineBase extends EventTarget implements Disposable {
|
|
|
430
481
|
abstract disable(): void;
|
|
431
482
|
abstract resume(): void;
|
|
432
483
|
abstract pause(): void;
|
|
433
|
-
onLineSizeChange(
|
|
434
|
-
setTransform(
|
|
484
|
+
abstract onLineSizeChange(size: [number, number]): void;
|
|
485
|
+
setTransform(scale?: number, opacity?: number, blur?: number, _force?: boolean, delay?: number, _mode?: LyricLineRenderMode): void;
|
|
435
486
|
rebuildElement(): void;
|
|
436
487
|
/**
|
|
437
488
|
* 判定歌词是否可以应用强调辉光效果
|
|
@@ -448,55 +499,37 @@ declare abstract class LyricLineBase extends EventTarget implements Disposable {
|
|
|
448
499
|
dispose(): void;
|
|
449
500
|
}
|
|
450
501
|
//#endregion
|
|
451
|
-
//#region src/lyric-player/
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
private left;
|
|
458
|
-
private top;
|
|
459
|
-
private playing;
|
|
460
|
-
private lastStyle;
|
|
461
|
-
private currentInterlude?;
|
|
462
|
-
private currentTime;
|
|
463
|
-
private targetBreatheDuration;
|
|
464
|
-
constructor();
|
|
465
|
-
getElement(): HTMLElement;
|
|
466
|
-
setTransform(left?: number, top?: number): void;
|
|
467
|
-
setInterlude(interlude?: [number, number]): void;
|
|
468
|
-
pause(): void;
|
|
469
|
-
resume(): void;
|
|
470
|
-
update(delta?: number): void;
|
|
471
|
-
dispose(): void;
|
|
502
|
+
//#region src/lyric-player/base/group.d.ts
|
|
503
|
+
interface LyricPlayerFlags {
|
|
504
|
+
getEnableSpring(): boolean;
|
|
505
|
+
getEnableScale(): boolean;
|
|
506
|
+
getIsPlaying(): boolean;
|
|
507
|
+
getAlwaysPostpositionBackground(): boolean;
|
|
472
508
|
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
509
|
+
declare abstract class LyricLineGroupBase<T extends LyricLineBase = LyricLineBase> implements Disposable {
|
|
510
|
+
mainLine: T;
|
|
511
|
+
bgLine?: T | undefined;
|
|
512
|
+
protected abstract readonly lyricPlayer: LyricPlayerFlags;
|
|
477
513
|
posY: Spring;
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
setTransform(left?: number, top?: number, blur?: number, force?: boolean, delay?: number): void;
|
|
498
|
-
update(delta?: number): void;
|
|
499
|
-
get isInSight(): boolean;
|
|
514
|
+
bgSlideY: Spring;
|
|
515
|
+
top: number;
|
|
516
|
+
delay: number;
|
|
517
|
+
isActive: boolean;
|
|
518
|
+
opacity: number;
|
|
519
|
+
blur: number;
|
|
520
|
+
isBgFirst: boolean;
|
|
521
|
+
constructor(mainLine: T, bgLine?: T | undefined);
|
|
522
|
+
get startTime(): number;
|
|
523
|
+
get endTime(): number;
|
|
524
|
+
onLineSizeChange(size: [number, number]): void;
|
|
525
|
+
setTransform(top: number, force: boolean, delay: number, isActive: boolean, opacity: number, blur: number): void;
|
|
526
|
+
private setLineTransformations;
|
|
527
|
+
protected abstract renderStyles(): void;
|
|
528
|
+
abstract get isInSight(): boolean;
|
|
529
|
+
update(delta: number): void;
|
|
530
|
+
rebuildAllLines(): void;
|
|
531
|
+
enable(time?: number, shouldPlay?: boolean): void;
|
|
532
|
+
disable(): void;
|
|
500
533
|
dispose(): void;
|
|
501
534
|
}
|
|
502
535
|
//#endregion
|
|
@@ -551,18 +584,18 @@ interface PlayerScrollState {
|
|
|
551
584
|
/**
|
|
552
585
|
* 播放时间线状态。
|
|
553
586
|
*
|
|
554
|
-
*
|
|
587
|
+
* 描述播放器在时间轴上的当前位置,当前处于激活状态的歌词组信息
|
|
555
588
|
*/
|
|
556
589
|
interface PlayerTimelineState {
|
|
557
590
|
/** 当前播放时间,单位为毫秒 */
|
|
558
591
|
currentTime: number;
|
|
559
592
|
/** 上一次提交到时间线状态的播放时间,单位为毫秒 */
|
|
560
593
|
lastCurrentTime: number;
|
|
561
|
-
/** 热行:当前时间 {@link currentTime}
|
|
562
|
-
|
|
563
|
-
/**
|
|
564
|
-
|
|
565
|
-
/**
|
|
594
|
+
/** 热行:当前时间 {@link currentTime} 正在命中的组(含主行+可能的背景行) */
|
|
595
|
+
hotGroups: Set<number>;
|
|
596
|
+
/** 缓冲组:UI 上还保持激活表现的组索引,通常包含热组,和刚结束仍在过渡中的组 */
|
|
597
|
+
bufferedGroups: Set<number>;
|
|
598
|
+
/** 当前应滚动对齐到的歌词组索引 */
|
|
566
599
|
scrollToIndex: number;
|
|
567
600
|
/** 是否正在拖拽进度条。若是,更新时丢弃缓冲行,并根据当前时间直接计算热行 */
|
|
568
601
|
isSeeking: boolean;
|
|
@@ -583,9 +616,7 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
583
616
|
/** 播放时间线状态 */
|
|
584
617
|
protected timelineState: PlayerTimelineState;
|
|
585
618
|
/** @internal */
|
|
586
|
-
|
|
587
|
-
/** @internal */
|
|
588
|
-
lyricLineElementMap: WeakMap<Element, LyricLineBase>;
|
|
619
|
+
lyricGroupElementMap: WeakMap<Element, LyricLineGroupBase>;
|
|
589
620
|
protected currentLyricLines: LyricLine[];
|
|
590
621
|
protected processedLines: LyricLine[];
|
|
591
622
|
protected lyricLinesIndexes: WeakMap<LyricLineBase, number>;
|
|
@@ -601,10 +632,13 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
601
632
|
protected maskObsceneWordChar: string;
|
|
602
633
|
protected hidePassedLines: boolean;
|
|
603
634
|
protected scrollState: PlayerScrollState;
|
|
604
|
-
|
|
635
|
+
currentLyricGroups: LyricLineGroupBase[];
|
|
636
|
+
lyricGroupSize: WeakMap<LyricLineGroupBase, [number, number]>;
|
|
605
637
|
readonly size: [number, number];
|
|
606
638
|
protected isPageVisible: boolean;
|
|
607
639
|
protected optimizeOptions: OptimizeLyricOptions;
|
|
640
|
+
/** 是否强制让背景人声行始终后置(即始终在主歌词下方显示,不前置背景人声) */
|
|
641
|
+
protected alwaysPostpositionBackground: boolean;
|
|
608
642
|
protected posXSpringParams: Partial<SpringParams>;
|
|
609
643
|
protected posYSpringParams: Partial<SpringParams>;
|
|
610
644
|
protected scaleSpringParams: Partial<SpringParams>;
|
|
@@ -823,6 +857,16 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
823
857
|
* @returns 当前播放位置
|
|
824
858
|
*/
|
|
825
859
|
getCurrentTime(): number;
|
|
860
|
+
/**
|
|
861
|
+
* 设置是否让背景人声行始终后置显示
|
|
862
|
+
*
|
|
863
|
+
* 默认情况下,如果背景歌词开始时间早于主歌词,会在主歌词上方展示;
|
|
864
|
+
* 如果设置为 `true`,则无论时间顺序如何,背景歌词都会始终在主歌词下方展示
|
|
865
|
+
* @param enable 是否启用始终后置
|
|
866
|
+
*/
|
|
867
|
+
setAlwaysPostpositionBackground(enable: boolean): void;
|
|
868
|
+
/** 获取当前是否设置了让背景人声行始终后置显示 */
|
|
869
|
+
getAlwaysPostpositionBackground(): boolean;
|
|
826
870
|
getElement(): HTMLElement;
|
|
827
871
|
dispose(): void;
|
|
828
872
|
}
|
|
@@ -838,13 +882,6 @@ interface RealWord extends LyricWord {
|
|
|
838
882
|
padding: number;
|
|
839
883
|
shouldEmphasize: boolean;
|
|
840
884
|
}
|
|
841
|
-
declare class RawLyricLineMouseEvent extends MouseEvent {
|
|
842
|
-
readonly line: LyricLineBase;
|
|
843
|
-
constructor(line: LyricLineBase, event: MouseEvent);
|
|
844
|
-
}
|
|
845
|
-
type MouseEventMap = { [evt in keyof HTMLElementEventMap]: HTMLElementEventMap[evt] extends MouseEvent ? evt : never };
|
|
846
|
-
type MouseEventTypes = MouseEventMap[keyof MouseEventMap];
|
|
847
|
-
type MouseEventListener = (this: LyricLineEl, ev: RawLyricLineMouseEvent) => void;
|
|
848
885
|
declare class LyricLineEl extends LyricLineBase {
|
|
849
886
|
private lyricPlayer;
|
|
850
887
|
private lyricLine;
|
|
@@ -862,10 +899,6 @@ declare class LyricLineEl extends LyricLineBase {
|
|
|
862
899
|
*/
|
|
863
900
|
private balancer?;
|
|
864
901
|
constructor(lyricPlayer: DomLyricPlayer, lyricLine?: LyricLine);
|
|
865
|
-
private listenersMap;
|
|
866
|
-
private readonly onMouseEvent;
|
|
867
|
-
addMouseEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | AddEventListenerOptions | undefined): void;
|
|
868
|
-
removeMouseEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | EventListenerOptions | undefined): void;
|
|
869
902
|
areWordsOnSameLine(word1: RealWord, word2: RealWord): boolean;
|
|
870
903
|
private isEnabled;
|
|
871
904
|
enable(maskAnimationTime?: number, shouldPlay?: boolean): Promise<void>;
|
|
@@ -875,10 +908,8 @@ declare class LyricLineEl extends LyricLineBase {
|
|
|
875
908
|
pause(): Promise<void>;
|
|
876
909
|
setMaskAnimationState(maskAnimationTime?: number): void;
|
|
877
910
|
getLine(): LyricLine;
|
|
878
|
-
private _prevParentEl;
|
|
879
911
|
private lastStyle;
|
|
880
912
|
show(): void;
|
|
881
|
-
hide(): void;
|
|
882
913
|
private rebuildStyle;
|
|
883
914
|
override rebuildElement(): void;
|
|
884
915
|
/** 设置翻译与音译行文本 */
|
|
@@ -897,17 +928,34 @@ declare class LyricLineEl extends LyricLineBase {
|
|
|
897
928
|
getElement(): HTMLElement;
|
|
898
929
|
private updateMaskAlphaTargets;
|
|
899
930
|
private applyAlphaToDom;
|
|
900
|
-
override setTransform(
|
|
931
|
+
override setTransform(scale?: number, opacity?: number, blur?: number, force?: boolean, delay?: number, mode?: LyricLineRenderMode): void;
|
|
901
932
|
update(delta?: number): void;
|
|
933
|
+
/** @internal */
|
|
902
934
|
_getDebugTargetPos(): string;
|
|
903
|
-
|
|
935
|
+
teardownContent(): void;
|
|
904
936
|
private disposeElements;
|
|
905
937
|
override dispose(): void;
|
|
906
938
|
}
|
|
907
939
|
//#endregion
|
|
940
|
+
//#region src/lyric-player/dom/lyric-group.d.ts
|
|
941
|
+
declare class LyricLineGroup extends LyricLineGroupBase<LyricLineEl> {
|
|
942
|
+
lyricPlayer: DomLyricPlayer;
|
|
943
|
+
element: HTMLElement;
|
|
944
|
+
bgWrapper?: HTMLElement;
|
|
945
|
+
private lastIsActive?;
|
|
946
|
+
constructor(lyricPlayer: DomLyricPlayer, mainLine: LyricLineEl);
|
|
947
|
+
get isInSight(): boolean;
|
|
948
|
+
show(): void;
|
|
949
|
+
hide(): void;
|
|
950
|
+
override update(delta: number): void;
|
|
951
|
+
addBgLine(bgLine: LyricLineEl): void;
|
|
952
|
+
protected renderStyles(): void;
|
|
953
|
+
override dispose(): void;
|
|
954
|
+
}
|
|
955
|
+
//#endregion
|
|
908
956
|
//#region src/lyric-player/dom/index.d.ts
|
|
909
957
|
/**
|
|
910
|
-
*
|
|
958
|
+
* 歌词行鼠标相关事件,可以获取到歌词行的索引、主歌词行以及背景歌词行(如果有)元素
|
|
911
959
|
*/
|
|
912
960
|
declare class LyricLineMouseEvent extends MouseEvent {
|
|
913
961
|
/**
|
|
@@ -918,7 +966,17 @@ declare class LyricLineMouseEvent extends MouseEvent {
|
|
|
918
966
|
* 歌词行元素
|
|
919
967
|
*/
|
|
920
968
|
readonly line: LyricLineBase;
|
|
921
|
-
|
|
969
|
+
/**
|
|
970
|
+
* 背景人声歌词行元素 (如果存在)
|
|
971
|
+
*/
|
|
972
|
+
readonly bgLine: LyricLineBase | undefined;
|
|
973
|
+
/**
|
|
974
|
+
* 自定义标志位,用于记录外部是否调用了 `stopPropagation`
|
|
975
|
+
*/
|
|
976
|
+
isPropagationStopped: boolean;
|
|
977
|
+
constructor(lineIndex: number, line: LyricLineBase, bgLine: LyricLineBase | undefined, event: MouseEvent);
|
|
978
|
+
override stopPropagation(): void;
|
|
979
|
+
override stopImmediatePropagation(): void;
|
|
922
980
|
}
|
|
923
981
|
type LyricLineMouseEventListener = (evt: LyricLineMouseEvent) => void;
|
|
924
982
|
/**
|
|
@@ -927,12 +985,13 @@ type LyricLineMouseEventListener = (evt: LyricLineMouseEvent) => void;
|
|
|
927
985
|
* 尽可能贴切 Apple Music for iPad 的歌词效果设计,且做了力所能及的优化措施
|
|
928
986
|
*/
|
|
929
987
|
declare class DomLyricPlayer extends LyricPlayerBase {
|
|
930
|
-
|
|
988
|
+
private abortController;
|
|
989
|
+
override currentLyricGroups: LyricLineGroup[];
|
|
931
990
|
override onResize(): void;
|
|
932
991
|
readonly supportPlusLighter: boolean;
|
|
933
992
|
readonly supportMaskImage: boolean;
|
|
934
993
|
readonly innerSize: [number, number];
|
|
935
|
-
private readonly
|
|
994
|
+
private readonly onMouseEventHandler;
|
|
936
995
|
/**
|
|
937
996
|
* 是否为非逐词歌词
|
|
938
997
|
* @internal
|