vidply 1.0.27 → 1.0.29

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 (49) hide show
  1. package/dist/dev/{vidply.TranscriptManager-GZKY44ON.js → vidply.TranscriptManager-T677KF4N.js} +5 -6
  2. package/dist/dev/vidply.TranscriptManager-T677KF4N.js.map +7 -0
  3. package/dist/dev/{vidply.chunk-UH5MTGKF.js → vidply.chunk-GS2JX5RQ.js} +149 -100
  4. package/dist/dev/vidply.chunk-GS2JX5RQ.js.map +7 -0
  5. package/dist/dev/{vidply.de-THBIMP4S.js → vidply.de-SNL6AJ4D.js} +10 -2
  6. package/dist/dev/{vidply.de-THBIMP4S.js.map → vidply.de-SNL6AJ4D.js.map} +2 -2
  7. package/dist/dev/{vidply.es-6VWDNNNL.js → vidply.es-2QCQKZ4U.js} +10 -2
  8. package/dist/dev/{vidply.es-6VWDNNNL.js.map → vidply.es-2QCQKZ4U.js.map} +2 -2
  9. package/dist/dev/vidply.esm.js +1681 -317
  10. package/dist/dev/vidply.esm.js.map +4 -4
  11. package/dist/dev/{vidply.fr-WHTWCHWT.js → vidply.fr-FJAZRL4L.js} +10 -2
  12. package/dist/dev/{vidply.fr-WHTWCHWT.js.map → vidply.fr-FJAZRL4L.js.map} +2 -2
  13. package/dist/dev/{vidply.ja-BFQNPOFI.js → vidply.ja-2XQOW53T.js} +10 -2
  14. package/dist/dev/vidply.ja-2XQOW53T.js.map +7 -0
  15. package/dist/legacy/vidply.js +1829 -361
  16. package/dist/legacy/vidply.js.map +4 -4
  17. package/dist/legacy/vidply.min.js +1 -1
  18. package/dist/legacy/vidply.min.meta.json +103 -35
  19. package/dist/prod/vidply.TranscriptManager-WFZSW6NR.min.js +6 -0
  20. package/dist/prod/vidply.chunk-LGTJRPUL.min.js +6 -0
  21. package/dist/prod/vidply.de-FR3XX54P.min.js +6 -0
  22. package/dist/prod/vidply.es-3IJCQLJ7.min.js +6 -0
  23. package/dist/prod/vidply.esm.min.js +8 -8
  24. package/dist/prod/vidply.fr-NC4VEAPH.min.js +6 -0
  25. package/dist/prod/vidply.ja-4ZC6ZQLV.min.js +6 -0
  26. package/dist/vidply.esm.min.meta.json +115 -47
  27. package/package.json +1 -1
  28. package/src/controls/ControlBar.js +3 -7
  29. package/src/controls/TranscriptManager.js +8 -8
  30. package/src/core/AudioDescriptionManager.js +701 -0
  31. package/src/core/Player.js +4776 -4921
  32. package/src/core/SignLanguageManager.js +1134 -0
  33. package/src/features/PlaylistManager.js +12 -12
  34. package/src/i18n/languages/de.js +9 -1
  35. package/src/i18n/languages/en.js +9 -1
  36. package/src/i18n/languages/es.js +9 -1
  37. package/src/i18n/languages/fr.js +9 -1
  38. package/src/i18n/languages/ja.js +9 -1
  39. package/src/utils/DOMUtils.js +153 -114
  40. package/src/utils/MenuFactory.js +374 -0
  41. package/dist/dev/vidply.TranscriptManager-GZKY44ON.js.map +0 -7
  42. package/dist/dev/vidply.chunk-UH5MTGKF.js.map +0 -7
  43. package/dist/dev/vidply.ja-BFQNPOFI.js.map +0 -7
  44. package/dist/prod/vidply.TranscriptManager-UZ6DUFB6.min.js +0 -6
  45. package/dist/prod/vidply.chunk-MBUR3U5L.min.js +0 -6
  46. package/dist/prod/vidply.de-SWFW4HYT.min.js +0 -6
  47. package/dist/prod/vidply.es-7BJ2DJAY.min.js +0 -6
  48. package/dist/prod/vidply.fr-DPVR5DFY.min.js +0 -6
  49. package/dist/prod/vidply.ja-PEBVWKVH.min.js +0 -6
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Universal, Accessible Video Player
3
+ * (c) 2025 Matthias Peltzer
4
+ * Released under GPL-2.0-or-later License
5
+ */
6
+ var e={player:{label:"Lecteur vidéo",play:"Lecture",pause:"Pause",stop:"Arrêt",restart:"Redémarrer du début",rewind:"Reculer",forward:"Avancer",rewindSeconds:"Reculer de {seconds} secondes",forwardSeconds:"Avancer de {seconds} secondes",previous:"Piste précédente",next:"Piste suivante",playlist:"Basculer la liste de lecture",volume:"Volume",mute:"Muet",unmute:"Activer le son",fullscreen:"Plein écran",exitFullscreen:"Quitter le plein écran",captions:"Sous-titres",chapters:"Chapitres",quality:"Qualité",captionStyling:"Style des sous-titres",transcript:"Activer/désactiver la transcription",audioDescription:"Audiodescription",signLanguage:"Vidéo en langue des signes",settings:"Paramètres",speed:"Vitesse de lecture",pip:"Image dans l'image",currentTime:"Temps actuel",duration:"Durée",progress:"Progression",seekForward:"Avancer de {seconds} secondes",seekBackward:"Reculer de {seconds} secondes",volumeUp:"Augmenter le volume",volumeDown:"Diminuer le volume",loading:"Chargement...",loadingChapters:"Chargement des chapitres...",error:"Erreur de chargement",buffering:"Mise en mémoire tampon...",signLanguageVideo:"Vidéo en Langue des Signes",closeSignLanguage:"Fermer la vidéo en langue des signes",signLanguageSettings:"Paramètres de la langue des signes",noChapters:"Aucun chapitre disponible",noCaptions:"Aucun sous-titre disponible",auto:"Automatique",autoQuality:"Automatique (sélection de qualité non disponible)",noQuality:"Sélection de qualité non disponible",signLanguageDragResize:"Vidéo en Langue des Signes - Appuyez sur D pour déplacer avec le clavier, R pour redimensionner",signLanguageDragActive:"Vidéo en Langue des Signes - Mode glissement actif. Utilisez les touches fléchées pour déplacer, Échap pour quitter.",signLanguageResizeActive:"Vidéo en Langue des Signes - Mode redimensionnement actif. Utilisez les touches fléchées gauche/droite pour redimensionner, Échap pour quitter.",enableSignDragMode:"Activer le mode glissement. Raccourci : touche D",disableSignDragMode:"Désactiver le mode glissement. Raccourci : touche D",enableSignDragModeAria:"Activer le mode glissement clavier avec les touches fléchées. Raccourci : touche D",disableSignDragModeAria:"Désactiver le mode glissement clavier avec les touches fléchées. Raccourci : touche D",enableSignResizeMode:"Activer le mode redimensionnement. Raccourci : touche R",disableSignResizeMode:"Désactiver le mode redimensionnement. Raccourci : touche R",enableSignResizeModeAria:"Activer le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",disableSignResizeModeAria:"Désactiver le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",resizeHandle:"Redimensionner coin {direction}",moreOptions:"Plus d'options",noMoreOptions:"Aucune option supplémentaire disponible"},captions:{off:"Désactivé",select:"Sélectionner les sous-titres",fontSize:"Taille de police",fontFamily:"Police",color:"Couleur du texte",backgroundColor:"Couleur de fond",opacity:"Opacité"},fontSizes:{small:"Petit",normal:"Normal",large:"Grand",xlarge:"Très grand"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Couleur du texte",background:"Arrière-plan",font:"Police",fontSize:"Taille de police",opacity:"Opacité"},audioDescription:{enable:"Activer l'audiodescription",disable:"Désactiver l'audiodescription"},signLanguage:{show:"Afficher la vidéo en langue des signes",hide:"Masquer la vidéo en langue des signes"},transcript:{title:"Transcription",ariaLabel:"Transcription vidéo",close:"Fermer la transcription",loading:"Chargement de la transcription...",noTranscript:"Aucune transcription disponible pour cette vidéo.",settings:"Paramètres de transcription. Appuyez sur Entrée pour ouvrir le menu ou D pour activer le mode glissement",keyboardDragMode:"Basculer le mode glissement avec les touches fléchées. Raccourci: touche D",keyboardDragActive:"⌨️ Mode Glissement Clavier Actif (Touches fléchées pour déplacer, Maj+Fléchées pour grands pas, D ou Échap pour quitter)",dragResizePrompt:"Appuyez sur D pour déplacer ou R pour redimensionner. Home réinitialise la position, Échap ferme.",dragModeEnabled:"Mode glissement clavier activé. Utilisez les flèches pour déplacer, Maj+Flèches pour de grands pas. Appuyez sur D ou Échap pour quitter.",dragModeDisabled:"Mode glissement clavier désactivé.",enableDragMode:"Activer le mode glissement. Raccourci : touche D",disableDragMode:"Désactiver le mode glissement. Raccourci : touche D",enableDragModeAria:"Activer le mode glissement clavier avec les touches fléchées. Raccourci : touche D",disableDragModeAria:"Désactiver le mode glissement clavier avec les touches fléchées. Raccourci : touche D",resizeWindow:"Redimensionner la fenêtre",disableResizeWindow:"Désactiver le mode de redimensionnement",enableResizeMode:"Activer le mode redimensionnement. Raccourci : touche R",disableResizeMode:"Désactiver le mode redimensionnement. Raccourci : touche R",enableResizeModeAria:"Activer le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",disableResizeModeAria:"Désactiver le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",resizeModeHint:"Poignées activées. Faites glisser les bords ou les coins pour ajuster. Appuyez sur Échap ou R pour quitter.",resizeModeEnabled:"Mode redimensionnement activé. Faites glisser les bords ou coins. Appuyez sur Échap ou R pour quitter.",resizeModeDisabled:"Mode redimensionnement désactivé.",positionReset:"Position de la transcription réinitialisée.",styleTranscript:"Ouvrir les paramètres de style de transcription",closeMenu:"Fermer le menu",styleTitle:"Style de Transcription",autoscroll:"Défilement automatique",settingsMenu:"Paramètres de dialogue de transcription",showTimestamps:"Afficher les horodatages",hideTimestamps:"Masquer les horodatages",showTimestampsAria:"Afficher les horodatages dans la transcription",hideTimestampsAria:"Masquer les horodatages dans la transcription"},settings:{title:"Paramètres",quality:"Qualité",speed:"Vitesse",captions:"Sous-titres",language:"Langue",reset:"Réinitialiser",close:"Fermer"},speeds:{normal:"Normal"},time:{display:"Affichage du temps",durationPrefix:"Durée : ",of:"sur",hour:"{count} heure",hours:"{count} heures",minute:"{count} minute",minutes:"{count} minutes",second:"{count} seconde",seconds:"{count} secondes"},playlist:{title:"Liste de lecture",trackOf:"Piste {current} sur {total}",nowPlaying:"Lecture en cours : Piste {current} sur {total}. {title}{artist}",by:" par ",untitled:"Sans titre",trackUntitled:"Piste {number}",currentlyPlaying:"En cours de lecture",notPlaying:"Non en lecture",pressEnterPlay:"Appuyez sur Entrée pour lire",pressEnterRestart:"Appuyez sur Entrée pour recommencer",keyboardInstructions:"Navigation de la liste de lecture : Utilisez les touches fléchées haut et bas pour naviguer entre les pistes. Appuyez sur Page précédente ou Page suivante pour sauter 5 pistes. Appuyez sur Début pour aller à la première piste, Fin pour la dernière piste. Appuyez sur Entrée ou Espace pour lire la piste sélectionnée.",endOfPlaylist:"Fin de la liste de lecture. {current} sur {total}.",beginningOfPlaylist:"Début de la liste de lecture. 1 sur {total}.",jumpedToLastTrack:"Sauté à la dernière piste. {current} sur {total}.",jumpedToFirstTrack:"Sauté à la première piste. 1 sur {total}.",firstTrack:"Première piste. 1 sur {total}.",lastTrack:"Dernière piste. {current} sur {total}."}};export{e as fr};
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Universal, Accessible Video Player
3
+ * (c) 2025 Matthias Peltzer
4
+ * Released under GPL-2.0-or-later License
5
+ */
6
+ var e={player:{label:"ビデオプレーヤー",play:"再生",pause:"一時停止",stop:"停止",restart:"最初から再生",rewind:"巻き戻し",forward:"早送り",rewindSeconds:"{seconds}秒戻す",forwardSeconds:"{seconds}秒進める",previous:"前のトラック",next:"次のトラック",playlist:"プレイリストの切り替え",volume:"音量",mute:"ミュート",unmute:"ミュート解除",fullscreen:"全画面表示",exitFullscreen:"全画面表示を終了",captions:"字幕",chapters:"チャプター",quality:"画質",captionStyling:"字幕スタイル",transcript:"文字起こし切り替え",audioDescription:"音声解説",signLanguage:"手話動画",settings:"設定",speed:"再生速度",pip:"ピクチャーインピクチャー",currentTime:"現在の時間",duration:"再生時間",progress:"進行状況",seekForward:"{seconds}秒進める",seekBackward:"{seconds}秒戻す",volumeUp:"音量を上げる",volumeDown:"音量を下げる",loading:"読み込み中...",loadingChapters:"チャプター読み込み中...",error:"読み込みエラー",buffering:"バッファリング中...",signLanguageVideo:"手話動画",closeSignLanguage:"手話動画を閉じる",signLanguageSettings:"手話設定",noChapters:"チャプターがありません",noCaptions:"字幕がありません",auto:"自動",autoQuality:"自動(画質選択不可)",noQuality:"画質選択不可",signLanguageDragResize:"手話動画 - キーボードでドラッグするにはDキーを、サイズ変更するにはRキーを押してください",signLanguageDragActive:"手話動画 - ドラッグモードが有効です。矢印キーで移動、Escapeで終了します。",signLanguageResizeActive:"手話動画 - サイズ変更モードが有効です。左右の矢印キーでサイズ変更、Escapeで終了します。",enableSignDragMode:"ドラッグモードを有効にする。ショートカット:Dキー",disableSignDragMode:"ドラッグモードを無効にする。ショートカット:Dキー",enableSignDragModeAria:"矢印キーでキーボードドラッグモードを有効にする。ショートカット:Dキー",disableSignDragModeAria:"矢印キーでキーボードドラッグモードを無効にする。ショートカット:Dキー",enableSignResizeMode:"サイズ変更モードを有効にする。ショートカット:Rキー",disableSignResizeMode:"サイズ変更モードを無効にする。ショートカット:Rキー",enableSignResizeModeAria:"矢印キーでキーボードサイズ変更モードを有効にする。ショートカット:Rキー",disableSignResizeModeAria:"矢印キーでキーボードサイズ変更モードを無効にする。ショートカット:Rキー",resizeHandle:"{direction}コーナーのサイズ変更",moreOptions:"その他のオプション",noMoreOptions:"追加のオプションはありません"},captions:{off:"オフ",select:"字幕を選択",fontSize:"フォントサイズ",fontFamily:"フォント",color:"テキストの色",backgroundColor:"背景色",opacity:"不透明度"},fontSizes:{small:"小",normal:"標準",large:"大",xlarge:"特大"},fontFamilies:{sansSerif:"サンセリフ",serif:"セリフ",monospace:"等幅"},styleLabels:{textColor:"テキストの色",background:"背景",font:"フォント",fontSize:"フォントサイズ",opacity:"不透明度"},audioDescription:{enable:"音声解説を有効にする",disable:"音声解説を無効にする"},signLanguage:{show:"手話動画を表示",hide:"手話動画を非表示"},transcript:{title:"文字起こし",ariaLabel:"ビデオ文字起こし",close:"文字起こしを閉じる",loading:"文字起こしを読み込み中...",noTranscript:"このビデオの文字起こしはありません。",settings:"文字起こし設定。Enterキーでメニューを開く、またはDキーでドラッグモードを有効にする",keyboardDragMode:"矢印キーでキーボードドラッグモードを切り替え。ショートカット:Dキー",keyboardDragActive:"⌨️ キーボードドラッグモード有効(矢印キーで移動、Shift+矢印キーで大きく移動、DまたはESCで終了)",dragResizePrompt:"Dキーで移動、Rキーでサイズ変更。Homeで位置をリセット、Escで閉じます。",dragModeEnabled:"キーボードドラッグモードを有効にしました。矢印キーで移動、Shift+矢印キーで大きく移動できます。終了するには D または Esc を押します。",dragModeDisabled:"キーボードドラッグモードを無効にしました。",enableDragMode:"ドラッグモードを有効にする。ショートカット:Dキー",disableDragMode:"ドラッグモードを無効にする。ショートカット:Dキー",enableDragModeAria:"矢印キーでキーボードドラッグモードを有効にする。ショートカット:Dキー",disableDragModeAria:"矢印キーでキーボードドラッグモードを無効にする。ショートカット:Dキー",resizeWindow:"ウィンドウのサイズ変更",disableResizeWindow:"サイズ変更モードを無効にする",enableResizeMode:"サイズ変更モードを有効にする。ショートカット:Rキー",disableResizeMode:"サイズ変更モードを無効にする。ショートカット:Rキー",enableResizeModeAria:"矢印キーでキーボードサイズ変更モードを有効にする。ショートカット:Rキー",disableResizeModeAria:"矢印キーでキーボードサイズ変更モードを無効にする。ショートカット:Rキー",resizeModeHint:"リサイズハンドルが有効になりました。辺や角をドラッグして調整します。Esc または R で終了します。",resizeModeEnabled:"サイズ変更モードを有効にしました。辺や角をドラッグして調整します。Esc または R で終了します。",resizeModeDisabled:"サイズ変更モードを無効にしました。",positionReset:"文字起こしの位置をリセットしました。",styleTranscript:"文字起こしスタイル設定を開く",closeMenu:"メニューを閉じる",styleTitle:"文字起こしスタイル",autoscroll:"自動スクロール",settingsMenu:"文字起こしダイアログ設定",showTimestamps:"タイムスタンプを表示",hideTimestamps:"タイムスタンプを非表示",showTimestampsAria:"文字起こしにタイムスタンプを表示",hideTimestampsAria:"文字起こしのタイムスタンプを非表示"},settings:{title:"設定",quality:"画質",speed:"速度",captions:"字幕",language:"言語",reset:"リセット",close:"閉じる"},speeds:{normal:"通常"},time:{display:"時間表示",durationPrefix:"再生時間: ",of:"/",hour:"{count}時間",hours:"{count}時間",minute:"{count}分",minutes:"{count}分",second:"{count}秒",seconds:"{count}秒"},playlist:{title:"プレイリスト",trackOf:"トラック {current}/{total}",nowPlaying:"再生中: トラック {current}/{total}. {title}{artist}",by:" - ",untitled:"タイトルなし",trackUntitled:"トラック {number}",currentlyPlaying:"再生中",notPlaying:"停止中",pressEnterPlay:"Enterキーで再生",pressEnterRestart:"Enterキーで最初から再生",keyboardInstructions:"プレイリストナビゲーション:上下の矢印キーでトラック間を移動します。Page UpまたはPage Downで5トラックをスキップします。Homeで最初のトラックへ、Endで最後のトラックへ移動します。EnterまたはSpaceで選択したトラックを再生します。",endOfPlaylist:"プレイリストの終わりです。{current}/{total}。",beginningOfPlaylist:"プレイリストの始めです。1/{total}。",jumpedToLastTrack:"最後のトラックにジャンプしました。{current}/{total}。",jumpedToFirstTrack:"最初のトラックにジャンプしました。1/{total}。",firstTrack:"最初のトラックです。1/{total}。",lastTrack:"最後のトラックです。{current}/{total}。"}};export{e as ja};
@@ -6,32 +6,32 @@
6
6
  "format": "esm"
7
7
  },
8
8
  "src/utils/DOMUtils.js": {
9
- "bytes": 6031,
9
+ "bytes": 7360,
10
10
  "imports": [],
11
11
  "format": "esm"
12
12
  },
13
13
  "src/i18n/languages/en.js": {
14
- "bytes": 6736,
14
+ "bytes": 7390,
15
15
  "imports": [],
16
16
  "format": "esm"
17
17
  },
18
18
  "src/i18n/languages/de.js": {
19
- "bytes": 8264,
19
+ "bytes": 9108,
20
20
  "imports": [],
21
21
  "format": "esm"
22
22
  },
23
23
  "src/i18n/languages/es.js": {
24
- "bytes": 7812,
24
+ "bytes": 8594,
25
25
  "imports": [],
26
26
  "format": "esm"
27
27
  },
28
28
  "src/i18n/languages/fr.js": {
29
- "bytes": 8025,
29
+ "bytes": 8836,
30
30
  "imports": [],
31
31
  "format": "esm"
32
32
  },
33
33
  "src/i18n/languages/ja.js": {
34
- "bytes": 8422,
34
+ "bytes": 9301,
35
35
  "imports": [],
36
36
  "format": "esm"
37
37
  },
@@ -98,8 +98,13 @@
98
98
  "imports": [],
99
99
  "format": "esm"
100
100
  },
