@kieransimkin/dancemoves 3.0.2 → 3.0.4
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/README.md +4 -3
- package/docs/README.md +3 -3
- package/docs/api/effects.md +39 -4
- package/docs/api/javascript.md +8 -3
- package/docs/api/styling.md +23 -2
- package/docs/guide.md +7 -1
- package/docs/javascript-api.md +5 -3
- package/docs/releasing-shared.md +7 -6
- package/docs/shared-feature-coverage.md +2 -2
- package/docs/shared-runtime-migration.md +1 -1
- package/docs/wordpress-shared-runtime.md +6 -1
- package/lib/build-manifest.json +16 -15
- package/lib/dancemoves.css +1 -1
- package/lib/dancemoves.min.js +3 -3
- package/lib/index.cjs +329 -1
- package/lib/index.d.ts +6 -1
- package/lib/index.mjs +329 -1
- package/lib/styles/dance-moves-core.css +1 -1
- package/lib/wordpress.js +3 -3
- package/package.json +2 -2
package/lib/index.mjs
CHANGED
|
@@ -505,6 +505,17 @@ function install(__dmScope) {
|
|
|
505
505
|
};
|
|
506
506
|
}
|
|
507
507
|
function dispatchLyric(entry, audio, index) {
|
|
508
|
+
var previousVisibleIndex = -1;
|
|
509
|
+
var previousVisibleEntry = null;
|
|
510
|
+
if (Number.isFinite(index)) {
|
|
511
|
+
for (var previousCursor = index - 1; previousCursor >= 0; previousCursor -= 1) {
|
|
512
|
+
if (String(lyricList[previousCursor].text || "").trim()) {
|
|
513
|
+
previousVisibleIndex = previousCursor;
|
|
514
|
+
previousVisibleEntry = lyricList[previousCursor];
|
|
515
|
+
break;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
508
519
|
var nextIndex = Number.isFinite(index) && index + 1 < lyricList.length ? index + 1 : -1;
|
|
509
520
|
var nextEntry = nextIndex >= 0 ? lyricList[nextIndex] : null;
|
|
510
521
|
var nextVisibleIndex = -1;
|
|
@@ -524,6 +535,10 @@ function install(__dmScope) {
|
|
|
524
535
|
text: entry ? entry.text : "",
|
|
525
536
|
normalisedText: entry ? entry.normalisedText : "",
|
|
526
537
|
index: Number.isFinite(index) ? index : -1,
|
|
538
|
+
previousVisibleTime: previousVisibleEntry ? previousVisibleEntry.time : null,
|
|
539
|
+
previousVisibleText: previousVisibleEntry ? previousVisibleEntry.text : "",
|
|
540
|
+
previousVisibleNormalisedText: previousVisibleEntry ? previousVisibleEntry.normalisedText : "",
|
|
541
|
+
previousVisibleIndex,
|
|
527
542
|
nextTime: nextEntry ? nextEntry.time : null,
|
|
528
543
|
nextText: nextEntry ? nextEntry.text : "",
|
|
529
544
|
nextNormalisedText: nextEntry ? nextEntry.normalisedText : "",
|
|
@@ -597,6 +612,7 @@ function install(__dmScope) {
|
|
|
597
612
|
__dmScope.dataset(this.element, "danceMovesLyricState", "idle");
|
|
598
613
|
}
|
|
599
614
|
};
|
|
615
|
+
document2.dispatchEvent(new CustomEvent("dance-moves-lyric-ready", { detail: { element: container } }));
|
|
600
616
|
return lyricRenderer;
|
|
601
617
|
}
|
|
602
618
|
function callHandlers(key, detail) {
|
|
@@ -1345,6 +1361,317 @@ function install2(__dmScope) {
|
|
|
1345
1361
|
}
|
|
1346
1362
|
}));
|
|
1347
1363
|
}
|
|
1364
|
+
function lyricStage(options) {
|
|
1365
|
+
options = options || {};
|
|
1366
|
+
var state = commonState(options, "lyric-stage");
|
|
1367
|
+
var audio = element(options.audio, state.root.querySelector("audio"));
|
|
1368
|
+
var popover = element(options.popover, document2.querySelector(".dance-moves-lyric-popover"));
|
|
1369
|
+
if (!audio)
|
|
1370
|
+
throw new Error("DanceMovesEffects lyricStage requires an audio element");
|
|
1371
|
+
if (!popover) {
|
|
1372
|
+
let mountWhenReady = function() {
|
|
1373
|
+
if (!pending || !document2.querySelector(".dance-moves-lyric-popover"))
|
|
1374
|
+
return;
|
|
1375
|
+
pending = false;
|
|
1376
|
+
state.removers.splice(0).forEach(function(remove) {
|
|
1377
|
+
remove();
|
|
1378
|
+
});
|
|
1379
|
+
lyricStage(options);
|
|
1380
|
+
};
|
|
1381
|
+
var pending = true;
|
|
1382
|
+
listen(document2, "dance-moves-lyric-ready", mountWhenReady, void 0, state.removers);
|
|
1383
|
+
return register(state.id, Object.freeze({
|
|
1384
|
+
id: state.id,
|
|
1385
|
+
type: "lyric-stage-pending",
|
|
1386
|
+
snapshot: function() {
|
|
1387
|
+
return { id: state.id, type: "lyric-stage-pending", phase: "waiting-for-popover" };
|
|
1388
|
+
},
|
|
1389
|
+
teardown: function() {
|
|
1390
|
+
pending = false;
|
|
1391
|
+
state.removers.splice(0).forEach(function(remove) {
|
|
1392
|
+
remove();
|
|
1393
|
+
});
|
|
1394
|
+
instances.delete(state.id);
|
|
1395
|
+
}
|
|
1396
|
+
}));
|
|
1397
|
+
}
|
|
1398
|
+
var current = popover.querySelector(".dance-moves-lyric-popover__text");
|
|
1399
|
+
if (!current)
|
|
1400
|
+
throw new Error("DanceMovesEffects lyricStage requires the DanceMoves current lyric element");
|
|
1401
|
+
var viewport = document2.createElement("div");
|
|
1402
|
+
var track = document2.createElement("div");
|
|
1403
|
+
var previous = document2.createElement("span");
|
|
1404
|
+
var next = document2.createElement("span");
|
|
1405
|
+
viewport.className = "dance-moves-lyric-stage__viewport";
|
|
1406
|
+
track.className = "dance-moves-lyric-stage__track";
|
|
1407
|
+
previous.className = "dance-moves-lyric-stage__line dance-moves-lyric-stage__line--previous";
|
|
1408
|
+
current.className += " dance-moves-lyric-stage__line dance-moves-lyric-stage__line--current";
|
|
1409
|
+
next.className = "dance-moves-lyric-stage__line dance-moves-lyric-stage__line--next";
|
|
1410
|
+
__dmScope.dataset(previous, "danceMovesLyricSlot", "previous");
|
|
1411
|
+
__dmScope.dataset(current, "danceMovesLyricSlot", "current");
|
|
1412
|
+
__dmScope.dataset(next, "danceMovesLyricSlot", "next");
|
|
1413
|
+
track.appendChild(previous);
|
|
1414
|
+
track.appendChild(current);
|
|
1415
|
+
track.appendChild(next);
|
|
1416
|
+
viewport.appendChild(track);
|
|
1417
|
+
popover.appendChild(viewport);
|
|
1418
|
+
__dmScope.dataset(popover, "danceMovesLyricStage", "ready");
|
|
1419
|
+
__dmScope.setStyle(popover.style, "--dance-moves-lyric-progress", "0");
|
|
1420
|
+
var travelTicks = Math.max(1, Math.round(finite2(options.travelTicks, 32)));
|
|
1421
|
+
var defaultCueTicks = Math.max(1, Math.round(finite2(options.cueDurationTicks, 32)));
|
|
1422
|
+
var latest = null, phase = "idle", progress = 0, frame = 0, wakeTimer = 0, cueTimer = 0, cueCleanup = null, cueCount = 0;
|
|
1423
|
+
var lyricEffects = [];
|
|
1424
|
+
var slots = Object.freeze({ previous, current, next, viewport, track });
|
|
1425
|
+
function safely(callback, payload, label) {
|
|
1426
|
+
if (typeof callback !== "function")
|
|
1427
|
+
return null;
|
|
1428
|
+
try {
|
|
1429
|
+
return callback(payload);
|
|
1430
|
+
} catch (error) {
|
|
1431
|
+
if (window2.console && typeof window2.console.error === "function")
|
|
1432
|
+
window2.console.error("DanceMoves " + label + " callback failed", error);
|
|
1433
|
+
}
|
|
1434
|
+
return null;
|
|
1435
|
+
}
|
|
1436
|
+
function blocked() {
|
|
1437
|
+
return document2.hidden || state.reduced.matches || state.forced.matches;
|
|
1438
|
+
}
|
|
1439
|
+
function stopClock() {
|
|
1440
|
+
if (frame)
|
|
1441
|
+
window2.cancelAnimationFrame(frame);
|
|
1442
|
+
if (wakeTimer)
|
|
1443
|
+
window2.clearTimeout(wakeTimer);
|
|
1444
|
+
frame = 0;
|
|
1445
|
+
wakeTimer = 0;
|
|
1446
|
+
}
|
|
1447
|
+
function publish(reason) {
|
|
1448
|
+
__dmScope.dataset(popover, "danceMovesLyricPhase", phase);
|
|
1449
|
+
safely(options.render, {
|
|
1450
|
+
root: state.root,
|
|
1451
|
+
popover,
|
|
1452
|
+
audio,
|
|
1453
|
+
slots,
|
|
1454
|
+
detail: latest,
|
|
1455
|
+
phase,
|
|
1456
|
+
progress,
|
|
1457
|
+
reason,
|
|
1458
|
+
playing: !audio.paused && !audio.ended && !blocked(),
|
|
1459
|
+
reducedMotion: state.reduced.matches,
|
|
1460
|
+
forcedColours: state.forced.matches
|
|
1461
|
+
}, "lyricStage render");
|
|
1462
|
+
}
|
|
1463
|
+
function setPhase(value, reason) {
|
|
1464
|
+
if (phase === value)
|
|
1465
|
+
return;
|
|
1466
|
+
phase = value;
|
|
1467
|
+
publish(reason || value);
|
|
1468
|
+
}
|
|
1469
|
+
function setProgress(value) {
|
|
1470
|
+
progress = clamp(finite2(value, 0), 0, 1);
|
|
1471
|
+
__dmScope.setStyle(popover.style, "--dance-moves-lyric-progress", progress.toFixed(5));
|
|
1472
|
+
}
|
|
1473
|
+
function copyLyrics(detail) {
|
|
1474
|
+
previous.textContent = detail ? String(detail.previousVisibleText || "") : "";
|
|
1475
|
+
current.textContent = detail ? String(detail.text || "") : "";
|
|
1476
|
+
next.textContent = detail ? String(detail.nextVisibleText || "") : "";
|
|
1477
|
+
__dmScope.dataset(previous, "danceMovesLyricIndex", detail ? String(detail.previousVisibleIndex) : "-1");
|
|
1478
|
+
__dmScope.dataset(current, "danceMovesLyricIndex", detail ? String(detail.index) : "-1");
|
|
1479
|
+
__dmScope.dataset(next, "danceMovesLyricIndex", detail ? String(detail.nextVisibleIndex) : "-1");
|
|
1480
|
+
}
|
|
1481
|
+
function scheduleLyricEffect(result) {
|
|
1482
|
+
if (!result)
|
|
1483
|
+
return;
|
|
1484
|
+
var cleanup = typeof result === "function" ? result : typeof result.cleanup === "function" ? result.cleanup : null;
|
|
1485
|
+
if (!cleanup)
|
|
1486
|
+
return;
|
|
1487
|
+
var durationTicks = result && typeof result === "object" ? Math.max(1, Math.round(finite2(result.durationTicks, 64))) : 64;
|
|
1488
|
+
var record = { cleanup, timer: 0 };
|
|
1489
|
+
record.timer = window2.setTimeout(function() {
|
|
1490
|
+
lyricEffects = lyricEffects.filter(function(item) {
|
|
1491
|
+
return item !== record;
|
|
1492
|
+
});
|
|
1493
|
+
safely(cleanup, { reason: "complete" }, "lyricStage lyric cleanup");
|
|
1494
|
+
}, motion.durationMilliseconds(durationTicks));
|
|
1495
|
+
lyricEffects.push(record);
|
|
1496
|
+
}
|
|
1497
|
+
function travelWindow() {
|
|
1498
|
+
if (!latest || !Number.isFinite(Number(latest.nextVisibleTime)))
|
|
1499
|
+
return null;
|
|
1500
|
+
var end = Number(latest.nextVisibleTime);
|
|
1501
|
+
var duration = motion.durationMilliseconds(travelTicks) / 1e3;
|
|
1502
|
+
return { start: Math.max(Number(latest.time) || 0, end - duration), end };
|
|
1503
|
+
}
|
|
1504
|
+
function tick() {
|
|
1505
|
+
frame = 0;
|
|
1506
|
+
if (audio.paused || audio.ended || blocked())
|
|
1507
|
+
return reconcile("frame-inactive");
|
|
1508
|
+
var windowRange = travelWindow();
|
|
1509
|
+
if (!windowRange) {
|
|
1510
|
+
setProgress(0);
|
|
1511
|
+
return setPhase("waiting", "no-next-line");
|
|
1512
|
+
}
|
|
1513
|
+
var now = Math.max(0, finite2(audio.currentTime, 0));
|
|
1514
|
+
if (now < windowRange.start)
|
|
1515
|
+
return reconcile("frame-before-window");
|
|
1516
|
+
if (now >= windowRange.end) {
|
|
1517
|
+
setProgress(1);
|
|
1518
|
+
return setPhase("arrived", "line-arrival");
|
|
1519
|
+
}
|
|
1520
|
+
setPhase("travelling", "travel-start");
|
|
1521
|
+
setProgress((now - windowRange.start) / Math.max(1e-3, windowRange.end - windowRange.start));
|
|
1522
|
+
frame = window2.requestAnimationFrame(tick);
|
|
1523
|
+
}
|
|
1524
|
+
function reconcile(reason) {
|
|
1525
|
+
stopClock();
|
|
1526
|
+
if (blocked()) {
|
|
1527
|
+
setProgress(0);
|
|
1528
|
+
return setPhase("inactive", reason || "inactive");
|
|
1529
|
+
}
|
|
1530
|
+
if (audio.ended) {
|
|
1531
|
+
setProgress(0);
|
|
1532
|
+
return setPhase("ended", reason || "ended");
|
|
1533
|
+
}
|
|
1534
|
+
if (audio.paused) {
|
|
1535
|
+
setProgress(0);
|
|
1536
|
+
return setPhase("paused", reason || "paused");
|
|
1537
|
+
}
|
|
1538
|
+
var windowRange = travelWindow();
|
|
1539
|
+
if (!windowRange) {
|
|
1540
|
+
setProgress(0);
|
|
1541
|
+
return setPhase("waiting", reason || "no-next-line");
|
|
1542
|
+
}
|
|
1543
|
+
var now = Math.max(0, finite2(audio.currentTime, 0));
|
|
1544
|
+
if (now >= windowRange.end) {
|
|
1545
|
+
setProgress(1);
|
|
1546
|
+
return setPhase("arrived", reason || "arrived");
|
|
1547
|
+
}
|
|
1548
|
+
if (now >= windowRange.start) {
|
|
1549
|
+
setPhase("travelling", reason || "travelling");
|
|
1550
|
+
frame = window2.requestAnimationFrame(tick);
|
|
1551
|
+
return;
|
|
1552
|
+
}
|
|
1553
|
+
setProgress(0);
|
|
1554
|
+
setPhase("waiting", reason || "waiting");
|
|
1555
|
+
wakeTimer = window2.setTimeout(function() {
|
|
1556
|
+
wakeTimer = 0;
|
|
1557
|
+
tick();
|
|
1558
|
+
}, Math.max(0, (windowRange.start - now) * 1e3 / Math.max(0.01, finite2(audio.playbackRate, 1))));
|
|
1559
|
+
}
|
|
1560
|
+
function onLyric(detail) {
|
|
1561
|
+
var previousDetail = latest;
|
|
1562
|
+
var previousText = String(current.textContent || "");
|
|
1563
|
+
latest = detail || null;
|
|
1564
|
+
copyLyrics(latest);
|
|
1565
|
+
if (!blocked() && typeof options.renderLyric === "function") {
|
|
1566
|
+
scheduleLyricEffect(safely(options.renderLyric, {
|
|
1567
|
+
root: state.root,
|
|
1568
|
+
popover,
|
|
1569
|
+
audio,
|
|
1570
|
+
slots,
|
|
1571
|
+
detail: latest,
|
|
1572
|
+
previousDetail,
|
|
1573
|
+
previousText,
|
|
1574
|
+
reducedMotion: false,
|
|
1575
|
+
forcedColours: false
|
|
1576
|
+
}, "lyricStage lyric"));
|
|
1577
|
+
}
|
|
1578
|
+
setProgress(0);
|
|
1579
|
+
publish("lyric-change");
|
|
1580
|
+
reconcile("lyric-change");
|
|
1581
|
+
}
|
|
1582
|
+
function clearCue(reason) {
|
|
1583
|
+
if (cueTimer)
|
|
1584
|
+
window2.clearTimeout(cueTimer);
|
|
1585
|
+
cueTimer = 0;
|
|
1586
|
+
if (cueCleanup)
|
|
1587
|
+
safely(cueCleanup, { reason: reason || "complete" }, "lyricStage cue cleanup");
|
|
1588
|
+
cueCleanup = null;
|
|
1589
|
+
__dmScope.dataset(state.root, "danceMovesLyricCue", reason || "idle");
|
|
1590
|
+
}
|
|
1591
|
+
function onCue(detail) {
|
|
1592
|
+
clearCue("restart");
|
|
1593
|
+
if (blocked() || typeof options.renderCue !== "function")
|
|
1594
|
+
return;
|
|
1595
|
+
cueCount += 1;
|
|
1596
|
+
__dmScope.dataset(state.root, "danceMovesLyricCue", String(detail.normalisedName || detail.name || "cue"));
|
|
1597
|
+
var result = safely(options.renderCue, {
|
|
1598
|
+
root: state.root,
|
|
1599
|
+
popover,
|
|
1600
|
+
audio,
|
|
1601
|
+
slots,
|
|
1602
|
+
detail,
|
|
1603
|
+
count: cueCount,
|
|
1604
|
+
reducedMotion: false,
|
|
1605
|
+
forcedColours: false
|
|
1606
|
+
}, "lyricStage cue");
|
|
1607
|
+
var durationTicks = defaultCueTicks;
|
|
1608
|
+
if (typeof result === "function")
|
|
1609
|
+
cueCleanup = result;
|
|
1610
|
+
else if (result && typeof result === "object") {
|
|
1611
|
+
if (typeof result.cleanup === "function")
|
|
1612
|
+
cueCleanup = result.cleanup;
|
|
1613
|
+
durationTicks = Math.max(1, Math.round(finite2(result.durationTicks, defaultCueTicks)));
|
|
1614
|
+
}
|
|
1615
|
+
cueTimer = window2.setTimeout(function() {
|
|
1616
|
+
clearCue("complete");
|
|
1617
|
+
}, motion.durationMilliseconds(durationTicks));
|
|
1618
|
+
}
|
|
1619
|
+
var unsubscribeLyric = motion.onLyric(onLyric, { id: state.id });
|
|
1620
|
+
var unsubscribeCue = motion.onCue("*", onCue, { id: state.id + ":cue" });
|
|
1621
|
+
["play", "playing", "pause", "ended", "seeking", "seeked", "ratechange", "timeupdate", "loadedmetadata"].forEach(function(name) {
|
|
1622
|
+
listen(audio, name, function() {
|
|
1623
|
+
reconcile(name);
|
|
1624
|
+
}, void 0, state.removers);
|
|
1625
|
+
});
|
|
1626
|
+
listen(document2, "visibilitychange", function() {
|
|
1627
|
+
reconcile(document2.hidden ? "hidden" : "visible");
|
|
1628
|
+
}, { passive: true }, state.removers);
|
|
1629
|
+
listen(window2, "resize", function() {
|
|
1630
|
+
publish("resize");
|
|
1631
|
+
}, { passive: true }, state.removers);
|
|
1632
|
+
listen(state.reduced, "change", function() {
|
|
1633
|
+
reconcile(state.reduced.matches ? "reduced-motion" : "motion-restored");
|
|
1634
|
+
}, void 0, state.removers);
|
|
1635
|
+
listen(state.forced, "change", function() {
|
|
1636
|
+
reconcile(state.forced.matches ? "forced-colours" : "colours-restored");
|
|
1637
|
+
}, void 0, state.removers);
|
|
1638
|
+
copyLyrics(null);
|
|
1639
|
+
publish("initial");
|
|
1640
|
+
reconcile("initial");
|
|
1641
|
+
return register(state.id, Object.freeze({
|
|
1642
|
+
id: state.id,
|
|
1643
|
+
type: "lyric-stage",
|
|
1644
|
+
restore: function(reason) {
|
|
1645
|
+
reconcile(reason || "manual-restore");
|
|
1646
|
+
},
|
|
1647
|
+
snapshot: function() {
|
|
1648
|
+
return { id: state.id, type: "lyric-stage", phase, progress, playing: !audio.paused && !audio.ended && !blocked(), lyricIndex: latest ? latest.index : -1, nextVisibleIndex: latest ? latest.nextVisibleIndex : -1, cueCount };
|
|
1649
|
+
},
|
|
1650
|
+
teardown: function() {
|
|
1651
|
+
stopClock();
|
|
1652
|
+
clearCue("teardown");
|
|
1653
|
+
unsubscribeLyric();
|
|
1654
|
+
unsubscribeCue();
|
|
1655
|
+
lyricEffects.splice(0).forEach(function(record) {
|
|
1656
|
+
if (record.timer)
|
|
1657
|
+
window2.clearTimeout(record.timer);
|
|
1658
|
+
safely(record.cleanup, { reason: "teardown" }, "lyricStage lyric cleanup");
|
|
1659
|
+
});
|
|
1660
|
+
state.removers.splice(0).forEach(function(remove) {
|
|
1661
|
+
remove();
|
|
1662
|
+
});
|
|
1663
|
+
current.className = current.className.replace(/\s*dance-moves-lyric-stage__line(?:--current)?/g, "").trim();
|
|
1664
|
+
__dmScope.dataset(current, "danceMovesLyricSlot", null);
|
|
1665
|
+
popover.appendChild(current);
|
|
1666
|
+
if (viewport.parentNode === popover)
|
|
1667
|
+
popover.removeChild(viewport);
|
|
1668
|
+
__dmScope.dataset(popover, "danceMovesLyricStage", null);
|
|
1669
|
+
__dmScope.dataset(popover, "danceMovesLyricPhase", null);
|
|
1670
|
+
__dmScope.removeStyle(popover.style, "--dance-moves-lyric-progress");
|
|
1671
|
+
instances.delete(state.id);
|
|
1672
|
+
}
|
|
1673
|
+
}));
|
|
1674
|
+
}
|
|
1348
1675
|
function quality(options) {
|
|
1349
1676
|
options = options || {};
|
|
1350
1677
|
var state = commonState(options, "quality");
|
|
@@ -1459,6 +1786,7 @@ function install2(__dmScope) {
|
|
|
1459
1786
|
playbackPulse,
|
|
1460
1787
|
cueClass,
|
|
1461
1788
|
cueTimeline,
|
|
1789
|
+
lyricStage,
|
|
1462
1790
|
quality,
|
|
1463
1791
|
get: function(id) {
|
|
1464
1792
|
return instances.get(String(id)) || null;
|
|
@@ -4689,7 +5017,7 @@ function createMotionRecorder(scope, { durationMilliseconds = 3e4, maxSamples =
|
|
|
4689
5017
|
}
|
|
4690
5018
|
|
|
4691
5019
|
// .build/modules/version.mjs
|
|
4692
|
-
var VERSION = "3.0.
|
|
5020
|
+
var VERSION = "3.0.4";
|
|
4693
5021
|
|
|
4694
5022
|
// .build/modules/index.mjs
|
|
4695
5023
|
var mounted = /* @__PURE__ */ new WeakMap();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[data-dance-moves-start-interval]:not([data-dance-moves-started=true]),[data-dance-moves-start-interval]:not([data-dance-moves-started=true]):before,[data-dance-moves-start-interval]:not([data-dance-moves-started=true]):after{animation-play-state:paused!important}html[data-dance-moves-shared-controls=true] .ks-epk .epk-button,html[data-dance-moves-shared-controls=true] .ks-epk .epk-download{transition-property:background-color,color,transform,border-color!important;transition-duration:var(--dance-moves-shared-control-duration)!important;transition-timing-function:ease!important}.ks-epk .ks-epk-lyrics-track summary span[aria-hidden]{transition-property:transform!important;transition-duration:var(--dance-moves-lyric-disclosure-duration)!important;transition-timing-function:ease!important}.dance-moves-lyric-popover{--dance-moves-lyric-bg: rgba(20, 20, 24, .94);--dance-moves-lyric-border: rgba(255, 255, 255, .28);--dance-moves-lyric-color: #fff;position:fixed;z-index:9998;inset-inline:max(1rem,env(safe-area-inset-left)) max(1rem,env(safe-area-inset-right));bottom:max(1rem,env(safe-area-inset-bottom));display:flex;justify-content:center;pointer-events:none;opacity:0;transform:translateY(.75rem) scale(.98);transition:opacity var(--dance-moves-6t) ease,transform var(--dance-moves-6t) ease}.dance-moves-lyric-popover[data-dance-moves-lyric-state=active]{opacity:1;transform:translateY(0) scale(1)}.dance-moves-lyric-popover__text{display:block;max-width:min(44rem,100%);padding:.72rem 1rem;border:1px solid var(--dance-moves-lyric-border);border-radius:.75rem;background:var(--dance-moves-lyric-bg);color:var(--dance-moves-lyric-color);box-shadow:0 .6rem 1.8rem #00000052;font:700 clamp(1rem,2.4vw,1.35rem)/1.3 system-ui,sans-serif;text-align:center;text-wrap:balance}.dance-moves-lyric-popover[data-dance-moves-lyric-pulse=true] .dance-moves-lyric-popover__text{animation:dance-moves-lyric-arrive var(--dance-moves-6t) ease both}@keyframes dance-moves-lyric-arrive{0%{transform:translateY(.4rem) scale(.98)}to{transform:translateY(0) scale(1)}}@media(forced-colors:active){.dance-moves-lyric-popover__text{border:2px solid CanvasText;background:Canvas;color:CanvasText;box-shadow:none}}@media(prefers-reduced-motion:reduce){[data-dance-moves-start-interval],[data-dance-moves-start-interval]:before,[data-dance-moves-start-interval]:after{animation:none!important;transition-duration:.01ms!important}html[data-dance-moves-shared-controls=true] .ks-epk .epk-button,html[data-dance-moves-shared-controls=true] .ks-epk .epk-download,.ks-epk .ks-epk-lyrics-track summary span[aria-hidden]{transition:none!important}.dance-moves-lyric-popover,.dance-moves-lyric-popover__text{animation:none!important;transition:none!important;transform:none!important}}
|
|
1
|
+
[data-dance-moves-start-interval]:not([data-dance-moves-started=true]),[data-dance-moves-start-interval]:not([data-dance-moves-started=true]):before,[data-dance-moves-start-interval]:not([data-dance-moves-started=true]):after{animation-play-state:paused!important}html[data-dance-moves-shared-controls=true] .ks-epk .epk-button,html[data-dance-moves-shared-controls=true] .ks-epk .epk-download{transition-property:background-color,color,transform,border-color!important;transition-duration:var(--dance-moves-shared-control-duration)!important;transition-timing-function:ease!important}.ks-epk .ks-epk-lyrics-track summary span[aria-hidden]{transition-property:transform!important;transition-duration:var(--dance-moves-lyric-disclosure-duration)!important;transition-timing-function:ease!important}.dance-moves-lyric-popover{--dance-moves-lyric-bg: rgba(20, 20, 24, .94);--dance-moves-lyric-border: rgba(255, 255, 255, .28);--dance-moves-lyric-color: #fff;position:fixed;z-index:9998;inset-inline:max(1rem,env(safe-area-inset-left)) max(1rem,env(safe-area-inset-right));bottom:max(1rem,env(safe-area-inset-bottom));display:flex;justify-content:center;pointer-events:none;opacity:0;transform:translateY(.75rem) scale(.98);transition:opacity var(--dance-moves-6t) ease,transform var(--dance-moves-6t) ease}.dance-moves-lyric-popover[data-dance-moves-lyric-state=active]{opacity:1;transform:translateY(0) scale(1)}.dance-moves-lyric-popover__text{display:block;max-width:min(44rem,100%);padding:.72rem 1rem;border:1px solid var(--dance-moves-lyric-border);border-radius:.75rem;background:var(--dance-moves-lyric-bg);color:var(--dance-moves-lyric-color);box-shadow:0 .6rem 1.8rem #00000052;font:700 clamp(1rem,2.4vw,1.35rem)/1.3 system-ui,sans-serif;text-align:center;text-wrap:balance}.dance-moves-lyric-popover[data-dance-moves-lyric-pulse=true] .dance-moves-lyric-popover__text{animation:dance-moves-lyric-arrive var(--dance-moves-6t) ease both}.dance-moves-lyric-popover[data-dance-moves-lyric-stage=ready]{--dance-moves-lyric-stage-step: 4.75rem;--dance-moves-lyric-progress: 0;overflow:hidden;height:calc(var(--dance-moves-lyric-stage-step) * 3);align-items:stretch}.dance-moves-lyric-stage__viewport{width:min(48rem,100%);height:100%;overflow:hidden}.dance-moves-lyric-stage__track{display:grid;grid-template-rows:repeat(3,var(--dance-moves-lyric-stage-step));transform:translate3d(0,calc(var(--dance-moves-lyric-progress) * var(--dance-moves-lyric-stage-step) * -1),0);will-change:transform}.dance-moves-lyric-stage__line{display:grid;place-items:center;min-width:0;padding:.4rem 1rem;color:var(--dance-moves-lyric-color);font:650 clamp(.92rem,2.2vw,1.22rem)/1.25 system-ui,sans-serif;text-align:center;text-wrap:balance;opacity:.58}.dance-moves-lyric-stage__line--current{opacity:1}.dance-moves-lyric-popover[data-dance-moves-lyric-stage=ready] .dance-moves-lyric-popover__text{max-width:none;padding:.4rem 1rem;border:0;border-radius:0;background:transparent;box-shadow:none;animation:none}.dance-moves-lyric-popover[data-dance-moves-lyric-stage=ready][data-dance-moves-lyric-phase=waiting] .dance-moves-lyric-stage__track{will-change:auto}@keyframes dance-moves-lyric-arrive{0%{transform:translateY(.4rem) scale(.98)}to{transform:translateY(0) scale(1)}}@media(forced-colors:active){.dance-moves-lyric-popover__text{border:2px solid CanvasText;background:Canvas;color:CanvasText;box-shadow:none}}@media(prefers-reduced-motion:reduce){[data-dance-moves-start-interval],[data-dance-moves-start-interval]:before,[data-dance-moves-start-interval]:after{animation:none!important;transition-duration:.01ms!important}html[data-dance-moves-shared-controls=true] .ks-epk .epk-button,html[data-dance-moves-shared-controls=true] .ks-epk .epk-download,.ks-epk .ks-epk-lyrics-track summary span[aria-hidden]{transition:none!important}.dance-moves-lyric-popover,.dance-moves-lyric-popover__text,.dance-moves-lyric-stage__track{animation:none!important;transition:none!important;transform:none!important}}
|