unified-video-framework 1.4.211 → 1.4.213

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.211",
3
+ "version": "1.4.213",
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",
@@ -110,6 +110,7 @@ export declare class WebPlayer extends BasePlayer {
110
110
  play(): Promise<void>;
111
111
  pause(): void;
112
112
  requestPause(): void;
113
+ private safeSetCurrentTime;
113
114
  seek(time: number): void;
114
115
  setVolume(level: number): void;
115
116
  mute(): void;
@@ -164,7 +165,7 @@ export declare class WebPlayer extends BasePlayer {
164
165
  private lockOrientationLandscape;
165
166
  private unlockOrientation;
166
167
  private handleVolumeChange;
167
- private handleProgressChange;
168
+ private seekToPosition;
168
169
  private formatTime;
169
170
  private updateTimeDisplay;
170
171
  private showControls;
@@ -1 +1 @@
1
- {"version":3,"file":"WebPlayer.d.ts","sourceRoot":"","sources":["../src/WebPlayer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAOL,OAAO,EACP,cAAc,EACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EAEb,MAAM,+BAA+B,CAAC;AAGvC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,GAAG,EAAE,GAAG,CAAC;QACT,MAAM,EAAE,GAAG,CAAC;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;KACxD;CACF;AAED,qBAAa,SAAU,SAAQ,UAAU;IACvC,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAChD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,UAAU,CAAkB;IAGpC,OAAO,CAAC,cAAc,CAKpB;IACF,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,iBAAiB,CAAkB;IAG3C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,yBAAyB,CAAa;IAC9C,OAAO,CAAC,iBAAiB,CAAa;IAGtC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,KAAK,CAAa;IAG1B,OAAO,CAAC,iBAAiB,CAAa;IAGtC,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,mBAAmB,CAAO;IAGlC,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,mBAAmB,CAAa;IAGxC,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,qBAAqB,CAAa;IAC1C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,oBAAoB,CAA+B;IAC3D,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,kBAAkB,CAAwB;IAGlD,OAAO,CAAC,oBAAoB,CAU1B;IACF,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,OAAO,CAAC,qBAAqB,CAAa;IAC1C,OAAO,CAAC,kBAAkB,CAAa;IAGvC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,aAAa,CAAqC;IAG1D,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,SAAS;IAOX,UAAU,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;cAsD9D,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA4J5C,OAAO,CAAC,iBAAiB,CAAkB;IAE3C,OAAO,CAAC,wBAAwB;IAkJhC,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,oBAAoB;IAYtB,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DtC,OAAO,CAAC,gBAAgB;YAcV,OAAO;IAsDrB,OAAO,CAAC,cAAc;YAyBR,QAAQ;IA4DtB,OAAO,CAAC,iBAAiB;YAQX,UAAU;IAMxB,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,0BAA0B;YAsBpB,0BAA0B;IAmExC,OAAO,CAAC,iBAAiB;YAmBX,0BAA0B;IAuExC,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,gBAAgB;IAmHxB,OAAO,CAAC,kBAAkB;IA4C1B,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,4BAA4B;IAsB9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2D3B,KAAK,IAAI,IAAI;IAkBN,YAAY,IAAI,IAAI;IAO3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwBxB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9B,IAAI,IAAI,IAAI;IAMZ,MAAM,IAAI,IAAI;IAOd,cAAc,IAAI,MAAM;IAOxB,YAAY,IAAI,GAAG,EAAE;IAIrB,iBAAiB,IAAI,GAAG;IAIxB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAkBhC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA6GhC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkF/B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAetC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3C,WAAW,IAAI,IAAI;IAUnB,iBAAiB,IAAI,IAAI;IAUzB,OAAO,CAAC,cAAc;YAmBR,0BAA0B;IAwCxC,OAAO,CAAC,eAAe;IAwCvB,uBAAuB,IAAI,IAAI;IA4D/B,OAAO,CAAC,4BAA4B;YAoEtB,gCAAgC;IAgBxC,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC;IAkGtD,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAmC3C,4BAA4B,IAAI,IAAI;IA4D9B,gCAAgC,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IA8DtE,0BAA0B,IAAI,IAAI;IAqK5B,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IA4C3C,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAc9C,SAAS,CAAC,eAAe,IAAI,IAAI;IASjC,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;IAw0FrB,OAAO,CAAC,uBAAuB;IA+DjC,OAAO,CAAC,uBAAuB;IAsF/B,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,oBAAoB;IAgW5B,OAAO,CAAC,2BAA2B;IA2enC,SAAS,CAAC,sBAAsB,IAAI,IAAI;IAwKxC,SAAS,CAAC,cAAc,IAAI,IAAI;IAmKzB,gBAAgB,CAAC,MAAM,EAAE,GAAG;IA2CnC,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,sBAAsB;IAsDvB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAetC,oBAAoB,IAAI,IAAI;IAO5B,kBAAkB,IAAI,IAAI;IAOjC,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,qBAAqB;YAYf,wBAAwB;YAuCxB,iBAAiB;IAmB/B,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,wBAAwB;IAiOhC,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,wBAAwB;IA4EhC,OAAO,CAAC,qBAAqB;IA8FtB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI;IAiBxE,0BAA0B,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAwB1F,OAAO,CAAC,oCAAoC;IAuB5C,OAAO,CAAC,mBAAmB;IAoF3B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,gBAAgB;IAiBX,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD,iBAAiB,IAAI,YAAY,GAAG,IAAI;IAWxC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYtC,WAAW,IAAI,YAAY,EAAE;IAW7B,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAW5D,WAAW,IAAI,OAAO;IAOtB,WAAW,IAAI,aAAa,GAAG,IAAI;IAOnC,eAAe,IAAI,OAAO,EAAE;IAO5B,eAAe,IAAI,cAAc,EAAE;IAOnC,qBAAqB,IAAI,OAAO,GAAG,IAAI;IAOvC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAgBtC,cAAc,IAAI,OAAO,GAAG,IAAI;IAUhC,kBAAkB,IAAI,OAAO,GAAG,IAAI;IAQpC,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IA2DjC,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,iBAAiB;YAgCX,SAAS;IAYvB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,uBAAuB;IA6D/B,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,qBAAqB;IAoH7B,OAAO,CAAC,wBAAwB;IA+ChC,OAAO,CAAC,wBAAwB;IA6BhC,OAAO,CAAC,2BAA2B;IAqDnC,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,WAAW;IAgCnB,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,WAAW;YAoBL,QAAQ;YAqGR,UAAU;IAwBxB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,iBAAiB;IA0DzB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,qBAAqB;IA2C7B,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,sBAAsB;IA6B9B,OAAO,CAAC,sBAAsB;IAiF9B,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,4BAA4B;IAoDpC,OAAO,CAAC,oBAAoB;IA+BrB,aAAa,IAAI,IAAI;IAarB,aAAa,IAAI,IAAI;IAYrB,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAe9B,kBAAkB,IAAI,OAAO;YAKtB,OAAO;IAgBf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAqD/B"}
1
+ {"version":3,"file":"WebPlayer.d.ts","sourceRoot":"","sources":["../src/WebPlayer.ts"],"names":[],"mappings":"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"}
@@ -1022,26 +1022,57 @@ export class WebPlayer extends BasePlayer {
1022
1022
  catch (_) { }
1023
1023
  }
1024
1024
  }
1025
+ safeSetCurrentTime(time) {
1026
+ if (!this.video) {
1027
+ this.debugWarn('Cannot set currentTime: video element not available');
1028
+ return false;
1029
+ }
1030
+ if (!isFinite(time) || isNaN(time)) {
1031
+ this.debugWarn('Attempted to set invalid currentTime value:', time);
1032
+ return false;
1033
+ }
1034
+ const safeTime = Math.max(0, time);
1035
+ const duration = this.video.duration;
1036
+ if (isFinite(duration) && duration > 0) {
1037
+ const clampedTime = Math.min(safeTime, duration);
1038
+ try {
1039
+ this.video.currentTime = clampedTime;
1040
+ return true;
1041
+ }
1042
+ catch (error) {
1043
+ this.debugError('Error setting currentTime:', error);
1044
+ return false;
1045
+ }
1046
+ }
1047
+ else {
1048
+ try {
1049
+ this.video.currentTime = safeTime;
1050
+ return true;
1051
+ }
1052
+ catch (error) {
1053
+ this.debugError('Error setting currentTime:', error);
1054
+ return false;
1055
+ }
1056
+ }
1057
+ }
1025
1058
  seek(time) {
1026
1059
  if (!this.video)
1027
1060
  return;
1061
+ if (!isFinite(time) || isNaN(time)) {
1062
+ this.debugWarn('Invalid seek time:', time);
1063
+ return;
1064
+ }
1028
1065
  const freeDuration = Number(this.config.freeDuration || 0);
1029
1066
  if (freeDuration > 0 && !this.paymentSuccessful) {
1030
1067
  const requestedTime = Math.max(0, Math.min(time, this.video.duration || time));
1031
1068
  if (requestedTime >= freeDuration) {
1032
1069
  this.debugWarn('Seek blocked - beyond free preview limit');
1033
1070
  this.enforcePaywallSecurity();
1034
- this.video.currentTime = Math.max(0, freeDuration - 1);
1071
+ this.safeSetCurrentTime(freeDuration - 1);
1035
1072
  return;
1036
1073
  }
1037
1074
  }
1038
- const d = this.video.duration;
1039
- if (typeof d === 'number' && isFinite(d) && d > 0) {
1040
- this.video.currentTime = Math.max(0, Math.min(time, d));
1041
- }
1042
- else {
1043
- this.video.currentTime = Math.max(0, time);
1044
- }
1075
+ this.safeSetCurrentTime(time);
1045
1076
  }
1046
1077
  setVolume(level) {
1047
1078
  if (!this.video)
@@ -2889,6 +2920,99 @@ export class WebPlayer extends BasePlayer {
2889
2920
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.4));
2890
2921
  }
2891
2922
 
2923
+ /* Cast Button Specific Styling */
2924
+ #uvf-cast-btn {
2925
+ background: var(--uvf-button-bg);
2926
+ border: 1px solid var(--uvf-button-border);
2927
+ position: relative;
2928
+ z-index: 10;
2929
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2930
+ }
2931
+
2932
+ #uvf-cast-btn:hover {
2933
+ transform: scale(1.08);
2934
+ box-shadow: 0 4px 12px var(--uvf-button-shadow);
2935
+ }
2936
+
2937
+ #uvf-cast-btn:active {
2938
+ transform: scale(0.95);
2939
+ transition: all 0.1s ease;
2940
+ }
2941
+
2942
+ #uvf-cast-btn svg {
2943
+ opacity: 0.9;
2944
+ transition: all 0.3s ease;
2945
+ filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3));
2946
+ }
2947
+
2948
+ #uvf-cast-btn:hover svg {
2949
+ opacity: 1;
2950
+ transform: scale(1.05);
2951
+ filter: drop-shadow(0 2px 4px rgba(0,0,0,0.4));
2952
+ }
2953
+
2954
+ /* Share Button Specific Styling */
2955
+ #uvf-share-btn {
2956
+ background: var(--uvf-button-bg);
2957
+ border: 1px solid var(--uvf-button-border);
2958
+ position: relative;
2959
+ z-index: 10;
2960
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2961
+ }
2962
+
2963
+ #uvf-share-btn:hover {
2964
+ transform: scale(1.08);
2965
+ box-shadow: 0 4px 12px var(--uvf-button-shadow);
2966
+ }
2967
+
2968
+ #uvf-share-btn:active {
2969
+ transform: scale(0.95);
2970
+ transition: all 0.1s ease;
2971
+ }
2972
+
2973
+ #uvf-share-btn svg {
2974
+ opacity: 0.9;
2975
+ transition: all 0.3s ease;
2976
+ filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3));
2977
+ }
2978
+
2979
+ #uvf-share-btn:hover svg {
2980
+ opacity: 1;
2981
+ transform: scale(1.05);
2982
+ filter: drop-shadow(0 2px 4px rgba(0,0,0,0.4));
2983
+ }
2984
+
2985
+ /* EPG Button Specific Styling */
2986
+ #uvf-epg-btn {
2987
+ background: var(--uvf-button-bg);
2988
+ border: 1px solid var(--uvf-button-border);
2989
+ position: relative;
2990
+ z-index: 10;
2991
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2992
+ }
2993
+
2994
+ #uvf-epg-btn:hover {
2995
+ transform: scale(1.08);
2996
+ box-shadow: 0 4px 12px var(--uvf-button-shadow);
2997
+ }
2998
+
2999
+ #uvf-epg-btn:active {
3000
+ transform: scale(0.95);
3001
+ transition: all 0.1s ease;
3002
+ }
3003
+
3004
+ #uvf-epg-btn svg {
3005
+ opacity: 0.9;
3006
+ transition: all 0.3s ease;
3007
+ filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3));
3008
+ }
3009
+
3010
+ #uvf-epg-btn:hover svg {
3011
+ opacity: 1;
3012
+ transform: scale(1.05);
3013
+ filter: drop-shadow(0 2px 4px rgba(0,0,0,0.4));
3014
+ }
3015
+
2892
3016
  .uvf-control-btn.play-pause {
2893
3017
  width: 50px;
2894
3018
  height: 50px;
@@ -3287,68 +3411,50 @@ export class WebPlayer extends BasePlayer {
3287
3411
  flex-shrink: 0;
3288
3412
  }
3289
3413
 
3290
- /* Navigation button styles */
3414
+ /* Navigation button styles - Follow theme like skip/volume buttons */
3291
3415
  .uvf-nav-btn {
3292
3416
  width: 40px;
3293
3417
  height: 40px;
3294
3418
  min-width: 40px;
3295
3419
  min-height: 40px;
3296
3420
  border-radius: 50%;
3297
- background: rgba(0, 0, 0, 0.6);
3298
- border: 1px solid rgba(255, 255, 255, 0.2);
3421
+ background: var(--uvf-button-bg);
3422
+ border: 1px solid var(--uvf-button-border);
3299
3423
  color: white;
3300
3424
  cursor: pointer;
3301
3425
  display: flex;
3302
3426
  align-items: center;
3303
3427
  justify-content: center;
3304
3428
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
3305
- backdrop-filter: blur(8px);
3429
+ backdrop-filter: blur(10px);
3306
3430
  position: relative;
3307
3431
  overflow: hidden;
3432
+ z-index: 10;
3308
3433
  }
3309
3434
 
3310
3435
  .uvf-nav-btn:hover {
3311
- background: rgba(255, 255, 255, 0.15);
3312
- border-color: rgba(255, 255, 255, 0.4);
3313
- transform: scale(1.05);
3314
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
3436
+ transform: scale(1.08);
3437
+ box-shadow: 0 4px 12px var(--uvf-button-shadow);
3315
3438
  }
3316
3439
 
3317
3440
  .uvf-nav-btn:active {
3318
3441
  transform: scale(0.95);
3442
+ transition: all 0.1s ease;
3319
3443
  }
3320
3444
 
3321
3445
  .uvf-nav-btn svg {
3322
3446
  width: 20px;
3323
3447
  height: 20px;
3324
3448
  fill: currentColor;
3325
- transition: all 0.2s ease;
3449
+ opacity: 0.9;
3450
+ transition: all 0.3s ease;
3451
+ filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3));
3326
3452
  }
