vidply 1.0.22 → 1.0.25

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 (66) hide show
  1. package/dist/dev/vidply.HLSRenderer-PNP5OPES.js +255 -0
  2. package/dist/dev/vidply.HLSRenderer-PNP5OPES.js.map +7 -0
  3. package/dist/dev/vidply.HTML5Renderer-LXQ3I45Q.js +12 -0
  4. package/dist/dev/vidply.HTML5Renderer-LXQ3I45Q.js.map +7 -0
  5. package/dist/dev/vidply.TranscriptManager-GZKY44ON.js +1744 -0
  6. package/dist/dev/vidply.TranscriptManager-GZKY44ON.js.map +7 -0
  7. package/dist/dev/vidply.VimeoRenderer-DCETT5IZ.js +213 -0
  8. package/dist/dev/vidply.VimeoRenderer-DCETT5IZ.js.map +7 -0
  9. package/dist/dev/vidply.YouTubeRenderer-QLMMD757.js +227 -0
  10. package/dist/dev/vidply.YouTubeRenderer-QLMMD757.js.map +7 -0
  11. package/dist/dev/vidply.chunk-UEIJOJH6.js +243 -0
  12. package/dist/dev/vidply.chunk-UEIJOJH6.js.map +7 -0
  13. package/dist/dev/vidply.chunk-UH5MTGKF.js +1630 -0
  14. package/dist/dev/vidply.chunk-UH5MTGKF.js.map +7 -0
  15. package/dist/dev/vidply.de-THBIMP4S.js +180 -0
  16. package/dist/dev/vidply.de-THBIMP4S.js.map +7 -0
  17. package/dist/dev/vidply.es-6VWDNNNL.js +180 -0
  18. package/dist/dev/vidply.es-6VWDNNNL.js.map +7 -0
  19. package/dist/{vidply.esm.js → dev/vidply.esm.js} +530 -5082
  20. package/dist/dev/vidply.esm.js.map +7 -0
  21. package/dist/dev/vidply.fr-WHTWCHWT.js +180 -0
  22. package/dist/dev/vidply.fr-WHTWCHWT.js.map +7 -0
  23. package/dist/dev/vidply.ja-BFQNPOFI.js +180 -0
  24. package/dist/dev/vidply.ja-BFQNPOFI.js.map +7 -0
  25. package/dist/{vidply.js → legacy/vidply.js} +7833 -7317
  26. package/dist/legacy/vidply.js.map +7 -0
  27. package/dist/legacy/vidply.min.js +6 -0
  28. package/dist/{vidply.min.meta.json → legacy/vidply.min.meta.json} +120 -94
  29. package/dist/prod/vidply.HLSRenderer-4PW35TCX.min.js +6 -0
  30. package/dist/prod/vidply.HTML5Renderer-XJCSUETP.min.js +6 -0
  31. package/dist/prod/vidply.TranscriptManager-UZ6DUFB6.min.js +6 -0
  32. package/dist/prod/vidply.VimeoRenderer-P3PU27S7.min.js +6 -0
  33. package/dist/prod/vidply.YouTubeRenderer-DGKKWB5M.min.js +6 -0
  34. package/dist/prod/vidply.chunk-BQBGEJF7.min.js +6 -0
  35. package/dist/prod/vidply.chunk-MBUR3U5L.min.js +6 -0
  36. package/dist/prod/vidply.de-SWFW4HYT.min.js +6 -0
  37. package/dist/prod/vidply.es-7BJ2DJAY.min.js +6 -0
  38. package/dist/prod/vidply.esm.min.js +21 -0
  39. package/dist/prod/vidply.fr-DPVR5DFY.min.js +6 -0
  40. package/dist/prod/vidply.ja-PEBVWKVH.min.js +6 -0
  41. package/dist/vidply.css +184 -4
  42. package/dist/vidply.esm.min.meta.json +284 -102
  43. package/dist/vidply.min.css +1 -1
  44. package/package.json +4 -4
  45. package/src/controls/ControlBar.js +3341 -3246
  46. package/src/controls/TranscriptManager.js +2296 -2271
  47. package/src/core/Player.js +4807 -4730
  48. package/src/features/PlaylistManager.js +1203 -1039
  49. package/src/i18n/i18n.js +51 -7
  50. package/src/i18n/languages/de.js +5 -1
  51. package/src/i18n/languages/en.js +5 -1
  52. package/src/i18n/languages/es.js +5 -1
  53. package/src/i18n/languages/fr.js +5 -1
  54. package/src/i18n/languages/ja.js +5 -1
  55. package/src/i18n/translations.js +35 -18
  56. package/src/icons/Icons.js +2 -20
  57. package/src/renderers/HLSRenderer.js +7 -0
  58. package/src/styles/vidply.css +184 -4
  59. package/src/utils/DOMUtils.js +67 -0
  60. package/src/utils/MenuUtils.js +10 -4
  61. package/src/utils/SettingsMenuFactory.js +8 -4
  62. package/src/utils/WindowComponents.js +6 -4
  63. package/dist/vidply.esm.js.map +0 -7
  64. package/dist/vidply.esm.min.js +0 -18
  65. package/dist/vidply.js.map +0 -7
  66. package/dist/vidply.min.js +0 -18
