@applemusic-like-lyrics/core 0.4.2 → 0.5.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/style.css CHANGED
@@ -21,32 +21,6 @@
21
21
  z-index: 1;
22
22
  line-height: 1.2;
23
23
  }
24
-
25
- &.dom-slim {
26
- --amll-lp-line-width-aspect: .8;
27
- --amll-lp-line-padding-x: 1em;
28
- --amll-lp-bg-line-scale: .7;
29
- user-select: none;
30
- box-sizing: content-box;
31
- z-index: 1;
32
- min-width: 0;
33
- min-height: 0;
34
- line-height: 1.2;
35
- overflow: hidden scroll;
36
-
37
- &::-webkit-scrollbar {
38
- opacity: 0;
39
- }
40
-
41
- &:hover::-webkit-scrollbar {
42
- opacity: 1;
43
- }
44
-
45
- & > * {
46
- content-visibility: auto;
47
- contain-intrinsic-size: 100% 2em;
48
- }
49
- }
50
24
  }
51
25
 
52
26
  @media screen and (width <= 768px) {
@@ -55,21 +29,32 @@
55
29
  --amll-lp-line-padding-x: 0;
56
30
  }
57
31
  }
32
+ .FmKaba_lyricLineWrapper {
33
+ will-change: transform, opacity, filter;
34
+ flex-direction: column;
35
+ align-items: flex-start;
36
+ width: 100%;
37
+ transition: opacity .4s, filter .4s;
38
+ display: flex;
39
+ position: absolute;
40
+ top: 0;
41
+ left: 0;
42
+ }
43
+
58
44
  .FmKaba_lyricLine {
59
- backface-visibility: hidden;
60
- transform-origin: 0;
45
+ box-sizing: border-box;
61
46
  width: var(--amll-lp-width, 100%);
62
47
  min-width: var(--amll-lp-width, 100%);
63
48
  max-width: var(--amll-lp-width, 100%);
64
49
  contain: content;
50
+ backface-visibility: hidden;
51
+ transform-origin: 0;
65
52
  will-change: transform;
66
- box-sizing: border-box;
67
53
  border-radius: .25em;
68
- width: 100%;
69
54
  height: fit-content;
70
55
  padding: .5em 1em;
71
- transition: opacity .25s, filter .2s, background-color .25s, box-shadow .25s;
72
- position: absolute;
56
+ transition: background-color .25s, box-shadow .25s;
57
+ position: relative;
73
58
 
74
59
  @media screen and (width <= 500px) {
75
60
  padding-left: 20px;
@@ -90,43 +75,6 @@
90
75
  }
91
76
  }
92
77
 
93
- .FmKaba_lyricBgLine {
94
- opacity: .0001;
95
- font-size: max(calc(1em * var(--amll-lp-bg-line-scale, .7)), 10px);
96
- padding: 1vh
97
- calc(var(--amll-lp-line-padding-x, 1em) / var(--amll-lp-bg-line-scale, .7));
98
- transition: opacity .25s, scale .5s, filter .2s, background-color .25s, box-shadow .25s;
99
-
100
- & .FmKaba_lyricMainLine {
101
- padding: 1.2em 1em;
102
- }
103
-
104
- &.FmKaba_active {
105
- opacity: .4;
106
- transition: opacity .5s .25s, scale 1.5s cubic-bezier(0, 1, 0, 1) .25s, filter .2s, background-color .25s, box-shadow .25s;
107
- }
108
- }
109
-
110
- .amll-lyric-player {
111
- &:hover .FmKaba_lyricLine {
112
- filter: unset !important;
113
- }
114
-
115
- &.FmKaba_hasDuetLine {
116
- & .FmKaba_lyricLine:not(.FmKaba_lyricDuetLine) {
117
- padding-right: 15%;
118
- }
119
-
120
- & .FmKaba_lyricDuetLine {
121
- padding-left: 15%;
122
- }
123
- }
124
-
125
- &:not(.playing) > .FmKaba_lyricBgLine {
126
- opacity: .4;
127
- }
128
- }
129
-
130
78
  .FmKaba_lyricDuetLine {
131
79
  text-align: right;
132
80
  transform-origin: 100%;
@@ -173,8 +121,8 @@
173
121
 
174
122
  & > span, & span.FmKaba_emphasizeWrapper {
175
123
  white-space: pre-wrap;
176
- will-change: transform;
177
124
  vertical-align: bottom;
125
+ will-change: transform;
178
126
  margin: -1em;
179
127
  padding: 1em;
180
128
  display: inline-block;
@@ -194,20 +142,87 @@
194
142
  }
195
143
  }