3327
3453
 
3328
3454
  .uvf-nav-btn:hover svg {
3329
- transform: scale(1.1);
3330
- }
3331
-
3332
- /* Back button specific styles */
3333
- #uvf-back-btn {
3334
- background: rgba(0, 0, 0, 0.7);
3335
- }
3336
-
3337
- #uvf-back-btn:hover {
3338
- background: rgba(255, 255, 255, 0.2);
3339
- border-color: var(--uvf-accent-1, #ff0000);
3340
- }
3341
-
3342
- /* Close button specific styles */
3343
- #uvf-close-btn {
3344
- background: rgba(220, 53, 69, 0.8);
3345
- border-color: rgba(220, 53, 69, 0.6);
3346
- }
3347
-
3348
- #uvf-close-btn:hover {
3349
- background: rgba(220, 53, 69, 1);
3350
- border-color: rgba(220, 53, 69, 1);
3351
- box-shadow: 0 4px 12px rgba(220, 53, 69, 0.4);
3455
+ opacity: 1;
3456
+ transform: scale(1.05);
3457
+ filter: drop-shadow(0 2px 4px rgba(0,0,0,0.4));
3352
3458
  }
3353
3459
 
3354
3460
  .uvf-player-wrapper:hover .uvf-top-bar,
@@ -3804,6 +3910,83 @@ export class WebPlayer extends BasePlayer {
3804
3910
  100% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
3805
3911
  }
