@viewlift/player-backup 1.0.2 → 1.0.3-lighteningjs

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.
Files changed (134) hide show
  1. package/.babelrc +8 -0
  2. package/.browserslistrc +2 -0
  3. package/README.md +29 -0
  4. package/babel.config.json +8 -0
  5. package/dist/38afc79c94e0bcf0.png +0 -0
  6. package/dist/3bc8b7ff04e98d37.png +0 -0
  7. package/dist/522ea7c76ac4fd33.png +0 -0
  8. package/dist/a74cd46ed4277568.png +0 -0
  9. package/dist/b739faec1fde1346.png +0 -0
  10. package/dist/ed3d0a4d9de91460.png +0 -0
  11. package/dist/index.cjs.css +2 -0
  12. package/dist/index.cjs.css.map +1 -0
  13. package/dist/index.cjs.js +2 -0
  14. package/dist/index.d.ts +24 -0
  15. package/dist/index.esm.css +2 -0
  16. package/dist/index.esm.css.map +1 -0
  17. package/dist/index.esm.js +2 -0
  18. package/dist/main-player/player-ui.d.ts +19 -0
  19. package/dist/player-components/player-buttons/playerButtons.d.ts +38 -0
  20. package/dist/player-components/player-seekbar/playerSeekbar.d.ts +25 -0
  21. package/dist/player-ui/player-ui.d.ts +18 -0
  22. package/dist/playerInitializer.d.ts +13 -0
  23. package/index.html +49 -0
  24. package/package.json +35 -15
  25. package/rollup.config.mjs +45 -0
  26. package/src/ads-manager/ads-manager.js +120 -0
  27. package/src/assets/checkIcon.png +0 -0
  28. package/src/assets/pauseIcon.png +0 -0
  29. package/src/assets/pauseIconFocus.png +0 -0
  30. package/src/assets/playIcon.png +0 -0
  31. package/src/assets/playIconFocus.png +0 -0
  32. package/src/assets/settingsIcon.png +0 -0
  33. package/src/index.ts +74 -0
  34. package/src/player-components/player-buttons/playerButtons.js +106 -0
  35. package/src/player-components/player-seekbar/playerSeekbar.js +223 -0
  36. package/src/player-components/player-setting-option-wrapper/player-setting-option-one-wrapper.js +82 -0
  37. package/src/player-components/player-setting-option-wrapper/player-setting-option-two-wrapper.js +84 -0
  38. package/src/player-components/player-sidebar/player-sidebar.js +188 -0
  39. package/src/player-components/player-title/playerTitle.js +56 -0
  40. package/src/player-ui/player-ui.js +564 -0
  41. package/src/playerControls/playerControls.css +10 -0
  42. package/src/playerControls/playerControls.js +501 -0
  43. package/src/playerInitializer.js +335 -0
  44. package/src/styles/index.css +204 -0
  45. package/src/utilities/utilities.js +79 -0
  46. package/tsconfig.json +15 -0
  47. package/cjs/autoNextVideo-815419cb.js +0 -1
  48. package/cjs/bundle.css +0 -577
  49. package/cjs/caption-settings-67212c17.js +0 -1
  50. package/cjs/caption-settings-6e301004.js +0 -1
  51. package/cjs/dvr_skin-f7f770ae.js +0 -1
  52. package/cjs/error-26d5a3c3.js +0 -1
  53. package/cjs/features-fd1e9785.js +0 -1
  54. package/cjs/generic-81b1be69.js +0 -1
  55. package/cjs/icons-51594f89.js +0 -1
  56. package/cjs/index.js +0 -1
  57. package/cjs/keyboardShortcuts-1afbf18c.js +0 -1
  58. package/cjs/loader-393b838a.js +0 -1
  59. package/cjs/multicam-1647c428.js +0 -1
  60. package/cjs/multicam-a41fe4a6.js +0 -1
  61. package/cjs/multicamv2-76d8530b.js +0 -1
  62. package/cjs/multicamv2-f48d95fe.js +0 -1
  63. package/cjs/mwebPotrait-3c11d7cf.js +0 -1
  64. package/cjs/mwebPotraitTray-a3a2715b.js +0 -1
  65. package/cjs/nextEpisodeButton-b6e6586f.js +0 -1
  66. package/cjs/nextEpisodeButton-cc80609a.js +0 -1
  67. package/cjs/nondvr_skin-ef2cb3b2.js +0 -1
  68. package/cjs/playlist-a550a735.js +0 -1
  69. package/cjs/playlist-df87ca90.js +0 -1
  70. package/cjs/renditions-c3ea26e8.js +0 -1
  71. package/cjs/resolution-51b38a3e.js +0 -1
  72. package/cjs/series-6178964e.js +0 -1
  73. package/cjs/series-9c237975.js +0 -1
  74. package/cjs/series-v2-70137d8c.js +0 -1
  75. package/cjs/series-v2-a265ff17.js +0 -1
  76. package/cjs/settings-icon-b350b587.js +0 -1
  77. package/cjs/settings-icon-e6a8feee.js +0 -1
  78. package/cjs/skin-14da56f6.js +0 -1
  79. package/cjs/skin-225252ff.js +0 -1
  80. package/cjs/skin-286f52db.js +0 -1
  81. package/cjs/skin-534810ae.js +0 -1
  82. package/cjs/skin-638aecc2.js +0 -1
  83. package/cjs/skin-84083352.js +0 -1
  84. package/cjs/skin-983a2ea7.js +0 -1
  85. package/cjs/skin-9eba464b.js +0 -1
  86. package/cjs/skin-b703ef26.js +0 -1
  87. package/cjs/skin-f225a42e.js +0 -1
  88. package/cjs/util-ce8a4138.js +0 -1
  89. package/cjs/videoSelector-a4c00f50.js +0 -1
  90. package/cjs/videoSelector-fcdf11eb.js +0 -1
  91. package/esm/autoNextVideo-89ede579.js +0 -1
  92. package/esm/bundle.css +0 -577
  93. package/esm/caption-settings-2e47813b.js +0 -1
  94. package/esm/caption-settings-3f6b6163.js +0 -1
  95. package/esm/dvr_skin-9cc1b144.js +0 -1
  96. package/esm/error-2395864b.js +0 -1
  97. package/esm/features-05101ce6.js +0 -1
  98. package/esm/generic-4a3c0d6b.js +0 -1
  99. package/esm/icons-f5378bf3.js +0 -1
  100. package/esm/index.js +0 -1
  101. package/esm/keyboardShortcuts-7fa108ec.js +0 -1
  102. package/esm/loader-580278fe.js +0 -1
  103. package/esm/multicam-bc0aea8a.js +0 -1
  104. package/esm/multicam-de741974.js +0 -1
  105. package/esm/multicamv2-d006cffa.js +0 -1
  106. package/esm/multicamv2-fb91fa98.js +0 -1
  107. package/esm/mwebPotrait-3c1805d8.js +0 -1
  108. package/esm/mwebPotraitTray-0ff12233.js +0 -1
  109. package/esm/nextEpisodeButton-a1556cdf.js +0 -1
  110. package/esm/nextEpisodeButton-ec95417f.js +0 -1
  111. package/esm/nondvr_skin-64be70e5.js +0 -1
  112. package/esm/playlist-5d3f4436.js +0 -1
  113. package/esm/playlist-7ecf432a.js +0 -1
  114. package/esm/renditions-0fdb57ed.js +0 -1
  115. package/esm/resolution-57e7767a.js +0 -1
  116. package/esm/series-041152aa.js +0 -1
  117. package/esm/series-998e2084.js +0 -1
  118. package/esm/series-v2-0727ee8c.js +0 -1
  119. package/esm/series-v2-9bcd5d54.js +0 -1
  120. package/esm/settings-icon-0125bffd.js +0 -1
  121. package/esm/settings-icon-9bac9ef3.js +0 -1
  122. package/esm/skin-0aea7a56.js +0 -1
  123. package/esm/skin-2c638dc1.js +0 -1
  124. package/esm/skin-5a02ebe6.js +0 -1
  125. package/esm/skin-665ec17e.js +0 -1
  126. package/esm/skin-80957fd8.js +0 -1
  127. package/esm/skin-851ea2fb.js +0 -1
  128. package/esm/skin-bb73c15b.js +0 -1
  129. package/esm/skin-cd537931.js +0 -1
  130. package/esm/skin-d5510f70.js +0 -1
  131. package/esm/skin-fba79111.js +0 -1
  132. package/esm/util-9c9ee6b3.js +0 -1
  133. package/esm/videoSelector-8da87dd3.js +0 -1
  134. package/esm/videoSelector-8e258d45.js +0 -1
