unified-video-framework 1.4.441 → 1.4.443

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.
@@ -2902,25 +2902,39 @@ export class WebPlayer extends BasePlayer {
2902
2902
  font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
2903
2903
  z-index: 100;
2904
2904
  pointer-events: none;
2905
+ filter: drop-shadow(0 10px 15px rgba(0,0,0,0.5));
2905
2906
  `;
2906
2907
 
2907
2908
  // 1. Globe Block (Left)
2908
2909
  const globeBlock = document.createElement('div');
2909
2910
  globeBlock.style.cssText = `
2910
- width: ${height}px;
2911
+ width: ${height * 1.3}px;
2911
2912
  height: ${height}px;
2912
- background: linear-gradient(135deg, #cc0000 0%, #880000 100%);
2913
+ background: linear-gradient(135deg, #e74c3c 0%, #c0392b 50%, #962d22 100%);
2913
2914
  display: flex;
2914
2915
  align-items: center;
2915
2916
  justify-content: center;
2916
2917
  flex-shrink: 0;
2917
- clip-path: polygon(0 0, 85% 0, 100% 100%, 0 100%);
2918
- z-index: 10;
2919
- box-shadow: 5px 0 15px rgba(0,0,0,0.5);
2918
+ clip-path: polygon(0% 0%, 78% 0%, 100% 100%, 0% 100%);
2919
+ z-index: 30;
2920
+ position: relative;
2921
+ overflow: hidden;
2922
+ `;
2923
+
2924
+ // Glossy Overlay for Globe Block
2925
+ const glossyGlobe = document.createElement('div');
2926
+ glossyGlobe.style.cssText = `
2927
+ position: absolute;
2928
+ top: 0; left: 0; right: 0; height: 40%;
2929
+ background: linear-gradient(180deg, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 100%);
2930
+ pointer-events: none;
2920
2931
  `;
2932
+ globeBlock.appendChild(glossyGlobe);
2933
+
2921
2934
  const globe = this.createGlobeElement(true);
2922
- globe.style.width = '60%';
2923
- globe.style.height = '60%';
2935
+ globe.style.width = '42%';
2936
+ globe.style.height = '42%';
2937
+ globe.style.marginRight = '18%';
2924
2938
  globeBlock.appendChild(globe);
2925
2939
  ticker.appendChild(globeBlock);
2926
2940
 
@@ -2930,40 +2944,56 @@ export class WebPlayer extends BasePlayer {
2930
2944
  flex-grow: 1;
2931
2945
  display: flex;
2932
2946
  flex-direction: column;
2933
- margin-left: -${height * 0.15}px;
2947
+ margin-left: -${height * 0.35}px;
2948
+ z-index: 10;
2934
2949
  `;
2935
2950
 
2936
2951
  // Row 1: Top Blue Bar (Headline)
2937
2952
  const topBar = document.createElement('div');
2938
2953
  topBar.style.cssText = `
2939
- height: 60%;
2940
- background: linear-gradient(90deg, #1e3c72 0%, #2a5298 100%);
2941
- clip-path: polygon(5% 0, 100% 0, 98% 100%, 0% 100%);
2954
+ height: 55%;
2955
+ background: linear-gradient(90deg, #1e3c72 0%, #2a5298 50%, #1e3c72 100%);
2956
+ clip-path: polygon(4% 0, 100% 0, 98.5% 100%, 0% 100%);
2942
2957
  display: flex;
2943
2958
  align-items: center;
2944
- padding: 0 40px;
2959
+ padding: 0 40px 0 65px;
2945
2960
  color: white;
2961
+ position: relative;
2962
+ overflow: hidden;
2963
+ border-bottom: 2px solid rgba(255,255,255,0.15);
2946
2964
  `;
2947
2965
 
2966
+ const glossyTop = document.createElement('div');
2967
+ glossyTop.style.cssText = `
2968
+ position: absolute;
2969
+ top: 0; left: 0; right: 0; height: 35%;
2970
+ background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
2971
+ `;
2972
+ topBar.appendChild(glossyTop);
2973
+
2948
2974
  const breakingText = document.createElement('span');
2949
2975
  breakingText.textContent = 'BREAKING NEWS';
2950
2976
  breakingText.style.cssText = `
2951
2977
  font-weight: 900;
2952
2978
  font-style: italic;
2953
- font-size: ${height * 0.22}px;
2954
- margin-right: 20px;
2955
- border-bottom: 2px solid white;
2979
+ font-size: ${height * 0.2}px;
2980
+ margin-right: 25px;
2981
+ white-space: nowrap;
2982
+ color: #fff;
2983
+ text-shadow: 0 0 12px rgba(255,255,255,0.6);
2984
+ letter-spacing: 0.5px;
2956
2985
  `;
2957
2986
  topBar.appendChild(breakingText);
2958
2987
 
2959
2988
  const headlineText = document.createElement('span');
2960
2989
  headlineText.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONSECTETUER';
2961
2990
  headlineText.style.cssText = `
2962
- font-weight: 700;
2963
- font-size: ${height * 0.25}px;
2991
+ font-weight: 800;
2992
+ font-size: ${height * 0.26}px;
2964
2993
  white-space: nowrap;
2965
2994
  overflow: hidden;
2966
2995
  text-overflow: ellipsis;
2996
+ text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
2967
2997
  `;
2968
2998
  topBar.appendChild(headlineText);
2969
2999
  content.appendChild(topBar);
@@ -2971,33 +3001,35 @@ export class WebPlayer extends BasePlayer {
2971
3001
  // Row 2: Bottom Black Bar (Scrolling Items)
2972
3002
  const bottomBar = document.createElement('div');
2973
3003
  bottomBar.style.cssText = `
2974
- height: 40%;
2975
- background: #000;
3004
+ height: 45%;
3005
+ background: linear-gradient(90deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
2976
3006
  display: flex;
2977
3007
  align-items: center;
2978
- clip-path: polygon(1% 0, 100% 0, 100% 100%, 0% 100%);
3008
+ clip-path: polygon(1.5% 0, 100% 0, 100% 100%, 0% 100%);
3009
+ border-top: 1px solid rgba(255,255,255,0.08);
2979
3010
  `;
2980
3011
 
2981
- // LIVE badge
2982
3012
  const liveBadge = document.createElement('div');
2983
3013
  liveBadge.textContent = 'LIVE';
2984
3014
  liveBadge.style.cssText = `
2985
- background: #f1c40f;
2986
- color: black;
3015
+ background: linear-gradient(180deg, #f1c40f 0%, #d4ac0d 100%);
3016
+ color: #000;
2987
3017
  font-weight: 900;
2988
- font-size: ${height * 0.15}px;
2989
- padding: 2px 10px;
2990
- margin-left: 20px;
2991
- clip-path: polygon(0 0, 90% 0, 100% 100%, 0 100%);
3018
+ font-size: ${height * 0.16}px;
3019
+ padding: 2px 14px;
3020
+ margin-left: 55px;
3021
+ clip-path: polygon(0 0, 88% 0, 100% 100%, 0 100%);
3022
+ box-shadow: 2px 2px 5px rgba(0,0,0,0.3);
2992
3023
  `;
2993
3024
  bottomBar.appendChild(liveBadge);
2994
3025
 
2995
- // Scrolling track
2996
3026
  const trackContainer = document.createElement('div');
2997
3027
  trackContainer.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center;`;
2998
-
2999
3028
  const track = this.createSeamlessScrollingTrack(config.items || [], config);
3000
3029
  track.style.fontSize = `${height * 0.18}px`;
3030
+ track.style.color = '#fff';
3031
+ track.style.fontWeight = '700';
3032
+ track.style.textShadow = '1px 1px 2px rgba(0,0,0,0.8)';
3001
3033
  trackContainer.appendChild(track);
3002
3034
  bottomBar.appendChild(trackContainer);
3003
3035
 
@@ -3014,106 +3046,151 @@ export class WebPlayer extends BasePlayer {
3014
3046
 
3015
3047
  const height = config.height || 75;
3016
3048
  const bottomOffset = config.bottomOffset || 0;
3017
- const topOffset = config.topOffset || 10;
3018
3049
 
3019
3050
  ticker.style.cssText = `
3020
3051
  position: absolute;
3021
3052
  left: 5%;
3022
3053
  right: 5%;
3054
+ bottom: ${bottomOffset}px;
3023
3055
  height: ${height}px;
3024
- ${position === 'top' ? `top: ${topOffset}px;` : `bottom: ${bottomOffset}px;`}
3025
3056
  display: flex;
3026
3057
  align-items: flex-end;
3027
3058
  font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
3028
3059
  z-index: 100;
3029
3060
  pointer-events: none;
3061
+ filter: drop-shadow(0 8px 12px rgba(0,0,0,0.4));
3030
3062
  `;
3031
3063
 
3032
- // Globe icon (floating on left)
3033
- const globeContainer = document.createElement('div');
3034
- globeContainer.style.cssText = `
3064
+ // Globe Wrapper
3065
+ const globeWrapper = document.createElement('div');
3066
+ globeWrapper.style.cssText = `
3035
3067
  width: ${height * 0.8}px;
3036
3068
  height: ${height * 0.8}px;
3037
- background: rgba(255,255,255,0.1);
3069
+ position: relative;
3070
+ z-index: 40;
3071
+ margin-right: 12px;
3072
+ flex-shrink: 0;
3073
+ `;
3074
+
3075
+ const globeContainer = document.createElement('div');
3076
+ globeContainer.style.cssText = `
3077
+ width: 100%;
3078
+ height: 100%;
3079
+ background: radial-gradient(circle at 30% 30%, #e74c3c 0%, #c1392b 60%, #962d22 100%);
3038
3080
  border-radius: 50%;
3039
3081
  display: flex;
3040
3082
  align-items: center;
3041
3083
  justify-content: center;
3042
- margin-right: 15px;
3043
- box-shadow: 0 0 20px rgba(0,0,0,0.5);
3044
- border: 2px solid rgba(255,255,255,0.2);
3084
+ box-shadow: inset -5px -5px 15px rgba(0,0,0,0.5), 0 0 25px rgba(0,0,0,0.6);
3085
+ border: 3px solid #fff;
3086
+ overflow: hidden;
3087
+ `;
3088
+
3089
+ const glossyGlobeEffect = document.createElement('div');
3090
+ glossyGlobeEffect.style.cssText = `
3091
+ position: absolute;
3092
+ top: 10%; left: 15%; width: 40%; height: 30%;
3093
+ background: rgba(255,255,255,0.3);
3094
+ border-radius: 50%;
3095
+ filter: blur(4px);
3096
+ pointer-events: none;
3045
3097
  `;
3098
+ globeContainer.appendChild(glossyGlobeEffect);
3099
+
3046
3100
  const globe = this.createGlobeElement(true);
3047
- globe.style.width = '70%';
3048
- globe.style.height = '70%';
3101
+ globe.style.width = '75%';
3102
+ globe.style.height = '75%';
3049
3103
  globeContainer.appendChild(globe);
3050
- ticker.appendChild(globeContainer);
3104
+ globeWrapper.appendChild(globeContainer);
3105
+ ticker.appendChild(globeWrapper);
3051
3106
 
3052
3107
  const content = document.createElement('div');
3053
- content.style.cssText = `flex-grow: 1; display: flex; flex-direction: column;`;
3108
+ content.style.cssText = `flex-grow: 1; display: flex; flex-direction: column; z-index: 20;`;
3054
3109
 
3055
3110
  // Row 1: Yellow/Red Header
3056
3111
  const row1 = document.createElement('div');
3057
- row1.style.cssText = `display: flex; height: 50%;`;
3112
+ row1.style.cssText = `display: flex; height: 50%; position: relative; overflow: hidden;`;
3058
3113
 
3059
3114
  const badge = document.createElement('div');
3060
3115
  badge.textContent = 'BREAKING NEWS';
3061
3116
  badge.style.cssText = `
3062
- background: #f1c40f;
3063
- color: black;
3117
+ background: linear-gradient(180deg, #f1c40f 0%, #d4ac0d 100%);
3118
+ color: #000;
3064
3119
  font-weight: 900;
3065
- padding: 0 20px;
3120
+ padding: 0 30px;
3066
3121
  display: flex;
3067
3122
  align-items: center;
3068
- clip-path: polygon(0 0, 90% 0, 100% 100%, 0 100%);
3069
- font-size: ${height * 0.18}px;
3123
+ clip-path: polygon(0 0, 88% 0, 100% 100%, 0 100%);
3124
+ font-size: ${height * 0.2}px;
3125
+ position: relative;
3126
+ z-index: 5;
3127
+ text-shadow: 0 1px 1px rgba(255,255,255,0.3);
3070
3128
  `;
3071
3129
  row1.appendChild(badge);
3072
3130
 
3073
3131
  const headline = document.createElement('div');
3074
3132
  headline.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONSECTETUER';
3075
3133
  headline.style.cssText = `
3076
- background: #e74c3c;
3134
+ background: linear-gradient(90deg, #e74c3c 0%, #c1392b 50%, #e74c3c 100%);
3077
3135
  color: white;
3078
- font-weight: 700;
3079
- padding: 0 30px;
3136
+ font-weight: 800;
3137
+ padding: 0 45px;
3080
3138
  display: flex;
3081
3139
  align-items: center;
3082
3140
  flex-grow: 1;
3083
- margin-left: -10px;
3084
- clip-path: polygon(2% 0, 100% 0, 98% 100%, 0 100%);
3085
- font-size: ${height * 0.22}px;
3141
+ margin-left: -25px;
3142
+ clip-path: polygon(5% 0, 100% 0, 96% 100%, 0 100%);
3143
+ font-size: ${height * 0.23}px;
3144
+ text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
3145
+ border-bottom: 3px solid rgba(255,255,255,0.15);
3146
+ `;
3147
+
3148
+ const glossyHeader = document.createElement('div');
3149
+ glossyHeader.style.cssText = `
3150
+ position: absolute;
3151
+ top: 0; left: 0; right: 0; height: 40%;
3152
+ background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
3086
3153
  `;
3154
+ headline.appendChild(glossyHeader);
3155
+
3087
3156
  row1.appendChild(headline);
3088
3157
  content.appendChild(row1);
3089
3158
 
3090
- // Row 2: Blue Ticker
3159
+ // Row 2: Blue Ticker (Semi-transparent with Pro Blur)
3091
3160
  const row2 = document.createElement('div');
3092
3161
  row2.style.cssText = `
3093
- height: 40%;
3094
- background: #2980b9;
3162
+ height: 42%;
3163
+ background: rgba(30, 60, 114, 0.85);
3095
3164
  display: flex;
3096
3165
  align-items: center;
3097
- margin-top: 2px;
3098
- clip-path: polygon(0 0, 100% 0, 100% 100%, 1% 100%);
3166
+ margin-top: 5px;
3167
+ clip-path: polygon(1.5% 0, 100% 0, 100% 100%, 2.5% 100%);
3168
+ backdrop-filter: blur(12px);
3169
+ border: 1px solid rgba(255,255,255,0.1);
3170
+ box-shadow: inset 0 0 10px rgba(0,0,0,0.3);
3099
3171
  `;
3100
3172
 
3101
3173
  const live = document.createElement('div');
3102
3174
  live.textContent = 'LIVE';
3103
3175
  live.style.cssText = `
3104
- background: white;
3105
- color: #2980b9;
3106
- font-weight: 900;
3107
- padding: 0 15px;
3108
- margin: 0 10px;
3109
- font-size: ${height * 0.15}px;
3176
+ background: #fff;
3177
+ color: #1e3c72;
3178
+ font-weight: 950;
3179
+ padding: 2px 18px;
3180
+ margin-left: 35px;
3181
+ margin-right: 20px;
3182
+ font-size: ${height * 0.16}px;
3183
+ box-shadow: 2px 2px 8px rgba(0,0,0,0.3);
3184
+ letter-spacing: 1px;
3110
3185
  `;
3111
3186
  row2.appendChild(live);
3112
3187
 
3113
3188
  const trackCont = document.createElement('div');
3114
3189
  trackCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
3115
3190
  const track = this.createSeamlessScrollingTrack(config.items || [], config);
3116
- track.style.fontSize = `${height * 0.16}px`;
3191
+ track.style.fontSize = `${height * 0.17}px`;
3192
+ track.style.fontWeight = '700';
3193
+ track.style.textShadow = '1px 1px 3px rgba(0,0,0,0.9)';
3117
3194
  trackCont.appendChild(track);
3118
3195
  row2.appendChild(trackCont);
3119
3196
  content.appendChild(row2);
@@ -3221,74 +3298,121 @@ export class WebPlayer extends BasePlayer {
3221
3298
 
3222
3299
  const height = config.height || 65;
3223
3300
  const bottomOffset = config.bottomOffset || 0;
3224
- const topOffset = config.topOffset || 10;
3225
3301
 
3226
3302
  ticker.style.cssText = `
3227
3303
  position: absolute;
3228
3304
  left: 15%;
3229
3305
  right: 15%;
3306
+ bottom: ${bottomOffset}px;
3230
3307
  height: ${height}px;
3231
- ${position === 'top' ? `top: ${topOffset}px;` : `bottom: ${bottomOffset}px;`}
3232
3308
  display: flex;
3233
3309
  align-items: flex-end;
3234
3310
  font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
3235
3311
  z-index: 100;
3236
3312
  pointer-events: none;
3313
+ filter: drop-shadow(0 12px 20px rgba(0,0,0,0.6));
3237
3314
  `;
3238
3315
 
3239
- // Large Blue Box
3316
+ // Large Blue Box (Pro Upgrade)
3240
3317
  const newsBox = document.createElement('div');
3241
3318
  newsBox.style.cssText = `
3242
- width: ${height * 1.5}px;
3319
+ width: ${height * 1.8}px;
3243
3320
  height: 100%;
3244
- background: #1e3c72;
3321
+ background: linear-gradient(135deg, #1e3c72 0%, #2a5298 50%, #1e3c72 100%);
3245
3322
  display: flex;
3246
3323
  flex-direction: column;
3247
3324
  justify-content: center;
3248
- padding-left: 15px;
3325
+ align-items: center;
3249
3326
  position: relative;
3250
- clip-path: polygon(0 0, 100% 0, 95% 100%, 0 100%);
3327
+ clip-path: polygon(0 0, 100% 0, 82% 100%, 0 100%);
3251
3328
  flex-shrink: 0;
3329
+ z-index: 40;
3330
+ border-right: 2px solid rgba(255,255,255,0.2);
3252
3331
  `;
3253
3332
 
3333
+ const glossyNews = document.createElement('div');
3334
+ glossyNews.style.cssText = `
3335
+ position: absolute;
3336
+ top: 0; left: 0; right: 0; height: 40%;
3337
+ background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
3338
+ `;
3339
+ newsBox.appendChild(glossyNews);
3340
+
3254
3341
  const bt = document.createElement('div');
3255
- bt.style.cssText = `display: flex; gap: 5px; margin-bottom: 5px;`;
3342
+ bt.style.cssText = `display: flex; gap: 6px; margin-bottom: 2px; width: 100%; justify-content: center; padding-right: 18%; position: relative; z-index: 2;`;
3256
3343
 
3257
3344
  const b1 = document.createElement('span');
3258
3345
  b1.textContent = 'BREAKING';
3259
- b1.style.cssText = `background: #c0392b; font-size: 10px; font-weight: 800; padding: 2px 5px; border-radius: 2px; color: white;`;
3346
+ b1.style.cssText = `
3347
+ background: #c0392b;
3348
+ font-size: ${height * 0.14}px;
3349
+ font-weight: 900;
3350
+ padding: 2px 8px;
3351
+ border-radius: 2px;
3352
+ color: white;
3353
+ box-shadow: 0 0 10px rgba(192, 57, 43, 0.8);
3354
+ `;
3260
3355
  bt.appendChild(b1);
3261
3356
 
3262
3357
  const b2 = document.createElement('span');
3263
3358
  b2.textContent = 'LIVE';
3264
- b2.style.cssText = `background: #f1c40f; font-size: 10px; font-weight: 800; padding: 2px 5px; border-radius: 2px; color: black;`;
3359
+ b2.style.cssText = `
3360
+ background: #f1c40f;
3361
+ font-size: ${height * 0.14}px;
3362
+ font-weight: 900;
3363
+ padding: 2px 8px;
3364
+ border-radius: 2px;
3365
+ color: black;
3366
+ box-shadow: 0 0 10px rgba(241, 196, 15, 0.6);
3367
+ `;
3265
3368
  bt.appendChild(b2);
3266
3369
  newsBox.appendChild(bt);
3267
3370
 
3268
3371
  const nt = document.createElement('div');
3269
3372
  nt.textContent = 'NEWS';
3270
- nt.style.cssText = `font-size: ${height * 0.4}px; font-weight: 900; color: white; letter-spacing: 2px;`;
3373
+ nt.style.cssText = `
3374
+ font-size: ${height * 0.5}px;
3375
+ font-weight: 900;
3376
+ color: white;
3377
+ letter-spacing: 6px;
3378
+ padding-right: 18%;
3379
+ line-height: 1;
3380
+ text-shadow: 3px 3px 6px rgba(0,0,0,0.6);
3381
+ `;
3271
3382
  newsBox.appendChild(nt);
3272
3383
  ticker.appendChild(newsBox);
3273
3384
 
3274
- // Red Scrolling Bar
3385
+ // Red Scrolling Bar (Pro Upgrade)
3275
3386
  const redBar = document.createElement('div');
3276
3387
  redBar.style.cssText = `
3277
3388
  flex-grow: 1;
3278
- height: 50%;
3279
- background: #c0392b;
3280
- margin-left: -${height * 0.1}px;
3389
+ height: 52%;
3390
+ background: linear-gradient(90deg, #c0392b 0%, #e74c3c 50%, #c0392b 100%);
3391
+ margin-left: -${height * 0.3}px;
3281
3392
  display: flex;
3282
3393
  align-items: center;
3283
- padding-left: 20px;
3284
- clip-path: polygon(2% 0, 100% 0, 100% 100%, 0 100%);
3394
+ padding-left: ${height * 0.45}px;
3395
+ padding-right: 30px;
3396
+ clip-path: polygon(6% 0, 100% 0, 100% 100%, 0 100%);
3397
+ z-index: 20;
3398
+ border-top: 1px solid rgba(255,255,255,0.1);
3399
+ box-shadow: inset 0 0 15px rgba(0,0,0,0.4);
3285
3400
  `;
3286
3401
 
3402
+ const glossyRed = document.createElement('div');
3403
+ glossyRed.style.cssText = `
3404
+ position: absolute;
3405
+ top: 0; left: 0; right: 0; height: 35%;
3406
+ background: linear-gradient(180deg, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 100%);
3407
+ `;
3408
+ redBar.appendChild(glossyRed);
3409
+
3287
3410
  const tCont = document.createElement('div');
3288
3411
  tCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
3289
3412
  const track = this.createSeamlessScrollingTrack(config.items || [], config);
3290
- track.style.fontSize = `${height * 0.25}px`;
3291
- track.style.fontWeight = '700';
3413
+ track.style.fontSize = `${height * 0.24}px`;
3414
+ track.style.fontWeight = '800';
3415
+ track.style.textShadow = '2px 2px 4px rgba(0,0,0,0.7)';
3292
3416
  tCont.appendChild(track);
3293
3417
  redBar.appendChild(tCont);
3294
3418
  ticker.appendChild(redBar);