@@ -81,7 +81,8 @@ export function attachMenuKeyboardNavigation(menu, button, itemSelector, onClose
81
81
  menuItems.forEach((item, idx) => {
82
82
  item.setAttribute('tabindex', idx === nextIndex ? '0' : '-1');
83
83
  });
84
- menuItems[nextIndex].focus();
84
+ menuItems[nextIndex].focus({ preventScroll: false });
85
+ menuItems[nextIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
85
86
  break;
86
87
 
87
88
  case 'ArrowUp':
@@ -91,7 +92,8 @@ export function attachMenuKeyboardNavigation(menu, button, itemSelector, onClose
91
92
  menuItems.forEach((item, idx) => {
92
93
  item.setAttribute('tabindex', idx === prevIndex ? '0' : '-1');
93
94
  });
94
- menuItems[prevIndex].focus();
95
+ menuItems[prevIndex].focus({ preventScroll: false });
96
+ menuItems[prevIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
95
97
  break;
96
98
 
97
99
  case 'Home':
@@ -100,7 +102,8 @@ export function attachMenuKeyboardNavigation(menu, button, itemSelector, onClose
100
102
  menuItems.forEach((item, idx) => {
101
103
  item.setAttribute('tabindex', idx === 0 ? '0' : '-1');
102
104
  });
103
- menuItems[0].focus();
105
+ menuItems[0].focus({ preventScroll: false });
106
+ menuItems[0].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
104
107
  break;
105
108
 
106
109
  case 'End':
@@ -110,7 +113,8 @@ export function attachMenuKeyboardNavigation(menu, button, itemSelector, onClose
110
113
  menuItems.forEach((item, idx) => {
111
114
  item.setAttribute('tabindex', idx === lastIndex ? '0' : '-1');
112
115
  });
113
- menuItems[lastIndex].focus();
116
+ menuItems[lastIndex].focus({ preventScroll: false });
117
+ menuItems[lastIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
114
118
  break;
115
119
 
116
120
  case 'Enter':
@@ -159,6 +163,8 @@ export function focusFirstMenuItem(menu, itemSelector, delay = 0) {
159
163
  item.setAttribute('tabindex', index === 0 ? '0' : '-1');
160
164
  });
161
165
  focusElement(menuItems[0], { delay: 0 });
166
+ // Scroll into view for keyboard users
167
+ menuItems[0].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
162
168
  }
163
169
  }, delay);
164
170
  }
@@ -190,7 +190,8 @@ export function setupSettingsMenuKeyboard(menu, button, onClose) {
190
190
  menuItems.forEach((item, idx) => {
191
191
  item.setAttribute('tabindex', idx === nextIndex ? '0' : '-1');
192
192
  });
193
- menuItems[nextIndex].focus();
193
+ menuItems[nextIndex].focus({ preventScroll: false });
194
+ menuItems[nextIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
194
195
  break;
195
196
 
196
197
  case 'ArrowUp':
@@ -199,7 +200,8 @@ export function setupSettingsMenuKeyboard(menu, button, onClose) {
199
200
  menuItems.forEach((item, idx) => {
200
201
  item.setAttribute('tabindex', idx === prevIndex ? '0' : '-1');
201
202
  });
202
- menuItems[prevIndex].focus();
203
+ menuItems[prevIndex].focus({ preventScroll: false });
204
+ menuItems[prevIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
203
205
  break;
204
206
 
205
207
  case 'Home':
@@ -207,7 +209,8 @@ export function setupSettingsMenuKeyboard(menu, button, onClose) {
207
209
  menuItems.forEach((item, idx) => {
208
210
  item.setAttribute('tabindex', idx === 0 ? '0' : '-1');
209
211
  });
210
- menuItems[0].focus();
212
+ menuItems[0].focus({ preventScroll: false });
213
+ menuItems[0].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
211
214
  break;
212
215
 
213
216
  case 'End':
@@ -216,7 +219,8 @@ export function setupSettingsMenuKeyboard(menu, button, onClose) {
216
219
  menuItems.forEach((item, idx) => {
217
220
  item.setAttribute('tabindex', idx === lastIndex ? '0' : '-1');
218
221
  });
219
- menuItems[lastIndex].focus();
222
+ menuItems[lastIndex].focus({ preventScroll: false });
223
+ menuItems[lastIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
220
224
  break;
221
225
 
222
226
  case 'Escape':
@@ -47,15 +47,16 @@ export function createWindowHeader({
47
47
  // Add settings button if requested
48
48
  let settingsButton = null;
49
49
  if (showSettings && onSettingsClick) {
50
+ const settingsAriaLabel = i18n.t('settings.title');
50
51
  settingsButton = DOMUtils.createElement('button', {
51
52
  className: `${classPrefix}-icon-button ${headerClass}-settings`,
52
53
  attributes: {
53
54
  'type': 'button',
54
- 'aria-label': i18n.t('settings.title'),
55
- 'title': i18n.t('settings.title')
55
+ 'aria-label': settingsAriaLabel
56
56
  }
57
57
  });
58
58
  settingsButton.appendChild(createIconElement('settings'));
59
+ DOMUtils.attachTooltip(settingsButton, settingsAriaLabel, classPrefix);
59
60
  settingsButton.addEventListener('click', onSettingsClick);
60
61
  leftSide.appendChild(settingsButton);
61
62
  }
@@ -74,15 +75,16 @@ export function createWindowHeader({
74
75
  leftSide.appendChild(title);
75
76
 
76
77
  // Create close button
78
+ const closeAriaLabel = i18n.t('player.close');
77
79
  const closeButton = DOMUtils.createElement('button', {
78
80
  className: `${classPrefix}-icon-button ${headerClass}-close`,
79
81
  attributes: {
80
82
  'type': 'button',
81
- 'aria-label': i18n.t('player.close'),
82
- 'title': i18n.t('player.close')
83
+ 'aria-label': closeAriaLabel
83
84
  }
84
85
  });
85
86
  closeButton.appendChild(createIconElement('close'));
87
+ DOMUtils.attachTooltip(closeButton, closeAriaLabel, classPrefix);
86
88
  if (onClose) {
87
89
  closeButton.addEventListener('click', onClose);
88
90
  }