@@ -0,0 +1,82 @@
1
+ export class SettingsOptionOneWrapper {
2
+ constructor(props) {
3
+ if (!props || typeof props !== 'object') {
4
+ throw new Error('SettingsOptionOneWrapper: props must be a valid object');
5
+ }
6
+
7
+ this.title = props.title || 'Option';
8
+ this.klassname = props.klassname || 'default-option-wrapper';
9
+ this.handleClick = props.callback || (() => {});
10
+ this.focused = props.focused || false;
11
+
12
+ if (typeof this.handleClick !== 'function') {
13
+ throw new Error('SettingsOptionOneWrapper: callback must be a function');
14
+ }
15
+
16
+ this.handleClick = this.handleClick.bind(this);
17
+ }
18
+
19
+ mount(mountPoint) {
20
+ if (!mountPoint || !(mountPoint instanceof HTMLElement)) {
21
+ throw new Error('SettingsOptionOneWrapper: mountPoint must be a valid DOM element');
22
+ }
23
+
24
+ const optionWrapper = document.createElement('div');
25
+ optionWrapper.className = this.klassname;
26
+ optionWrapper.tabIndex = 0;
27
+
28
+ const titleElement = document.createElement('p');
29
+ titleElement.textContent = this.title;
30
+ optionWrapper.appendChild(titleElement);
31
+
32
+ const arrowElement = document.createElement('p');
33
+ arrowElement.textContent = "›";
34
+ optionWrapper.appendChild(arrowElement);
35
+
36
+ if (this.focused) {
37
+ optionWrapper.classList.add('focused');
38
+ }
39
+
40
+ optionWrapper.addEventListener('focus', () => {
41
+ this.focused = true;
42
+ optionWrapper.classList.add('focused');
43
+ });
44
+ optionWrapper.addEventListener('blur', () => {
45
+ this.focused = false;
46
+ optionWrapper.classList.remove('focused');
47
+ });
48
+
49
+ optionWrapper.addEventListener('keydown', (event) => {
50
+ if (event.key === 'Enter' || event.key === 'OK') {
51
+ this.handleClick();
52
+ }
53
+ });
54
+
55
+ this.optionWrapper = optionWrapper;
56
+ optionWrapper.instance = this; // Set the instance property
57
+ mountPoint.appendChild(optionWrapper);
58
+ }
59
+
60
+ unmount() {
61
+ if (this.optionWrapper) {
62
+ this.optionWrapper.remove();
63
+ this.optionWrapper = undefined;
64
+ }
65
+ }
66
+
67
+ focus() {
68
+ if (this.optionWrapper) {
69
+ this.optionWrapper.focus();
70
+ this.optionWrapper.classList.add('focused');
71
+ this.focused = true;
72
+ }
73
+ }
74
+
75
+ blur() {
76
+ if (this.optionWrapper) {
77
+ this.optionWrapper.blur();
78
+ this.optionWrapper.classList.remove('focused');
79
+ this.focused = false;
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,84 @@
1
+ import checkIcon from '../../assets/checkIcon.png';
2
+
3
+ export class SettingsOptionTwoWrapper {
4
+ constructor(props) {
5
+ if (!props || typeof props !== 'object') {
6
+ throw new Error('SettingsOptionTwoWrapper: props must be a valid object');
7
+ }
8
+
9
+ this.title = props.title || 'Option';
10
+ this.klassname = props.klassname || 'default-option-wrapper';
11
+ this.selected = props.selected || false;
12
+ this.focused = props.focused || false;
13
+ this.imgSrc = props.imgSrc || checkIcon;
14
+ this.id = props.id;
15
+
16
+ if (typeof this.title !== 'string') {
17
+ throw new Error('SettingsOptionTwoWrapper: title must be a string');
18
+ }
19
+ }
20
+
21
+ mount(mountPoint) {
22
+ if (!mountPoint || !(mountPoint instanceof HTMLElement)) {
23
+ throw new Error('SettingsOptionTwoWrapper: mountPoint must be a valid DOM element');
24
+ }
25
+
26
+ const optionWrapper = document.createElement('div');
27
+ optionWrapper.className = this.klassname;
28
+ optionWrapper.tabIndex = 0;
29
+
30
+ const titleElement = document.createElement('p');
31
+ titleElement.textContent = this.title;
32
+ optionWrapper.appendChild(titleElement);
33
+
34
+ if (this.selected) {
35
+ optionWrapper.classList.add('selected');
36
+ const selectedElement = document.createElement('span');
37
+ const img = document.createElement('img');
38
+ img.src = this.imgSrc;
39
+ img.alt = this.imgAltText || 'Selected';
40
+ selectedElement.appendChild(img);
41
+ optionWrapper.appendChild(selectedElement);
42
+ }
43
+
44
+ if (this.focused) {
45
+ optionWrapper.classList.add('focused');
46
+ }
47
+
48
+ optionWrapper.addEventListener('focus', () => {
49
+ this.focused = true;
50
+ optionWrapper.classList.add('focused');
51
+ });
52
+ optionWrapper.addEventListener('blur', () => {
53
+ this.focused = false;
54
+ optionWrapper.classList.remove('focused');
55
+ });
56
+
57
+ this.optionWrapper = optionWrapper;
58
+ optionWrapper.instance = this; // Set the instance property
59
+ mountPoint.appendChild(optionWrapper);
60
+ }
61
+
62
+ unmount() {
63
+ if (this.optionWrapper) {
64
+ this.optionWrapper.remove();
65
+ this.optionWrapper = undefined;
66
+ }
67
+ }
68
+
69
+ focus() {
70
+ if (this.optionWrapper) {
71
+ this.optionWrapper.focus();
72
+ this.optionWrapper.classList.add('focused');
73
+ this.focused = true;
74
+ }
75
+ }
76
+
77
+ blur() {
78
+ if (this.optionWrapper) {
79
+ this.optionWrapper.blur();
80
+ this.optionWrapper.classList.remove('focused');
81
+ this.focused = false;
82
+ }
83
+ }
84
+ }
@@ -0,0 +1,188 @@
1
+ import { SettingsOptionOneWrapper } from '../player-setting-option-wrapper/player-setting-option-one-wrapper.js';
2
+ import { SettingsOptionTwoWrapper } from '../player-setting-option-wrapper/player-setting-option-two-wrapper.js';
3
+
4
+ export class Sidebar {
5
+ constructor(props) {
6
+ if (!props || typeof props !== 'object') {
7
+ throw new Error('Sidebar: props must be a valid object');
8
+ }
9
+
10
+ this.title = props.title || 'Settings';
11
+ this.items = props.items || [
12
+ {text: 'Video Quality', isSelected: true, callback: () => {}},
13
+ {text: 'Audio Language', isSelected: false, callback: () => {}},
14
+ {text: 'Subtitles', isSelected: false, callback: () => {}}
15
+ ];
16
+ this.klassname = props.klassname || 'default-sidebar';
17
+ this.currentFocusedOption = null;
18
+ this.lastFocusedElement = props.lastFocusedElement || null;
19
+ this.type = props.type || 'navigation';
20
+ this.focused = props.focused || false;
21
+ this.callback = props.callback || (() => {});
22
+ this.onselect = props.onselect || (() => {});
23
+
24
+ if (typeof this.callback !== 'function') {
25
+ throw new Error('Sidebar: callback must be a function');
26
+ }
27
+
28
+ if (!['navigation', 'selection'].includes(this.type)) {
29
+ throw new Error('Sidebar: type must be either "navigation" or "selection"');
30
+ }
31
+ }
32
+
33
+ mount(mountPoint) {
34
+ if (!mountPoint || !(mountPoint instanceof HTMLElement)) {
35
+ throw new Error('Sidebar: mountPoint must be a valid DOM element');
36
+ }
37
+
38
+ const sidebar = document.createElement('div');
39
+ sidebar.className = this.klassname;
40
+
41
+ const titleElement = document.createElement('h2');
42
+ titleElement.textContent = this.title;
43
+ titleElement.style.fontSize = '38px';
44
+ sidebar.appendChild(titleElement);
45
+
46
+ const list = document.createElement('div');
47
+ if (this.type === 'navigation') {
48
+ this.items.forEach((item, idx) => {
49
+ const listItem = new SettingsOptionOneWrapper({
50
+ title: item.text,
51
+ klassname: 'default-option-wrapper',
52
+ focused: idx === 0,
53
+ callback: item.callback
54
+ });
55
+ item.instance = listItem; // Store the listItem instance in the item
56
+ if (idx === 0) {
57
+ this.currentFocusedOption = listItem;
58
+ }
59
+ listItem.mount(list);
60
+ });
61
+ } else if (this.type === 'selection') {
62
+ this.items.forEach((item, idx) => {
63
+ const listItem = new SettingsOptionTwoWrapper({
64
+ title: item.text,
65
+ klassname: 'default-option-wrapper',
66
+ focused: idx === 0,
67
+ selected: item.isSelected,
68
+ id: item.id,
69
+ });
70
+ item.instance = listItem; // Store the listItem instance in the item
71
+ if (idx === 0) {
72
+ this.currentFocusedOption = listItem;
73
+ }
74
+ listItem.mount(list);
75
+ });
76
+ }
77
+
78
+ sidebar.appendChild(list);
79
+ this.sidebarElement = sidebar;
80
+ mountPoint.appendChild(sidebar);
81
+
82
+ this.addEventListeners();
83
+ this.focus();
84
+ }
85
+
86
+ addEventListeners() {
87
+ if (!this.sidebarElement) {
88
+ throw new Error('Sidebar: sidebarElement is not initialized');
89
+ }
90
+
91
+ this.sidebarElement.addEventListener('keydown', (event) => {
92
+ if (event.key === 'ArrowDown') {
93
+ event.preventDefault();
94
+ event.stopPropagation();
95
+ this.focusNext();
96
+ } else if (event.key === 'ArrowUp') {
97
+ event.preventDefault();
98
+ event.stopPropagation();
99
+ this.focusPrevious();
100
+ } else if (event.key === 'Backspace' || event.key === 'Escape') {
101
+ event.preventDefault();
102
+ event.stopPropagation();
103
+ this.unfocus();
104
+ this.unmount();
105
+ } else if (event.key === 'Enter' || event.key === 'OK') {
106
+ event.preventDefault();
107
+ event.stopPropagation();
108
+ if (this.type === 'selection') {
109
+ this.selectionTypeAction();
110
+ }
111
+ }
112
+ });
113
+ }
114
+
115
+ selectionTypeAction() {
116
+ if (this.currentFocusedOption) {
117
+ // Deselect all options
118
+ this.items.forEach(item => {
119
+ if (item.instance) {
120
+ item.instance.optionWrapper.classList.remove('selected');
121
+ item.instance.selected = false;
122
+ // Remove image if present
123
+ const img = item.instance.optionWrapper.querySelector('img');
124
+ if (img) {
125
+ img.parentElement.remove();
126
+ }
127
+ }
128
+ });
129
+ // Select the current option
130
+ this.currentFocusedOption.optionWrapper.classList.add('selected');
131
+ this.currentFocusedOption.selected = true;
132
+ // Add image to the selected option
133
+ const selectedElement = document.createElement('span');
134
+ const img = document.createElement('img');
135
+ img.src = this.currentFocusedOption.imgSrc;
136
+ img.alt = 'Selected';
137
+ selectedElement.appendChild(img);
138
+ this.currentFocusedOption.optionWrapper.appendChild(selectedElement);
139
+ this.onselect(this.currentFocusedOption);
140
+ }
141
+ }
142
+
143
+ focusNext() {
144
+ if (this.sidebarElement && this.currentFocusedOption) {
145
+ const nextSibling = this.currentFocusedOption.optionWrapper.nextElementSibling;
146
+ if (nextSibling) {
147
+ this.currentFocusedOption.blur();
148
+ this.currentFocusedOption = nextSibling.instance;
149
+ this.currentFocusedOption.focus();
150
+ }
151
+ }
152
+ }
153
+
154
+ focusPrevious() {
155
+ if (this.sidebarElement && this.currentFocusedOption) {
156
+ const previousSibling = this.currentFocusedOption.optionWrapper.previousElementSibling;
157
+ if (previousSibling) {
158
+ this.currentFocusedOption.blur();
159
+ this.currentFocusedOption = previousSibling.instance;
160
+ this.currentFocusedOption.focus();
161
+ }
162
+ }
163
+ }
164
+
165
+ focus() {
166
+ if (this.sidebarElement && this.currentFocusedOption) {
167
+ this.currentFocusedOption.focus();
168
+ }
169
+ }
170
+
171
+ unfocus() {
172
+ if (this.sidebarElement && this.currentFocusedOption) {
173
+ this.currentFocusedOption.blur();
174
+ }
175
+ }
176
+
177
+ unmount() {
178
+ if (this.sidebarElement) {
179
+ this.sidebarElement.remove();
180
+ this.sidebarElement = undefined;
181
+ if (this.lastFocusedElement) {
182
+ this.callback();
183
+ this.lastFocusedElement.focus();
184
+ }
185
+ this.currentFocusedOption = null;
186
+ }
187
+ }
188
+ }
@@ -0,0 +1,56 @@
1
+ export class TextContent {
2
+ constructor(props) {
3
+ if (!props || typeof props !== 'object') {
4
+ throw new Error('TextContent: props must be a valid object');
5
+ }
6
+
7
+ this.text = props.text || '';
8
+ this.fontSize = props.fontSize || '16px';
9
+ this.fontFamily = props.fontFamily || 'Arial, sans-serif';
10
+ this.fontWeight = props.fontWeight || 'normal';
11
+ this.textAlign = props.textAlign || 'left';
12
+ this.textDecoration = props.textDecoration || 'none';
13
+ this.textTransform = props.textTransform || 'none';
14
+ this.lineHeight = props.lineHeight || 'normal';
15
+ this.letterSpacing = props.letterSpacing || 'normal';
16
+ this.color = props.color || '#000';
17
+ this.backgroundColor = props.backgroundColor || 'transparent';
18
+ this.klassname = props.klassname || 'default-text-content';
19
+ this.width = props.width || 100;
20
+ this.height = props.height || 50;
21
+ this.focused = props.focused || false;
22
+ }
23
+
24
+ setText(text) {
25
+ if (typeof text !== 'string') {
26
+ throw new Error('TextContent: text must be a string');
27
+ }
28
+ this.text = text;
29
+ if (this.container) {
30
+ this.container.textContent = text;
31
+ }
32
+ }
33
+
34
+ mount(mountPoint) {
35
+ if (!mountPoint || !(mountPoint instanceof HTMLElement)) {
36
+ throw new Error('TextContent: mountPoint must be a valid DOM element');
37
+ }
38
+
39
+ const text = document.createElement('div');
40
+ text.className = this.klassname;
41
+ text.style.fontSize = this.fontSize;
42
+ text.style.color = this.color;
43
+ text.style.backgroundColor = this.backgroundColor;
44
+ text.style.fontWeight = this.fontWeight;
45
+ text.innerText = this.text;
46
+ mountPoint.appendChild(text);
47
+ this.container = text;
48
+ }
49
+
50
+ unmount() {
51
+ if (this.container) {
52
+ this.container.remove();
53
+ this.container = undefined;
54
+ }
55
+ }
56
+ }