3806
3912
 
3913
+ /* Responsive shortcut/volume indicator for mobile and tablet */
3914
+ @media screen and (max-width: 767px) {
3915
+ .uvf-shortcut-indicator {
3916
+ padding: 16px 24px;
3917
+ font-size: 20px;
3918
+ max-width: calc(100vw - 40px);
3919
+ border-radius: 12px;
3920
+ backdrop-filter: blur(10px);
3921
+ }
3922
+
3923
+ /* Volume indicator - more compact on mobile */
3924
+ .uvf-shortcut-indicator .uvf-ki-volume {
3925
+ flex-direction: column;
3926
+ gap: 12px;
3927
+ }
3928
+
3929
+ .uvf-shortcut-indicator .uvf-ki-vol-icon svg {
3930
+ width: 32px;
3931
+ height: 32px;
3932
+ }
3933
+
3934
+ .uvf-shortcut-indicator .uvf-ki-vol-bar {
3935
+ width: clamp(200px, 70vw, 280px);
3936
+ height: 10px;
3937
+ border-radius: 5px;
3938
+ }
3939
+
3940
+ .uvf-shortcut-indicator .uvf-ki-vol-text {
3941
+ font-size: 22px;
3942
+ font-weight: 700;
3943
+ min-width: auto;
3944
+ text-align: center;
3945
+ width: 100%;
3946
+ }
3947
+
3948
+ /* Skip indicators - slightly smaller */
3949
+ .uvf-shortcut-indicator .uvf-ki-skip {
3950
+ width: 90px;
3951
+ height: 90px;
3952
+ }
3953
+
3954
+ .uvf-shortcut-indicator .uvf-ki-skip svg {
3955
+ width: 90px;
3956
+ height: 90px;
3957
+ }
3958
+
3959
+ .uvf-shortcut-indicator .uvf-ki-skip .uvf-ki-skip-num {
3960
+ font-size: 19px;
3961
+ }
3962
+
3963
+ /* Icon indicators */
3964
+ .uvf-shortcut-indicator .uvf-ki svg {
3965
+ width: 56px;
3966
+ height: 56px;
3967
+ }
3968
+
3969
+ .uvf-shortcut-indicator .uvf-ki-text {
3970
+ font-size: 16px;
3971
+ }
3972
+ }
3973
+
3974
+ @media screen and (min-width: 768px) and (max-width: 1023px) {
3975
+ /* Tablet optimization */
3976
+ .uvf-shortcut-indicator .uvf-ki-vol-bar {
3977
+ width: 160px;
3978
+ }
3979
+
3980
+ .uvf-shortcut-indicator .uvf-ki-vol-icon svg {
3981
+ width: 34px;
3982
+ height: 34px;
3983
+ }
3984
+
3985
+ .uvf-shortcut-indicator .uvf-ki-vol-text {
3986
+ font-size: 15px;
3987
+ }
3988
+ }
3989
+
3807
3990
  /* Hide top bar when no cursor */
