@hopeplayer/core 1.4.0 → 1.6.0

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 (151) hide show
  1. package/dist/HopePlayerElement.d.ts +42 -2
  2. package/dist/HopePlayerElement.d.ts.map +1 -1
  3. package/dist/chunks/NativeEme-CXosVcw8.js +80 -0
  4. package/dist/chunks/NativeEme-CXosVcw8.js.map +1 -0
  5. package/dist/chunks/{accessibility-DeUIoAda.js → accessibility-DFx4CE0H.js} +9 -8
  6. package/dist/chunks/{accessibility-DeUIoAda.js.map → accessibility-DFx4CE0H.js.map} +1 -1
  7. package/dist/chunks/adTriggers-BIAWe8o4.js +419 -0
  8. package/dist/chunks/adTriggers-BIAWe8o4.js.map +1 -0
  9. package/dist/chunks/{ads-CdWbE9aD.js → ads-DlpHPpR9.js} +3 -3
  10. package/dist/chunks/ads-DlpHPpR9.js.map +1 -0
  11. package/dist/chunks/analytics-DEjTAJO9.js +281 -0
  12. package/dist/chunks/analytics-DEjTAJO9.js.map +1 -0
  13. package/dist/chunks/{cast-BQ-suTcF.js → cast-vHyi7oV_.js} +2 -2
  14. package/dist/chunks/{cast-BQ-suTcF.js.map → cast-vHyi7oV_.js.map} +1 -1
  15. package/dist/chunks/dash-CWjy-y7B.js +22 -0
  16. package/dist/chunks/dash-CWjy-y7B.js.map +1 -0
  17. package/dist/chunks/docPip-wybMVP1H.js +82 -0
  18. package/dist/chunks/docPip-wybMVP1H.js.map +1 -0
  19. package/dist/chunks/heatmap-Bb7neaYU.js +92 -0
  20. package/dist/chunks/heatmap-Bb7neaYU.js.map +1 -0
  21. package/dist/chunks/{history-DAbqEhNB.js → history-CwqLXiZi.js} +2 -2
  22. package/dist/chunks/{history-DAbqEhNB.js.map → history-CwqLXiZi.js.map} +1 -1
  23. package/dist/chunks/interactive-CgltIneu.js +189 -0
  24. package/dist/chunks/interactive-CgltIneu.js.map +1 -0
  25. package/dist/chunks/keySystems-CNzjRq6e.js +70 -0
  26. package/dist/chunks/keySystems-CNzjRq6e.js.map +1 -0
  27. package/dist/chunks/{loopSection-CvF4l5uf.js → loopSection-Bwk4W8vz.js} +16 -16
  28. package/dist/chunks/loopSection-Bwk4W8vz.js.map +1 -0
  29. package/dist/chunks/{markers-B04NMI79.js → markers-L69W3kj6.js} +53 -51
  30. package/dist/chunks/markers-L69W3kj6.js.map +1 -0
  31. package/dist/chunks/player-D2_HRzot.js +4351 -0
  32. package/dist/chunks/player-D2_HRzot.js.map +1 -0
  33. package/dist/chunks/{playlist-C6Mh9BE8.js → playlist-CHfStNbQ.js} +29 -21
  34. package/dist/chunks/playlist-CHfStNbQ.js.map +1 -0
  35. package/dist/chunks/plugin-style-CPJELe-i.js +17 -0
  36. package/dist/chunks/plugin-style-CPJELe-i.js.map +1 -0
  37. package/dist/chunks/pluginHost-cN2uGFeG.js +566 -0
  38. package/dist/chunks/pluginHost-cN2uGFeG.js.map +1 -0
  39. package/dist/chunks/redirectScreen-TIqLdvBY.js +239 -0
  40. package/dist/chunks/redirectScreen-TIqLdvBY.js.map +1 -0
  41. package/dist/chunks/{rewardedUnlock-CGhQyWOk.js → rewardedUnlock-DUqYwXTr.js} +2 -2
  42. package/dist/chunks/{rewardedUnlock-CGhQyWOk.js.map → rewardedUnlock-DUqYwXTr.js.map} +1 -1
  43. package/dist/chunks/segments-Ds-c1b5e.js +66 -0
  44. package/dist/chunks/segments-Ds-c1b5e.js.map +1 -0
  45. package/dist/chunks/{skipSegments-BbWzPpXz.js → skipSegments-ByNoF1qZ.js} +2 -2
  46. package/dist/chunks/{skipSegments-BbWzPpXz.js.map → skipSegments-ByNoF1qZ.js.map} +1 -1
  47. package/dist/chunks/{spriteThumbnails-B7oDZFTo.js → spriteThumbnails-Cr9UmkM9.js} +74 -51
  48. package/dist/chunks/spriteThumbnails-Cr9UmkM9.js.map +1 -0
  49. package/dist/chunks/{statsPanel-DSClIwA3.js → statsPanel-D0DtoFgS.js} +2 -2
  50. package/dist/chunks/statsPanel-D0DtoFgS.js.map +1 -0
  51. package/dist/chunks/{sticky-D_eLCNFk.js → sticky-BDStzjBM.js} +27 -26
  52. package/dist/chunks/sticky-BDStzjBM.js.map +1 -0
  53. package/dist/chunks/{story-BLBij82f.js → story-CodA2dfn.js} +2 -2
  54. package/dist/chunks/{story-BLBij82f.js.map → story-CodA2dfn.js.map} +1 -1
  55. package/dist/chunks/transcript-LG7E9UYE.js +186 -0
  56. package/dist/chunks/transcript-LG7E9UYE.js.map +1 -0
  57. package/dist/controls/ContextMenu.d.ts +1 -0
  58. package/dist/controls/ContextMenu.d.ts.map +1 -1
  59. package/dist/controls/ControlBar.d.ts +6 -0
  60. package/dist/controls/ControlBar.d.ts.map +1 -1
  61. package/dist/controls/SeekBar.d.ts +5 -2
  62. package/dist/controls/SeekBar.d.ts.map +1 -1
  63. package/dist/controls/SettingsMenu.d.ts +2 -1
  64. package/dist/controls/SettingsMenu.d.ts.map +1 -1
  65. package/dist/drm/NativeEme.d.ts +23 -0
  66. package/dist/drm/NativeEme.d.ts.map +1 -0
  67. package/dist/drm/keySystems.d.ts +18 -0
  68. package/dist/drm/keySystems.d.ts.map +1 -0
  69. package/dist/hls/SourceManager.d.ts +31 -5
  70. package/dist/hls/SourceManager.d.ts.map +1 -1
  71. package/dist/hls/dashEngine.d.ts +85 -0
  72. package/dist/hls/dashEngine.d.ts.map +1 -0
  73. package/dist/hls/sourceGroups.d.ts.map +1 -1
  74. package/dist/hope-player.js +1 -1
  75. package/dist/i18n/locales/en.d.ts.map +1 -1
  76. package/dist/i18n/locales/tr.d.ts.map +1 -1
  77. package/dist/i18n/types.d.ts +28 -0
  78. package/dist/i18n/types.d.ts.map +1 -1
  79. package/dist/index.d.ts +2 -2
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/keyboard/KeyboardController.d.ts +14 -0
  82. package/dist/keyboard/KeyboardController.d.ts.map +1 -1
  83. package/dist/plugin-api/PluginAds.d.ts +61 -0
  84. package/dist/plugin-api/PluginAds.d.ts.map +1 -0
  85. package/dist/plugin-api/PluginHost.d.ts +6 -0
  86. package/dist/plugin-api/PluginHost.d.ts.map +1 -1
  87. package/dist/plugin-api/types.d.ts +39 -0
  88. package/dist/plugin-api/types.d.ts.map +1 -1
  89. package/dist/plugins/accessibility/Accessibility.d.ts.map +1 -1
  90. package/dist/plugins/ad-triggers/AdTriggers.d.ts +5 -0
  91. package/dist/plugins/ad-triggers/AdTriggers.d.ts.map +1 -1
  92. package/dist/plugins/ads/AdsController.d.ts +2 -0
  93. package/dist/plugins/ads/AdsController.d.ts.map +1 -1
  94. package/dist/plugins/analytics/QoeTracker.d.ts +71 -0
  95. package/dist/plugins/analytics/QoeTracker.d.ts.map +1 -0
  96. package/dist/plugins/analytics/index.d.ts +6 -0
  97. package/dist/plugins/analytics/index.d.ts.map +1 -0
  98. package/dist/plugins/doc-pip/DocumentPip.d.ts +44 -0
  99. package/dist/plugins/doc-pip/DocumentPip.d.ts.map +1 -0
  100. package/dist/plugins/doc-pip/index.d.ts +5 -0
  101. package/dist/plugins/doc-pip/index.d.ts.map +1 -0
  102. package/dist/plugins/heatmap/Heatmap.d.ts +36 -0
  103. package/dist/plugins/heatmap/Heatmap.d.ts.map +1 -0
  104. package/dist/plugins/heatmap/index.d.ts +6 -0
  105. package/dist/plugins/heatmap/index.d.ts.map +1 -0
  106. package/dist/plugins/interactive/Interactive.d.ts +45 -0
  107. package/dist/plugins/interactive/Interactive.d.ts.map +1 -0
  108. package/dist/plugins/interactive/index.d.ts +6 -0
  109. package/dist/plugins/interactive/index.d.ts.map +1 -0
  110. package/dist/plugins/markers/MarkProgress.d.ts +3 -1
  111. package/dist/plugins/markers/MarkProgress.d.ts.map +1 -1
  112. package/dist/plugins/playlist/PlaylistRunner.d.ts +2 -0
  113. package/dist/plugins/playlist/PlaylistRunner.d.ts.map +1 -1
  114. package/dist/plugins/redirect-screen/RedirectScreen.d.ts +3 -1
  115. package/dist/plugins/redirect-screen/RedirectScreen.d.ts.map +1 -1
  116. package/dist/plugins/segments/Segments.d.ts +1 -0
  117. package/dist/plugins/segments/Segments.d.ts.map +1 -1
  118. package/dist/plugins/sprite-thumbnails/SpriteThumbnails.d.ts +9 -0
  119. package/dist/plugins/sprite-thumbnails/SpriteThumbnails.d.ts.map +1 -1
  120. package/dist/plugins/sticky/StickyManager.d.ts +2 -0
  121. package/dist/plugins/sticky/StickyManager.d.ts.map +1 -1
  122. package/dist/plugins/transcript/Transcript.d.ts +65 -0
  123. package/dist/plugins/transcript/Transcript.d.ts.map +1 -0
  124. package/dist/plugins/transcript/index.d.ts +6 -0
  125. package/dist/plugins/transcript/index.d.ts.map +1 -0
  126. package/dist/screens/ErrorScreen.d.ts +1 -1
  127. package/dist/screens/ErrorScreen.d.ts.map +1 -1
  128. package/dist/subtitles/attachTracks.d.ts +6 -0
  129. package/dist/subtitles/attachTracks.d.ts.map +1 -1
  130. package/dist/types/index.d.ts +320 -16
  131. package/dist/types/index.d.ts.map +1 -1
  132. package/dist/utils/plugin-style.d.ts +5 -0
  133. package/dist/utils/plugin-style.d.ts.map +1 -0
  134. package/package.json +2 -1
  135. package/dist/chunks/adTriggers-DXmtF4t2.js +0 -410
  136. package/dist/chunks/adTriggers-DXmtF4t2.js.map +0 -1
  137. package/dist/chunks/ads-CdWbE9aD.js.map +0 -1
  138. package/dist/chunks/loopSection-CvF4l5uf.js.map +0 -1
  139. package/dist/chunks/markers-B04NMI79.js.map +0 -1
  140. package/dist/chunks/player-D7WQxMzr.js +0 -3894
  141. package/dist/chunks/player-D7WQxMzr.js.map +0 -1
  142. package/dist/chunks/playlist-C6Mh9BE8.js.map +0 -1
  143. package/dist/chunks/pluginHost-DjvLmMYZ.js +0 -376
  144. package/dist/chunks/pluginHost-DjvLmMYZ.js.map +0 -1
  145. package/dist/chunks/redirectScreen-5HAVRtxe.js +0 -208
  146. package/dist/chunks/redirectScreen-5HAVRtxe.js.map +0 -1
  147. package/dist/chunks/segments-gCPrWRig.js +0 -63
  148. package/dist/chunks/segments-gCPrWRig.js.map +0 -1
  149. package/dist/chunks/spriteThumbnails-B7oDZFTo.js.map +0 -1
  150. package/dist/chunks/statsPanel-DSClIwA3.js.map +0 -1
  151. package/dist/chunks/sticky-D_eLCNFk.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import type { HopePlayerOptions } from './types';
1
+ import type { HopePlayerOptions, HopeQoeMetrics } from './types';
2
2
  import type Hls from 'hls.js';
3
3
  import { type PlaybackEngineInfo } from './hls/SourceManager';
4
4
  import { ErrorLog } from './debug/ErrorLog';