196
144
 
145
+ .FmKaba_lyricBgLine {
146
+ opacity: .4;
147
+ padding: 1vh
148
+ calc(var(--amll-lp-line-padding-x, 1em) / var(--amll-lp-bg-line-scale, .7));
149
+ font-size: max(calc(1em * var(--amll-lp-bg-line-scale, .7)), 10px);
150
+ transition: background-color .25s, box-shadow .25s;
151
+
152
+ & .FmKaba_lyricMainLine {
153
+ padding: 1.2em 1em;
154
+ }
155
+
156
+ &.FmKaba_active {
157
+ opacity: .4;
158
+ transition: background-color .25s, box-shadow .25s;
159
+ }
160
+ }
161
+
197
162
  .FmKaba_lyricSubLine {
198
163
  opacity: .3;
199
164
  font-size: max(.5em, 10px);
200
165
  line-height: 1.5em;
201
166
  transition: opacity .2s .25s;
167
+
168
+ @supports (mix-blend-mode: plus-lighter) {
169
+ opacity: .3;
170
+ }
202
171
  }
203
172
 
204
- .FmKaba_disableSpring > * {
205
- transition: filter .25s, transform .5s, background-color .25s, box-shadow .25s;
173
+ .FmKaba_bottomLine {
174
+ cursor: default;
175
+ padding-top: 0;
176
+ padding-bottom: 0;
177
+ line-height: 1.8em;
178
+
179
+ &:empty {
180
+ height: 0;
181
+ margin: 0;
182
+ padding: 0;
183
+ display: none;
184
+ }
185
+ }
186
+
187
+ .FmKaba_bgWrapper {
188
+ z-index: -1;
189
+ align-items: inherit;
190
+ visibility: visible;
191
+ pointer-events: auto;
192
+ opacity: 0;
193
+ width: 100%;
194
+ transform-origin: var(--lyric-line-padding-x) top;
195
+ flex-direction: column;
196
+ transition: opacity .3s;
197
+ display: flex;
198
+ position: absolute;
199
+ top: 100%;
200
+ left: 0;
201
+ }
202
+
203
+ .FmKaba_bgWrapperTop {
204
+ transform-origin: var(--lyric-line-padding-x) bottom;
205
+ margin-top: -999px;
206
+ position: relative;
207
+ top: auto;
208
+ bottom: auto;
209
+ }
210
+
211
+ .FmKaba_bgWrapperActive {
212
+ opacity: 1;
213
+ position: relative;
214
+ top: auto;
215
+ bottom: auto;
216
+ }
217
+
218
+ .FmKaba_bgWrapperHidden {
219
+ visibility: hidden;
220
+ pointer-events: none;
206
221
  }
207
222
 
208
223
  .FmKaba_interludeDots {
209
- transform-origin: center;
210
224
  opacity: 0;
225
+ transform-origin: center;
211
226
  gap: .25em;
212
227
  width: fit-content;
213
228
  height: clamp(.5em, 1vh, 3em);
@@ -222,8 +237,8 @@
222
237
  }
223
238
 
224
239
  & > * {
225
- aspect-ratio: 1;
226
240
  background-color: var(--amll-lp-color, white);
241
+ aspect-ratio: 1;
227
242
  border-radius: 50%;
228
243
  width: clamp(.5em, 1vh, 3em);
229
244
  height: clamp(.5em, 1vh, 3em);
@@ -237,164 +252,51 @@
237
252
  }
238
253
  }
239
254
 