3808
3991
  .uvf-player-wrapper.no-cursor .uvf-top-bar {
3809
3992
  opacity: 0 !important;
@@ -5274,8 +5457,16 @@ export class WebPlayer extends BasePlayer {
5274
5457
  this.debugLog('Center play button shown - video ended');
5275
5458
  }
5276
5459
  });
5277
- skipBackBtn?.addEventListener('click', () => this.seek(this.video.currentTime - 10));
5278
- skipForwardBtn?.addEventListener('click', () => this.seek(this.video.currentTime + 10));
5460
+ skipBackBtn?.addEventListener('click', () => {
5461
+ if (this.video && !isNaN(this.video.duration)) {
5462
+ this.seek(Math.max(0, this.video.currentTime - 10));
5463
+ }
5464
+ });
5465
+ skipForwardBtn?.addEventListener('click', () => {
5466
+ if (this.video && !isNaN(this.video.duration)) {
5467
+ this.seek(Math.min(this.video.duration, this.video.currentTime + 10));
5468
+ }
5469
+ });
5279
5470
  volumeBtn?.addEventListener('click', (e) => {
5280
5471
  e.stopPropagation();
5281
5472
  this.toggleMuteAction();
@@ -5317,12 +5508,12 @@ export class WebPlayer extends BasePlayer {
5317
5508
  this.handleVolumeChange(e);
5318
5509
  });
5319
5510
  progressBar?.addEventListener('click', (e) => {
5320
- this.handleProgressChange(e);
5511
+ this.seekToPosition(e);
5321
5512
  });
5322
5513
  progressBar?.addEventListener('mousedown', (e) => {
5323
5514
  this.isDragging = true;
5324
5515
  this.showTimeTooltip = true;
5325
- this.handleProgressChange(e);
5516
+ this.seekToPosition(e);
5326
5517
  this.updateTimeTooltip(e);
5327
5518
  });
5328
5519
  progressBar?.addEventListener('mouseenter', () => {
@@ -5343,14 +5534,18 @@ export class WebPlayer extends BasePlayer {
5343
5534
  e.preventDefault();
5344
5535
  this.isDragging = true;
5345
5536
  const touch = e.touches[0];
5346
- this.handleProgressChange(touch);
5537
+ const mouseEvent = new MouseEvent('mousedown', {
5538
+ clientX: touch.clientX,
5539
+ clientY: touch.clientY
5540
+ });
5541
+ this.seekToPosition(mouseEvent);
5347
5542
  }, { passive: false });
5348
5543
  document.addEventListener('mousemove', (e) => {
5349
5544
  if (this.isVolumeSliding) {
5350
5545
  this.handleVolumeChange(e);
5351
5546
  }
5352
5547
  if (this.isDragging && progressBar) {
5353
- this.handleProgressChange(e);
5548
+ this.seekToPosition(e);
5354
5549
  this.updateTimeTooltip(e);
5355
5550
  }
5356
5551
  });
@@ -5358,7 +5553,11 @@ export class WebPlayer extends BasePlayer {
5358
5553
  if (this.isDragging && progressBar) {
5359
5554
  e.preventDefault();
5360
5555
  const touch = e.touches[0];
5361
- this.handleProgressChange(touch);
5556
+ const mouseEvent = new MouseEvent('mousemove', {
5557
+ clientX: touch.clientX,
5558
+ clientY: touch.clientY
5559
+ });
5560
+ this.seekToPosition(mouseEvent);
5362
5561
  }
5363
5562
  }, { passive: false });
5364
5563
  document.addEventListener('mouseup', () => {
@@ -5617,14 +5816,18 @@ export class WebPlayer extends BasePlayer {
5617
5816
  case 'ArrowLeft':
5618
5817
  e.preventDefault();
5619
5818
  e.stopImmediatePropagation();
5620
- this.seek(Math.max(0, this.video.currentTime - 10));
5621
- shortcutText = '-10s';
5819
+ if (this.video && !isNaN(this.video.duration)) {
5820
+ this.seek(Math.max(0, this.video.currentTime - 10));
5821
+ shortcutText = '-10s';
5822
+ }
5622
5823
  break;
5623
5824
  case 'ArrowRight':
5624
5825
  e.preventDefault();
5625
5826
  e.stopImmediatePropagation();
5626
- this.seek(Math.min(this.video.duration, this.video.currentTime + 10));
5627
- shortcutText = '+10s';
5827
+ if (this.video && !isNaN(this.video.duration)) {
5828
+ this.seek(Math.min(this.video.duration, this.video.currentTime + 10));
5829
+ shortcutText = '+10s';
5830
+ }
5628
5831
  break;
5629
5832
  case 'ArrowUp':
5630
5833
  e.preventDefault();
@@ -5690,8 +5893,8 @@ export class WebPlayer extends BasePlayer {
5690
5893
  case '8':
5691
5894
  case '9':
5692
5895
  e.preventDefault();
5693
- const percent = parseInt(e.key) * 10;
5694
- if (this.video) {
5896
+ if (this.video && !isNaN(this.video.duration) && this.video.duration > 0) {
5897
+ const percent = parseInt(e.key) * 10;
5695
5898
  this.video.currentTime = (this.video.duration * percent) / 100;
5696
5899
  shortcutText = `${percent}%`;
5697
5900
  }
@@ -5963,7 +6166,7 @@ export class WebPlayer extends BasePlayer {
5963
6166
  try {
5964
6167
  this.requestPause();
5965
6168
  if (fromSeek || ((this.video.currentTime || 0) > lim)) {
5966
- this.video.currentTime = Math.max(0, lim - 0.1);
6169
+ this.safeSetCurrentTime(lim - 0.1);
5967
6170
  }
5968
6171
  }
5969
6172
  catch (_) { }
@@ -6117,16 +6320,25 @@ export class WebPlayer extends BasePlayer {
6117
6320
  this.video.muted = false;
6118
6321
  }
6119
6322
  }
6120
- handleProgressChange(e) {
6121
- const progressBar = document.getElementById('uvf-progress-bar');
6323
+ seekToPosition(e) {
6324
+ const progressBar = document.querySelector('.uvf-progress-bar');
6122
6325
  const progressFilled = document.getElementById('uvf-progress-filled');
6123
6326
  const progressHandle = document.getElementById('uvf-progress-handle');
6124
6327
  if (!progressBar || !this.video)
6125
6328
  return;
6329
+ const duration = this.video.duration;
6330
+ if (!isFinite(duration) || isNaN(duration) || duration <= 0) {
6331
+ this.debugWarn('Invalid video duration, cannot seek via progress bar');
6332
+ return;
6333
+ }
6126
6334
  const rect = progressBar.getBoundingClientRect();
6127
6335
  const x = Math.max(0, Math.min(e.clientX - rect.left, rect.width));
6128
6336
  const percent = (x / rect.width) * 100;
6129
- const time = (percent / 100) * this.video.duration;
6337
+ const time = (percent / 100) * duration;
6338
+ if (!isFinite(time) || isNaN(time)) {
6339
+ this.debugWarn('Calculated seek time is invalid:', time);
6340
+ return;
6341
+ }
6130
6342
  if (progressFilled) {
6131
6343
  progressFilled.style.width = percent + '%';
6132
6344
  }
@@ -6305,14 +6517,20 @@ export class WebPlayer extends BasePlayer {
6305
6517
  const tapPosition = tapX - wrapperRect.left;
6306
6518
  const wrapperWidth = wrapperRect.width;
6307
6519
  const isLeftSide = tapPosition < wrapperWidth / 2;
6520
+ const currentTime = this.video.currentTime;
6521
+ const duration = this.video.duration;
6522
+ if (!isFinite(currentTime) || isNaN(currentTime) || !isFinite(duration) || isNaN(duration)) {
6523
+ this.debugWarn('Invalid video time values, skipping double-tap action');
6524
+ return;
6525
+ }
6308
6526
  if (isLeftSide) {
6309
- const newTime = Math.max(0, this.video.currentTime - SKIP_SECONDS);
6527
+ const newTime = Math.max(0, currentTime - SKIP_SECONDS);
6310
6528
  this.seek(newTime);
6311
6529
  this.showShortcutIndicator(`-${SKIP_SECONDS}s`);
6312
6530
  this.debugLog('Double tap left - skip backward');
6313
6531
  }
6314
6532
  else {
6315
- const newTime = Math.min(this.video.duration, this.video.currentTime + SKIP_SECONDS);
6533
+ const newTime = Math.min(duration, currentTime + SKIP_SECONDS);
6316
6534
  this.seek(newTime);
6317
6535
  this.showShortcutIndicator(`+${SKIP_SECONDS}s`);
6318
6536
  this.debugLog('Double tap right - skip forward');
@@ -6360,8 +6578,11 @@ export class WebPlayer extends BasePlayer {
6360
6578
  return;
6361
6579
  this.fastBackwardInterval = setInterval(() => {
6362
6580
  if (this.video) {
6363
- const newTime = Math.max(0, this.video.currentTime - 0.1);
6364
- this.video.currentTime = newTime;
6581
+ const currentTime = this.video.currentTime;
6582
+ if (isFinite(currentTime) && !isNaN(currentTime)) {
6583
+ const newTime = Math.max(0, currentTime - 0.1);
6584
+ this.safeSetCurrentTime(newTime);
6585
+ }
6365
6586
  }
6366
6587
  }, 50);
6367
6588
  }
@@ -6767,8 +6988,8 @@ export class WebPlayer extends BasePlayer {
6767
6988
  return;
6768
6989
  }
6769
6990
  const chapter = this.coreChapterManager.seekToChapter(chapterId);
6770
- if (chapter) {
6771
- this.video.currentTime = chapter.startTime;
6991
+ if (chapter && isFinite(chapter.startTime) && !isNaN(chapter.startTime)) {
6992
+ this.safeSetCurrentTime(chapter.startTime);
6772
6993
  this.debugLog('Seeked to chapter:', chapter.title);
6773
6994
  }
6774
6995
  }
@@ -7420,17 +7641,9 @@ export class WebPlayer extends BasePlayer {
7420
7641
  item.classList.remove('expanded');
7421
7642
  });
7422
7643
  }
7423
- if (this.isMobileDevice()) {
7424
- setTimeout(() => {
7425
- this.hideSettingsMenu();
7426
- }, 300);
7427
- }
7428
- else {
7429
- setTimeout(() => {
7430
- this.generateAccordionMenu();
7431
- this.setupSettingsEventListeners();
7432
- }, 100);
7433
- }
7644
+ setTimeout(() => {
7645
+ this.hideSettingsMenu();
7646
+ }, 200);
7434
7647
  }
7435
7648
  updateSettingsActiveStates(className, activeElement) {
7436
7649
  const settingsMenu = document.getElementById('uvf-settings-menu');
@@ -7955,12 +8168,12 @@ export class WebPlayer extends BasePlayer {
7955
8168
  }
7956
8169
  }
7957
8170
  if (this.video && !this.video.paused && !this.paymentSuccessful) {
7958
- this.debugWarn('Unauthorized playbook detected, pausing video');
8171
+ this.debugWarn('Unauthorized playback detected, pausing video');
7959
8172
  try {
7960
8173
  this.video.pause();
7961
8174
  const freeDuration = Number(this.config.freeDuration || 0);
7962
- if (freeDuration > 0) {
7963
- this.video.currentTime = Math.max(0, freeDuration - 1);
8175
+ if (freeDuration > 0 && isFinite(freeDuration)) {
8176
+ this.safeSetCurrentTime(freeDuration - 1);
7964
8177
  }
7965
8178
  }
7966
8179
  catch (_) { }
@@ -7971,7 +8184,7 @@ export class WebPlayer extends BasePlayer {
7971
8184
  this.debugError('Security violation detected - disabling video');
7972
8185
  if (this.video) {
7973
8186
  this.video.pause();
7974
- this.video.currentTime = 0;
8187
+ this.safeSetCurrentTime(0);
7975
8188
  this.video.src = '';
7976
8189
  this.video.style.display = 'none';
7977
8190
  }