myetv-player 1.3.0 → 1.5.0

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 CHANGED
@@ -1,4 +1,4 @@
1
- [![CodeQL Advanced](https://github.com/OskarCosimo/myetv-video-player-opensource/actions/workflows/codeql.yml/badge.svg)](https://github.com/OskarCosimo/myetv-video-player-opensource/actions/workflows/codeql.yml) [![Node.js Package](https://github.com/OskarCosimo/myetv-video-player-opensource/actions/workflows/npm-publish.yml/badge.svg)](https://github.com/OskarCosimo/myetv-video-player-opensource/actions/workflows/npm-publish.yml)
1
+ [![CodeQL Advanced](https://github.com/OskarCosimo/myetv-video-player-opensource/actions/workflows/codeql.yml/badge.svg)](https://github.com/OskarCosimo/myetv-video-player-opensource/actions/workflows/codeql.yml) [![Node.js Package](https://github.com/OskarCosimo/myetv-video-player-opensource/actions/workflows/npm-publish.yml/badge.svg)](https://github.com/OskarCosimo/myetv-video-player-opensource/actions/workflows/npm-publish.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
2
2
 
3
3
  # MYETV Audio/Video Player Open Source
4
4
 
@@ -115,8 +115,13 @@ body {
115
115
  height: auto;
116
116
  display: block;
117
117
  min-height: 300px;
118
- visibility: hidden;
119
- opacity: 0;
118
+ -webkit-transform: translateZ(0);
119
+ transform: translateZ(0);
120
+ -webkit-backface-visibility: hidden;
121
+ backface-visibility: hidden;
122
+ will-change: transform;
123
+ visibility: visible;
124
+ opacity: 1;
120
125
  position: relative;
121
126
  z-index: 1;
122
127
  transition: none;
@@ -1233,12 +1238,21 @@ body {
1233
1238
  }
1234
1239
 
1235
1240
  /* CONTROL MENUS */
1236
- .speed-control,
1237
- .quality-control,
1238
- .subtitles-control {
1241
+ /* show quality menu in the controlbar */
1242
+ .quality-control {
1239
1243
  position: relative;
1240
1244
  }
1241
1245
 
1246
+ /* Hide individual subtitle button - it's now inside settings menu */
1247
+ .subtitles-control {
1248
+ display: none !important;
1249
+ }
1250
+
1251
+ /* Hide individual speed control button - it's now inside settings menu */
1252
+ .speed-control {
1253
+ display: none !important;
1254
+ }
1255
+
1242
1256
  .speed-menu,
1243
1257
  .quality-menu,
1244
1258
  .subtitles-menu {
@@ -1352,10 +1366,12 @@ body {
1352
1366
  color: var(--player-primary-color);
1353
1367
  }
1354
1368
 
1355
- /* SETTINGS DROPDOWN MENU - FOR SMALL SCREENS */
1369
+ /* ========================================
1370
+ SETTINGS DROPDOWN MENU - ALWAYS VISIBLE
1371
+ ======================================== */
1356
1372
  .settings-control {
1357
1373
  position: relative;
1358
- display: none;
1374
+ display: block !important;
1359
1375
  }
1360
1376
 
1361
1377
  .settings-btn {
@@ -1387,11 +1403,7 @@ body {
1387
1403
  background: var(--player-button-active);
1388
1404
  }
1389
1405
 
1390
- .settings-btn .icon::before {
1391
- content: "⚙️";
1392
- font-size: 16px;
1393
- }
1394
-
1406
+ /* SETTINGS MENU CONTAINER */
1395
1407
  .settings-menu {
1396
1408
  position: absolute;
1397
1409
  bottom: 100%;
@@ -1408,15 +1420,44 @@ body {
1408
1420
  border: 1px solid rgba(255, 255, 255, 0.1);
1409
1421
  z-index: 100;
1410
1422
  box-shadow: var(--player-shadow-menu);
1423
+ max-height: 200px;
1424
+ overflow-y: auto;
1425
+ overflow-x: hidden;
1426
+ /* Custom scrollbar styling - Firefox */
1427
+ scrollbar-width: thin;
1428
+ scrollbar-color: var(--player-primary-color) rgba(255, 255, 255, 0.05);
1411
1429
  }
1412
1430
 
1413
- /* ⚠️ Settings menu opens ONLY with .active (CLICK) */
1431
+ /* Settings menu opens ONLY with .active (CLICK) */
1414
1432
  .settings-menu.active {
1415
1433
  opacity: 1 !important;
1416
1434
  visibility: visible !important;
1417
1435
  pointer-events: all !important;
1418
1436
  }
1419
1437
 
1438
+ /* Custom scrollbar styling - Webkit browsers (Chrome, Safari, Edge) */
1439
+ .settings-menu::-webkit-scrollbar {
1440
+ width: 8px;
1441
+ }
1442
+
1443
+ .settings-menu::-webkit-scrollbar-track {
1444
+ background: rgba(255, 255, 255, 0.05);
1445
+ border-radius: 10px;
1446
+ }
1447
+
1448
+ .settings-menu::-webkit-scrollbar-thumb {
1449
+ background: var(--player-primary-color);
1450
+ border-radius: 10px;
1451
+ border: 2px solid transparent;
1452
+ background-clip: content-box;
1453
+ }
1454
+
1455
+ .settings-menu::-webkit-scrollbar-thumb:hover {
1456
+ background: var(--player-primary-hover, var(--player-primary-color));
1457
+ background-clip: content-box;
1458
+ }
1459
+
1460
+ /* SETTINGS OPTIONS */
1420
1461
  .settings-option {
1421
1462
  padding: 8px 16px;
1422
1463
  color: var(--player-text-color);
@@ -1452,196 +1493,115 @@ body {
1452
1493
  opacity: 0.8;
1453
1494
  }
1454
1495
 
1455
- /* Submenu styling - HIDDEN BY DEFAULT */
1456
- .settings-submenu,
1457
- .quality-submenu,
1458
- .speed-submenu {
1459
- position: absolute;
1460
- bottom: 0;
1461
- right: 100%;
1462
- background: var(--player-bg-menu);
1463
- backdrop-filter: blur(10px);
1464
- border-radius: 8px;
1465
- padding: 8px 0;
1466
- margin-right: 5px;
1467
- opacity: 0;
1468
- visibility: hidden;
1469
- transition: all var(--player-transition-fast);
1470
- min-width: 150px;
1471
- max-width: 180px;
1472
- max-height: 250px;
1473
- overflow-y: auto;
1474
- overflow-x: hidden;
1475
- white-space: nowrap;
1476
- border: 1px solid rgba(255, 255, 255, 0.1);
1477
- z-index: 101;
1478
- box-shadow: var(--player-shadow-menu);
1479
- pointer-events: none;
1496
+ /* ========================================
1497
+ EXPANDABLE WRAPPER - For Speed, Subtitles
1498
+ ======================================== */
1499
+ .settings-expandable-wrapper {
1500
+ position: relative;
1501
+ display: block;
1480
1502
  }
1481
1503
 
1482
- /* ⚠️ SOLUTION: Submenus open on HOVER (easier and more intuitive) */
1483
- .settings-option:hover .settings-submenu,
1484
- .settings-option:hover .quality-submenu,
1485
- .settings-option:hover .speed-submenu {
1486
- opacity: 1 !important;
1487
- visibility: visible !important;
1488
- transform: translateX(-2px) !important;
1489
- pointer-events: all !important;
1504
+ .settings-option.expandable-trigger {
1505
+ display: flex;
1506
+ justify-content: space-between;
1507
+ align-items: center;
1508
+ cursor: pointer;
1509
+ }
1510
+ .settings-option.expandable-trigger .settings-option-label {
1511
+ font-size: 14px;
1512
+ }
1513
+ .settings-option.expandable-trigger .expand-arrow {
1514
+ font-size: 12px;
1515
+ transition: transform 0.2s ease;
1516
+ margin-left: 8px;
1490
1517
  }
1491
1518
 
1492
- .settings-submenu .settings-suboption,
1493
- .quality-submenu .quality-option,
1494
- .speed-submenu .speed-option {
1495
- padding: 8px 10px !important;
1496
- font-size: 12px !important;
1497
- white-space: nowrap !important;
1498
- overflow: hidden !important;
1499
- text-overflow: ellipsis !important;
1519
+ .settings-option.expandable-trigger:hover {
1520
+ background: rgba(255, 255, 255, 0.1);
1521
+ }
1522
+
1523
+ /* EXPANDABLE CONTENT - THE SUBMENU - HIDDEN BY DEFAULT */
1524
+ .settings-expandable-content {
1525
+ padding-left: 15px;
1526
+ margin-top: 4px;
1527
+ display: none;
1528
+ background: rgba(0, 0, 0, 0.3);
1529
+ border-left: 3px solid var(--player-primary-color);
1530
+ }
1531
+
1532
+ .settings-expandable-content.active {
1533
+ display: block;
1500
1534
  }
1501
1535
 
1536
+ /* SUBOPTIONS (velocità, tracce sottotitoli) */
1502
1537
  .settings-suboption {
1503
- padding: 8px 16px;
1504
- color: var(--player-text-color);
1538
+ padding: 8px 12px;
1505
1539
  cursor: pointer;
1506
- transition: all var(--player-transition-fast);
1540
+ color: white;
1507
1541
  font-size: 13px;
1542
+ white-space: normal;
1543
+ word-wrap: break-word;
1544
+ opacity: 0.8;
1545
+ transition: opacity 0.2s;
1508
1546
  display: flex;
1509
1547
  align-items: center;
1510
1548
  justify-content: space-between;
1511
1549
  }
1512
1550
 
1513
1551
  .settings-suboption:hover {
1552
+ opacity: 1;
1514
1553
  background: rgba(255, 255, 255, 0.1);
1515
- color: var(--player-primary-color);
1516
1554
  }
1517
1555
 
1518
1556
  .settings-suboption.active {
1557
+ opacity: 1;
1558
+ font-weight: bold;
1519
1559
  color: var(--player-primary-color);
1520
- font-weight: 600;
1521
- background: rgba(255, 255, 255, 0.05);
1522
1560
  }
1523
1561
 
1524
1562
  .settings-suboption.active::after {
1525
1563
  content: "✓";
1526
1564
  font-size: 12px;
1527
- color: var(--player-primary-color);
1528
- }
1529
-
1530
- /* Visual indicator for options with submenus */
1531
- .settings-option:has(.settings-submenu, .quality-submenu, .speed-submenu)::after {
1532
- content: "▶";
1533
- font-size: 10px;
1534
- color: var(--player-text-secondary);
1535
- margin-left: 8px;
1536
- }
1537
-
1538
- .settings-option:hover::after {
1539
- color: var(--player-primary-color);
1540
1565
  }
1541
1566
 
1542
- /* RESPONSIVE - PROGRESSIVE REDUCTION */
1567
+ /* ========================================
1568
+ RESPONSIVE ADJUSTMENTS
1569
+ ======================================== */
1543
1570
  @media (max-width: 768px) {
1544
1571
  .settings-menu > .settings-option {
1545
- font-size: 12px !important;
1546
- }
1547
- .settings-submenu,
1548
- .quality-submenu,
1549
- .speed-submenu {
1550
- max-width: min(140px, 100vw - 180px) !important;
1572
+ font-size: 13px;
1551
1573
  }
1552
- .settings-submenu .settings-suboption,
1553
- .quality-submenu .quality-option,
1554
- .speed-submenu .speed-option {
1555
- padding: 7px 8px !important;
1556
- font-size: 11px !important;
1574
+ .settings-suboption {
1575
+ font-size: 12px;
1576
+ padding: 7px 10px;
1557
1577
  }
1558
1578
  }
1559
1579
  @media (max-width: 600px) {
1560
1580
  .settings-menu > .settings-option {
1561
- font-size: 11px !important;
1562
- }
1563
- .settings-submenu,
1564
- .quality-submenu,
1565
- .speed-submenu {
1566
- max-width: min(120px, 100vw - 160px) !important;
1581
+ font-size: 12px;
1567
1582
  }
1568
- .settings-submenu .settings-suboption,
1569
- .quality-submenu .quality-option,
1570
- .speed-submenu .speed-option {
1571
- padding: 6px 7px !important;
1572
- font-size: 10px !important;
1583
+ .settings-suboption {
1584
+ font-size: 11px;
1585
+ padding: 6px 8px;
1573
1586
  }
1574
1587
  }
1575
1588
  @media (max-width: 450px) {
1576
1589
  .settings-menu > .settings-option {
1577
- font-size: 10px !important;
1578
- }
1579
- .settings-submenu,
1580
- .quality-submenu,
1581
- .speed-submenu {
1582
- max-width: min(100px, 100vw - 140px) !important;
1590
+ font-size: 11px;
1583
1591
  }
1584
- .settings-submenu .settings-suboption,
1585
- .quality-submenu .quality-option,
1586
- .speed-submenu .speed-option {
1587
- padding: 5px 6px !important;
1588
- font-size: 9px !important;
1592
+ .settings-suboption {
1593
+ font-size: 10px;
1594
+ padding: 5px 6px;
1589
1595
  }
1590
1596
  }
1591
1597
  @media (max-width: 350px) {
1592
1598
  .settings-control {
1593
1599
  display: block !important;
1594
1600
  }
1595
- .pip-btn,
1596
- .speed-control,
1597
- .subtitles-control {
1601
+ .pip-btn {
1598
1602
  display: none !important;
1599
1603
  }
1600
1604
  }
1601
- .settings-expandable-wrapper {
1602
- position: relative;
1603
- display: block;
1604
- }
1605
-
1606
- .settings-option.expandable-trigger {
1607
- display: flex;
1608
- justify-content: space-between;
1609
- align-items: center;
1610
- cursor: pointer;
1611
- font-size: 10px !important;
1612
- }
1613
- .settings-option.expandable-trigger .settings-option-label {
1614
- font-size: 10px !important;
1615
- }
1616
- .settings-option.expandable-trigger .expand-arrow {
1617
- font-size: 8px;
1618
- transition: transform 0.2s ease;
1619
- margin-left: 8px;
1620
- }
1621
-
1622
- .settings-expandable-content {
1623
- padding-left: 15px;
1624
- margin-top: 4px;
1625
- }
1626
- .settings-expandable-content .settings-suboption {
1627
- padding: 6px 12px;
1628
- cursor: pointer;
1629
- color: white;
1630
- font-size: 10px;
1631
- white-space: normal;
1632
- word-wrap: break-word;
1633
- opacity: 0.8;
1634
- transition: opacity 0.2s;
1635
- }
1636
- .settings-expandable-content .settings-suboption.active {
1637
- opacity: 1;
1638
- font-weight: bold;
1639
- }
1640
- .settings-expandable-content .settings-suboption:hover {
1641
- opacity: 1;
1642
- background: rgba(255, 255, 255, 0.1);
1643
- }
1644
-
1645
1605
  .audio-player {
1646
1606
  width: 320px;
1647
1607
  height: 80px;
@@ -1897,19 +1857,8 @@ body {
1897
1857
  margin-right: 5px;
1898
1858
  }
1899
1859
  }
1900
- /* SCHERMI MOLTO PICCOLI - ATTIVA MENU SETTINGS DROPDOWN */
1860
+ /* MENU SETTINGS DROPDOWN */
1901
1861
  @media (max-width: 350px) {
1902
- /* Mostra il menu Settings solo su schermi molto piccoli */
1903
- .settings-control {
1904
- display: block !important;
1905
- }
1906
- /* Nascondi i controlli individuali e spostali nel menu */
1907
- .pip-btn,
1908
- .speed-control,
1909
- .subtitles-control {
1910
- display: none !important;
1911
- }
1912
- /* Riduci ulteriormente gli spazi */
1913
1862
  .controls-left,
1914
1863
  .controls-right {
1915
1864
  gap: 4px;
@@ -1936,9 +1885,9 @@ body {
1936
1885
  margin-right: 3px;
1937
1886
  }
1938
1887
  .volume-slider {
1939
- width: 30px; /* Volume slider ancora più piccolo */
1888
+ width: 30px;
1940
1889
  }
1941
- /* Riduci il menu settings per schermi ultra-piccoli */
1890
+ /* screen small */
1942
1891
  .settings-menu {
1943
1892
  min-width: 160px;
1944
1893
  font-size: 12px;
@@ -1985,7 +1934,6 @@ body {
1985
1934
  .volume-slider {
1986
1935
  width: 25px;
1987
1936
  }
1988
- /* Menu settings ultra-compatto */
1989
1937
  .settings-menu {
1990
1938
  min-width: 140px;
1991
1939
  font-size: 11px;
@@ -2002,7 +1950,7 @@ body {
2002
1950
  font-size: 10px;
2003
1951
  }
2004
1952
  }
2005
- /* OVERFLOW HANDLING - CRITICAL FIX */
1953
+ /* OVERFLOW HANDLING */
2006
1954
  @media (max-width: 600px) {
2007
1955
  .controls-main {
2008
1956
  /* Allow horizontal scrolling if absolutely necessary */