101
+ "src/utils/PerformanceUtils.js": {
102
+ "bytes": 1820,
103
+ "imports": [],
104
+ "format": "esm"
105
+ },
101
106
  "src/controls/ControlBar.js": {
102
- "bytes": 132009,
107
+ "bytes": 131933,
103
108
  "imports": [
104
109
  {
105
110
  "path": "src/utils/DOMUtils.js",
@@ -125,6 +130,11 @@
125
130
  "path": "src/utils/FocusUtils.js",
126
131
  "kind": "import-statement",
127
132
  "original": "../utils/FocusUtils.js"
133
+ },
134
+ {
135
+ "path": "src/utils/PerformanceUtils.js",
136
+ "kind": "import-statement",
137
+ "original": "../utils/PerformanceUtils.js"
128
138
  }
129
139
  ],
130
140
  "format": "esm"
@@ -134,11 +144,6 @@
134
144
  "imports": [],
135
145
  "format": "esm"
136
146
  },
137
- "src/utils/PerformanceUtils.js": {
138
- "bytes": 1820,
139
- "imports": [],
140
- "format": "esm"
141
- },
142
147
  "src/controls/CaptionManager.js": {
143
148
  "bytes": 17842,
144
149
  "imports": [
@@ -222,8 +227,55 @@
222
227
  ],
223
228
  "format": "esm"
224
229
  },
