@applemusic-like-lyrics/vue 0.1.0 → 0.1.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.
@@ -0,0 +1,16 @@
1
+ import { AbstractBaseRenderer } from "@applemusic-like-lyrics/core";
2
+ import type { BackgroundRenderProps } from ".";
3
+ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<BackgroundRenderProps>, {
4
+ bgRender?: import("vue").Ref<AbstractBaseRenderer | undefined> | undefined;
5
+ wrapperEl: import("vue").Ref<HTMLDivElement | undefined>;
6
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<BackgroundRenderProps>>>, {}, {}>;
7
+ export default _default;
8
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
9
+ type __VLS_TypePropsToRuntimeProps<T> = {
10
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
11
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
12
+ } : {
13
+ type: import('vue').PropType<T[K]>;
14
+ required: true;
15
+ };
16
+ };
@@ -0,0 +1,22 @@
1
+ import { LyricPlayer, type LyricLineMouseEvent } from "@applemusic-like-lyrics/core";
2
+ import type { LyricPlayerProps } from ".";
3
+ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<LyricPlayerProps>, {
4
+ lyricPlayer: import("vue").Ref<LyricPlayer | undefined>;
5
+ wrapperEl: import("vue").Ref<HTMLDivElement | undefined>;
6
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
7
+ "line-click": (line: LyricLineMouseEvent) => void;
8
+ "line-contextmenu": (line: LyricLineMouseEvent) => void;
9
+ }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<LyricPlayerProps>>> & {
10
+ "onLine-click"?: ((line: LyricLineMouseEvent) => any) | undefined;
11
+ "onLine-contextmenu"?: ((line: LyricLineMouseEvent) => any) | undefined;
12
+ }, {}, {}>;
13
+ export default _default;
14
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
15
+ type __VLS_TypePropsToRuntimeProps<T> = {
16
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
17
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
18
+ } : {
19
+ type: import('vue').PropType<T[K]>;
20
+ required: true;
21
+ };
22
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("vue"),d=require("@applemusic-like-lyrics/core"),E=n.defineComponent({inheritAttrs:!1,__name:"LyricPlayer",props:{disabled:{type:Boolean},playing:{type:Boolean},alignAnchor:{},alignPosition:{},enableSpring:{type:Boolean},enableBlur:{type:Boolean},enableScale:{type:Boolean},hidePassedLines:{type:Boolean},lyricLines:{},currentTime:{},linePosXSpringParams:{},linePosYSpringParams:{},lineScaleSpringParams:{},bottomLine:{}},emits:["line-click","line-contextmenu"],setup(u,{expose:f,emit:i}){const l=u,r=i,t=n.ref(),a=n.ref(),v=e=>r("line-click",e),m=e=>r("line-contextmenu",e);return n.onMounted(()=>{t.value&&(a.value=new d.LyricPlayer,t.value.appendChild(a.value.getElement()),a.value.addEventListener("line-click",v),a.value.addEventListener("line-contextmenu",m))}),n.onUnmounted(()=>{a.value&&(a.value.removeEventListener("line-click",v),a.value.removeEventListener("line-contextmenu",m),a.value.dispose())}),n.watchEffect(e=>{if(!l.disabled){let o=!1,s=-1;const c=p=>{var g;o||(s===-1&&(s=p),(g=a.value)==null||g.update(p-s),s=p,requestAnimationFrame(c))};requestAnimationFrame(c),e(()=>{o=!0})}}),n.watchEffect(()=>{var e,o,s;l.playing!==void 0?l.playing?(e=a.value)==null||e.resume():(o=a.value)==null||o.pause():(s=a.value)==null||s.resume()}),n.watchEffect(()=>{var e;l.alignAnchor!==void 0&&((e=a.value)==null||e.setAlignAnchor(l.alignAnchor))}),n.watchEffect(()=>{var e;l.hidePassedLines!==void 0&&((e=a.value)==null||e.setHidePassedLines(l.hidePassedLines))}),n.watchEffect(()=>{var e;l.alignPosition!==void 0&&((e=a.value)==null||e.setAlignPosition(l.alignPosition))}),n.watchEffect(()=>{var e,o;l.enableSpring!==void 0?(e=a.value)==null||e.setEnableSpring(l.enableSpring):(o=a.value)==null||o.setEnableSpring(!0)}),n.watchEffect(()=>{var e,o;l.enableBlur!==void 0?(e=a.value)==null||e.setEnableBlur(l.enableBlur):(o=a.value)==null||o.setEnableBlur(!0)}),n.watchEffect(()=>{var e,o;l.enableScale!==void 0?(e=a.value)==null||e.setEnableScale(l.enableScale):(o=a.value)==null||o.setEnableScale(!0)}),n.watchEffect(()=>{var e;l.lyricLines!==void 0&&((e=a.value)==null||e.setLyricLines(l.lyricLines))}),n.watchEffect(()=>{var e;l.currentTime!==void 0&&((e=a.value)==null||e.setCurrentTime(l.currentTime))}),n.watchEffect(()=>{var e;l.linePosXSpringParams!==void 0&&((e=a.value)==null||e.setLinePosXSpringParams(l.linePosXSpringParams))}),n.watchEffect(()=>{var e;l.linePosYSpringParams!==void 0&&((e=a.value)==null||e.setLinePosYSpringParams(l.linePosYSpringParams))}),n.watchEffect(()=>{var e;l.lineScaleSpringParams!==void 0&&((e=a.value)==null||e.setLineScaleSpringParams(l.lineScaleSpringParams))}),f({lyricPlayer:a,wrapperEl:t}),(e,o)=>{var s,c;return n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",n.mergeProps({ref_key:"wrapperRef",ref:t},e.$attrs),null,16),(s=a.value)!=null&&s.getBottomLineElement()&&l.bottomLine?(n.openBlock(),n.createBlock(n.Teleport,{key:0,to:(c=a.value)==null?void 0:c.getBottomLineElement()},null,8,["to"])):n.createCommentVNode("",!0)],64)}}}),y=n.defineComponent({__name:"BackgroundRender",props:{album:{},albumIsVideo:{type:Boolean},fps:{},playing:{type:Boolean},flowSpeed:{},hasLyric:{type:Boolean},lowFreqVolume:{},renderScale:{},renderer:{type:Function}},setup(u,{expose:f}){const i=u,l=n.ref(),r=n.ref();return n.onMounted(()=>{if(l.value){r.value=d.BackgroundRender.new(i.renderer??d.EplorRenderer);const t=r.value.getElement();t.style.width="100%",t.style.height="100%",l.value.appendChild(t)}}),n.onUnmounted(()=>{r.value&&r.value.dispose()}),n.watchEffect(()=>{var t;i.album&&((t=r.value)==null||t.setAlbum(i.album,i.albumIsVideo))}),n.watchEffect(()=>{var t;i.fps&&((t=r.value)==null||t.setFPS(i.fps))}),n.watchEffect(()=>{var t,a;i.playing?(t=r.value)==null||t.pause():(a=r.value)==null||a.resume()}),n.watchEffect(()=>{var t;i.flowSpeed&&((t=r.value)==null||t.setFlowSpeed(i.flowSpeed))}),n.watchEffect(()=>{var t;i.renderScale&&((t=r.value)==null||t.setRenderScale(i.renderScale))}),n.watchEffect(()=>{var t;i.lowFreqVolume&&((t=r.value)==null||t.setLowFreqVolume(i.lowFreqVolume))}),n.watchEffect(()=>{var t;i.hasLyric!==void 0&&((t=r.value)==null||t.setHasLyric(i.hasLyric??!0))}),f({bgRender:r,wrapperEl:l}),(t,a)=>(n.openBlock(),n.createElementBlock("div",{ref_key:"wrapperRef",ref:l},null,512))}});exports.BackgroundRender=y;exports.LyricPlayer=E;
2
+ //# sourceMappingURL=amll-vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amll-vue.cjs","sources":["../src/LyricPlayer.vue","../src/BackgroundRender.vue"],"sourcesContent":["<template>\n <div ref=\"wrapperRef\" v-bind=\"$attrs\"></div>\n <Teleport v-if=\"playerRef?.getBottomLineElement() && props.bottomLine\" :to=\"playerRef?.getBottomLineElement()\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { LyricPlayer, type LyricLineMouseEvent } from \"@applemusic-like-lyrics/core\";\nimport { onMounted, onUnmounted, ref, watchEffect } from \"vue\";\nimport type { LyricPlayerProps, LyricPlayerEmits, LyricPlayerRef } from \".\";\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = defineProps<LyricPlayerProps>();\nconst emits = defineEmits<LyricPlayerEmits>();\nconst wrapperRef = ref<HTMLDivElement>();\nconst playerRef = ref<LyricPlayer>();\n\nconst lineClickHandler = (e: Event) =>\n emits(\"line-click\", e as LyricLineMouseEvent);\nconst lineContextMenuHandler = (e: Event) =>\n emits(\"line-contextmenu\", e as LyricLineMouseEvent);\n\nonMounted(() => {\n if (wrapperRef.value) {\n playerRef.value = new LyricPlayer();\n wrapperRef.value.appendChild(playerRef.value.getElement());\n playerRef.value.addEventListener(\"line-click\", lineClickHandler);\n playerRef.value.addEventListener(\"line-contextmenu\", lineContextMenuHandler);\n }\n});\n\nonUnmounted(() => {\n if (playerRef.value) {\n playerRef.value.removeEventListener(\"line-click\", lineClickHandler);\n playerRef.value.removeEventListener(\"line-contextmenu\", lineContextMenuHandler);\n playerRef.value.dispose();\n }\n});\n\nwatchEffect((onCleanup) => {\n if (!props.disabled) {\n let canceled = false;\n let lastTime = -1;\n const onFrame = (time: number) => {\n if (canceled) return;\n if (lastTime === -1) {\n lastTime = time;\n }\n playerRef.value?.update(time - lastTime);\n lastTime = time;\n requestAnimationFrame(onFrame);\n };\n requestAnimationFrame(onFrame);\n onCleanup(() => {\n canceled = true;\n });\n }\n});\n\nwatchEffect(() => {\n if (props.playing !== undefined) {\n if (props.playing) {\n playerRef.value?.resume();\n } else {\n playerRef.value?.pause();\n }\n } else playerRef.value?.resume();\n});\n\nwatchEffect(() => {\n if (props.alignAnchor !== undefined)\n playerRef.value?.setAlignAnchor(props.alignAnchor);\n});\n\nwatchEffect(() => {\n if (props.hidePassedLines !== undefined)\n playerRef.value?.setHidePassedLines(props.hidePassedLines);\n});\n\nwatchEffect(() => {\n if (props.alignPosition !== undefined)\n playerRef.value?.setAlignPosition(props.alignPosition);\n});\n\nwatchEffect(() => {\n if (props.enableSpring !== undefined)\n playerRef.value?.setEnableSpring(props.enableSpring);\n else\n playerRef.value?.setEnableSpring(true);\n});\n\nwatchEffect(() => {\n if (props.enableBlur !== undefined)\n playerRef.value?.setEnableBlur(props.enableBlur);\n else\n playerRef.value?.setEnableBlur(true);\n});\n\nwatchEffect(() => {\n if (props.enableScale !== undefined)\n playerRef.value?.setEnableScale(props.enableScale);\n else\n playerRef.value?.setEnableScale(true);\n});\n\nwatchEffect(() => {\n if (props.lyricLines !== undefined)\n playerRef.value?.setLyricLines(props.lyricLines);\n});\n\nwatchEffect(() => {\n if (props.currentTime !== undefined)\n playerRef.value?.setCurrentTime(props.currentTime);\n});\n\nwatchEffect(() => {\n if (props.linePosXSpringParams !== undefined)\n playerRef.value?.setLinePosXSpringParams(props.linePosXSpringParams);\n});\n\nwatchEffect(() => {\n if (props.linePosYSpringParams !== undefined)\n playerRef.value?.setLinePosYSpringParams(props.linePosYSpringParams);\n});\n\nwatchEffect(() => {\n if (props.lineScaleSpringParams !== undefined)\n playerRef.value?.setLineScaleSpringParams(props.lineScaleSpringParams);\n});\n\ndefineExpose<LyricPlayerRef>({\n lyricPlayer: playerRef,\n wrapperEl: wrapperRef,\n});\n\n</script>","<template>\n <div ref=\"wrapperRef\"></div>\n</template>\n\n<script setup lang=\"ts\">\nimport { AbstractBaseRenderer, BackgroundRender, EplorRenderer } from \"@applemusic-like-lyrics/core\";\nimport { onMounted, onUnmounted, ref, watchEffect } from \"vue\";\nimport type { BackgroundRenderProps, BackgroundRenderRef } from \".\";\n\nconst props = defineProps<BackgroundRenderProps>();\nconst wrapperRef = ref<HTMLDivElement>();\nconst bgRenderRef = ref<AbstractBaseRenderer>();\n\nonMounted(() => {\n if (wrapperRef.value) {\n bgRenderRef.value = BackgroundRender.new(props.renderer ?? EplorRenderer);\n const el = bgRenderRef.value.getElement();\n el.style.width = \"100%\";\n el.style.height = \"100%\";\n wrapperRef.value.appendChild(el);\n }\n});\n\nonUnmounted(() => {\n if (bgRenderRef.value) {\n bgRenderRef.value.dispose();\n }\n});\n\nwatchEffect(() => {\n if (props.album)\n bgRenderRef.value?.setAlbum(props.album, props.albumIsVideo);\n});\n\nwatchEffect(() => {\n if (props.fps)\n bgRenderRef.value?.setFPS(props.fps);\n});\n\nwatchEffect(() => {\n if (props.playing)\n bgRenderRef.value?.pause();\n else\n bgRenderRef.value?.resume();\n});\n\nwatchEffect(() => {\n if (props.flowSpeed)\n bgRenderRef.value?.setFlowSpeed(props.flowSpeed);\n});\n\nwatchEffect(() => {\n if (props.renderScale)\n bgRenderRef.value?.setRenderScale(props.renderScale);\n});\n\nwatchEffect(() => {\n if (props.lowFreqVolume)\n bgRenderRef.value?.setLowFreqVolume(props.lowFreqVolume);\n});\n\nwatchEffect(() => {\n if (props.hasLyric !== undefined)\n bgRenderRef.value?.setHasLyric(props.hasLyric ?? true);\n});\n\ndefineExpose<BackgroundRenderRef>({\n bgRender: bgRenderRef,\n wrapperEl: wrapperRef,\n});\n\n</script>"],"names":["props","__props","emits","__emit","wrapperRef","ref","playerRef","lineClickHandler","lineContextMenuHandler","onMounted","LyricPlayer","onUnmounted","watchEffect","onCleanup","canceled","lastTime","onFrame","time","_a","_b","_c","__expose","bgRenderRef","BackgroundRender","EplorRenderer","el"],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ import { defineComponent as S, ref as p, onMounted as P, onUnmounted as L, watchEffect as i, openBlock as v, createElementBlock as b, Fragment as B, createElementVNode as E, mergeProps as h, createBlock as w, Teleport as k, createCommentVNode as R } from "vue";
2
+ import { LyricPlayer as _, BackgroundRender as F, EplorRenderer as A } from "@applemusic-like-lyrics/core";
3
+ const C = /* @__PURE__ */ S({
4
+ inheritAttrs: !1,
5
+ __name: "LyricPlayer",
6
+ props: {
7
+ disabled: { type: Boolean },
8
+ playing: { type: Boolean },
9
+ alignAnchor: {},
10
+ alignPosition: {},
11
+ enableSpring: { type: Boolean },
12
+ enableBlur: { type: Boolean },
13
+ enableScale: { type: Boolean },
14
+ hidePassedLines: { type: Boolean },
15
+ lyricLines: {},
16
+ currentTime: {},
17
+ linePosXSpringParams: {},
18
+ linePosYSpringParams: {},
19
+ lineScaleSpringParams: {},
20
+ bottomLine: {}
21
+ },
22
+ emits: ["line-click", "line-contextmenu"],
23
+ setup(c, { expose: d, emit: r }) {
24
+ const n = c, t = r, a = p(), l = p(), f = (e) => t("line-click", e), g = (e) => t("line-contextmenu", e);
25
+ return P(() => {
26
+ a.value && (l.value = new _(), a.value.appendChild(l.value.getElement()), l.value.addEventListener("line-click", f), l.value.addEventListener("line-contextmenu", g));
27
+ }), L(() => {
28
+ l.value && (l.value.removeEventListener("line-click", f), l.value.removeEventListener("line-contextmenu", g), l.value.dispose());
29
+ }), i((e) => {
30
+ if (!n.disabled) {
31
+ let o = !1, s = -1;
32
+ const u = (m) => {
33
+ var y;
34
+ o || (s === -1 && (s = m), (y = l.value) == null || y.update(m - s), s = m, requestAnimationFrame(u));
35
+ };
36
+ requestAnimationFrame(u), e(() => {
37
+ o = !0;
38
+ });
39
+ }
40
+ }), i(() => {
41
+ var e, o, s;
42
+ n.playing !== void 0 ? n.playing ? (e = l.value) == null || e.resume() : (o = l.value) == null || o.pause() : (s = l.value) == null || s.resume();
43
+ }), i(() => {
44
+ var e;
45
+ n.alignAnchor !== void 0 && ((e = l.value) == null || e.setAlignAnchor(n.alignAnchor));
46
+ }), i(() => {
47
+ var e;
48
+ n.hidePassedLines !== void 0 && ((e = l.value) == null || e.setHidePassedLines(n.hidePassedLines));
49
+ }), i(() => {
50
+ var e;
51
+ n.alignPosition !== void 0 && ((e = l.value) == null || e.setAlignPosition(n.alignPosition));
52
+ }), i(() => {
53
+ var e, o;
54
+ n.enableSpring !== void 0 ? (e = l.value) == null || e.setEnableSpring(n.enableSpring) : (o = l.value) == null || o.setEnableSpring(!0);
55
+ }), i(() => {
56
+ var e, o;
57
+ n.enableBlur !== void 0 ? (e = l.value) == null || e.setEnableBlur(n.enableBlur) : (o = l.value) == null || o.setEnableBlur(!0);
58
+ }), i(() => {
59
+ var e, o;
60
+ n.enableScale !== void 0 ? (e = l.value) == null || e.setEnableScale(n.enableScale) : (o = l.value) == null || o.setEnableScale(!0);
61
+ }), i(() => {
62
+ var e;
63
+ n.lyricLines !== void 0 && ((e = l.value) == null || e.setLyricLines(n.lyricLines));
64
+ }), i(() => {
65
+ var e;
66
+ n.currentTime !== void 0 && ((e = l.value) == null || e.setCurrentTime(n.currentTime));
67
+ }), i(() => {
68
+ var e;
69
+ n.linePosXSpringParams !== void 0 && ((e = l.value) == null || e.setLinePosXSpringParams(n.linePosXSpringParams));
70
+ }), i(() => {
71
+ var e;
72
+ n.linePosYSpringParams !== void 0 && ((e = l.value) == null || e.setLinePosYSpringParams(n.linePosYSpringParams));
73
+ }), i(() => {
74
+ var e;
75
+ n.lineScaleSpringParams !== void 0 && ((e = l.value) == null || e.setLineScaleSpringParams(n.lineScaleSpringParams));
76
+ }), d({
77
+ lyricPlayer: l,
78
+ wrapperEl: a
79
+ }), (e, o) => {
80
+ var s, u;
81
+ return v(), b(B, null, [
82
+ E("div", h({
83
+ ref_key: "wrapperRef",
84
+ ref: a
85
+ }, e.$attrs), null, 16),
86
+ (s = l.value) != null && s.getBottomLineElement() && n.bottomLine ? (v(), w(k, {
87
+ key: 0,
88
+ to: (u = l.value) == null ? void 0 : u.getBottomLineElement()
89
+ }, null, 8, ["to"])) : R("", !0)
90
+ ], 64);
91
+ };
92
+ }
93
+ }), q = /* @__PURE__ */ S({
94
+ __name: "BackgroundRender",
95
+ props: {
96
+ album: {},
97
+ albumIsVideo: { type: Boolean },
98
+ fps: {},
99
+ playing: { type: Boolean },
100
+ flowSpeed: {},
101
+ hasLyric: { type: Boolean },
102
+ lowFreqVolume: {},
103
+ renderScale: {},
104
+ renderer: { type: Function }
105
+ },
106
+ setup(c, { expose: d }) {
107
+ const r = c, n = p(), t = p();
108
+ return P(() => {
109
+ if (n.value) {
110
+ t.value = F.new(r.renderer ?? A);
111
+ const a = t.value.getElement();
112
+ a.style.width = "100%", a.style.height = "100%", n.value.appendChild(a);
113
+ }
114
+ }), L(() => {
115
+ t.value && t.value.dispose();
116
+ }), i(() => {
117
+ var a;
118
+ r.album && ((a = t.value) == null || a.setAlbum(r.album, r.albumIsVideo));
119
+ }), i(() => {
120
+ var a;
121
+ r.fps && ((a = t.value) == null || a.setFPS(r.fps));
122
+ }), i(() => {
123
+ var a, l;
124
+ r.playing ? (a = t.value) == null || a.pause() : (l = t.value) == null || l.resume();
125
+ }), i(() => {
126
+ var a;
127
+ r.flowSpeed && ((a = t.value) == null || a.setFlowSpeed(r.flowSpeed));
128
+ }), i(() => {
129
+ var a;
130
+ r.renderScale && ((a = t.value) == null || a.setRenderScale(r.renderScale));
131
+ }), i(() => {
132
+ var a;
133
+ r.lowFreqVolume && ((a = t.value) == null || a.setLowFreqVolume(r.lowFreqVolume));
134
+ }), i(() => {
135
+ var a;
136
+ r.hasLyric !== void 0 && ((a = t.value) == null || a.setHasLyric(r.hasLyric ?? !0));
137
+ }), d({
138
+ bgRender: t,
139
+ wrapperEl: n
140
+ }), (a, l) => (v(), b("div", {
141
+ ref_key: "wrapperRef",
142
+ ref: n
143
+ }, null, 512));
144
+ }
145
+ });
146
+ export {
147
+ q as BackgroundRender,
148
+ C as LyricPlayer
149
+ };
150
+ //# sourceMappingURL=amll-vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amll-vue.js","sources":["../src/LyricPlayer.vue","../src/BackgroundRender.vue"],"sourcesContent":["<template>\n <div ref=\"wrapperRef\" v-bind=\"$attrs\"></div>\n <Teleport v-if=\"playerRef?.getBottomLineElement() && props.bottomLine\" :to=\"playerRef?.getBottomLineElement()\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { LyricPlayer, type LyricLineMouseEvent } from \"@applemusic-like-lyrics/core\";\nimport { onMounted, onUnmounted, ref, watchEffect } from \"vue\";\nimport type { LyricPlayerProps, LyricPlayerEmits, LyricPlayerRef } from \".\";\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = defineProps<LyricPlayerProps>();\nconst emits = defineEmits<LyricPlayerEmits>();\nconst wrapperRef = ref<HTMLDivElement>();\nconst playerRef = ref<LyricPlayer>();\n\nconst lineClickHandler = (e: Event) =>\n emits(\"line-click\", e as LyricLineMouseEvent);\nconst lineContextMenuHandler = (e: Event) =>\n emits(\"line-contextmenu\", e as LyricLineMouseEvent);\n\nonMounted(() => {\n if (wrapperRef.value) {\n playerRef.value = new LyricPlayer();\n wrapperRef.value.appendChild(playerRef.value.getElement());\n playerRef.value.addEventListener(\"line-click\", lineClickHandler);\n playerRef.value.addEventListener(\"line-contextmenu\", lineContextMenuHandler);\n }\n});\n\nonUnmounted(() => {\n if (playerRef.value) {\n playerRef.value.removeEventListener(\"line-click\", lineClickHandler);\n playerRef.value.removeEventListener(\"line-contextmenu\", lineContextMenuHandler);\n playerRef.value.dispose();\n }\n});\n\nwatchEffect((onCleanup) => {\n if (!props.disabled) {\n let canceled = false;\n let lastTime = -1;\n const onFrame = (time: number) => {\n if (canceled) return;\n if (lastTime === -1) {\n lastTime = time;\n }\n playerRef.value?.update(time - lastTime);\n lastTime = time;\n requestAnimationFrame(onFrame);\n };\n requestAnimationFrame(onFrame);\n onCleanup(() => {\n canceled = true;\n });\n }\n});\n\nwatchEffect(() => {\n if (props.playing !== undefined) {\n if (props.playing) {\n playerRef.value?.resume();\n } else {\n playerRef.value?.pause();\n }\n } else playerRef.value?.resume();\n});\n\nwatchEffect(() => {\n if (props.alignAnchor !== undefined)\n playerRef.value?.setAlignAnchor(props.alignAnchor);\n});\n\nwatchEffect(() => {\n if (props.hidePassedLines !== undefined)\n playerRef.value?.setHidePassedLines(props.hidePassedLines);\n});\n\nwatchEffect(() => {\n if (props.alignPosition !== undefined)\n playerRef.value?.setAlignPosition(props.alignPosition);\n});\n\nwatchEffect(() => {\n if (props.enableSpring !== undefined)\n playerRef.value?.setEnableSpring(props.enableSpring);\n else\n playerRef.value?.setEnableSpring(true);\n});\n\nwatchEffect(() => {\n if (props.enableBlur !== undefined)\n playerRef.value?.setEnableBlur(props.enableBlur);\n else\n playerRef.value?.setEnableBlur(true);\n});\n\nwatchEffect(() => {\n if (props.enableScale !== undefined)\n playerRef.value?.setEnableScale(props.enableScale);\n else\n playerRef.value?.setEnableScale(true);\n});\n\nwatchEffect(() => {\n if (props.lyricLines !== undefined)\n playerRef.value?.setLyricLines(props.lyricLines);\n});\n\nwatchEffect(() => {\n if (props.currentTime !== undefined)\n playerRef.value?.setCurrentTime(props.currentTime);\n});\n\nwatchEffect(() => {\n if (props.linePosXSpringParams !== undefined)\n playerRef.value?.setLinePosXSpringParams(props.linePosXSpringParams);\n});\n\nwatchEffect(() => {\n if (props.linePosYSpringParams !== undefined)\n playerRef.value?.setLinePosYSpringParams(props.linePosYSpringParams);\n});\n\nwatchEffect(() => {\n if (props.lineScaleSpringParams !== undefined)\n playerRef.value?.setLineScaleSpringParams(props.lineScaleSpringParams);\n});\n\ndefineExpose<LyricPlayerRef>({\n lyricPlayer: playerRef,\n wrapperEl: wrapperRef,\n});\n\n</script>","<template>\n <div ref=\"wrapperRef\"></div>\n</template>\n\n<script setup lang=\"ts\">\nimport { AbstractBaseRenderer, BackgroundRender, EplorRenderer } from \"@applemusic-like-lyrics/core\";\nimport { onMounted, onUnmounted, ref, watchEffect } from \"vue\";\nimport type { BackgroundRenderProps, BackgroundRenderRef } from \".\";\n\nconst props = defineProps<BackgroundRenderProps>();\nconst wrapperRef = ref<HTMLDivElement>();\nconst bgRenderRef = ref<AbstractBaseRenderer>();\n\nonMounted(() => {\n if (wrapperRef.value) {\n bgRenderRef.value = BackgroundRender.new(props.renderer ?? EplorRenderer);\n const el = bgRenderRef.value.getElement();\n el.style.width = \"100%\";\n el.style.height = \"100%\";\n wrapperRef.value.appendChild(el);\n }\n});\n\nonUnmounted(() => {\n if (bgRenderRef.value) {\n bgRenderRef.value.dispose();\n }\n});\n\nwatchEffect(() => {\n if (props.album)\n bgRenderRef.value?.setAlbum(props.album, props.albumIsVideo);\n});\n\nwatchEffect(() => {\n if (props.fps)\n bgRenderRef.value?.setFPS(props.fps);\n});\n\nwatchEffect(() => {\n if (props.playing)\n bgRenderRef.value?.pause();\n else\n bgRenderRef.value?.resume();\n});\n\nwatchEffect(() => {\n if (props.flowSpeed)\n bgRenderRef.value?.setFlowSpeed(props.flowSpeed);\n});\n\nwatchEffect(() => {\n if (props.renderScale)\n bgRenderRef.value?.setRenderScale(props.renderScale);\n});\n\nwatchEffect(() => {\n if (props.lowFreqVolume)\n bgRenderRef.value?.setLowFreqVolume(props.lowFreqVolume);\n});\n\nwatchEffect(() => {\n if (props.hasLyric !== undefined)\n bgRenderRef.value?.setHasLyric(props.hasLyric ?? true);\n});\n\ndefineExpose<BackgroundRenderRef>({\n bgRender: bgRenderRef,\n wrapperEl: wrapperRef,\n});\n\n</script>"],"names":["props","__props","emits","__emit","wrapperRef","ref","playerRef","lineClickHandler","lineContextMenuHandler","onMounted","LyricPlayer","onUnmounted","watchEffect","onCleanup","canceled","lastTime","onFrame","time","_a","_b","_c","__expose","bgRenderRef","BackgroundRender","EplorRenderer","el"],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ import type { spring, LyricLine, LyricPlayer as CoreLyricPlayer, LyricLineMouseEvent, BaseRenderer, AbstractBaseRenderer } from "@applemusic-like-lyrics/core";
2
+ import type { Ref, VNode } from "vue";
3
+ import LyricPlayer from "./LyricPlayer.vue";
4
+ import BackgroundRender from "./BackgroundRender.vue";
5
+ export { LyricPlayer, BackgroundRender };
6
+ /**
7
+ * 歌词播放组件的属性
8
+ */
9
+ export interface LyricPlayerProps {
10
+ /**
11
+ * 是否禁用歌词播放组件,默认为 `false`,歌词组件启用后将会开始逐帧更新歌词的动画效果,并对传入的其他参数变更做出反馈。
12
+ *
13
+ * 如果禁用了歌词组件动画,你也可以通过引用取得原始渲染组件实例,手动逐帧调用其 `update` 函数来更新动画效果。
14
+ */
15
+ disabled?: boolean;
16
+ /**
17
+ * 是否演出部分效果,目前会控制播放间奏点的动画的播放暂停与否,默认为 `true`
18
+ */
19
+ playing?: boolean;
20
+ /**
21
+ * 设置歌词行的对齐方式,如果为 `undefined` 则默认为 `center`
22
+ *
23
+ * - 设置成 `top` 的话将会向目标歌词行的顶部对齐
24
+ * - 设置成 `bottom` 的话将会向目标歌词行的底部对齐
25
+ * - 设置成 `center` 的话将会向目标歌词行的垂直中心对齐
26
+ */
27
+ alignAnchor?: "top" | "bottom" | "center";
28
+ /**
29
+ * 设置默认的歌词行对齐位置,相对于整个歌词播放组件的大小位置,如果为 `undefined`
30
+ * 则默认为 `0.5`
31
+ *
32
+ * 可以设置一个 `[0.0-1.0]` 之间的任意数字,代表组件高度由上到下的比例位置
33
+ */
34
+ alignPosition?: number;
35
+ /**
36
+ * 设置是否使用物理弹簧算法实现歌词动画效果,默认启用
37
+ *
38
+ * 如果启用,则会通过弹簧算法实时处理歌词位置,但是需要性能足够强劲的电脑方可流畅运行
39
+ *
40
+ * 如果不启用,则会回退到基于 `transition` 的过渡效果,对低性能的机器比较友好,但是效果会比较单一
41
+ */
42
+ enableSpring?: boolean;
43
+ /**
44
+ * 设置是否启用歌词行的模糊效果,默认为 `true`
45
+ */
46
+ enableBlur?: boolean;
47
+ /**
48
+ * 设置是否使用物理弹簧算法实现歌词动画效果,默认启用
49
+ *
50
+ * 如果启用,则会通过弹簧算法实时处理歌词位置,但是需要性能足够强劲的电脑方可流畅运行
51
+ *
52
+ * 如果不启用,则会回退到基于 `transition` 的过渡效果,对低性能的机器比较友好,但是效果会比较单一
53
+ */
54
+ enableScale?: boolean;
55
+ /**
56
+ * 设置是否隐藏已经播放过的歌词行,默认不隐藏
57
+ */
58
+ hidePassedLines?: boolean;
59
+ /**
60
+ * 设置当前播放歌词,要注意传入后这个数组内的信息不得修改,否则会发生错误
61
+ */
62
+ lyricLines?: LyricLine[];
63
+ /**
64
+ * 设置当前播放进度,单位为毫秒且**必须是整数**,此时将会更新内部的歌词进度信息
65
+ * 内部会根据调用间隔和播放进度自动决定如何滚动和显示歌词,所以这个的调用频率越快越准确越好
66
+ */
67
+ currentTime?: number;
68
+ /**
69
+ * 设置所有歌词行在横坐标上的弹簧属性,包括重量、弹力和阻力。
70
+ *
71
+ * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样
72
+ */
73
+ linePosXSpringParams?: Partial<spring.SpringParams>;
74
+ /**
75
+ * 设置所有歌词行在​纵坐标上的弹簧属性,包括重量、弹力和阻力。
76
+ *
77
+ * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样
78
+ */
79
+ linePosYSpringParams?: Partial<spring.SpringParams>;
80
+ /**
81
+ * 设置所有歌词行在​缩放大小上的弹簧属性,包括重量、弹力和阻力。
82
+ *
83
+ * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样
84
+ */
85
+ lineScaleSpringParams?: Partial<spring.SpringParams>;
86
+ /**
87
+ * 在一个特殊的底栏元素内加入指定元素,默认是空白的,可以往内部添加任意元素
88
+ *
89
+ * 这个元素始终在歌词的底部,可以用于显示歌曲创作者等信息
90
+ */
91
+ bottomLine?: VNode[];
92
+ }
93
+ export interface LyricPlayerEmits {
94
+ /**
95
+ * 当某个歌词行被左键点击时触发的事件
96
+ * @param line 歌词行的事件对象,可以访问到对应的歌词行信息和歌词行索引
97
+ */
98
+ (e: "line-click", line: LyricLineMouseEvent): void;
99
+ /**
100
+ * 当某个歌词行被右键点击时触发的事件
101
+ * @param line 歌词行的事件对象,可以访问到对应的歌词行信息和歌词行索引
102
+ */
103
+ (e: "line-contextmenu", line: LyricLineMouseEvent): void;
104
+ }
105
+ /**
106
+ * 歌词播放组件的引用
107
+ */
108
+ export interface LyricPlayerRef {
109
+ /**
110
+ * 歌词播放实例
111
+ */
112
+ lyricPlayer: Ref<CoreLyricPlayer | undefined>;
113
+ /**
114
+ * 将歌词播放实例的元素包裹起来的 DIV 元素实例
115
+ */
116
+ wrapperEl: Ref<HTMLDivElement | undefined>;
117
+ }
118
+ /**
119
+ * 背景渲染组件的属性
120
+ */
121
+ export interface BackgroundRenderProps {
122
+ /**
123
+ * 设置背景专辑资源
124
+ */
125
+ album?: string | HTMLImageElement | HTMLVideoElement;
126
+ /**
127
+ * 设置专辑资源是否为视频
128
+ */
129
+ albumIsVideo?: boolean;
130
+ /**
131
+ * 设置当前背景动画帧率,如果为 `undefined` 则默认为 `30`
132
+ */
133
+ fps?: number;
134
+ /**
135
+ * 设置当前播放状态,如果为 `undefined` 则默认为 `true`
136
+ */
137
+ playing?: boolean;
138
+ /**
139
+ * 设置当前动画流动速度,如果为 `undefined` 则默认为 `2`
140
+ */
141
+ flowSpeed?: number;
142
+ /**
143
+ * 设置背景是否根据“是否有歌词”这个特征调整自身效果,例如有歌词时会变得更加活跃
144
+ *
145
+ * 部分渲染器会根据这个特征调整自身效果
146
+ *
147
+ * 如果不确定是否需要赋值或无法知晓是否包含歌词,请传入 true 或不做任何处理(默认值为 true)
148
+ */
149
+ hasLyric?: boolean;
150
+ /**
151
+ * 设置低频的音量大小,范围在 80hz-120hz 之间为宜,取值范围在 [0.0-1.0] 之间
152
+ *
153
+ * 部分渲染器会根据音量大小调整背景效果(例如根据鼓点跳动)
154
+ *
155
+ * 如果无法获取到类似的数据,请传入 undefined 或 1.0 作为默认值,或不做任何处理(默认值即 1.0)
156
+ */
157
+ lowFreqVolume?: number;
158
+ /**
159
+ * 设置当前渲染缩放比例,如果为 `undefined` 则默认为 `0.5`
160
+ */
161
+ renderScale?: number;
162
+ /**
163
+ * 设置渲染器,如果为 `undefined` 则默认为 `PixiRenderer`
164
+ * 默认渲染器有可能会随着版本更新而更换
165
+ */
166
+ renderer?: {
167
+ new (canvas: HTMLCanvasElement): BaseRenderer;
168
+ };
169
+ }
170
+ /**
171
+ * 背景渲染组件的引用
172
+ */
173
+ export interface BackgroundRenderRef {
174
+ /**
175
+ * 背景渲染实例引用
176
+ */
177
+ bgRender?: Ref<AbstractBaseRenderer | undefined>;
178
+ /**
179
+ * 将背景渲染实例的元素包裹起来的 DIV 元素实例
180
+ */
181
+ wrapperEl: Ref<HTMLDivElement | undefined>;
182
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@applemusic-like-lyrics/vue",
3
3
  "packageManager": "yarn@3.6.1",
4
- "version": "0.1.0",
4
+ "version": "0.1.2",
5
5
  "description": "AMLL 组件库的 Vue 绑定",
6
6
  "repository": {
7
7
  "url": "https://github.com/Steve-xmh/applemusic-like-lyrics.git",
@@ -54,5 +54,5 @@
54
54
  "vite-plugin-dts": "^3.6.0",
55
55
  "vue": "^3.3.4"
56
56
  },
57
- "gitHead": "ebb5942fb850b61c676477de96f440c18aa75c07"
57
+ "gitHead": "822593981e36e36ed835869a843aa82ee6004986"
58
58
  }