240
- @supports (mix-blend-mode: plus-lighter) {
241
- .FmKaba_lyricSubLine {
242
- opacity: .3;
243
- }
255
+ .FmKaba_disableSpring > *, .FmKaba_disableSpring .FmKaba_lyricLine {
256
+ transition: filter .25s, transform .5s, background-color .25s, box-shadow .25s;
244
257
  }
245
258
 
246
259
  .FmKaba_tmpDisableTransition {
247
260
  transition: none !important;
248
261
  }
249
262
 
250
- .FmKaba_bottomLine {
251
- cursor: default;
252
- padding-top: 0;
253
- padding-bottom: 0;
254
- line-height: 1.8em;
255
- }
256
-
257
- .FmKaba_bottomLine:empty {
258
- height: 0;
259
- margin: 0;
260
- padding: 0;
261
- display: none;
262
- }
263
- .KxF9Iq_lyricLine {
264
- width: var(--amll-lp-width, 100%);
265
- min-width: var(--amll-lp-width, 100%);
266
- max-width: var(--amll-lp-width, 100%);
267
- contain: content;
268
- box-sizing: border-box;
269
- border-radius: .25em;
270
- width: 100%;
271
- height: fit-content;
272
- padding: 2vh 1em;
273
- transition: opacity .25s, filter .2s, background-color .25s, box-shadow .25s;
274
-
275
- &:has( > *):hover {
276
- background-color: var(--amll-lp-hover-bg-color, #fff1);
277
- }
278
-
279
- &:has( > *):active {
280
- background-color: var(--amll-lp-hover-bg-color, #ffffff05);
281
- }
282
- }
283
-
284
- .KxF9Iq_lyricBgLine {
285
- opacity: 0;
286
- font-size: max(calc(1em * var(--amll-lp-bg-line-scale, .7)), 10px);
287
- padding: 1vh
288
- calc(var(--amll-lp-line-padding-x, 1em) / var(--amll-lp-bg-line-scale, .7));
289
- transition: opacity .25s, scale .5s, filter .2s, background-color .25s, box-shadow .25s;
263
+ .amll-lyric-player {
264
+ --lyric-line-padding-x: 1em;
290
265
 
291
- &.KxF9Iq_active {
292
- opacity: .4;
293
- transition: opacity .5s .25s, scale 1.5s cubic-bezier(0, 1, 0, 1) .25s, filter .2s, background-color .25s, box-shadow .25s;
266
+ @media screen and (width <= 500px) {
267
+ --lyric-line-padding-x: 20px;
294
268
  }
295
- }
296
269
 
297
- .amll-lyric-player {
298
- &:hover .KxF9Iq_lyricLine {
270
+ &:hover .FmKaba_lyricLine, &:hover .FmKaba_lyricLineWrapper {
299
271
  filter: unset !important;
300
272
  }
301
273
 
302
- &.KxF9Iq_hasDuetLine {
303
- & .KxF9Iq_lyricLine:not(.KxF9Iq_lyricDuetLine) {
274
+ &.FmKaba_hasDuetLine {
275
+ & .FmKaba_lyricLine:not(.FmKaba_lyricDuetLine) {
304
276
  padding-right: 15%;
305
277
  }
306
278
 
307
- & .KxF9Iq_lyricDuetLine {
279
+ & .FmKaba_lyricDuetLine {
308
280
  padding-left: 15%;
309
281
  }
310
- }
311
- }
312
-
313
- .KxF9Iq_lyricDuetLine {
314
- text-align: right;
315
- transform-origin: 100%;
316
- }
317
-
318
- .KxF9Iq_lyricMainLine {
319
- contain: content paint;
320
- transition: opacity .3s .1s;
321
-
322
- & span {
323
- white-space: pre;
324
- display: inline-block;
325
- }
326
-
327
- & .KxF9Iq_romanWord {
328
- font-size: .5em;
329
- line-height: 1em;
330
- display: flex;
331
- }
332
282
 
333
- & .KxF9Iq_rubyWord {
334
- justify-content: center;
335
- min-height: 1em;
336
- font-size: .5em;
337
- line-height: 1em;
338
- display: flex;
339
- }
283
+ & .FmKaba_lyricLineWrapper:has(.FmKaba_lyricDuetLine) {
284
+ align-items: flex-end;
340
285
 
341
- & .KxF9Iq_wordWithRuby {
342
- flex-direction: column;
343
- align-items: center;
344
- display: inline-flex;
345
- }
286
+ & .FmKaba_bgWrapper {
287
+ transform-origin: calc(100% - var(--lyric-line-padding-x)) top;
288
+ }
346
289
 
347
- & .KxF9Iq_wordBody {
348
- flex-direction: column;
349
- align-items: center;
350
- display: flex;
290
+ & .FmKaba_bgWrapperTop {
291
+ transform-origin: calc(100% - var(--lyric-line-padding-x)) bottom;
292
+ }
293
+ }
351
294
  }
352
- }
353
-
354
- .KxF9Iq_lyricSubLine {
355
- opacity: .3;
356
- font-size: max(.5em, 10px);
357
- line-height: 1.5em;
358
- transition: opacity .2s .25s;
359
- }
360
-
361
- .KxF9Iq_interludeDots {
362
- transform-origin: center;
363
- opacity: 0;
364
- gap: .25em;
365
- width: fit-content;
366
- height: clamp(.5em, 1vh, 3em);
367
- padding: 2.5% .75em;
368
- transition: opacity .25s;
369
- display: flex;
370
- left: 0;
371
295
 
372
- &.KxF9Iq_enabled {
296
+ &:not(.FmKaba_playing) .FmKaba_bgWrapper {
373
297
  opacity: 1;
298
+ position: relative;
299
+ top: auto;
300
+ bottom: auto;
374
301
  }
375
-
376
- & > * {
377
- aspect-ratio: 1;
378
- background-color: var(--amll-lp-color, white);
379
- border-radius: 50%;
380
- width: clamp(.5em, 1vh, 3em);
381
- height: clamp(.5em, 1vh, 3em);
382
- margin-right: 4px;
383
- display: inline-block;
384
- }
385
-
386
- &.KxF9Iq_duet {
387
- transform-origin: center;
388
- right: 0;
389
- }
390
- }
391
-
392
- @supports (mix-blend-mode: plus-lighter) {
393
- .KxF9Iq_lyricSubLine {
394
- opacity: .3;
395
- }
396
- }
397
-
398
- .KxF9Iq_tmpDisableTransition {
399
- transition: none !important;
400
302
  }
package/package.json CHANGED
@@ -1,70 +1,88 @@
1
1
  {
2
- "name": "@applemusic-like-lyrics/core",
3
- "version": "0.4.2",
4
- "description": "AMLL 的纯 JS 核心组件框架,包括歌词显示组件和背景组件等其它可以复用的组件",
5
- "repository": {
6
- "url": "https://github.com/amll-dev/applemusic-like-lyrics.git",
7
- "directory": "packages/core",
8
- "type": "git"
9
- },
10
- "license": "GPL-3.0",
11
- "files": [
12
- "dist"
13
- ],
14
- "scripts": {
15
- "build:docs": "typedoc --plugin typedoc-plugin-markdown --out docs src/index.ts",
16
- "typecheck": "tsgo -b",
17
- "build-only": "tsdown",
18
- "build": "run-p typecheck \"build-only {@}\" --",
19
- "build:dev": "tsdown",
20
- "fmt": "biome format --write ./src",
21
- "dev": "nx run @applemusic-like-lyrics/playground-core:dev"
22
- },
23
- "type": "module",
24
- "main": "./dist/amll-core.cjs",
25
- "module": "./dist/amll-core.mjs",
26
- "typings": "./dist/amll-core.d.mts",
27
- "exports": {
28
- ".": {
29
- "import": {
30
- "types": "./dist/amll-core.d.mts",
31
- "default": "./dist/amll-core.mjs"
32
- },
33
- "require": {
34
- "types": "./dist/amll-core.d.cts",
35
- "default": "./dist/amll-core.cjs"
36
- }
37
- },
38
- "./style.css": {
39
- "import": "./dist/style.css",
40
- "require": "./dist/style.css"
41
- }
42
- },
43
- "devDependencies": {
44
- "@biomejs/biome": "^2.4.8",
45
- "@types/deep-freeze": "^0.1.5",
46
- "@types/stats.js": "^0.17.3",
47
- "@types/ungap__structured-clone": "^1.2.0",
48
- "lil-gui": "^0.21.0",
49
- "stats.js": "^0.17.0",
50
- "typedoc": "^0.28.18",
51
- "typedoc-plugin-markdown": "^4.11.0",
52
- "@tsdown/css": "^0.21.9",
53
- "tsdown": "^0.21.9"
54
- },
55
- "peerDependencies": {
56
- "@pixi/app": "*",
57
- "@pixi/core": "*",
58
- "@pixi/display": "*",
59
- "@pixi/filter-blur": "*",
60
- "@pixi/filter-bulge-pinch": "*",
61
- "@pixi/filter-color-matrix": "*",
62
- "@pixi/sprite": "*"
63
- },
64
- "dependencies": {
65
- "@ungap/structured-clone": "^1.3.0",
66
- "bezier-easing": "^3.0.0",
67
- "deep-freeze": "^0.0.1",
68
- "gl-matrix": "4.0.0-beta.2"
69
- }
70
- }
2
+ "name": "@applemusic-like-lyrics/core",
3
+ "version": "0.5.1",
4
+ "description": "AMLL 的纯 JS 核心组件框架,包括歌词显示组件和背景组件等其它可以复用的组件",
5
+ "repository": {
6
+ "url": "https://github.com/amll-dev/applemusic-like-lyrics.git",
7
+ "directory": "packages/core",
8
+ "type": "git"
9
+ },
10
+ "license": "AGPL-3.0-only",
11
+ "nx": {
12
+ "tags": [
13
+ "library"
14
+ ],
15
+ "targets": {
16
+ "nx-release-publish": {
17
+ "executor": "@nx/js:release-publish",
18
+ "dependsOn": []
19
+ }
20
+ }
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "type": "module",
26
+ "main": "./dist/amll-core.cjs",
27
+ "module": "./dist/amll-core.mjs",
28
+ "typings": "./dist/amll-core.d.mts",
29
+ "imports": {
30
+ "#interfaces": "./src/interfaces.ts",
31
+ "#utils/*": "./src/utils/*",
32
+ "#styles/*": "./src/styles/*",
33
+ "#lyric/*": "./src/lyric-player/*",
34
+ "#bg/*": "./src/bg-player/*"
35
+ },
36
+ "exports": {
37
+ ".": {
38
+ "import": {
39
+ "types": "./dist/amll-core.d.mts",
40
+ "default": "./dist/amll-core.mjs"
41
+ },
42
+ "require": {
43
+ "types": "./dist/amll-core.d.cts",
44
+ "default": "./dist/amll-core.cjs"
45
+ }
46
+ },
47
+ "./style.css": {
48
+ "import": "./dist/style.css",
49
+ "require": "./dist/style.css"
50
+ }
51
+ },
52
+ "devDependencies": {
53
+ "@biomejs/biome": "^2.4.8",
54
+ "@types/deep-freeze": "^0.1.5",
55
+ "@types/stats.js": "^0.17.3",
56
+ "@types/ungap__structured-clone": "^1.2.0",
57
+ "lil-gui": "^0.21.0",
58
+ "stats.js": "^0.17.0",
59
+ "typedoc": "^0.28.18",
60
+ "typedoc-plugin-markdown": "^4.11.0",
61
+ "@tsdown/css": "^0.21.9",
62
+ "tsdown": "^0.21.9"
63
+ },
64
+ "peerDependencies": {
65
+ "@pixi/app": "*",
66
+ "@pixi/core": "*",
67
+ "@pixi/display": "*",
68
+ "@pixi/filter-blur": "*",
69
+ "@pixi/filter-bulge-pinch": "*",
70
+ "@pixi/filter-color-matrix": "*",
71
+ "@pixi/sprite": "*"
72
+ },
73
+ "dependencies": {
74
+ "@ungap/structured-clone": "^1.3.0",
75
+ "bezier-easing": "^3.0.0",
76
+ "deep-freeze": "^0.0.1",
77
+ "gl-matrix": "4.0.0-beta.2"
78
+ },
79
+ "scripts": {
80
+ "build:docs": "typedoc --plugin typedoc-plugin-markdown --out docs src/index.ts",
81
+ "typecheck": "tsgo -b",
82
+ "build-only": "tsdown",
83
+ "build": "run-p typecheck \"build-only {@}\" --",
84
+ "build:dev": "tsdown",
85
+ "fmt": "biome format --write ./src",
86
+ "dev": "nx run @applemusic-like-lyrics/playground-core:dev"
87
+ }
88
+ }