230
+ "src/core/AudioDescriptionManager.js": {
231
+ "bytes": 26497,
232
+ "imports": [
233
+ {
234
+ "path": "src/controls/CaptionManager.js",
235
+ "kind": "import-statement",
236
+ "original": "../controls/CaptionManager.js"
237
+ }
238
+ ],
239
+ "format": "esm"
240
+ },
241
+ "src/core/SignLanguageManager.js": {
242
+ "bytes": 39788,
243
+ "imports": [
244
+ {
245
+ "path": "src/utils/DOMUtils.js",
246
+ "kind": "import-statement",
247
+ "original": "../utils/DOMUtils.js"
248
+ },
249
+ {
250
+ "path": "src/icons/Icons.js",
251
+ "kind": "import-statement",
252
+ "original": "../icons/Icons.js"
253
+ },
254
+ {
255
+ "path": "src/i18n/i18n.js",
256
+ "kind": "import-statement",
257
+ "original": "../i18n/i18n.js"
258
+ },
259
+ {
260
+ "path": "src/utils/DraggableResizable.js",
261
+ "kind": "import-statement",
262
+ "original": "../utils/DraggableResizable.js"
263
+ },
264
+ {
265
+ "path": "src/utils/MenuUtils.js",
266
+ "kind": "import-statement",
267
+ "original": "../utils/MenuUtils.js"
268
+ },
269
+ {
270
+ "path": "src/utils/FormUtils.js",
271
+ "kind": "import-statement",
272
+ "original": "../utils/FormUtils.js"
273
+ }
274
+ ],
275
+ "format": "esm"
276
+ },
225
277
  "src/controls/TranscriptManager.js": {
226
- "bytes": 80185,
278
+ "bytes": 80133,
227
279
  "imports": [
228
280
  {
229
281
  "path": "src/utils/DOMUtils.js",
@@ -300,7 +352,7 @@
300
352
  "format": "esm"
301
353
  },
302
354
  "src/core/Player.js": {
303
- "bytes": 214111,
355
+ "bytes": 210757,
304
356
  "imports": [
305
357
  {
306
358
  "path": "src/utils/EventEmitter.js",
@@ -367,6 +419,16 @@
367
419
  "kind": "import-statement",
368
420
  "original": "../utils/PerformanceUtils.js"
369
421
  },
422
+ {
423
+ "path": "src/core/AudioDescriptionManager.js",
424
+ "kind": "import-statement",
425
+ "original": "./AudioDescriptionManager.js"
426
+ },
427
+ {
428
+ "path": "src/core/SignLanguageManager.js",
429
+ "kind": "import-statement",
430
+ "original": "./SignLanguageManager.js"
431
+ },
370
432
  {
371
433
  "path": "src/controls/TranscriptManager.js",
372
434
  "kind": "dynamic-import",
@@ -396,7 +458,7 @@
396
458
  "format": "esm"
397
459
  },
398
460
  "src/features/PlaylistManager.js": {
399
- "bytes": 48513,
461
+ "bytes": 48411,
400
462
  "imports": [
401
463
  {
402
464
  "path": "src/utils/DOMUtils.js",
@@ -491,11 +553,11 @@
491
553
  "kind": "import-statement"
492
554
  },
493
555
  {
494
- "path": "dist/prod/vidply.chunk-MBUR3U5L.min.js",
556
+ "path": "dist/prod/vidply.chunk-LGTJRPUL.min.js",
495
557
  "kind": "import-statement"
496
558
  },
497
559
  {
498
- "path": "dist/prod/vidply.TranscriptManager-UZ6DUFB6.min.js",
560
+ "path": "dist/prod/vidply.TranscriptManager-WFZSW6NR.min.js",
499
561
  "kind": "dynamic-import"
500
562
  },
501
563
  {
@@ -525,31 +587,37 @@
525
587
  "src/utils/EventEmitter.js": {
526
588
  "bytesInOutput": 436
527
589
  },
528
- "src/controls/ControlBar.js": {
529
- "bytesInOutput": 56830
530
- },
531
590
  "src/utils/PerformanceUtils.js": {
532
591
  "bytesInOutput": 256
533
592
  },
593
+ "src/controls/ControlBar.js": {
594
+ "bytesInOutput": 56781
595
+ },
534
596
  "src/controls/CaptionManager.js": {
535
597
  "bytesInOutput": 7279
536
598
  },
537
599
  "src/controls/KeyboardManager.js": {
538
600
  "bytesInOutput": 3991
539
601
  },
602
+ "src/core/AudioDescriptionManager.js": {
603
+ "bytesInOutput": 9641
604
+ },
605
+ "src/core/SignLanguageManager.js": {
606
+ "bytesInOutput": 19116
607
+ },
540
608
  "src/core/Player.js": {
541
- "bytesInOutput": 78433
609
+ "bytesInOutput": 75524
542
610
  },
543
611
  "src/features/PlaylistManager.js": {
544
- "bytesInOutput": 21453
612
+ "bytesInOutput": 21345
545
613
  },
546
614
  "src/index.js": {
547
615
  "bytesInOutput": 1869
548
616
  }
549
617
  },
550
- "bytes": 170918
618
+ "bytes": 196610
551
619
  },
552
- "dist/prod/vidply.de-SWFW4HYT.min.js": {
620
+ "dist/prod/vidply.de-FR3XX54P.min.js": {
553
621
  "imports": [],
554
622
  "exports": [
555
623
  "de"
@@ -557,12 +625,12 @@
557
625
  "entryPoint": "src/i18n/languages/de.js",
558
626
  "inputs": {
559
627
  "src/i18n/languages/de.js": {
560
- "bytesInOutput": 6470
628
+ "bytesInOutput": 7226
561
629
  }
562
630
  },
563
- "bytes": 6605
631
+ "bytes": 7361
564
632
  },
565
- "dist/prod/vidply.es-7BJ2DJAY.min.js": {
633
+ "dist/prod/vidply.es-3IJCQLJ7.min.js": {
566
634
  "imports": [],
567
635
  "exports": [
568
636
  "es"
@@ -570,12 +638,12 @@
570
638
  "entryPoint": "src/i18n/languages/es.js",
571
639
  "inputs": {
572
640
  "src/i18n/languages/es.js": {
573
- "bytesInOutput": 6637
641
+ "bytesInOutput": 7363
574
642
  }
575
643
  },
576
- "bytes": 6772
644
+ "bytes": 7498
577
645
  },
578
- "dist/prod/vidply.fr-DPVR5DFY.min.js": {
646
+ "dist/prod/vidply.fr-NC4VEAPH.min.js": {
579
647
  "imports": [],
580
648
  "exports": [
581
649
  "fr"
@@ -583,12 +651,12 @@
583
651
  "entryPoint": "src/i18n/languages/fr.js",
584
652
  "inputs": {
585
653
  "src/i18n/languages/fr.js": {
586
- "bytesInOutput": 6847
654
+ "bytesInOutput": 7602
587
655
  }
588
656
  },
589
- "bytes": 6982
657
+ "bytes": 7737
590
658
  },
591
- "dist/prod/vidply.ja-PEBVWKVH.min.js": {
659
+ "dist/prod/vidply.ja-4ZC6ZQLV.min.js": {
592
660
  "imports": [],
593
661
  "exports": [
594
662
  "ja"
@@ -596,10 +664,10 @@
596
664
  "entryPoint": "src/i18n/languages/ja.js",
597
665
  "inputs": {
598
666
  "src/i18n/languages/ja.js": {
599
- "bytesInOutput": 7246
667
+ "bytesInOutput": 8069
600
668
  }
601
669
  },
602
- "bytes": 7381
670
+ "bytes": 8204
603
671
  },
604
672
  "dist/prod/vidply.HTML5Renderer-MY7XDV7R.min.js": {
605
673
  "imports": [
@@ -627,10 +695,10 @@
627
695
  },
628
696
  "bytes": 4973
629
697
  },
630
- "dist/prod/vidply.TranscriptManager-UZ6DUFB6.min.js": {
698
+ "dist/prod/vidply.TranscriptManager-WFZSW6NR.min.js": {
631
699
  "imports": [
632
700
  {
633
- "path": "dist/prod/vidply.chunk-MBUR3U5L.min.js",
701
+ "path": "dist/prod/vidply.chunk-LGTJRPUL.min.js",
634
702
  "kind": "import-statement"
635
703
  }
636
704
  ],
@@ -640,27 +708,27 @@
640
708
  "entryPoint": "src/controls/TranscriptManager.js",
641
709
  "inputs": {
642
710
  "src/controls/TranscriptManager.js": {
643
- "bytesInOutput": 42852
711
+ "bytesInOutput": 42771
644
712
  }
645
713
  },
646
- "bytes": 43123
714
+ "bytes": 43042
647
715
  },
648
- "dist/prod/vidply.chunk-MBUR3U5L.min.js": {
716
+ "dist/prod/vidply.chunk-LGTJRPUL.min.js": {
649
717
  "imports": [
650
718
  {
651
- "path": "dist/prod/vidply.de-SWFW4HYT.min.js",
719
+ "path": "dist/prod/vidply.de-FR3XX54P.min.js",
652
720
  "kind": "dynamic-import"
653
721
  },
654
722
  {
655
- "path": "dist/prod/vidply.es-7BJ2DJAY.min.js",
723
+ "path": "dist/prod/vidply.es-3IJCQLJ7.min.js",
656
724
  "kind": "dynamic-import"
657
725
  },
658
726
  {
659
- "path": "dist/prod/vidply.fr-DPVR5DFY.min.js",
727
+ "path": "dist/prod/vidply.fr-NC4VEAPH.min.js",
660
728
  "kind": "dynamic-import"
661
729
  },
662
730
  {
663
- "path": "dist/prod/vidply.ja-PEBVWKVH.min.js",
731
+ "path": "dist/prod/vidply.ja-4ZC6ZQLV.min.js",
664
732
  "kind": "dynamic-import"
665
733
  }
666
734
  ],
@@ -682,10 +750,10 @@
682
750
  ],
683
751
  "inputs": {
684
752
  "src/utils/DOMUtils.js": {
685
- "bytesInOutput": 2244
753
+ "bytesInOutput": 2348
686
754
  },
687
755
  "src/i18n/languages/en.js": {
688
- "bytesInOutput": 5561
756
+ "bytesInOutput": 6159
689
757
  },
690
758
  "src/i18n/translations.js": {
691
759
  "bytesInOutput": 340
@@ -715,7 +783,7 @@
715
783
  "bytesInOutput": 776
716
784
  }
717
785
  },
718
- "bytes": 39549
786
+ "bytes": 40251
719
787
  },
720
788
  "dist/prod/vidply.YouTubeRenderer-MFC2GMAC.min.js": {
721
789
  "imports": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vidply",
3
- "version": "1.0.27",
3
+ "version": "1.0.29",
4
4
  "description": "Universal, accessible video & audio player with ES6 modules",
5
5
  "type": "module",
6
6
  "main": "dist/prod/vidply.esm.min.js",
@@ -7,6 +7,7 @@ import {TimeUtils} from '../utils/TimeUtils.js';
7
7
  import {createIconElement} from '../icons/Icons.js';
8
8
  import {i18n} from '../i18n/i18n.js';
9
9
  import {focusElement, focusFirstElement} from '../utils/FocusUtils.js';
10
+ import {isMobile} from '../utils/PerformanceUtils.js';
10
11
 
11
12
  export class ControlBar {
12
13
  constructor(player) {
@@ -30,11 +31,6 @@ export class ControlBar {
30
31
  this.setupOverflowDetection();
31
32
  }
32
33
 
33
- // Helper method to check if we're on a mobile device
34
- isMobile() {
35
- return window.innerWidth < 768;
36
- }
37
-
38
34
  // Helper method to detect touch devices
39
35
  isTouchDevice() {
40
36
  return (
@@ -46,7 +42,7 @@ export class ControlBar {
46
42
 
47
43
  // Smart menu positioning to avoid overflow
48
44
  positionMenu(menu, button, immediate = false) {
49
- const isMobile = this.isMobile();
45
+ const mobile = isMobile();
50
46
  const isOverflowMenu = menu.classList.contains(`${this.player.options.classPrefix}-overflow-menu-list`);
51
47
  const isFullscreen = this.player.state.fullscreen;
52
48
 
@@ -101,7 +97,7 @@ export class ControlBar {
101
97
  return;
102
98
  }
103
99
 
104
- if (isMobile) {
100
+ if (mobile) {
105
101
  // On mobile, ensure menus stay within viewport
106
102
  const isVolumeMenu = menu.classList.contains(`${this.player.options.classPrefix}-volume-menu`);
107
103
 
@@ -214,7 +214,7 @@ export class TranscriptManager {
214
214
  className: `${this.player.options.classPrefix}-transcript-window`,
215
215
  attributes: {
216
216
  'role': 'dialog',
217
- 'aria-label': 'Video Transcript',
217
+ 'aria-label': i18n.t('transcript.ariaLabel'),
218
218
  'tabindex': '-1'
219
219
  }
220
220
  });
@@ -750,15 +750,13 @@ export class TranscriptManager {
750
750
  const metadataTrack = textTracks.find(track => track.kind === 'metadata');
751
751
 
752
752
  // We need at least one track type available for display
753
- // Description tracks are only included if audio description is enabled
754
- const hasDescriptionTrack = descriptionTrack && this.player.state.audioDescriptionEnabled;
755
- if (!captionTrack && !hasDescriptionTrack && !metadataTrack) {
753
+ // (captions, descriptions, or metadata - though metadata is not displayed)
754
+ if (!captionTrack && !descriptionTrack && !metadataTrack) {
756
755
  this.showNoTranscriptMessage();
757
756
  return;
758
757
  }
759
758
 
760
- // Enable all tracks to load cues (even if we won't display descriptions)
761
- // This ensures descriptions are ready when audio description is enabled
759
+ // Enable all tracks to load cues so they're available for the transcript
762
760
  const tracksToLoad = [captionTrack, descriptionTrack, metadataTrack].filter(Boolean);
763
761
  tracksToLoad.forEach(track => {
764
762
  if (track.mode === 'disabled') {
@@ -806,8 +804,10 @@ export class TranscriptManager {
806
804
  });
807
805
  }
808
806
 
809
- // Only include description cues if audio description is enabled
810
- if (descriptionTrack && descriptionTrack.cues && this.player.state.audioDescriptionEnabled) {
807
+ // Always include description cues in transcript for completeness
808
+ // (Audio description toggle only controls whether they're read aloud,
809
+ // but the transcript should always show all content for accessibility)
810
+ if (descriptionTrack && descriptionTrack.cues) {
811
811
  Array.from(descriptionTrack.cues).forEach(cue => {
812
812
  allCues.push({ cue, type: 'description' });
813
813
  });