unified-video-framework 1.4.2 → 1.4.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unified-video-framework",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more",
5
5
  "main": "packages/core/dist/index.js",
6
6
  "types": "packages/core/dist/index.d.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"WebPlayer.d.ts","sourceRoot":"","sources":["../src/WebPlayer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebPlayer.d.ts","sourceRoot":"","sources":["../src/WebPlayer.ts"],"names":[],"mappings":"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"}
@@ -632,6 +632,10 @@ class WebPlayer extends core_1.BasePlayer {
632
632
  --uvf-icon-color: #ffffff;
633
633
  --uvf-text-primary: #ffffff;
634
634
  --uvf-text-secondary: rgba(255,255,255,0.75);
635
+ /* Overlay variables (can be overridden by theme) */
636
+ --uvf-overlay-strong: rgba(0,0,0,0.95);
637
+ --uvf-overlay-medium: rgba(0,0,0,0.7);
638
+ --uvf-overlay-transparent: rgba(0,0,0,0);
635
639
  /* Scrollbar design variables */
636
640
  --uvf-scrollbar-width: 8px;
637
641
  --uvf-scrollbar-thumb-start: rgba(255,0,0,0.35);
@@ -733,14 +737,14 @@ class WebPlayer extends core_1.BasePlayer {
733
737
  .uvf-top-gradient {
734
738
  top: 0;
735
739
  height: 120px;
736
- background: linear-gradient(to bottom, rgba(0,0,0,0.7), transparent);
740
+ background: linear-gradient(to bottom, var(--uvf-overlay-medium), var(--uvf-overlay-transparent));
737
741
  z-index: 6;
738
742
  }
739
743
 
740
744
  .uvf-controls-gradient {
741
745
  bottom: 0;
742
746
  height: 150px;
743
- background: linear-gradient(to top, rgba(0,0,0,0.9), transparent);
747
+ background: linear-gradient(to top, var(--uvf-overlay-strong), var(--uvf-overlay-transparent));
744
748
  z-index: 9;
745
749
  }
746
750
 
@@ -1490,30 +1494,74 @@ class WebPlayer extends core_1.BasePlayer {
1490
1494
 
1491
1495
  .uvf-controls-bar {
1492
1496
  padding: 12px 8px;
1497
+ background: linear-gradient(to top, var(--uvf-overlay-strong) 0%, var(--uvf-overlay-medium) 70%, var(--uvf-overlay-transparent) 100%);
1493
1498
  }
1494
1499
 
1495
1500
  .uvf-controls-row {
1496
- gap: 6px;
1501
+ gap: 8px;
1502
+ flex-wrap: nowrap;
1503
+ align-items: center;
1504
+ justify-content: space-between;
1497
1505
  }
1498
1506
 
1507
+ /* Mobile control sizing - 70% of desktop size */
1499
1508
  .uvf-control-btn {
1500
- width: 34px;
1501
- height: 34px;
1502
- min-width: 34px;
1503
- min-height: 34px;
1509
+ width: 28px; /* 70% of 40px */
1510
+ height: 28px;
1511
+ min-width: 28px;
1512
+ min-height: 28px;
1504
1513
  }
1505
1514
 
1506
1515
  .uvf-control-btn.play-pause {
1507
- width: 42px;
1508
- height: 42px;
1509
- min-width: 42px;
1510
- min-height: 42px;
1516
+ width: 35px; /* 70% of 50px */
1517
+ height: 35px;
1518
+ min-width: 35px;
1519
+ min-height: 35px;
1520
+ }
1521
+
1522
+ .uvf-control-btn svg {
1523
+ width: 14px; /* 70% of 20px */
1524
+ height: 14px;
1525
+ }
1526
+
1527
+ .uvf-control-btn.play-pause svg {
1528
+ width: 17px; /* 70% of 24px */
1529
+ height: 17px;
1530
+ }
1531
+
1532
+ /* Skip buttons */
1533
+ #uvf-skip-back svg,
1534
+ #uvf-skip-forward svg {
1535
+ width: 15px; /* 70% of 22px */
1536
+ height: 15px;
1511
1537
  }
1512
1538
 
1513
1539
  .uvf-time-display {
1514
- font-size: 11px;
1515
- min-width: 70px;
1516
- padding: 0 4px;
1540
+ font-size: 10px; /* 70% of 14px */
1541
+ min-width: 84px; /* 70% of 120px */
1542
+ padding: 0 7px; /* 70% of 10px */
1543
+ order: 4;
1544
+ }
1545
+
1546
+ /* Volume control mobile adjustments */
1547
+ .uvf-volume-control {
1548
+ order: 3;
1549
+ }
1550
+
1551
+ .uvf-volume-panel {
1552
+ left: -60px;
1553
+ width: 140px;
1554
+ }
1555
+
1556
+ .uvf-volume-slider {
1557
+ width: 80px; /* Reduced from 120px for mobile */
1558
+ }
1559
+
1560
+ /* Right controls mobile layout */
1561
+ .uvf-right-controls {
1562
+ order: 5;
1563
+ gap: 6px;
1564
+ margin-left: 4px;
1517
1565
  }
1518
1566
 
1519
1567
  .uvf-top-controls {
@@ -1523,10 +1571,15 @@ class WebPlayer extends core_1.BasePlayer {
1523
1571
  }
1524
1572
 
1525
1573
  .uvf-top-btn {
1526
- width: 34px;
1527
- height: 34px;
1528
- min-width: 34px;
1529
- min-height: 34px;
1574
+ width: 28px; /* 70% of 40px */
1575
+ height: 28px;
1576
+ min-width: 28px;
1577
+ min-height: 28px;
1578
+ }
1579
+
1580
+ .uvf-top-btn svg {
1581
+ width: 14px; /* 70% of 20px */
1582
+ height: 14px;
1530
1583
  }
1531
1584
 
1532
1585
  .uvf-title-bar {
@@ -1534,38 +1587,59 @@ class WebPlayer extends core_1.BasePlayer {
1534
1587
  }
1535
1588
 
1536
1589
  .uvf-video-title {
1537
- font-size: 15px;
1590
+ font-size: 13px; /* 70% of 18px */
1538
1591
  }
1539
1592
 
1540
1593
  .uvf-video-subtitle {
1541
- font-size: 11px;
1594
+ font-size: 9px; /* 70% of 13px */
1542
1595
  }
1543
1596
 
1544
1597
  .uvf-center-play-btn {
1545
- width: 56px;
1598
+ width: 56px; /* 70% of 80px */
1546
1599
  height: 56px;
1547
1600
  }
1548
1601
 
1549
1602
  .uvf-center-play-btn svg {
1550
- width: 26px;
1551
- height: 26px;
1603
+ width: 25px; /* 70% of 35px */
1604
+ height: 25px;
1552
1605
  }
1553
1606
 
1554
1607
  .uvf-progress-bar-wrapper {
1555
- height: 8px;
1556
- margin-bottom: 10px;
1608
+ height: 6px; /* Slightly reduced for mobile */
1609
+ margin-bottom: 8px;
1557
1610
  }
1558
1611
 
1559
1612
  .uvf-progress-handle {
1560
- width: 16px;
1561
- height: 16px;
1613
+ width: 14px; /* Slightly larger for touch */
1614
+ height: 14px;
1562
1615
  }
1563
1616
 
1564
1617
  .uvf-settings-menu {
1565
- min-width: 150px;
1566
- bottom: 35px;
1567
- right: 5px;
1618
+ min-width: 140px;
1619
+ bottom: 30px;
1620
+ right: 8px;
1621
+ font-size: 12px;
1622
+ }
1623
+
1624
+ .uvf-settings-option {
1625
+ padding: 6px 12px;
1626
+ font-size: 12px;
1627
+ }
1628
+
1629
+ .uvf-quality-badge {
1630
+ font-size: 9px; /* 70% of 11px, but more readable at 9px */
1631
+ padding: 2px 4px;
1632
+ }
1633
+
1634
+ /* Ensure all controls remain visible and functional */
1635
+ .uvf-controls-row > * {
1636
+ flex-shrink: 0;
1568
1637
  }
1638
+
1639
+ /* Mobile-specific control group ordering for better layout */
1640
+ .uvf-control-btn:nth-child(1) { order: 1; } /* play-pause */
1641
+ .uvf-control-btn:nth-child(2) { order: 2; } /* skip-back */
1642
+ .uvf-control-btn:nth-child(3) { order: 3; } /* skip-forward */
1569
1643
  }
1570
1644
 
1571
1645
  /* Mobile devices (landscape) */
@@ -1602,13 +1676,38 @@ class WebPlayer extends core_1.BasePlayer {
1602
1676
  }
1603
1677
 
1604
1678
  .uvf-control-btn {
1605
- width: 32px;
1606
- height: 32px;
1679
+ width: 28px; /* 70% sizing for landscape mobile */
1680
+ height: 28px;
1681
+ }
1682
+
1683
+ .uvf-control-btn svg {
1684
+ width: 14px;
1685
+ height: 14px;
1607
1686
  }
1608
1687
 
1609
1688
  .uvf-control-btn.play-pause {
1610
- width: 40px;
1611
- height: 40px;
1689
+ width: 35px; /* 70% of 50px */
1690
+ height: 35px;
1691
+ }
1692
+
1693
+ .uvf-control-btn.play-pause svg {
1694
+ width: 17px;
1695
+ height: 17px;
1696
+ }
1697
+
1698
+ .uvf-top-btn {
1699
+ width: 28px;
1700
+ height: 28px;
1701
+ }
1702
+
1703
+ .uvf-top-btn svg {
1704
+ width: 14px;
1705
+ height: 14px;
1706
+ }
1707
+
1708
+ .uvf-time-display {
1709
+ font-size: 10px;
1710
+ min-width: 80px;
1612
1711
  }
1613
1712
  }
1614
1713
 
@@ -1619,13 +1718,33 @@ class WebPlayer extends core_1.BasePlayer {
1619
1718
  }
1620
1719
 
1621
1720
  .uvf-control-btn {
1622
- width: 42px;
1623
- height: 42px;
1721
+ width: 36px; /* 90% of desktop size for tablets */
1722
+ height: 36px;
1723
+ }
1724
+
1725
+ .uvf-control-btn svg {
1726
+ width: 18px;
1727
+ height: 18px;
1624
1728
  }
1625
1729
 
1626
1730
  .uvf-control-btn.play-pause {
1627
- width: 48px;
1628
- height: 48px;
1731
+ width: 45px; /* 90% of 50px */
1732
+ height: 45px;
1733
+ }
1734
+
1735
+ .uvf-control-btn.play-pause svg {
1736
+ width: 22px; /* 90% of 24px */
1737
+ height: 22px;
1738
+ }
1739
+
1740
+ .uvf-top-btn {
1741
+ width: 36px;
1742
+ height: 36px;
1743
+ }
1744
+
1745
+ .uvf-top-btn svg {
1746
+ width: 18px;
1747
+ height: 18px;
1629
1748
  }
1630
1749
 
1631
1750
  .uvf-top-controls {
@@ -1637,9 +1756,27 @@ class WebPlayer extends core_1.BasePlayer {
1637
1756
  padding: 15px;
1638
1757
  }
1639
1758
 
1759
+ .uvf-video-title {
1760
+ font-size: 16px; /* 90% of 18px */
1761
+ }
1762
+
1763
+ .uvf-video-subtitle {
1764
+ font-size: 12px; /* 90% of 13px */
1765
+ }
1766
+
1767
+ .uvf-time-display {
1768
+ font-size: 13px; /* 90% of 14px */
1769
+ min-width: 108px; /* 90% of 120px */
1770
+ }
1771
+
1640
1772
  .uvf-center-play-btn {
1641
- width: 70px;
1642
- height: 70px;
1773
+ width: 72px; /* 90% of 80px */
1774
+ height: 72px;
1775
+ }
1776
+
1777
+ .uvf-center-play-btn svg {
1778
+ width: 32px; /* 90% of 35px */
1779
+ height: 32px;
1643
1780
  }
1644
1781
  }
1645
1782
 
@@ -1650,6 +1787,13 @@ class WebPlayer extends core_1.BasePlayer {
1650
1787
  }
1651
1788
  }
1652
1789
 
1790
+ /* Define overlay variables late to allow theme overrides elsewhere if needed */
1791
+ .uvf-player-wrapper {
1792
+ --uvf-overlay-strong: var(--uvf-overlay-strong, rgba(0,0,0,0.95));
1793
+ --uvf-overlay-medium: var(--uvf-overlay-medium, rgba(0,0,0,0.7));
1794
+ --uvf-overlay-transparent: var(--uvf-overlay-transparent, rgba(0,0,0,0));
1795
+ }
1796
+
1653
1797
  /* Touch device optimizations */
1654
1798
  @media (hover: none) and (pointer: coarse) {
1655
1799
  .uvf-control-btn {
@@ -1791,11 +1935,6 @@ class WebPlayer extends core_1.BasePlayer {
1791
1935
  </svg>
1792
1936
  <span>Stop Casting</span>
1793
1937
  </button>
1794
- <div class="uvf-top-btn" id="uvf-playlist-btn" title="Add to Playlist">
1795
- <svg viewBox="0 0 24 24">
1796
- <path d="M14 10H2v2h12v-2zm0-4H2v2h12V6zm4 8v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zM2 16h8v-2H2v2z"/>
1797
- </svg>
1798
- </div>
1799
1938
  <div class="uvf-top-btn" id="uvf-share-btn" title="Share">
1800
1939
  <svg viewBox="0 0 24 24">
1801
1940
  <path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"/>
@@ -2188,11 +2327,9 @@ class WebPlayer extends core_1.BasePlayer {
2188
2327
  pipBtn?.addEventListener('click', () => this.togglePiP());
2189
2328
  const castBtn = document.getElementById('uvf-cast-btn');
2190
2329
  const stopCastBtn = document.getElementById('uvf-stop-cast-btn');
2191
- const playlistBtn = document.getElementById('uvf-playlist-btn');
2192
2330
  const shareBtn = document.getElementById('uvf-share-btn');
2193
2331
  castBtn?.addEventListener('click', () => this.onCastButtonClick());
2194
2332
  stopCastBtn?.addEventListener('click', () => this.stopCasting());
2195
- playlistBtn?.addEventListener('click', () => this.showNotification('Added to playlist'));
2196
2333
  shareBtn?.addEventListener('click', () => this.shareVideo());
2197
2334
  document.addEventListener('click', (e) => {
2198
2335
  if (!e.target.closest('#uvf-settings-btn') &&
@@ -2699,6 +2836,9 @@ class WebPlayer extends core_1.BasePlayer {
2699
2836
  let iconColor = null;
2700
2837
  let textPrimary = null;
2701
2838
  let textSecondary = null;
2839
+ let overlayStrong = null;
2840
+ let overlayMedium = null;
2841
+ let overlayTransparent = null;
2702
2842
  if (typeof theme === 'string') {
2703
2843
  accent1 = theme;
2704
2844
  }
@@ -2708,6 +2848,9 @@ class WebPlayer extends core_1.BasePlayer {
2708
2848
  iconColor = theme.iconColor || null;
2709
2849
  textPrimary = theme.textPrimary || null;
2710
2850
  textSecondary = theme.textSecondary || null;
2851
+ overlayStrong = theme.overlayStrong || null;
2852
+ overlayMedium = theme.overlayMedium || null;
2853
+ overlayTransparent = theme.overlayTransparent || null;
2711
2854
  }
2712
2855
  if (accent1)
2713
2856
  wrapper.style.setProperty('--uvf-accent-1', accent1);
@@ -2734,6 +2877,12 @@ class WebPlayer extends core_1.BasePlayer {
2734
2877
  wrapper.style.setProperty('--uvf-text-primary', textPrimary);
2735
2878
  if (textSecondary)
2736
2879
  wrapper.style.setProperty('--uvf-text-secondary', textSecondary);
2880
+ if (overlayStrong)
2881
+ wrapper.style.setProperty('--uvf-overlay-strong', overlayStrong);
2882
+ if (overlayMedium)
2883
+ wrapper.style.setProperty('--uvf-overlay-medium', overlayMedium);
2884
+ if (overlayTransparent)
2885
+ wrapper.style.setProperty('--uvf-overlay-transparent', overlayTransparent);
2737
2886
  }
2738
2887
  catch (_) {
2739
2888
  }