@@ -88,14 +88,27 @@ export declare class HopePlayerElement extends HTMLElement {
88
88
  private geoChecker;
89
89
  private redirectScreen;
90
90
  private redirectKey;
91
+ private transcript;
92
+ private transcriptKey;
93
+ private heatmap;
94
+ private heatmapKey;
95
+ private docPip;
96
+ private docPipOptions;
97
+ private interactive;
98
+ private interactiveKey;
91
99
  /** Eklentileri çalıştıran taraf — yalnızca bir eklenti kullanılınca indirilir (plugin-api/PluginHost). */
92
100
  private pluginHost;
101
+ /** Seçenekler uygulanırken eklenti senkronu bitince çözülür (reklam tag dönüşümü bekler). */
102
+ private settlePlugins;
103
+ private pluginsSettled;
93
104
  /** `player.use()` ile çalışırken eklenenler. */
94
105
  private readonly runtimePlugins;
95
106
  private offGlobalPlugins;
96
107
  private accessibility;
97
108
  private accessibilityKey;
98
109
  private playbackHistory;
110
+ private qoeTracker;
111
+ private analyticsKey;
99
112
  private historyKey;
100
113
  private qrResume;
101
114
  private pauseAd;
@@ -174,7 +187,11 @@ export declare class HopePlayerElement extends HTMLElement {
174
187
  set options(value: HopePlayerOptions);
175
188
  play(): Promise<void>;
176
189
  pause(): void;
177
- /** Şu anki oynatma yolu: `native` (MP4/WebM), `native-hls` (tarayıcının HLS'i) ya da `hls.js` — teşhis için. */
190
+ /** Kaynak yüklenmeden önce kurulur — ilk oynatma ölçülsün. */
191
+ private applyAnalytics;
192
+ /** Oturumun deneyim (QoE) ölçümleri — `options.analytics` kapalıysa null. */
193
+ get qoe(): HopeQoeMetrics | null;
194
+ /** Şu anki oynatma yolu: `native` (MP4/WebM), `native-hls` (tarayıcının HLS'i), `hls.js` ya da `dash.js` — teşhis için. */
178
195
  get playbackEngine(): PlaybackEngineInfo;
179
196
  /** Paket sürümü (ör. "1.0.4"). */
180
197
  static readonly version: string;
@@ -201,6 +218,9 @@ export declare class HopePlayerElement extends HTMLElement {
201
218
  /** Eklentiyi sayfadaki tüm player'lara ekler. */
202
219
  static use<O>(plugin: HopePlugin<O> | PluginLoader, options?: O): () => void;
203
220
  private syncPlugins;
221
+ private markPluginsPending;
222
+ private adTagTransform;
223
+ private doSyncPlugins;
204
224
  /** `options.qrResume` kuruluysa "telefonundan devam et" QR ekranını manuel göster (ör. entegratörün kendi "telefona gönder" butonu) — otomatik gösterim kuralları (minElapsed/minRemaining) burada uygulanmaz. */
205
225
  showQrResume(): void;
206
226
  get showRemainingTime(): boolean;
@@ -212,6 +232,22 @@ export declare class HopePlayerElement extends HTMLElement {
212
232
  /** applyOptions'ın asenkron kısmı — yalnızca queuePluginApply üzerinden, sırayla çalışır. */
213
233
  private applyPluginsAndPlayback;
214
234
  private initPlayback;
235
+ /** Transkript paneli — ayar değişince yeniden kurulur. */
236
+ private applyTranscript;
237
+ /** Etkileşimli içerik — öğeler değişince yeniden kurulur (`onAnswer` fonksiyonu anahtara girmez). */
238
+ private applyInteractive;
239
+ /** Isı haritası — veri değişince yeniden çizilir. */
240
+ private applyHeatmap;
241
+ /** PiP butonu: Document PiP açıksa kapatır, kullanılabiliyorsa açar; işlemediyse false (normal PiP). */
242
+ private toggleDocPip;
243
+ /** Document PiP açıldı / kapandı. */
244
+ private onDocPipChange;
245
+ /** PiP penceresindeki kısayol tuşları player'a gider (tam ekran hariç). */
246
+ private forwardPipKey;
247
+ /** Picture-in-Picture'ı aç / kapat — `documentPip` açıksa ve destekleniyorsa Document PiP, değilse normal PiP. */
248
+ togglePip(): void;
249
+ /** Transkript panelini aç / kapat (`force` verilmezse tersine çevirir). `options.transcript` gerekir. */
250
+ toggleTranscript(force?: boolean): void;
215
251
  /** Altyazı menüsünü `options.subtitles` + yayın izlerinden kurar; `activeLabel` varsa onu seçer. */
216
252
  private rebuildCaptions;
217
253
  /**
@@ -236,6 +272,10 @@ export declare class HopePlayerElement extends HTMLElement {
236
272
  private sourceHeight;
237
273
  private isSourceLocked;
238
274
  /** Başlangıç kaynağı: `selected` (ya da ilk); kilitliyse serbest kaynakların en yükseği. */
275
+ /** `qualityLimit.max` üstü yükseklikler; hepsi üstündeyse en düşüğü kalır. */
276
+ private limitSources;
277
+ /** Veri tasarrufu açık ve tarayıcı tasarruf / yavaş bağlantı bildiriyorsa üst sınır (px). */
278
+ private dataSaverHeight;
239
279
  private pickInitialSource;
240
280
  private renderSourceQualities;
241
281
  /** Kilitli kalite var mı (ödüllü reklam butonu yalnızca o zaman görünür) ve en yükseğinin etiketi. */
@@ -1 +1 @@
1
- {"version":3,"file":"HopePlayerElement.d.ts","sourceRoot":"","sources":["../src/HopePlayerElement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HopePlayerElement.d.ts","sourceRoot":"","sources":["../src/HopePlayerElement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ var m = Object.defineProperty;
2
+ var w = (n, e, s) => e in n ? m(n, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : n[e] = s;
3
+ var h = (n, e, s) => w(n, typeof e != "symbol" ? e + "" : e, s);
4
+ import { drmEntries as v, KEY_SYSTEMS as y } from "./keySystems-CNzjRq6e.js";
5
+ const E = ['video/mp4; codecs="avc1.42E01E"', 'video/mp4; codecs="avc1.640028"', 'video/webm; codecs="vp9"'], g = ['audio/mp4; codecs="mp4a.40.2"'];
6
+ class L {
7
+ constructor(e, s, i) {
8
+ h(this, "setup", null);
9
+ h(this, "sessions", []);
10
+ /** Aynı initData için ikinci oturum açılmaz. */
11
+ h(this, "seen", /* @__PURE__ */ new Set());
12
+ h(this, "disposed", !1);
13
+ h(this, "onEncrypted", (e) => {
14
+ if (!e.initData) return;
15
+ const s = new Uint8Array(e.initData), i = `${e.initDataType}:${Array.from(s.subarray(0, 64)).join(",")}:${s.length}`;
16
+ this.seen.has(i) || (this.seen.add(i), this.handle(e.initDataType, s).catch((a) => this.fail(a)));
17
+ });
18
+ this.video = e, this.drm = s, this.cb = i, e.addEventListener("encrypted", this.onEncrypted);
19
+ }
20
+ destroy() {
21
+ this.disposed = !0, this.video.removeEventListener("encrypted", this.onEncrypted);
22
+ for (const e of this.sessions.splice(0)) e.close().catch(() => {
23
+ });
24
+ }
25
+ async handle(e, s) {
26
+ this.setup ?? (this.setup = this.createKeys(e));
27
+ const i = await this.setup;
28
+ if (!i || this.disposed) return;
29
+ const a = this.video.mediaKeys;
30
+ if (!a) return;
31
+ const r = a.createSession();
32
+ this.sessions.push(r), r.addEventListener("message", (t) => {
33
+ this.license(i.name, i.lic, r, new Uint8Array(t.message), s).catch((c) => this.fail(c, i.name));
34
+ }), await r.generateRequest(e, s);
35
+ }
36
+ async createKeys(e) {
37
+ var i;
38
+ if (!navigator.requestMediaKeySystemAccess) throw new Error("EME is not supported");
39
+ const s = /\.m3u8|mpegurl/i.test(this.video.currentSrc || this.video.src);
40
+ for (const [a, r] of v(this.drm)) {
41
+ const t = a === "widevine" ? ((i = this.drm.widevine) == null ? void 0 : i.robustness) ?? "" : "", c = a === "fairplay" && s ? [{ contentType: "application/vnd.apple.mpegurl", robustness: "" }] : E.map((o) => ({ contentType: o, robustness: t })), u = {
42
+ initDataTypes: [e],
43
+ videoCapabilities: c,
44
+ ...a === "fairplay" && s ? {} : { audioCapabilities: g.map((o) => ({ contentType: o, robustness: t })) }
45
+ };
46
+ let d;
47
+ try {
48
+ d = await navigator.requestMediaKeySystemAccess(y[a], [u]);
49
+ } catch {
50
+ continue;
51
+ }
52
+ const p = await d.createMediaKeys();
53
+ if (a === "fairplay") {
54
+ const o = await b(this.drm.fairplay.certificateUrl, { headers: r.headers, credentials: r.withCredentials ? "include" : "same-origin" });
55
+ await p.setServerCertificate(o);
56
+ }
57
+ return this.disposed ? null : (await this.video.setMediaKeys(p), { name: a, lic: r });
58
+ }
59
+ throw new Error("None of the configured DRM systems is supported by this browser");
60
+ }
61
+ async license(e, s, i, a, r) {
62
+ var l, f;
63
+ const t = e === "fairplay" ? this.drm.fairplay : void 0, c = t != null && t.prepareLicenseRequest ? await t.prepareLicenseRequest(a, r) : a, u = { ...typeof c == "string" || t != null && t.prepareLicenseRequest ? {} : { "Content-Type": "application/octet-stream" }, ...s.headers }, d = await fetch(s.licenseUrl, { method: "POST", body: c, headers: u, credentials: s.withCredentials ? "include" : "same-origin" });
64
+ if (!d.ok) throw new Error(`License request failed (HTTP ${d.status})`);
65
+ const p = await d.arrayBuffer(), o = t != null && t.parseLicenseResponse ? await t.parseLicenseResponse(p) : p;
66
+ this.disposed || (await i.update(o), (f = (l = this.cb).onLicense) == null || f.call(l, y[e]));
67
+ }
68
+ fail(e, s) {
69
+ this.disposed || this.cb.onError((e == null ? void 0 : e.message) ?? String(e), s ? y[s] : void 0);
70
+ }
71
+ }
72
+ async function b(n, e) {
73
+ const s = await fetch(n, e);
74
+ if (!s.ok) throw new Error(`Certificate request failed (HTTP ${s.status})`);
75
+ return s.arrayBuffer();
76
+ }
77
+ export {
78
+ L as NativeEme
79
+ };
80
+ //# sourceMappingURL=NativeEme-CXosVcw8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeEme-CXosVcw8.js","sources":["../../src/drm/NativeEme.ts"],"sourcesContent":["// Native oynatmada (Safari HLS / FairPlay, şifreli MP4) EME: `encrypted` olayında anahtar sistemi, oturum, lisans.\nimport type { HopeDrmLicense, HopeDrmOptions } from '../types';\nimport { KEY_SYSTEMS, drmEntries, type DrmName } from './keySystems';\n\nexport interface NativeEmeCallbacks {\n onError(message: string, keySystem?: string): void;\n onLicense?(keySystem: string): void;\n}\n\nconst VIDEO_TYPES = ['video/mp4; codecs=\"avc1.42E01E\"', 'video/mp4; codecs=\"avc1.640028\"', 'video/webm; codecs=\"vp9\"'];\nconst AUDIO_TYPES = ['audio/mp4; codecs=\"mp4a.40.2\"'];\n\nexport class NativeEme {\n private setup: Promise<{ name: DrmName; lic: HopeDrmLicense } | null> | null = null;\n private readonly sessions: MediaKeySession[] = [];\n /** Aynı initData için ikinci oturum açılmaz. */\n private readonly seen = new Set<string>();\n private disposed = false;\n\n constructor(\n private readonly video: HTMLVideoElement,\n private readonly drm: HopeDrmOptions,\n private readonly cb: NativeEmeCallbacks\n ) {\n video.addEventListener('encrypted', this.onEncrypted);\n }\n\n destroy(): void {\n this.disposed = true;\n this.video.removeEventListener('encrypted', this.onEncrypted);\n for (const s of this.sessions.splice(0)) void s.close().catch(() => {});\n }\n\n private readonly onEncrypted = (e: MediaEncryptedEvent): void => {\n if (!e.initData) return;\n const initData = new Uint8Array(e.initData) as Uint8Array<ArrayBuffer>;\n const key = `${e.initDataType}:${Array.from(initData.subarray(0, 64)).join(',')}:${initData.length}`;\n if (this.seen.has(key)) return;\n this.seen.add(key);\n void this.handle(e.initDataType, initData).catch((err) => this.fail(err));\n };\n\n private async handle(initDataType: string, initData: Uint8Array): Promise<void> {\n this.setup ??= this.createKeys(initDataType);\n const chosen = await this.setup;\n if (!chosen || this.disposed) return;\n const keys = this.video.mediaKeys;\n if (!keys) return;\n const session = keys.createSession();\n this.sessions.push(session);\n session.addEventListener('message', (ev) => {\n void this.license(chosen.name, chosen.lic, session, new Uint8Array((ev as MediaKeyMessageEvent).message), initData).catch((err) => this.fail(err, chosen.name));\n });\n await session.generateRequest(initDataType, initData as Uint8Array<ArrayBuffer>);\n }\n\n private async createKeys(initDataType: string): Promise<{ name: DrmName; lic: HopeDrmLicense } | null> {\n if (!navigator.requestMediaKeySystemAccess) throw new Error('EME is not supported');\n const hlsNative = /\\.m3u8|mpegurl/i.test(this.video.currentSrc || this.video.src);\n for (const [name, lic] of drmEntries(this.drm)) {\n const robustness = name === 'widevine' ? (this.drm.widevine?.robustness ?? '') : '';\n const videoCapabilities =\n name === 'fairplay' && hlsNative ? [{ contentType: 'application/vnd.apple.mpegurl', robustness: '' }] : VIDEO_TYPES.map((contentType) => ({ contentType, robustness }));\n const config: MediaKeySystemConfiguration = {\n initDataTypes: [initDataType],\n videoCapabilities,\n ...(name === 'fairplay' && hlsNative ? {} : { audioCapabilities: AUDIO_TYPES.map((contentType) => ({ contentType, robustness })) }),\n };\n let access: MediaKeySystemAccess;\n try {\n access = await navigator.requestMediaKeySystemAccess(KEY_SYSTEMS[name], [config]);\n } catch {\n continue;\n }\n const keys = await access.createMediaKeys();\n if (name === 'fairplay') {\n const cert = await fetchBinary(this.drm.fairplay!.certificateUrl, { headers: lic.headers, credentials: lic.withCredentials ? 'include' : 'same-origin' });\n await keys.setServerCertificate(cert);\n }\n if (this.disposed) return null;\n await this.video.setMediaKeys(keys);\n return { name, lic };\n }\n throw new Error('None of the configured DRM systems is supported by this browser');\n }\n\n private async license(name: DrmName, lic: HopeDrmLicense, session: MediaKeySession, message: Uint8Array, initData: Uint8Array): Promise<void> {\n const fp = name === 'fairplay' ? this.drm.fairplay : undefined;\n const body = fp?.prepareLicenseRequest ? await fp.prepareLicenseRequest(message, initData) : message;\n const headers: Record<string, string> = { ...(typeof body === 'string' || fp?.prepareLicenseRequest ? {} : { 'Content-Type': 'application/octet-stream' }), ...lic.headers };\n const res = await fetch(lic.licenseUrl, { method: 'POST', body: body as BodyInit, headers, credentials: lic.withCredentials ? 'include' : 'same-origin' });\n if (!res.ok) throw new Error(`License request failed (HTTP ${res.status})`);\n const raw = await res.arrayBuffer();\n const out = fp?.parseLicenseResponse ? await fp.parseLicenseResponse(raw) : raw;\n if (this.disposed) return;\n await session.update(out);\n this.cb.onLicense?.(KEY_SYSTEMS[name]);\n }\n\n private fail(err: unknown, name?: DrmName): void {\n if (this.disposed) return;\n this.cb.onError((err as Error)?.message ?? String(err), name ? KEY_SYSTEMS[name] : undefined);\n }\n}\n\nasync function fetchBinary(url: string, init: RequestInit): Promise<ArrayBuffer> {\n const res = await fetch(url, init);\n if (!res.ok) throw new Error(`Certificate request failed (HTTP ${res.status})`);\n return res.arrayBuffer();\n}\n"],"names":["VIDEO_TYPES","AUDIO_TYPES","NativeEme","video","drm","cb","__publicField","initData","key","err","s","initDataType","chosen","keys","session","ev","hlsNative","name","lic","drmEntries","robustness","_a","videoCapabilities","contentType","config","access","KEY_SYSTEMS","cert","fetchBinary","message","fp","body","headers","res","raw","out","_b","url","init"],"mappings":";;;;AASA,MAAMA,IAAc,CAAC,mCAAmC,mCAAmC,0BAA0B,GAC/GC,IAAc,CAAC,+BAA+B;AAE7C,MAAMC,EAAU;AAAA,EAOnB,YACqBC,GACAC,GACAC,GACnB;AAVM,IAAAC,EAAA,eAAuE;AAC9D,IAAAA,EAAA,kBAA8B,CAAA;AAE9B;AAAA,IAAAA,EAAA,kCAAW,IAAA;AACpB,IAAAA,EAAA,kBAAW;AAgBF,IAAAA,EAAA,qBAAc,CAAC,MAAiC;AAC7D,UAAI,CAAC,EAAE,SAAU;AACjB,YAAMC,IAAW,IAAI,WAAW,EAAE,QAAQ,GACpCC,IAAM,GAAG,EAAE,YAAY,IAAI,MAAM,KAAKD,EAAS,SAAS,GAAG,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,IAAIA,EAAS,MAAM;AAClG,MAAI,KAAK,KAAK,IAAIC,CAAG,MACrB,KAAK,KAAK,IAAIA,CAAG,GACZ,KAAK,OAAO,EAAE,cAAcD,CAAQ,EAAE,MAAM,CAACE,MAAQ,KAAK,KAAKA,CAAG,CAAC;AAAA,IAC5E;AApBqB,SAAA,QAAAN,GACA,KAAA,MAAAC,GACA,KAAA,KAAAC,GAEjBF,EAAM,iBAAiB,aAAa,KAAK,WAAW;AAAA,EACxD;AAAA,EAEA,UAAgB;AACZ,SAAK,WAAW,IAChB,KAAK,MAAM,oBAAoB,aAAa,KAAK,WAAW;AAC5D,eAAWO,KAAK,KAAK,SAAS,OAAO,CAAC,EAAG,CAAKA,EAAE,MAAA,EAAQ,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EAC1E;AAAA,EAWA,MAAc,OAAOC,GAAsBJ,GAAqC;AAC5E,SAAK,UAAL,KAAK,QAAU,KAAK,WAAWI,CAAY;AAC3C,UAAMC,IAAS,MAAM,KAAK;AAC1B,QAAI,CAACA,KAAU,KAAK,SAAU;AAC9B,UAAMC,IAAO,KAAK,MAAM;AACxB,QAAI,CAACA,EAAM;AACX,UAAMC,IAAUD,EAAK,cAAA;AACrB,SAAK,SAAS,KAAKC,CAAO,GAC1BA,EAAQ,iBAAiB,WAAW,CAACC,MAAO;AACxC,MAAK,KAAK,QAAQH,EAAO,MAAMA,EAAO,KAAKE,GAAS,IAAI,WAAYC,EAA4B,OAAO,GAAGR,CAAQ,EAAE,MAAM,CAACE,MAAQ,KAAK,KAAKA,GAAKG,EAAO,IAAI,CAAC;AAAA,IAClK,CAAC,GACD,MAAME,EAAQ,gBAAgBH,GAAcJ,CAAmC;AAAA,EACnF;AAAA,EAEA,MAAc,WAAWI,GAA8E;;AACnG,QAAI,CAAC,UAAU,4BAA6B,OAAM,IAAI,MAAM,sBAAsB;AAClF,UAAMK,IAAY,kBAAkB,KAAK,KAAK,MAAM,cAAc,KAAK,MAAM,GAAG;AAChF,eAAW,CAACC,GAAMC,CAAG,KAAKC,EAAW,KAAK,GAAG,GAAG;AAC5C,YAAMC,IAAaH,MAAS,eAAcI,IAAA,KAAK,IAAI,aAAT,gBAAAA,EAAmB,eAAc,KAAM,IAC3EC,IACFL,MAAS,cAAcD,IAAY,CAAC,EAAE,aAAa,iCAAiC,YAAY,IAAI,IAAIhB,EAAY,IAAI,CAACuB,OAAiB,EAAE,aAAAA,GAAa,YAAAH,IAAa,GACpKI,IAAsC;AAAA,QACxC,eAAe,CAACb,CAAY;AAAA,QAC5B,mBAAAW;AAAA,QACA,GAAIL,MAAS,cAAcD,IAAY,CAAA,IAAK,EAAE,mBAAmBf,EAAY,IAAI,CAACsB,OAAiB,EAAE,aAAAA,GAAa,YAAAH,EAAA,EAAa,EAAA;AAAA,MAAE;AAErI,UAAIK;AACJ,UAAI;AACA,QAAAA,IAAS,MAAM,UAAU,4BAA4BC,EAAYT,CAAI,GAAG,CAACO,CAAM,CAAC;AAAA,MACpF,QAAQ;AACJ;AAAA,MACJ;AACA,YAAMX,IAAO,MAAMY,EAAO,gBAAA;AAC1B,UAAIR,MAAS,YAAY;AACrB,cAAMU,IAAO,MAAMC,EAAY,KAAK,IAAI,SAAU,gBAAgB,EAAE,SAASV,EAAI,SAAS,aAAaA,EAAI,kBAAkB,YAAY,eAAe;AACxJ,cAAML,EAAK,qBAAqBc,CAAI;AAAA,MACxC;AACA,aAAI,KAAK,WAAiB,QAC1B,MAAM,KAAK,MAAM,aAAad,CAAI,GAC3B,EAAE,MAAAI,GAAM,KAAAC,EAAA;AAAA,IACnB;AACA,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACrF;AAAA,EAEA,MAAc,QAAQD,GAAeC,GAAqBJ,GAA0Be,GAAqBtB,GAAqC;;AAC1I,UAAMuB,IAAKb,MAAS,aAAa,KAAK,IAAI,WAAW,QAC/Cc,IAAOD,KAAA,QAAAA,EAAI,wBAAwB,MAAMA,EAAG,sBAAsBD,GAAStB,CAAQ,IAAIsB,GACvFG,IAAkC,EAAE,GAAI,OAAOD,KAAS,YAAYD,KAAA,QAAAA,EAAI,wBAAwB,CAAA,IAAK,EAAE,gBAAgB,2BAAA,GAA+B,GAAGZ,EAAI,QAAA,GAC7Je,IAAM,MAAM,MAAMf,EAAI,YAAY,EAAE,QAAQ,QAAQ,MAAAa,GAAwB,SAAAC,GAAS,aAAad,EAAI,kBAAkB,YAAY,eAAe;AACzJ,QAAI,CAACe,EAAI,GAAI,OAAM,IAAI,MAAM,gCAAgCA,EAAI,MAAM,GAAG;AAC1E,UAAMC,IAAM,MAAMD,EAAI,YAAA,GAChBE,IAAML,KAAA,QAAAA,EAAI,uBAAuB,MAAMA,EAAG,qBAAqBI,CAAG,IAAIA;AAC5E,IAAI,KAAK,aACT,MAAMpB,EAAQ,OAAOqB,CAAG,IACxBC,KAAAf,IAAA,KAAK,IAAG,cAAR,QAAAe,EAAA,KAAAf,GAAoBK,EAAYT,CAAI;AAAA,EACxC;AAAA,EAEQ,KAAKR,GAAcQ,GAAsB;AAC7C,IAAI,KAAK,YACT,KAAK,GAAG,SAASR,KAAA,gBAAAA,EAAe,YAAW,OAAOA,CAAG,GAAGQ,IAAOS,EAAYT,CAAI,IAAI,MAAS;AAAA,EAChG;AACJ;AAEA,eAAeW,EAAYS,GAAaC,GAAyC;AAC7E,QAAML,IAAM,MAAM,MAAMI,GAAKC,CAAI;AACjC,MAAI,CAACL,EAAI,GAAI,OAAM,IAAI,MAAM,oCAAoCA,EAAI,MAAM,GAAG;AAC9E,SAAOA,EAAI,YAAA;AACf;"}
@@ -5,18 +5,18 @@ const D = {
5
5
  protanopia: [0.567, 0.433, 0, 0.558, 0.442, 0, 0, 0.242, 0.758],
6
6
  deuteranopia: [0.625, 0.375, 0, 0.7, 0.3, 0, 0, 0.3, 0.7],
7
7
  tritanopia: [0.95, 0.05, 0, 0, 0.433, 0.567, 0, 0.475, 0.525]
8
- }, O = {
8
+ }, F = {
9
9
  protanopia: [0, 0, 0, 0.7, 1, 0, 0.7, 0, 1],
10
10
  deuteranopia: [0, 0, 0, 0.7, 1, 0, 0.7, 0, 1],
11
11
  tritanopia: [1, 0, 0.7, 0, 1, 0.7, 0, 0, 0]
12
12
  }, L = [1, 0, 0, 0, 1, 0, 0, 0, 1];
13
- function F(n, t) {
13
+ function O(n, t) {
14
14
  const e = new Array(9);
15
15
  for (let s = 0; s < 3; s++) for (let o = 0; o < 3; o++) e[s * 3 + o] = n[s * 3] * t[o] + n[s * 3 + 1] * t[3 + o] + n[s * 3 + 2] * t[6 + o];
16
16
  return e;
17
17
  }
18
18
  function I(n) {
19
- const t = D[n], e = L.map((o, i) => o - t[i]), s = F(O[n], e);
19
+ const t = D[n], e = L.map((o, i) => o - t[i]), s = O(F[n], e);
20
20
  return L.map((o, i) => o + s[i]);
21
21
  }
22
22
  const z = /* @__PURE__ */ new Map();
@@ -28,7 +28,7 @@ function P(n) {
28
28
  }
29
29
  return t;
30
30
  }
31
- const Y = [1, 1.25, 1.5, 2, 3], X = [1, 1.5, 2, 3], B = ["none", "grayscale", "daylight", "night", "contrast", "protanopia", "deuteranopia", "tritanopia"], w = "hp-accessibility", d = 0.15, S = "accessibility", K = 6, T = 'button:not(.hp-center-play), a, input, [role="slider"], [part="control-bar"], .hp-chip, .hp-chip-panel, .hp-shortcuts, .hp-top-bar', A = {
31
+ const Y = [1, 1.25, 1.5, 2, 3], K = [1, 1.5, 2, 3], X = ["none", "grayscale", "daylight", "night", "contrast", "protanopia", "deuteranopia", "tritanopia"], w = "hp-accessibility", d = 0.15, S = "accessibility", B = 6, T = 'button:not(.hp-center-play), a, input, [role="slider"], [part="control-bar"], .hp-chip, .hp-chip-panel, .hp-shortcuts, .hp-top-bar', A = {
32
32
  none: "",
33
33
  grayscale: "grayscale(1)",
34
34
  // Aydınlık ortamda (gün ışığında ekran) seçilebilirlik: daha parlak, daha kontrastlı.
@@ -103,7 +103,7 @@ class N {
103
103
  });
104
104
  a(this, "onPointerUp", (t) => {
105
105
  var e;
106
- this.touches.delete(t.pointerId), this.pinch && this.touches.size < 2 && (this.pinch = null, this.syncQuickButtons(), this.ctx.hostEl.dispatchEvent(new CustomEvent("hp:accessibility", { detail: { ...this.state, changed: "zoom" } }))), ((e = this.drag) == null ? void 0 : e.id) === t.pointerId && (Math.hypot(t.clientX - this.drag.x, t.clientY - this.drag.y) > K && this.swallowNextClick(), this.drag = null);
106
+ this.touches.delete(t.pointerId), this.pinch && this.touches.size < 2 && (this.pinch = null, this.syncQuickButtons(), this.ctx.hostEl.dispatchEvent(new CustomEvent("hp:accessibility", { detail: { ...this.state, changed: "zoom" } }))), ((e = this.drag) == null ? void 0 : e.id) === t.pointerId && (Math.hypot(t.clientX - this.drag.x, t.clientY - this.drag.y) > B && this.swallowNextClick(), this.drag = null);
107
107
  });
108
108
  // ── Klavye ──
109
109
  a(this, "onKeyDown", (t) => {
@@ -119,7 +119,7 @@ class N {
119
119
  this.zoomLevels.length < 2 || (t.key === "+" || t.key === "=" ? (t.preventDefault(), this.setZoom(this.zoomLevels.find((e) => e > this.state.zoom + 1e-3) ?? this.state.zoom)) : t.key === "-" || t.key === "_" ? (t.preventDefault(), this.setZoom([...this.zoomLevels].reverse().find((e) => e < this.state.zoom - 1e-3) ?? 1)) : t.key === "0" && this.state.zoom > 1 ? (t.preventDefault(), this.setZoom(1)) : t.shiftKey && this.state.zoom > 1 && t.key.startsWith("Arrow") && (t.preventDefault(), t.key === "ArrowLeft" && (this.panX = c(this.panX - d)), t.key === "ArrowRight" && (this.panX = c(this.panX + d)), t.key === "ArrowUp" && (this.panY = c(this.panY - d)), t.key === "ArrowDown" && (this.panY = c(this.panY + d)), this.applyZoom()));
120
120
  }
121
121
  });
122
- if (this.ctx = t, this.options = e, this.zoomLevels = e.zoom === !1 ? [] : k(Array.isArray(e.zoom) ? e.zoom : Y), this.boostLevels = e.audio === !1 ? [] : k(e.boostLevels ?? X), this.filters = e.filters === !1 ? [] : Array.isArray(e.filters) ? ["none", ...e.filters.filter((s) => s !== "none" && s in A)] : B, this.restore(), t.registerSubmenu(this.menu()), t.hostEl.addEventListener("keydown", this.onKeyDown, !0), this.zoomLevels.length > 1) {
122
+ if (this.ctx = t, this.options = e, this.zoomLevels = e.zoom === !1 ? [] : k(Array.isArray(e.zoom) ? e.zoom : Y), this.boostLevels = e.audio === !1 ? [] : k(e.boostLevels ?? K), this.filters = e.filters === !1 ? [] : Array.isArray(e.filters) ? ["none", ...e.filters.filter((s) => s !== "none" && s in A)] : X, this.restore(), t.registerSubmenu(this.menu()), t.hostEl.addEventListener("keydown", this.onKeyDown, !0), this.zoomLevels.length > 1) {
123
123
  const s = t.videoAreaEl;
124
124
  s.addEventListener("pointerdown", this.onPointerDown), s.addEventListener("pointermove", this.onPointerMove), s.addEventListener("pointerup", this.onPointerUp), s.addEventListener("pointercancel", this.onPointerUp), window.addEventListener("resize", this.applyZoom);
125
125
  }
@@ -334,7 +334,8 @@ class N {
334
334
  [["←", "→", "J", "L"], t.a11yKeySeek(this.ctx.seekStep())],
335
335
  [["↑", "↓"], t.a11yKeyVolume],
336
336
  [["M"], t.a11yKeyMute],
337
- [["F"], t.a11yKeyFullscreen]
337
+ [["F"], t.a11yKeyFullscreen],
338
+ [[",", "."], t.a11yKeyFrame]
338
339
  ];
339
340
  this.zoomLevels.length > 1 && (h.push([["+", "−", "0"], t.a11yKeyZoom]), h.push([["Shift", "+", "←↑↓→"], t.a11yKeyPan]));
340
341
  for (const l of ((g = (v = this.ctx).extraShortcuts) == null ? void 0 : g.call(v)) ?? []) h.push([l.keys, l.description]);
@@ -380,4 +381,4 @@ export {
380
381
  N as Accessibility,
381
382
  Z as installAccessibility
382
383
  };
383
- //# sourceMappingURL=accessibility-DeUIoAda.js.map
384
+ //# sourceMappingURL=accessibility-DFx4CE0H.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accessibility-DeUIoAda.js","sources":["../../src/plugins/accessibility/colorBlind.ts","../../src/plugins/accessibility/Accessibility.ts","../../src/plugins/accessibility/index.ts"],"sourcesContent":["// Renk körlüğü filtreleri: daltonizasyon (renk körünün ayırt edemediği renk farkını gördüğü kanallara kaydırma).\n// Simülasyon matrisi S ile: M = I + E·(I − S). E hatayı görülebilen kanallara dağıtır. Sonuç tek bir 3×3 renk\n// matrisi — CSS `filter: url(...)` ile bir SVG feColorMatrix olarak uygulanır (shadow DOM'da #id başvurusu tarayıcıdan\n// tarayıcıya değiştiği için filtre veri adresinin içinde gelir).\n\ntype M3 = [number, number, number, number, number, number, number, number, number];\ntype Kind = 'protanopia' | 'deuteranopia' | 'tritanopia';\n\n/** RGB uzayında yaygın kullanılan renk körlüğü simülasyon matrisleri. */\nconst SIMULATE: Record<Kind, M3> = {\n protanopia: [0.567, 0.433, 0, 0.558, 0.442, 0, 0, 0.242, 0.758],\n deuteranopia: [0.625, 0.375, 0, 0.7, 0.3, 0, 0, 0.3, 0.7],\n tritanopia: [0.95, 0.05, 0, 0, 0.433, 0.567, 0, 0.475, 0.525],\n};\n\n/** Kırmızı / yeşil körlüğünde hata yeşil ve maviye; mavi körlüğünde kırmızı ve yeşile kaydırılır. */\nconst SHIFT: Record<Kind, M3> = {\n protanopia: [0, 0, 0, 0.7, 1, 0, 0.7, 0, 1],\n deuteranopia: [0, 0, 0, 0.7, 1, 0, 0.7, 0, 1],\n tritanopia: [1, 0, 0.7, 0, 1, 0.7, 0, 0, 0],\n};\n\nconst I: M3 = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\nfunction mul(a: M3, b: M3): M3 {\n const r = new Array<number>(9) as M3;\n for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) r[i * 3 + j] = a[i * 3]! * b[j]! + a[i * 3 + 1]! * b[3 + j]! + a[i * 3 + 2]! * b[6 + j]!;\n return r;\n}\n\nexport function daltonizeMatrix(kind: Kind): M3 {\n const s = SIMULATE[kind];\n const err = I.map((v, i) => v - s[i]!) as M3;\n const shifted = mul(SHIFT[kind], err);\n return I.map((v, i) => v + shifted[i]!) as M3;\n}\n\nconst cache = new Map<Kind, string>();\n\nexport function colorBlindFilterUrl(kind: Kind): string {\n let url = cache.get(kind);\n if (!url) {\n const m = daltonizeMatrix(kind).map((n) => Math.round(n * 1000) / 1000);\n const values = [m[0], m[1], m[2], 0, 0, m[3], m[4], m[5], 0, 0, m[6], m[7], m[8], 0, 0, 0, 0, 0, 1, 0].join(' ');\n const svg = `<svg xmlns='http://www.w3.org/2000/svg'><filter id='f' color-interpolation-filters='sRGB'><feColorMatrix type='matrix' values='${values}'/></filter></svg>`;\n url = `url(\"data:image/svg+xml,${encodeURIComponent(svg)}#f\")`;\n cache.set(kind, url);\n }\n return url;\n}\n","import type { AccessibilityFilter, AccessibilityOptions, AccessibilityState } from '../../types';\nimport type { HopeLocaleStrings } from '../../i18n/types';\nimport type { SettingsSubmenuDef, SettingsSubmenuItem } from '../../controls/SettingsMenu';\nimport { colorBlindFilterUrl } from './colorBlind';\n\nexport interface AccessibilityPlayerContext {\n hostEl: HTMLElement;\n videoEl: HTMLVideoElement;\n videoAreaEl: HTMLElement;\n i18n: HopeLocaleStrings;\n registerSubmenu(def: SettingsSubmenuDef): void;\n unregisterSubmenu(key: string): void;\n /** Ayarlar butonunun sağına hızlı erişim butonu (SettingsMenu.addQuickButton). */\n addQuickButton(btn: HTMLButtonElement, getDef: () => SettingsSubmenuDef, getParents: () => SettingsSubmenuDef[]): void;\n /** Klavyeyle sarma adımı (sn) — kısayol listesinde gösterilir. */\n seekStep(): number;\n /** Eklentilerin kısayolları (listeye eklenir). */\n extraShortcuts?(): Array<{ keys: string[]; description: string }>;\n}\n\nconst DEFAULT_ZOOM = [1, 1.25, 1.5, 2, 3];\nconst DEFAULT_BOOST = [1, 1.5, 2, 3];\nconst ALL_FILTERS: AccessibilityFilter[] = ['none', 'grayscale', 'daylight', 'night', 'contrast', 'protanopia', 'deuteranopia', 'tritanopia'];\nconst STORAGE_KEY = 'hp-accessibility';\n/** Shift + ok ile bir adımda kaydırma (yakınlaştırılmış alanın oranı). */\nconst PAN_STEP = 0.15;\nconst SUBMENU_KEY = 'accessibility';\n/** Bundan fazla kayan basış sürükleme sayılır — ardından gelen tık yutulur. */\nconst DRAG_THRESHOLD_PX = 6;\n/**\n * Bunların üstünde başlayan sürükleme / iki parmak görüntüyü kaydırmaz (butonlar, ilerleme çubuğu, menüler). Ortadaki\n * oynat butonu hariç: duraklatılmışken bütün alanı kaplıyor — onun üstünde de kaydırılabilmeli.\n */\nconst CONTROL_SELECTOR = 'button:not(.hp-center-play), a, input, [role=\"slider\"], [part=\"control-bar\"], .hp-chip, .hp-chip-panel, .hp-shortcuts, .hp-top-bar';\n\n/** CSS filtreleri. Renk körlüğü filtreleri SVG renk matrisi (daltonizasyon) — bkz. colorBlind.ts. */\nconst CSS_FILTERS: Record<AccessibilityFilter, string> = {\n none: '',\n grayscale: 'grayscale(1)',\n // Aydınlık ortamda (gün ışığında ekran) seçilebilirlik: daha parlak, daha kontrastlı.\n daylight: 'brightness(1.18) contrast(1.18) saturate(1.1)',\n // Gece: sıcak ton, mavi ışık azaltılmış, biraz karartılmış.\n night: 'sepia(0.4) saturate(1.15) hue-rotate(-12deg) brightness(0.9)',\n contrast: 'contrast(1.55) saturate(1.25)',\n protanopia: '',\n deuteranopia: '',\n tritanopia: '',\n};\n\ntype QuickId = 'zoom' | 'filter' | 'mono' | 'boost' | 'largeControls';\n\n/** Hızlı erişim butonlarının ikonları (satır içi SVG — ikon fontunda karşılıkları yok). */\nconst svg = (body: string): string =>\n `<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"width:var(--hp-ctrl-icon-size);height:var(--hp-ctrl-icon-size)\">${body}</svg>`;\nconst QUICK_ICONS: Record<QuickId, string> = {\n // Büyüteç + artı\n zoom: svg('<circle cx=\"11\" cy=\"11\" r=\"6.5\"/><path d=\"M20.5 20.5l-4.9-4.9M11 8.2v5.6M8.2 11h5.6\"/>'),\n // Yarısı dolu daire (renk / kontrast)\n filter: svg('<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 3.5a8.5 8.5 0 0 1 0 17z\" fill=\"currentColor\" stroke=\"none\"/>'),\n // Tek dalgalı hoparlör + \"1\"\n mono: svg('<path d=\"M4 9.5h3.5L12 5.5v13l-4.5-4H4z\"/><path d=\"M15.5 9.5a3.5 3.5 0 0 1 0 5\"/><path d=\"M19 8.5v7\"/>'),\n // Hoparlör + artı\n boost: svg('<path d=\"M3 9.5h3.5L11 5.5v13l-4.5-4H3z\"/><path d=\"M14.5 12h6M17.5 9v6\"/>'),\n // Büyüyen kare (dışa oklar)\n largeControls: svg('<path d=\"M9 4H4v5M15 4h5v5M9 20H4v-5M15 20h5v-5\"/><rect x=\"8.5\" y=\"8.5\" width=\"7\" height=\"7\" rx=\"1.2\"/>'),\n};\ninterface AudioGraph {\n ctx: AudioContext;\n gain: GainNode;\n}\n\n/**\n * Erişilebilirlik alt menüsü: yakınlaştırma (sürükle / Shift+ok / iki parmak), görüntü filtreleri, mono ses, ses\n * güçlendirme (Web Audio), büyük kontroller ve klavye kısayolları paneli (`?`). Seçimler tarayıcıda hatırlanır.\n */\nexport class Accessibility {\n private readonly state: AccessibilityState = { zoom: 1, filter: 'none', mono: false, boost: 1, largeControls: false };\n private readonly zoomLevels: number[];\n private readonly boostLevels: number[];\n private readonly filters: AccessibilityFilter[];\n /** Kaydırma — her eksende -1…1 (yakınlaştırılmış görüntünün kenarına kadar). */\n private panX = 0;\n private panY = 0;\n private graph: AudioGraph | null = null;\n private shortcutsEl: HTMLDivElement | null = null;\n private drag: { id: number; x: number; y: number; panX: number; panY: number } | null = null;\n private readonly touches = new Map<number, { x: number; y: number }>();\n private pinch: { dist: number; zoom: number } | null = null;\n private readonly quickButtons = new Map<QuickId, HTMLButtonElement>();\n\n constructor(\n private readonly ctx: AccessibilityPlayerContext,\n private readonly options: AccessibilityOptions\n ) {\n this.zoomLevels = options.zoom === false ? [] : normalizeLevels(Array.isArray(options.zoom) ? options.zoom : DEFAULT_ZOOM);\n this.boostLevels = options.audio === false ? [] : normalizeLevels(options.boostLevels ?? DEFAULT_BOOST);\n this.filters = options.filters === false ? [] : Array.isArray(options.filters) ? ['none', ...options.filters.filter((f) => f !== 'none' && f in CSS_FILTERS)] : ALL_FILTERS;\n\n this.restore();\n ctx.registerSubmenu(this.menu());\n ctx.hostEl.addEventListener('keydown', this.onKeyDown, true);\n if (this.zoomLevels.length > 1) {\n // Video alanının tamamı (oynat butonu / altyazı katmanı videonun üstünde) — kontrollerden başlayan sürükleme hariç.\n const area = ctx.videoAreaEl;\n area.addEventListener('pointerdown', this.onPointerDown);\n area.addEventListener('pointermove', this.onPointerMove);\n area.addEventListener('pointerup', this.onPointerUp);\n area.addEventListener('pointercancel', this.onPointerUp);\n window.addEventListener('resize', this.applyZoom);\n }\n ctx.videoEl.addEventListener('play', this.resumeAudio);\n this.applyAll();\n }\n\n destroy(): void {\n const v = this.ctx.videoEl;\n this.ctx.unregisterSubmenu(SUBMENU_KEY);\n this.ctx.hostEl.removeEventListener('keydown', this.onKeyDown, true);\n const area = this.ctx.videoAreaEl;\n area.removeEventListener('pointerdown', this.onPointerDown);\n area.removeEventListener('pointermove', this.onPointerMove);\n area.removeEventListener('pointerup', this.onPointerUp);\n area.removeEventListener('pointercancel', this.onPointerUp);\n v.removeEventListener('play', this.resumeAudio);\n window.removeEventListener('resize', this.applyZoom);\n this.closeShortcuts();\n for (const btn of this.quickButtons.values()) btn.remove();\n this.quickButtons.clear();\n Object.assign(v.style, { transform: '', transformOrigin: '', filter: '', touchAction: '' });\n this.ctx.hostEl.removeAttribute('data-large-controls');\n this.ctx.hostEl.removeAttribute('data-zoomed');\n // Web Audio grafiği geri alınamaz (createMediaElementSource kalıcı) — nötr değerlere çekilir.\n if (this.graph) {\n this.state.mono = false;\n this.state.boost = 1;\n this.applyAudio();\n }\n }\n\n /** Dil değişince alt menü yeni etiketlerle yeniden kaydedilir. */\n refreshLabels(): void {\n this.ctx.registerSubmenu(this.menu());\n this.syncQuickButtons();\n if (this.shortcutsEl) {\n this.closeShortcuts();\n this.openShortcuts();\n }\n }\n\n // ── Menü ──\n\n private menu(): SettingsSubmenuDef {\n const t = this.ctx.i18n;\n return {\n key: SUBMENU_KEY,\n title: t.a11yMenu,\n getValueLabel: () => '',\n getItems: () => {\n const items: SettingsSubmenuItem[] = [];\n const sub = (label: string, value: string, children: () => SettingsSubmenuDef): SettingsSubmenuItem => ({ label, value, active: false, onSelect: () => {}, children });\n if (this.zoomLevels.length > 1) items.push(sub(t.a11yZoom, pct(this.state.zoom), () => this.zoomDef()));\n if (this.filters.length > 1) items.push(sub(t.a11yFilter, this.filterLabel(this.state.filter), () => this.filterDef()));\n if (this.boostLevels.length) {\n const ok = this.audioAllowed();\n items.push({\n label: t.a11yMono,\n value: ok ? (this.state.mono ? t.a11yOn : t.a11yOff) : t.a11yUnavailable,\n active: this.state.mono,\n keepOpen: true,\n onSelect: () => {\n if (ok) this.set('mono', !this.state.mono);\n },\n });\n if (this.boostLevels.length > 1) items.push(sub(t.a11yBoost, ok ? pct(this.state.boost) : t.a11yUnavailable, () => this.boostDef()));\n }\n if (this.options.largeControls !== false)\n items.push({\n label: t.a11yLargeControls,\n value: this.state.largeControls ? t.a11yOn : t.a11yOff,\n active: this.state.largeControls,\n keepOpen: true,\n onSelect: () => this.set('largeControls', !this.state.largeControls),\n });\n if (this.options.shortcuts !== false)\n items.push({ label: t.a11yShortcuts, value: '?', active: false, onSelect: () => queueMicrotask(() => this.openShortcuts()) });\n return items;\n },\n };\n }\n\n // Özelliklerin kendi alt menüleri — hem Erişilebilirlik menüsünden hem hızlı erişim butonlarından açılır.\n\n private zoomDef(): SettingsSubmenuDef {\n return {\n key: 'a11y-zoom',\n title: this.ctx.i18n.a11yZoom,\n getValueLabel: () => '',\n getItems: () => this.zoomLevels.map((z) => ({ label: pct(z), active: Math.abs(this.state.zoom - z) < 0.001, onSelect: () => this.setZoom(z) })),\n };\n }\n\n private filterDef(): SettingsSubmenuDef {\n return {\n key: 'a11y-filter',\n title: this.ctx.i18n.a11yFilter,\n getValueLabel: () => '',\n getItems: () => this.filters.map((f) => ({ label: this.filterLabel(f), active: this.state.filter === f, onSelect: () => this.set('filter', f) })),\n };\n }\n\n private boostDef(): SettingsSubmenuDef {\n return {\n key: 'a11y-boost',\n title: this.ctx.i18n.a11yBoost,\n getValueLabel: () => '',\n getItems: () => (this.audioAllowed() ? this.boostLevels.map((b) => ({ label: pct(b), active: this.state.boost === b, onSelect: () => this.set('boost', b) })) : []),\n };\n }\n\n /** Aç / kapa özellikleri (mono, büyük kontroller) için hızlı butonun açtığı iki satırlık menü. */\n private toggleDef(key: 'mono' | 'largeControls', title: string): SettingsSubmenuDef {\n const t = this.ctx.i18n;\n return {\n key: `a11y-${key}`,\n title,\n getValueLabel: () => '',\n getItems: () => [\n { label: t.a11yOn, active: this.state[key], onSelect: () => this.set(key, true) },\n { label: t.a11yOff, active: !this.state[key], onSelect: () => this.set(key, false) },\n ],\n };\n }\n\n // ── Hızlı erişim butonları ──\n\n /**\n * Açık olan her özelliğin ayarlar butonunun sağında kendi butonu olur; basınca doğrudan o özelliğin ayarları açılır\n * (yakınlaştırma seviyeleri, filtre listesi…). Özellik kapanınca buton kalkar. \"Geri\" Erişilebilirlik menüsüne döner.\n */\n private syncQuickButtons(): void {\n const t = this.ctx.i18n;\n const s = this.state;\n const specs: { id: QuickId; on: boolean; label: string; def: () => SettingsSubmenuDef }[] = [\n { id: 'zoom', on: s.zoom > 1.001, label: `${t.a11yZoom}: ${pct(s.zoom)}`, def: () => this.zoomDef() },\n { id: 'filter', on: s.filter !== 'none', label: `${t.a11yFilter}: ${this.filterLabel(s.filter)}`, def: () => this.filterDef() },\n { id: 'mono', on: s.mono, label: `${t.a11yMono}: ${t.a11yOn}`, def: () => this.toggleDef('mono', t.a11yMono) },\n { id: 'boost', on: s.boost !== 1, label: `${t.a11yBoost}: ${pct(s.boost)}`, def: () => this.boostDef() },\n { id: 'largeControls', on: s.largeControls, label: `${t.a11yLargeControls}: ${t.a11yOn}`, def: () => this.toggleDef('largeControls', t.a11yLargeControls) },\n ];\n for (const spec of specs) {\n let btn = this.quickButtons.get(spec.id);\n if (!spec.on) {\n btn?.remove();\n this.quickButtons.delete(spec.id);\n continue;\n }\n if (!btn) {\n btn = document.createElement('button');\n btn.type = 'button';\n btn.className =\n 'hp-chip hp-a11y-quick hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer';\n btn.setAttribute('part', `a11y-quick a11y-quick-${spec.id}`);\n btn.setAttribute('data-a11y', spec.id);\n btn.innerHTML = QUICK_ICONS[spec.id];\n this.ctx.addQuickButton(btn, spec.def, () => [this.menu()]);\n this.quickButtons.set(spec.id, btn);\n }\n // Tooltip ve ekran okuyucu: özelliğin adı + değeri (\"Yakınlaştırma: 200%\").\n btn.setAttribute('aria-label', spec.label);\n }\n }\n private filterLabel(f: AccessibilityFilter): string {\n const t = this.ctx.i18n;\n const labels: Record<AccessibilityFilter, string> = {\n none: t.a11yFilterNone,\n grayscale: t.a11yFilterGrayscale,\n daylight: t.a11yFilterDaylight,\n night: t.a11yFilterNight,\n contrast: t.a11yFilterContrast,\n protanopia: t.a11yFilterProtanopia,\n deuteranopia: t.a11yFilterDeuteranopia,\n tritanopia: t.a11yFilterTritanopia,\n };\n return labels[f];\n }\n\n // ── Durum ──\n\n private set<K extends keyof AccessibilityState>(key: K, value: AccessibilityState[K]): void {\n if (this.state[key] === value) return;\n this.state[key] = value;\n this.applyAll();\n this.save();\n this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:accessibility', { detail: { ...this.state, changed: key } }));\n }\n\n private setZoom(z: number): void {\n if (z <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n this.set('zoom', z);\n }\n\n private applyAll(): void {\n this.applyZoom();\n this.applyFilter();\n this.applyAudio();\n this.ctx.hostEl.toggleAttribute('data-large-controls', this.state.largeControls);\n this.syncQuickButtons();\n }\n\n private readonly applyZoom = (): void => {\n const v = this.ctx.videoEl;\n const z = this.state.zoom;\n this.ctx.hostEl.toggleAttribute('data-zoomed', z > 1);\n if (this.zoomLevels.length > 1) {\n // Yakınlaştırılmamışken sayfa kaydırması serbest, tarayıcının kendi iki parmak büyütmesi kapalı (bizimki çalışsın);\n // yakınlaştırılmışken sürükleme görüntüyü kaydırır.\n v.style.touchAction = z > 1 ? 'none' : 'pan-x pan-y';\n }\n if (z <= 1) {\n v.style.transform = '';\n return;\n }\n // Kenar dışına kaydırılamaz: en fazla (z-1)/2 genişlik kadar.\n const maxX = ((z - 1) * v.clientWidth) / 2;\n const maxY = ((z - 1) * v.clientHeight) / 2;\n v.style.transformOrigin = 'center center';\n v.style.transform = `translate(${(-this.panX * maxX).toFixed(1)}px, ${(-this.panY * maxY).toFixed(1)}px) scale(${z})`;\n };\n\n private applyFilter(): void {\n const f = this.state.filter;\n this.ctx.videoEl.style.filter = f === 'protanopia' || f === 'deuteranopia' || f === 'tritanopia' ? colorBlindFilterUrl(f) : CSS_FILTERS[f];\n }\n\n // ── Ses (Web Audio) ──\n\n /**\n * Web Audio kaynağı başka alan adındaysa ve CORS'la yüklenmediyse tarayıcı sesi sıfırlar — o zaman kapalı kalır.\n * blob: (hls.js / MSE; hls.js zaten CORS'la indirir) ve aynı origin güvenli.\n */\n private audioAllowed(): boolean {\n if (typeof AudioContext === 'undefined') return false;\n const src = this.ctx.videoEl.currentSrc;\n if (!src || src.startsWith('blob:') || src.startsWith('data:')) return true;\n try {\n if (new URL(src, location.href).origin === location.origin) return true;\n } catch {\n return false;\n }\n return this.ctx.videoEl.crossOrigin !== null;\n }\n\n private applyAudio(): void {\n const needed = this.state.mono || this.state.boost !== 1;\n if (!needed && !this.graph) return;\n if (!this.graph) {\n if (!this.audioAllowed()) return;\n try {\n const ctx = new AudioContext();\n const source = ctx.createMediaElementSource(this.ctx.videoEl);\n const gain = ctx.createGain();\n source.connect(gain).connect(ctx.destination);\n this.graph = { ctx, gain };\n } catch {\n return;\n }\n }\n const { gain, ctx } = this.graph;\n gain.gain.value = this.state.boost;\n // Mono: kanalları 'speakers' kuralıyla tek kanala indir ((L+R)/2); çıkış iki hoparlöre aynı gider.\n gain.channelCountMode = this.state.mono ? 'explicit' : 'max';\n gain.channelCount = this.state.mono ? 1 : 2;\n gain.channelInterpretation = 'speakers';\n if (ctx.state === 'suspended') void ctx.resume().catch(() => {});\n }\n\n private readonly resumeAudio = (): void => {\n if (this.graph?.ctx.state === 'suspended') void this.graph.ctx.resume().catch(() => {});\n };\n\n // ── Kalıcılık ──\n\n private restore(): void {\n if (this.options.remember === false) return;\n try {\n const saved = JSON.parse(localStorage.getItem(STORAGE_KEY) ?? 'null') as Partial<AccessibilityState> | null;\n if (!saved) return;\n if (saved.filter && this.filters.includes(saved.filter)) this.state.filter = saved.filter;\n if (typeof saved.mono === 'boolean' && this.boostLevels.length) this.state.mono = saved.mono;\n if (typeof saved.boost === 'number' && this.boostLevels.includes(saved.boost)) this.state.boost = saved.boost;\n if (typeof saved.largeControls === 'boolean' && this.options.largeControls !== false) this.state.largeControls = saved.largeControls;\n // Yakınlaştırma bilerek hatırlanmaz — bir sonraki videoda kadrajı kaçırmasın.\n } catch {\n /* gizli sekme / bozuk kayıt — varsayılanlar */\n }\n }\n\n private save(): void {\n if (this.options.remember === false) return;\n try {\n const { filter, mono, boost, largeControls } = this.state;\n localStorage.setItem(STORAGE_KEY, JSON.stringify({ filter, mono, boost, largeControls }));\n } catch {\n /* depolama yok — yalnızca bu oturum */\n }\n }\n\n // ── Yakınlaştırma: sürükle, iki parmak ──\n\n private readonly onPointerDown = (e: PointerEvent): void => {\n const target = e.composedPath()[0];\n if (target instanceof Element && target.closest(CONTROL_SELECTOR)) return;\n if (e.pointerType === 'touch') {\n this.touches.set(e.pointerId, { x: e.clientX, y: e.clientY });\n if (this.touches.size === 2) {\n this.pinch = { dist: this.touchDistance(), zoom: this.state.zoom };\n this.drag = null;\n return;\n }\n }\n if (this.state.zoom <= 1 || (e.pointerType === 'mouse' && e.button !== 0)) return;\n this.drag = { id: e.pointerId, x: e.clientX, y: e.clientY, panX: this.panX, panY: this.panY };\n };\n\n private readonly onPointerMove = (e: PointerEvent): void => {\n if (e.pointerType === 'touch' && this.touches.has(e.pointerId)) this.touches.set(e.pointerId, { x: e.clientX, y: e.clientY });\n if (this.pinch && this.touches.size === 2) {\n const max = this.zoomLevels[this.zoomLevels.length - 1]!;\n const z = Math.min(max, Math.max(1, (this.pinch.zoom * this.touchDistance()) / this.pinch.dist));\n this.state.zoom = Math.round(z * 100) / 100;\n if (this.state.zoom <= 1) this.panX = this.panY = 0;\n this.applyZoom();\n return;\n }\n if (!this.drag || this.drag.id !== e.pointerId) return;\n const v = this.ctx.videoEl;\n const z = this.state.zoom;\n const maxX = ((z - 1) * v.clientWidth) / 2 || 1;\n const maxY = ((z - 1) * v.clientHeight) / 2 || 1;\n // Görüntü parmağı / imleci takip eder (sağa sürükle → görüntü sağa → sol taraf görünür).\n this.panX = clamp(this.drag.panX - (e.clientX - this.drag.x) / maxX);\n this.panY = clamp(this.drag.panY - (e.clientY - this.drag.y) / maxY);\n this.applyZoom();\n };\n\n private readonly onPointerUp = (e: PointerEvent): void => {\n this.touches.delete(e.pointerId);\n if (this.pinch && this.touches.size < 2) {\n this.pinch = null;\n this.syncQuickButtons();\n // İki parmakla serbest büyütme bitince olay / kayıt bir kez.\n this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:accessibility', { detail: { ...this.state, changed: 'zoom' } }));\n }\n if (this.drag?.id === e.pointerId) {\n // Gerçekten sürüklendiyse ardından gelen tık oynat / duraklat sayılmasın (oynat butonu bütün alanı kaplayabiliyor).\n if (Math.hypot(e.clientX - this.drag.x, e.clientY - this.drag.y) > DRAG_THRESHOLD_PX) this.swallowNextClick();\n this.drag = null;\n }\n };\n\n private swallowNextClick(): void {\n const area = this.ctx.videoAreaEl;\n const swallow = (ev: Event): void => {\n ev.stopPropagation();\n ev.preventDefault();\n };\n area.addEventListener('click', swallow, { capture: true, once: true });\n // Tık hiç gelmezse (ör. dokunmatik) sonraki gerçek tık yutulmasın.\n setTimeout(() => area.removeEventListener('click', swallow, { capture: true }), 400);\n }\n\n private touchDistance(): number {\n const [a, b] = [...this.touches.values()];\n return a && b ? Math.hypot(a.x - b.x, a.y - b.y) || 1 : 1;\n }\n\n // ── Klavye ──\n\n private readonly onKeyDown = (e: KeyboardEvent): void => {\n if (e.defaultPrevented || e.ctrlKey || e.metaKey || e.altKey) return;\n if (this.shortcutsEl && e.key === 'Escape') {\n e.preventDefault();\n this.closeShortcuts();\n return;\n }\n if (e.key === '?' && this.options.shortcuts !== false) {\n e.preventDefault();\n if (this.shortcutsEl) this.closeShortcuts();\n else this.openShortcuts();\n return;\n }\n if (this.zoomLevels.length < 2) return;\n if (e.key === '+' || e.key === '=') {\n e.preventDefault();\n this.setZoom(this.zoomLevels.find((z) => z > this.state.zoom + 0.001) ?? this.state.zoom);\n } else if (e.key === '-' || e.key === '_') {\n e.preventDefault();\n this.setZoom([...this.zoomLevels].reverse().find((z) => z < this.state.zoom - 0.001) ?? 1);\n } else if (e.key === '0' && this.state.zoom > 1) {\n e.preventDefault();\n this.setZoom(1);\n } else if (e.shiftKey && this.state.zoom > 1 && e.key.startsWith('Arrow')) {\n // Shift + ok: yakınlaştırılmış görüntüde gezin (oklar tek başına sarma / ses olarak kalır).\n e.preventDefault();\n if (e.key === 'ArrowLeft') this.panX = clamp(this.panX - PAN_STEP);\n if (e.key === 'ArrowRight') this.panX = clamp(this.panX + PAN_STEP);\n if (e.key === 'ArrowUp') this.panY = clamp(this.panY - PAN_STEP);\n if (e.key === 'ArrowDown') this.panY = clamp(this.panY + PAN_STEP);\n this.applyZoom();\n }\n };\n\n // ── Kısayol paneli ──\n\n private openShortcuts(): void {\n if (this.shortcutsEl) return;\n const t = this.ctx.i18n;\n const el = document.createElement('div');\n el.className = 'hp-shortcuts';\n el.setAttribute('part', 'shortcuts');\n el.setAttribute('role', 'dialog');\n el.setAttribute('aria-modal', 'true');\n el.setAttribute('aria-labelledby', 'hp-shortcuts-title');\n\n const box = document.createElement('div');\n box.className = 'hp-shortcuts-box';\n const head = document.createElement('div');\n head.className = 'hp-shortcuts-head';\n const title = document.createElement('h2');\n title.id = 'hp-shortcuts-title';\n title.textContent = t.a11yShortcuts;\n const close = document.createElement('button');\n close.type = 'button';\n close.className = 'hp-shortcuts-close';\n close.setAttribute('aria-label', t.a11yClose);\n close.textContent = '✕';\n close.addEventListener('click', () => this.closeShortcuts());\n head.append(title, close);\n\n const rows: [string[], string][] = [\n [['Space', 'K'], t.a11yKeyPlay],\n [['←', '→', 'J', 'L'], t.a11yKeySeek(this.ctx.seekStep())],\n [['↑', '↓'], t.a11yKeyVolume],\n [['M'], t.a11yKeyMute],\n [['F'], t.a11yKeyFullscreen],\n ];\n if (this.zoomLevels.length > 1) {\n rows.push([['+', '−', '0'], t.a11yKeyZoom]);\n rows.push([['Shift', '+', '←↑↓→'], t.a11yKeyPan]);\n }\n for (const s of this.ctx.extraShortcuts?.() ?? []) rows.push([s.keys, s.description]);\n rows.push([['?'], t.a11yKeyShortcuts]);\n\n const list = document.createElement('dl');\n list.className = 'hp-shortcuts-list';\n for (const [keys, desc] of rows) {\n const dt = document.createElement('dt');\n for (const k of keys) {\n if (k === '+' && keys[0] === 'Shift') {\n dt.append(' + ');\n continue;\n }\n const kbd = document.createElement('kbd');\n kbd.textContent = k;\n dt.appendChild(kbd);\n }\n const dd = document.createElement('dd');\n dd.textContent = desc;\n list.append(dt, dd);\n }\n box.append(head, list);\n el.appendChild(box);\n // Arka plana tıklama kapatır; panelin içindeki tıklama oynat/duraklat'a geçmez.\n el.addEventListener('click', (e) => {\n e.stopPropagation();\n if (e.target === el) this.closeShortcuts();\n });\n for (const ev of ['pointerdown', 'mousedown', 'mouseup', 'touchstart', 'touchend', 'dblclick'] as const) el.addEventListener(ev, (e) => e.stopPropagation());\n // Odak paneli terk etmesin (Tab tek butonda kalır).\n el.addEventListener('keydown', (e) => {\n if (e.key === 'Tab') {\n e.preventDefault();\n close.focus();\n }\n });\n this.ctx.videoAreaEl.appendChild(el);\n this.shortcutsEl = el;\n close.focus({ preventScroll: true });\n }\n\n private closeShortcuts(): void {\n if (!this.shortcutsEl) return;\n const hadFocus = this.shortcutsEl.contains((this.ctx.hostEl.shadowRoot ?? document).activeElement);\n this.shortcutsEl.remove();\n this.shortcutsEl = null;\n if (hadFocus) this.ctx.hostEl.focus({ preventScroll: true });\n }\n}\n\nfunction normalizeLevels(levels: number[]): number[] {\n const valid = levels.filter((n) => Number.isFinite(n) && n >= 1 && n <= 8);\n return [...new Set([1, ...valid])].sort((a, b) => a - b);\n}\n\nconst clamp = (n: number): number => Math.min(1, Math.max(-1, n));\nconst pct = (n: number): string => `${Math.round(n * 100)}%`;\n","import { Accessibility, type AccessibilityPlayerContext } from './Accessibility';\nimport type { AccessibilityOptions } from '../../types';\n\nexport function installAccessibility(ctx: AccessibilityPlayerContext, options: AccessibilityOptions): Accessibility {\n return new Accessibility(ctx, options);\n}\n\nexport { Accessibility };\nexport type { AccessibilityPlayerContext };\n"],"names":["SIMULATE","SHIFT","I","mul","a","b","r","i","j","daltonizeMatrix","kind","s","err","v","shifted","cache","colorBlindFilterUrl","url","m","n","svg","DEFAULT_ZOOM","DEFAULT_BOOST","ALL_FILTERS","STORAGE_KEY","PAN_STEP","SUBMENU_KEY","DRAG_THRESHOLD_PX","CONTROL_SELECTOR","CSS_FILTERS","body","QUICK_ICONS","Accessibility","ctx","options","__publicField","z","maxX","maxY","_a","e","target","max","clamp","normalizeLevels","f","area","btn","items","sub","label","value","children","pct","ok","key","title","t","specs","spec","src","source","gain","saved","filter","mono","boost","largeControls","swallow","ev","_b","el","box","head","close","rows","list","keys","desc","dt","k","kbd","dd","hadFocus","levels","valid","installAccessibility"],"mappings":"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"}
1
+ {"version":3,"file":"accessibility-DFx4CE0H.js","sources":["../../src/plugins/accessibility/colorBlind.ts","../../src/plugins/accessibility/Accessibility.ts","../../src/plugins/accessibility/index.ts"],"sourcesContent":["// Renk körlüğü filtreleri: daltonizasyon (renk körünün ayırt edemediği renk farkını gördüğü kanallara kaydırma).\n// Simülasyon matrisi S ile: M = I + E·(I − S). E hatayı görülebilen kanallara dağıtır. Sonuç tek bir 3×3 renk\n// matrisi — CSS `filter: url(...)` ile bir SVG feColorMatrix olarak uygulanır (shadow DOM'da #id başvurusu tarayıcıdan\n// tarayıcıya değiştiği için filtre veri adresinin içinde gelir).\n\ntype M3 = [number, number, number, number, number, number, number, number, number];\ntype Kind = 'protanopia' | 'deuteranopia' | 'tritanopia';\n\n/** RGB uzayında yaygın kullanılan renk körlüğü simülasyon matrisleri. */\nconst SIMULATE: Record<Kind, M3> = {\n protanopia: [0.567, 0.433, 0, 0.558, 0.442, 0, 0, 0.242, 0.758],\n deuteranopia: [0.625, 0.375, 0, 0.7, 0.3, 0, 0, 0.3, 0.7],\n tritanopia: [0.95, 0.05, 0, 0, 0.433, 0.567, 0, 0.475, 0.525],\n};\n\n/** Kırmızı / yeşil körlüğünde hata yeşil ve maviye; mavi körlüğünde kırmızı ve yeşile kaydırılır. */\nconst SHIFT: Record<Kind, M3> = {\n protanopia: [0, 0, 0, 0.7, 1, 0, 0.7, 0, 1],\n deuteranopia: [0, 0, 0, 0.7, 1, 0, 0.7, 0, 1],\n tritanopia: [1, 0, 0.7, 0, 1, 0.7, 0, 0, 0],\n};\n\nconst I: M3 = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\nfunction mul(a: M3, b: M3): M3 {\n const r = new Array<number>(9) as M3;\n for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) r[i * 3 + j] = a[i * 3]! * b[j]! + a[i * 3 + 1]! * b[3 + j]! + a[i * 3 + 2]! * b[6 + j]!;\n return r;\n}\n\nexport function daltonizeMatrix(kind: Kind): M3 {\n const s = SIMULATE[kind];\n const err = I.map((v, i) => v - s[i]!) as M3;\n const shifted = mul(SHIFT[kind], err);\n return I.map((v, i) => v + shifted[i]!) as M3;\n}\n\nconst cache = new Map<Kind, string>();\n\nexport function colorBlindFilterUrl(kind: Kind): string {\n let url = cache.get(kind);\n if (!url) {\n const m = daltonizeMatrix(kind).map((n) => Math.round(n * 1000) / 1000);\n const values = [m[0], m[1], m[2], 0, 0, m[3], m[4], m[5], 0, 0, m[6], m[7], m[8], 0, 0, 0, 0, 0, 1, 0].join(' ');\n const svg = `<svg xmlns='http://www.w3.org/2000/svg'><filter id='f' color-interpolation-filters='sRGB'><feColorMatrix type='matrix' values='${values}'/></filter></svg>`;\n url = `url(\"data:image/svg+xml,${encodeURIComponent(svg)}#f\")`;\n cache.set(kind, url);\n }\n return url;\n}\n","import type { AccessibilityFilter, AccessibilityOptions, AccessibilityState } from '../../types';\nimport type { HopeLocaleStrings } from '../../i18n/types';\nimport type { SettingsSubmenuDef, SettingsSubmenuItem } from '../../controls/SettingsMenu';\nimport { colorBlindFilterUrl } from './colorBlind';\n\nexport interface AccessibilityPlayerContext {\n hostEl: HTMLElement;\n videoEl: HTMLVideoElement;\n videoAreaEl: HTMLElement;\n i18n: HopeLocaleStrings;\n registerSubmenu(def: SettingsSubmenuDef): void;\n unregisterSubmenu(key: string): void;\n /** Ayarlar butonunun sağına hızlı erişim butonu (SettingsMenu.addQuickButton). */\n addQuickButton(btn: HTMLButtonElement, getDef: () => SettingsSubmenuDef, getParents: () => SettingsSubmenuDef[]): void;\n /** Klavyeyle sarma adımı (sn) — kısayol listesinde gösterilir. */\n seekStep(): number;\n /** Eklentilerin kısayolları (listeye eklenir). */\n extraShortcuts?(): Array<{ keys: string[]; description: string }>;\n}\n\nconst DEFAULT_ZOOM = [1, 1.25, 1.5, 2, 3];\nconst DEFAULT_BOOST = [1, 1.5, 2, 3];\nconst ALL_FILTERS: AccessibilityFilter[] = ['none', 'grayscale', 'daylight', 'night', 'contrast', 'protanopia', 'deuteranopia', 'tritanopia'];\nconst STORAGE_KEY = 'hp-accessibility';\n/** Shift + ok ile bir adımda kaydırma (yakınlaştırılmış alanın oranı). */\nconst PAN_STEP = 0.15;\nconst SUBMENU_KEY = 'accessibility';\n/** Bundan fazla kayan basış sürükleme sayılır — ardından gelen tık yutulur. */\nconst DRAG_THRESHOLD_PX = 6;\n/**\n * Bunların üstünde başlayan sürükleme / iki parmak görüntüyü kaydırmaz (butonlar, ilerleme çubuğu, menüler). Ortadaki\n * oynat butonu hariç: duraklatılmışken bütün alanı kaplıyor — onun üstünde de kaydırılabilmeli.\n */\nconst CONTROL_SELECTOR = 'button:not(.hp-center-play), a, input, [role=\"slider\"], [part=\"control-bar\"], .hp-chip, .hp-chip-panel, .hp-shortcuts, .hp-top-bar';\n\n/** CSS filtreleri. Renk körlüğü filtreleri SVG renk matrisi (daltonizasyon) — bkz. colorBlind.ts. */\nconst CSS_FILTERS: Record<AccessibilityFilter, string> = {\n none: '',\n grayscale: 'grayscale(1)',\n // Aydınlık ortamda (gün ışığında ekran) seçilebilirlik: daha parlak, daha kontrastlı.\n daylight: 'brightness(1.18) contrast(1.18) saturate(1.1)',\n // Gece: sıcak ton, mavi ışık azaltılmış, biraz karartılmış.\n night: 'sepia(0.4) saturate(1.15) hue-rotate(-12deg) brightness(0.9)',\n contrast: 'contrast(1.55) saturate(1.25)',\n protanopia: '',\n deuteranopia: '',\n tritanopia: '',\n};\n\ntype QuickId = 'zoom' | 'filter' | 'mono' | 'boost' | 'largeControls';\n\n/** Hızlı erişim butonlarının ikonları (satır içi SVG — ikon fontunda karşılıkları yok). */\nconst svg = (body: string): string =>\n `<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"width:var(--hp-ctrl-icon-size);height:var(--hp-ctrl-icon-size)\">${body}</svg>`;\nconst QUICK_ICONS: Record<QuickId, string> = {\n // Büyüteç + artı\n zoom: svg('<circle cx=\"11\" cy=\"11\" r=\"6.5\"/><path d=\"M20.5 20.5l-4.9-4.9M11 8.2v5.6M8.2 11h5.6\"/>'),\n // Yarısı dolu daire (renk / kontrast)\n filter: svg('<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 3.5a8.5 8.5 0 0 1 0 17z\" fill=\"currentColor\" stroke=\"none\"/>'),\n // Tek dalgalı hoparlör + \"1\"\n mono: svg('<path d=\"M4 9.5h3.5L12 5.5v13l-4.5-4H4z\"/><path d=\"M15.5 9.5a3.5 3.5 0 0 1 0 5\"/><path d=\"M19 8.5v7\"/>'),\n // Hoparlör + artı\n boost: svg('<path d=\"M3 9.5h3.5L11 5.5v13l-4.5-4H3z\"/><path d=\"M14.5 12h6M17.5 9v6\"/>'),\n // Büyüyen kare (dışa oklar)\n largeControls: svg('<path d=\"M9 4H4v5M15 4h5v5M9 20H4v-5M15 20h5v-5\"/><rect x=\"8.5\" y=\"8.5\" width=\"7\" height=\"7\" rx=\"1.2\"/>'),\n};\ninterface AudioGraph {\n ctx: AudioContext;\n gain: GainNode;\n}\n\n/**\n * Erişilebilirlik alt menüsü: yakınlaştırma (sürükle / Shift+ok / iki parmak), görüntü filtreleri, mono ses, ses\n * güçlendirme (Web Audio), büyük kontroller ve klavye kısayolları paneli (`?`). Seçimler tarayıcıda hatırlanır.\n */\nexport class Accessibility {\n private readonly state: AccessibilityState = { zoom: 1, filter: 'none', mono: false, boost: 1, largeControls: false };\n private readonly zoomLevels: number[];\n private readonly boostLevels: number[];\n private readonly filters: AccessibilityFilter[];\n /** Kaydırma — her eksende -1…1 (yakınlaştırılmış görüntünün kenarına kadar). */\n private panX = 0;\n private panY = 0;\n private graph: AudioGraph | null = null;\n private shortcutsEl: HTMLDivElement | null = null;\n private drag: { id: number; x: number; y: number; panX: number; panY: number } | null = null;\n private readonly touches = new Map<number, { x: number; y: number }>();\n private pinch: { dist: number; zoom: number } | null = null;\n private readonly quickButtons = new Map<QuickId, HTMLButtonElement>();\n\n constructor(\n private readonly ctx: AccessibilityPlayerContext,\n private readonly options: AccessibilityOptions\n ) {\n this.zoomLevels = options.zoom === false ? [] : normalizeLevels(Array.isArray(options.zoom) ? options.zoom : DEFAULT_ZOOM);\n this.boostLevels = options.audio === false ? [] : normalizeLevels(options.boostLevels ?? DEFAULT_BOOST);\n this.filters = options.filters === false ? [] : Array.isArray(options.filters) ? ['none', ...options.filters.filter((f) => f !== 'none' && f in CSS_FILTERS)] : ALL_FILTERS;\n\n this.restore();\n ctx.registerSubmenu(this.menu());\n ctx.hostEl.addEventListener('keydown', this.onKeyDown, true);\n if (this.zoomLevels.length > 1) {\n // Video alanının tamamı (oynat butonu / altyazı katmanı videonun üstünde) — kontrollerden başlayan sürükleme hariç.\n const area = ctx.videoAreaEl;\n area.addEventListener('pointerdown', this.onPointerDown);\n area.addEventListener('pointermove', this.onPointerMove);\n area.addEventListener('pointerup', this.onPointerUp);\n area.addEventListener('pointercancel', this.onPointerUp);\n window.addEventListener('resize', this.applyZoom);\n }\n ctx.videoEl.addEventListener('play', this.resumeAudio);\n this.applyAll();\n }\n\n destroy(): void {\n const v = this.ctx.videoEl;\n this.ctx.unregisterSubmenu(SUBMENU_KEY);\n this.ctx.hostEl.removeEventListener('keydown', this.onKeyDown, true);\n const area = this.ctx.videoAreaEl;\n area.removeEventListener('pointerdown', this.onPointerDown);\n area.removeEventListener('pointermove', this.onPointerMove);\n area.removeEventListener('pointerup', this.onPointerUp);\n area.removeEventListener('pointercancel', this.onPointerUp);\n v.removeEventListener('play', this.resumeAudio);\n window.removeEventListener('resize', this.applyZoom);\n this.closeShortcuts();\n for (const btn of this.quickButtons.values()) btn.remove();\n this.quickButtons.clear();\n Object.assign(v.style, { transform: '', transformOrigin: '', filter: '', touchAction: '' });\n this.ctx.hostEl.removeAttribute('data-large-controls');\n this.ctx.hostEl.removeAttribute('data-zoomed');\n // Web Audio grafiği geri alınamaz (createMediaElementSource kalıcı) — nötr değerlere çekilir.\n if (this.graph) {\n this.state.mono = false;\n this.state.boost = 1;\n this.applyAudio();\n }\n }\n\n /** Dil değişince alt menü yeni etiketlerle yeniden kaydedilir. */\n refreshLabels(): void {\n this.ctx.registerSubmenu(this.menu());\n this.syncQuickButtons();\n if (this.shortcutsEl) {\n this.closeShortcuts();\n this.openShortcuts();\n }\n }\n\n // ── Menü ──\n\n private menu(): SettingsSubmenuDef {\n const t = this.ctx.i18n;\n return {\n key: SUBMENU_KEY,\n title: t.a11yMenu,\n getValueLabel: () => '',\n getItems: () => {\n const items: SettingsSubmenuItem[] = [];\n const sub = (label: string, value: string, children: () => SettingsSubmenuDef): SettingsSubmenuItem => ({ label, value, active: false, onSelect: () => {}, children });\n if (this.zoomLevels.length > 1) items.push(sub(t.a11yZoom, pct(this.state.zoom), () => this.zoomDef()));\n if (this.filters.length > 1) items.push(sub(t.a11yFilter, this.filterLabel(this.state.filter), () => this.filterDef()));\n if (this.boostLevels.length) {\n const ok = this.audioAllowed();\n items.push({\n label: t.a11yMono,\n value: ok ? (this.state.mono ? t.a11yOn : t.a11yOff) : t.a11yUnavailable,\n active: this.state.mono,\n keepOpen: true,\n onSelect: () => {\n if (ok) this.set('mono', !this.state.mono);\n },\n });\n if (this.boostLevels.length > 1) items.push(sub(t.a11yBoost, ok ? pct(this.state.boost) : t.a11yUnavailable, () => this.boostDef()));\n }\n if (this.options.largeControls !== false)\n items.push({\n label: t.a11yLargeControls,\n value: this.state.largeControls ? t.a11yOn : t.a11yOff,\n active: this.state.largeControls,\n keepOpen: true,\n onSelect: () => this.set('largeControls', !this.state.largeControls),\n });\n if (this.options.shortcuts !== false)\n items.push({ label: t.a11yShortcuts, value: '?', active: false, onSelect: () => queueMicrotask(() => this.openShortcuts()) });\n return items;\n },\n };\n }\n\n // Özelliklerin kendi alt menüleri — hem Erişilebilirlik menüsünden hem hızlı erişim butonlarından açılır.\n\n private zoomDef(): SettingsSubmenuDef {\n return {\n key: 'a11y-zoom',\n title: this.ctx.i18n.a11yZoom,\n getValueLabel: () => '',\n getItems: () => this.zoomLevels.map((z) => ({ label: pct(z), active: Math.abs(this.state.zoom - z) < 0.001, onSelect: () => this.setZoom(z) })),\n };\n }\n\n private filterDef(): SettingsSubmenuDef {\n return {\n key: 'a11y-filter',\n title: this.ctx.i18n.a11yFilter,\n getValueLabel: () => '',\n getItems: () => this.filters.map((f) => ({ label: this.filterLabel(f), active: this.state.filter === f, onSelect: () => this.set('filter', f) })),\n };\n }\n\n private boostDef(): SettingsSubmenuDef {\n return {\n key: 'a11y-boost',\n title: this.ctx.i18n.a11yBoost,\n getValueLabel: () => '',\n getItems: () => (this.audioAllowed() ? this.boostLevels.map((b) => ({ label: pct(b), active: this.state.boost === b, onSelect: () => this.set('boost', b) })) : []),\n };\n }\n\n /** Aç / kapa özellikleri (mono, büyük kontroller) için hızlı butonun açtığı iki satırlık menü. */\n private toggleDef(key: 'mono' | 'largeControls', title: string): SettingsSubmenuDef {\n const t = this.ctx.i18n;\n return {\n key: `a11y-${key}`,\n title,\n getValueLabel: () => '',\n getItems: () => [\n { label: t.a11yOn, active: this.state[key], onSelect: () => this.set(key, true) },\n { label: t.a11yOff, active: !this.state[key], onSelect: () => this.set(key, false) },\n ],\n };\n }\n\n // ── Hızlı erişim butonları ──\n\n /**\n * Açık olan her özelliğin ayarlar butonunun sağında kendi butonu olur; basınca doğrudan o özelliğin ayarları açılır\n * (yakınlaştırma seviyeleri, filtre listesi…). Özellik kapanınca buton kalkar. \"Geri\" Erişilebilirlik menüsüne döner.\n */\n private syncQuickButtons(): void {\n const t = this.ctx.i18n;\n const s = this.state;\n const specs: { id: QuickId; on: boolean; label: string; def: () => SettingsSubmenuDef }[] = [\n { id: 'zoom', on: s.zoom > 1.001, label: `${t.a11yZoom}: ${pct(s.zoom)}`, def: () => this.zoomDef() },\n { id: 'filter', on: s.filter !== 'none', label: `${t.a11yFilter}: ${this.filterLabel(s.filter)}`, def: () => this.filterDef() },\n { id: 'mono', on: s.mono, label: `${t.a11yMono}: ${t.a11yOn}`, def: () => this.toggleDef('mono', t.a11yMono) },\n { id: 'boost', on: s.boost !== 1, label: `${t.a11yBoost}: ${pct(s.boost)}`, def: () => this.boostDef() },\n { id: 'largeControls', on: s.largeControls, label: `${t.a11yLargeControls}: ${t.a11yOn}`, def: () => this.toggleDef('largeControls', t.a11yLargeControls) },\n ];\n for (const spec of specs) {\n let btn = this.quickButtons.get(spec.id);\n if (!spec.on) {\n btn?.remove();\n this.quickButtons.delete(spec.id);\n continue;\n }\n if (!btn) {\n btn = document.createElement('button');\n btn.type = 'button';\n btn.className =\n 'hp-chip hp-a11y-quick hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer';\n btn.setAttribute('part', `a11y-quick a11y-quick-${spec.id}`);\n btn.setAttribute('data-a11y', spec.id);\n btn.innerHTML = QUICK_ICONS[spec.id];\n this.ctx.addQuickButton(btn, spec.def, () => [this.menu()]);\n this.quickButtons.set(spec.id, btn);\n }\n // Tooltip ve ekran okuyucu: özelliğin adı + değeri (\"Yakınlaştırma: 200%\").\n btn.setAttribute('aria-label', spec.label);\n }\n }\n private filterLabel(f: AccessibilityFilter): string {\n const t = this.ctx.i18n;\n const labels: Record<AccessibilityFilter, string> = {\n none: t.a11yFilterNone,\n grayscale: t.a11yFilterGrayscale,\n daylight: t.a11yFilterDaylight,\n night: t.a11yFilterNight,\n contrast: t.a11yFilterContrast,\n protanopia: t.a11yFilterProtanopia,\n deuteranopia: t.a11yFilterDeuteranopia,\n tritanopia: t.a11yFilterTritanopia,\n };\n return labels[f];\n }\n\n // ── Durum ──\n\n private set<K extends keyof AccessibilityState>(key: K, value: AccessibilityState[K]): void {\n if (this.state[key] === value) return;\n this.state[key] = value;\n this.applyAll();\n this.save();\n this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:accessibility', { detail: { ...this.state, changed: key } }));\n }\n\n private setZoom(z: number): void {\n if (z <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n this.set('zoom', z);\n }\n\n private applyAll(): void {\n this.applyZoom();\n this.applyFilter();\n this.applyAudio();\n this.ctx.hostEl.toggleAttribute('data-large-controls', this.state.largeControls);\n this.syncQuickButtons();\n }\n\n private readonly applyZoom = (): void => {\n const v = this.ctx.videoEl;\n const z = this.state.zoom;\n this.ctx.hostEl.toggleAttribute('data-zoomed', z > 1);\n if (this.zoomLevels.length > 1) {\n // Yakınlaştırılmamışken sayfa kaydırması serbest, tarayıcının kendi iki parmak büyütmesi kapalı (bizimki çalışsın);\n // yakınlaştırılmışken sürükleme görüntüyü kaydırır.\n v.style.touchAction = z > 1 ? 'none' : 'pan-x pan-y';\n }\n if (z <= 1) {\n v.style.transform = '';\n return;\n }\n // Kenar dışına kaydırılamaz: en fazla (z-1)/2 genişlik kadar.\n const maxX = ((z - 1) * v.clientWidth) / 2;\n const maxY = ((z - 1) * v.clientHeight) / 2;\n v.style.transformOrigin = 'center center';\n v.style.transform = `translate(${(-this.panX * maxX).toFixed(1)}px, ${(-this.panY * maxY).toFixed(1)}px) scale(${z})`;\n };\n\n private applyFilter(): void {\n const f = this.state.filter;\n this.ctx.videoEl.style.filter = f === 'protanopia' || f === 'deuteranopia' || f === 'tritanopia' ? colorBlindFilterUrl(f) : CSS_FILTERS[f];\n }\n\n // ── Ses (Web Audio) ──\n\n /**\n * Web Audio kaynağı başka alan adındaysa ve CORS'la yüklenmediyse tarayıcı sesi sıfırlar — o zaman kapalı kalır.\n * blob: (hls.js / MSE; hls.js zaten CORS'la indirir) ve aynı origin güvenli.\n */\n private audioAllowed(): boolean {\n if (typeof AudioContext === 'undefined') return false;\n const src = this.ctx.videoEl.currentSrc;\n if (!src || src.startsWith('blob:') || src.startsWith('data:')) return true;\n try {\n if (new URL(src, location.href).origin === location.origin) return true;\n } catch {\n return false;\n }\n return this.ctx.videoEl.crossOrigin !== null;\n }\n\n private applyAudio(): void {\n const needed = this.state.mono || this.state.boost !== 1;\n if (!needed && !this.graph) return;\n if (!this.graph) {\n if (!this.audioAllowed()) return;\n try {\n const ctx = new AudioContext();\n const source = ctx.createMediaElementSource(this.ctx.videoEl);\n const gain = ctx.createGain();\n source.connect(gain).connect(ctx.destination);\n this.graph = { ctx, gain };\n } catch {\n return;\n }\n }\n const { gain, ctx } = this.graph;\n gain.gain.value = this.state.boost;\n // Mono: kanalları 'speakers' kuralıyla tek kanala indir ((L+R)/2); çıkış iki hoparlöre aynı gider.\n gain.channelCountMode = this.state.mono ? 'explicit' : 'max';\n gain.channelCount = this.state.mono ? 1 : 2;\n gain.channelInterpretation = 'speakers';\n if (ctx.state === 'suspended') void ctx.resume().catch(() => {});\n }\n\n private readonly resumeAudio = (): void => {\n if (this.graph?.ctx.state === 'suspended') void this.graph.ctx.resume().catch(() => {});\n };\n\n // ── Kalıcılık ──\n\n private restore(): void {\n if (this.options.remember === false) return;\n try {\n const saved = JSON.parse(localStorage.getItem(STORAGE_KEY) ?? 'null') as Partial<AccessibilityState> | null;\n if (!saved) return;\n if (saved.filter && this.filters.includes(saved.filter)) this.state.filter = saved.filter;\n if (typeof saved.mono === 'boolean' && this.boostLevels.length) this.state.mono = saved.mono;\n if (typeof saved.boost === 'number' && this.boostLevels.includes(saved.boost)) this.state.boost = saved.boost;\n if (typeof saved.largeControls === 'boolean' && this.options.largeControls !== false) this.state.largeControls = saved.largeControls;\n // Yakınlaştırma bilerek hatırlanmaz — bir sonraki videoda kadrajı kaçırmasın.\n } catch {\n /* gizli sekme / bozuk kayıt — varsayılanlar */\n }\n }\n\n private save(): void {\n if (this.options.remember === false) return;\n try {\n const { filter, mono, boost, largeControls } = this.state;\n localStorage.setItem(STORAGE_KEY, JSON.stringify({ filter, mono, boost, largeControls }));\n } catch {\n /* depolama yok — yalnızca bu oturum */\n }\n }\n\n // ── Yakınlaştırma: sürükle, iki parmak ──\n\n private readonly onPointerDown = (e: PointerEvent): void => {\n const target = e.composedPath()[0];\n if (target instanceof Element && target.closest(CONTROL_SELECTOR)) return;\n if (e.pointerType === 'touch') {\n this.touches.set(e.pointerId, { x: e.clientX, y: e.clientY });\n if (this.touches.size === 2) {\n this.pinch = { dist: this.touchDistance(), zoom: this.state.zoom };\n this.drag = null;\n return;\n }\n }\n if (this.state.zoom <= 1 || (e.pointerType === 'mouse' && e.button !== 0)) return;\n this.drag = { id: e.pointerId, x: e.clientX, y: e.clientY, panX: this.panX, panY: this.panY };\n };\n\n private readonly onPointerMove = (e: PointerEvent): void => {\n if (e.pointerType === 'touch' && this.touches.has(e.pointerId)) this.touches.set(e.pointerId, { x: e.clientX, y: e.clientY });\n if (this.pinch && this.touches.size === 2) {\n const max = this.zoomLevels[this.zoomLevels.length - 1]!;\n const z = Math.min(max, Math.max(1, (this.pinch.zoom * this.touchDistance()) / this.pinch.dist));\n this.state.zoom = Math.round(z * 100) / 100;\n if (this.state.zoom <= 1) this.panX = this.panY = 0;\n this.applyZoom();\n return;\n }\n if (!this.drag || this.drag.id !== e.pointerId) return;\n const v = this.ctx.videoEl;\n const z = this.state.zoom;\n const maxX = ((z - 1) * v.clientWidth) / 2 || 1;\n const maxY = ((z - 1) * v.clientHeight) / 2 || 1;\n // Görüntü parmağı / imleci takip eder (sağa sürükle → görüntü sağa → sol taraf görünür).\n this.panX = clamp(this.drag.panX - (e.clientX - this.drag.x) / maxX);\n this.panY = clamp(this.drag.panY - (e.clientY - this.drag.y) / maxY);\n this.applyZoom();\n };\n\n private readonly onPointerUp = (e: PointerEvent): void => {\n this.touches.delete(e.pointerId);\n if (this.pinch && this.touches.size < 2) {\n this.pinch = null;\n this.syncQuickButtons();\n // İki parmakla serbest büyütme bitince olay / kayıt bir kez.\n this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:accessibility', { detail: { ...this.state, changed: 'zoom' } }));\n }\n if (this.drag?.id === e.pointerId) {\n // Gerçekten sürüklendiyse ardından gelen tık oynat / duraklat sayılmasın (oynat butonu bütün alanı kaplayabiliyor).\n if (Math.hypot(e.clientX - this.drag.x, e.clientY - this.drag.y) > DRAG_THRESHOLD_PX) this.swallowNextClick();\n this.drag = null;\n }\n };\n\n private swallowNextClick(): void {\n const area = this.ctx.videoAreaEl;\n const swallow = (ev: Event): void => {\n ev.stopPropagation();\n ev.preventDefault();\n };\n area.addEventListener('click', swallow, { capture: true, once: true });\n // Tık hiç gelmezse (ör. dokunmatik) sonraki gerçek tık yutulmasın.\n setTimeout(() => area.removeEventListener('click', swallow, { capture: true }), 400);\n }\n\n private touchDistance(): number {\n const [a, b] = [...this.touches.values()];\n return a && b ? Math.hypot(a.x - b.x, a.y - b.y) || 1 : 1;\n }\n\n // ── Klavye ──\n\n private readonly onKeyDown = (e: KeyboardEvent): void => {\n if (e.defaultPrevented || e.ctrlKey || e.metaKey || e.altKey) return;\n if (this.shortcutsEl && e.key === 'Escape') {\n e.preventDefault();\n this.closeShortcuts();\n return;\n }\n if (e.key === '?' && this.options.shortcuts !== false) {\n e.preventDefault();\n if (this.shortcutsEl) this.closeShortcuts();\n else this.openShortcuts();\n return;\n }\n if (this.zoomLevels.length < 2) return;\n if (e.key === '+' || e.key === '=') {\n e.preventDefault();\n this.setZoom(this.zoomLevels.find((z) => z > this.state.zoom + 0.001) ?? this.state.zoom);\n } else if (e.key === '-' || e.key === '_') {\n e.preventDefault();\n this.setZoom([...this.zoomLevels].reverse().find((z) => z < this.state.zoom - 0.001) ?? 1);\n } else if (e.key === '0' && this.state.zoom > 1) {\n e.preventDefault();\n this.setZoom(1);\n } else if (e.shiftKey && this.state.zoom > 1 && e.key.startsWith('Arrow')) {\n // Shift + ok: yakınlaştırılmış görüntüde gezin (oklar tek başına sarma / ses olarak kalır).\n e.preventDefault();\n if (e.key === 'ArrowLeft') this.panX = clamp(this.panX - PAN_STEP);\n if (e.key === 'ArrowRight') this.panX = clamp(this.panX + PAN_STEP);\n if (e.key === 'ArrowUp') this.panY = clamp(this.panY - PAN_STEP);\n if (e.key === 'ArrowDown') this.panY = clamp(this.panY + PAN_STEP);\n this.applyZoom();\n }\n };\n\n // ── Kısayol paneli ──\n\n private openShortcuts(): void {\n if (this.shortcutsEl) return;\n const t = this.ctx.i18n;\n const el = document.createElement('div');\n el.className = 'hp-shortcuts';\n el.setAttribute('part', 'shortcuts');\n el.setAttribute('role', 'dialog');\n el.setAttribute('aria-modal', 'true');\n el.setAttribute('aria-labelledby', 'hp-shortcuts-title');\n\n const box = document.createElement('div');\n box.className = 'hp-shortcuts-box';\n const head = document.createElement('div');\n head.className = 'hp-shortcuts-head';\n const title = document.createElement('h2');\n title.id = 'hp-shortcuts-title';\n title.textContent = t.a11yShortcuts;\n const close = document.createElement('button');\n close.type = 'button';\n close.className = 'hp-shortcuts-close';\n close.setAttribute('aria-label', t.a11yClose);\n close.textContent = '✕';\n close.addEventListener('click', () => this.closeShortcuts());\n head.append(title, close);\n\n const rows: [string[], string][] = [\n [['Space', 'K'], t.a11yKeyPlay],\n [['←', '→', 'J', 'L'], t.a11yKeySeek(this.ctx.seekStep())],\n [['↑', '↓'], t.a11yKeyVolume],\n [['M'], t.a11yKeyMute],\n [['F'], t.a11yKeyFullscreen],\n [[',', '.'], t.a11yKeyFrame],\n ];\n if (this.zoomLevels.length > 1) {\n rows.push([['+', '−', '0'], t.a11yKeyZoom]);\n rows.push([['Shift', '+', '←↑↓→'], t.a11yKeyPan]);\n }\n for (const s of this.ctx.extraShortcuts?.() ?? []) rows.push([s.keys, s.description]);\n rows.push([['?'], t.a11yKeyShortcuts]);\n\n const list = document.createElement('dl');\n list.className = 'hp-shortcuts-list';\n for (const [keys, desc] of rows) {\n const dt = document.createElement('dt');\n for (const k of keys) {\n if (k === '+' && keys[0] === 'Shift') {\n dt.append(' + ');\n continue;\n }\n const kbd = document.createElement('kbd');\n kbd.textContent = k;\n dt.appendChild(kbd);\n }\n const dd = document.createElement('dd');\n dd.textContent = desc;\n list.append(dt, dd);\n }\n box.append(head, list);\n el.appendChild(box);\n // Arka plana tıklama kapatır; panelin içindeki tıklama oynat/duraklat'a geçmez.\n el.addEventListener('click', (e) => {\n e.stopPropagation();\n if (e.target === el) this.closeShortcuts();\n });\n for (const ev of ['pointerdown', 'mousedown', 'mouseup', 'touchstart', 'touchend', 'dblclick'] as const) el.addEventListener(ev, (e) => e.stopPropagation());\n // Odak paneli terk etmesin (Tab tek butonda kalır).\n el.addEventListener('keydown', (e) => {\n if (e.key === 'Tab') {\n e.preventDefault();\n close.focus();\n }\n });\n this.ctx.videoAreaEl.appendChild(el);\n this.shortcutsEl = el;\n close.focus({ preventScroll: true });\n }\n\n private closeShortcuts(): void {\n if (!this.shortcutsEl) return;\n const hadFocus = this.shortcutsEl.contains((this.ctx.hostEl.shadowRoot ?? document).activeElement);\n this.shortcutsEl.remove();\n this.shortcutsEl = null;\n if (hadFocus) this.ctx.hostEl.focus({ preventScroll: true });\n }\n}\n\nfunction normalizeLevels(levels: number[]): number[] {\n const valid = levels.filter((n) => Number.isFinite(n) && n >= 1 && n <= 8);\n return [...new Set([1, ...valid])].sort((a, b) => a - b);\n}\n\nconst clamp = (n: number): number => Math.min(1, Math.max(-1, n));\nconst pct = (n: number): string => `${Math.round(n * 100)}%`;\n","import { Accessibility, type AccessibilityPlayerContext } from './Accessibility';\nimport type { AccessibilityOptions } from '../../types';\n\nexport function installAccessibility(ctx: AccessibilityPlayerContext, options: AccessibilityOptions): Accessibility {\n return new Accessibility(ctx, options);\n}\n\nexport { Accessibility };\nexport type { AccessibilityPlayerContext };\n"],"names":["SIMULATE","SHIFT","I","mul","a","b","r","i","j","daltonizeMatrix","kind","s","err","v","shifted","cache","colorBlindFilterUrl","url","m","n","svg","DEFAULT_ZOOM","DEFAULT_BOOST","ALL_FILTERS","STORAGE_KEY","PAN_STEP","SUBMENU_KEY","DRAG_THRESHOLD_PX","CONTROL_SELECTOR","CSS_FILTERS","body","QUICK_ICONS","Accessibility","ctx","options","__publicField","z","maxX","maxY","_a","e","target","max","clamp","normalizeLevels","f","area","btn","items","sub","label","value","children","pct","ok","key","title","t","specs","spec","src","source","gain","saved","filter","mono","boost","largeControls","swallow","ev","_b","el","box","head","close","rows","list","keys","desc","dt","k","kbd","dd","hadFocus","levels","valid","installAccessibility"],"mappings":"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"}