@hopeplayer/core 1.6.0 → 1.7.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 (117) hide show
  1. package/dist/HopePlayerElement.d.ts +23 -0
  2. package/dist/HopePlayerElement.d.ts.map +1 -1
  3. package/dist/chunks/{adTriggers-BIAWe8o4.js → adTriggers-DVqgm92F.js} +94 -93
  4. package/dist/chunks/{adTriggers-BIAWe8o4.js.map → adTriggers-DVqgm92F.js.map} +1 -1
  5. package/dist/chunks/{ads-DlpHPpR9.js → ads-eSKyiH1o.js} +2 -2
  6. package/dist/chunks/{ads-DlpHPpR9.js.map → ads-eSKyiH1o.js.map} +1 -1
  7. package/dist/chunks/audioDescription-cpprKeB-.js +146 -0
  8. package/dist/chunks/audioDescription-cpprKeB-.js.map +1 -0
  9. package/dist/chunks/{cast-vHyi7oV_.js → cast-DEowHmqA.js} +29 -28
  10. package/dist/chunks/{cast-vHyi7oV_.js.map → cast-DEowHmqA.js.map} +1 -1
  11. package/dist/chunks/{docPip-wybMVP1H.js → docPip-Bh6BWPk-.js} +30 -20
  12. package/dist/chunks/docPip-Bh6BWPk-.js.map +1 -0
  13. package/dist/chunks/heatmap-Bz_EMQFk.js +117 -0
  14. package/dist/chunks/heatmap-Bz_EMQFk.js.map +1 -0
  15. package/dist/chunks/{history-CwqLXiZi.js → history-ZSdDDsRF.js} +35 -34
  16. package/dist/chunks/{history-CwqLXiZi.js.map → history-ZSdDDsRF.js.map} +1 -1
  17. package/dist/chunks/interactive-ClJC5Vyo.js +213 -0
  18. package/dist/chunks/interactive-ClJC5Vyo.js.map +1 -0
  19. package/dist/chunks/{markers-L69W3kj6.js → markers-D32rI-x-.js} +2 -2
  20. package/dist/chunks/{markers-L69W3kj6.js.map → markers-D32rI-x-.js.map} +1 -1
  21. package/dist/chunks/multiview-CL1WfJKt.js +295 -0
  22. package/dist/chunks/multiview-CL1WfJKt.js.map +1 -0
  23. package/dist/chunks/{pauseAd-BQQe21X4.js → pauseAd-DF7KGwUs.js} +32 -31
  24. package/dist/chunks/{pauseAd-BQQe21X4.js.map → pauseAd-DF7KGwUs.js.map} +1 -1
  25. package/dist/chunks/{player-D2_HRzot.js → player-B7mYS--8.js} +754 -682
  26. package/dist/chunks/player-B7mYS--8.js.map +1 -0
  27. package/dist/chunks/{playlist-CHfStNbQ.js → playlist-BkhIOfCy.js} +2 -2
  28. package/dist/chunks/{playlist-CHfStNbQ.js.map → playlist-BkhIOfCy.js.map} +1 -1
  29. package/dist/chunks/{pluginHost-cN2uGFeG.js → pluginHost-CXqkjNV1.js} +2 -2
  30. package/dist/chunks/{pluginHost-cN2uGFeG.js.map → pluginHost-CXqkjNV1.js.map} +1 -1
  31. package/dist/chunks/{redirectScreen-TIqLdvBY.js → redirectScreen-DgmjFVJH.js} +51 -39
  32. package/dist/chunks/redirectScreen-DgmjFVJH.js.map +1 -0
  33. package/dist/chunks/rewardedUnlock-BL97P5ht.js +265 -0
  34. package/dist/chunks/{rewardedUnlock-DUqYwXTr.js.map → rewardedUnlock-BL97P5ht.js.map} +1 -1
  35. package/dist/chunks/{segments-Ds-c1b5e.js → segments-CuQQEIAX.js} +2 -2
  36. package/dist/chunks/{segments-Ds-c1b5e.js.map → segments-CuQQEIAX.js.map} +1 -1
  37. package/dist/chunks/share-BdqQ8sGE.js +216 -0
  38. package/dist/chunks/share-BdqQ8sGE.js.map +1 -0
  39. package/dist/chunks/{skipSegments-ByNoF1qZ.js → skipSegments-BbepQ4Y6.js} +2 -2
  40. package/dist/chunks/{skipSegments-ByNoF1qZ.js.map → skipSegments-BbepQ4Y6.js.map} +1 -1
  41. package/dist/chunks/sponsorship-DoAZBbHE.js +241 -0
  42. package/dist/chunks/{sponsorship-BT21uwN5.js.map → sponsorship-DoAZBbHE.js.map} +1 -1
  43. package/dist/chunks/{spriteThumbnails-Cr9UmkM9.js → spriteThumbnails-BYg-DHx4.js} +2 -2
  44. package/dist/chunks/{spriteThumbnails-Cr9UmkM9.js.map → spriteThumbnails-BYg-DHx4.js.map} +1 -1
  45. package/dist/chunks/{story-CodA2dfn.js → story-DcBG6jUg.js} +2 -2
  46. package/dist/chunks/{story-CodA2dfn.js.map → story-DcBG6jUg.js.map} +1 -1
  47. package/dist/chunks/{transcript-LG7E9UYE.js → transcript-CHPQ6S6E.js} +33 -13
  48. package/dist/chunks/transcript-CHPQ6S6E.js.map +1 -0
  49. package/dist/controls/SeekBar.d.ts.map +1 -1
  50. package/dist/hls/SourceManager.d.ts +2 -0
  51. package/dist/hls/SourceManager.d.ts.map +1 -1
  52. package/dist/hope-player.js +3 -3
  53. package/dist/i18n/index.d.ts +9 -0
  54. package/dist/i18n/index.d.ts.map +1 -1
  55. package/dist/i18n/locales/en.d.ts +2 -2
  56. package/dist/i18n/locales/en.d.ts.map +1 -1
  57. package/dist/i18n/locales/tr.d.ts +2 -2
  58. package/dist/i18n/locales/tr.d.ts.map +1 -1
  59. package/dist/i18n/types.d.ts +27 -0
  60. package/dist/i18n/types.d.ts.map +1 -1
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/plugins/ad-triggers/index.d.ts.map +1 -1
  64. package/dist/plugins/audio-description/AudioDescription.d.ts +52 -0
  65. package/dist/plugins/audio-description/AudioDescription.d.ts.map +1 -0
  66. package/dist/plugins/audio-description/index.d.ts +6 -0
  67. package/dist/plugins/audio-description/index.d.ts.map +1 -0
  68. package/dist/plugins/audio-description/strings.d.ts +8 -0
  69. package/dist/plugins/audio-description/strings.d.ts.map +1 -0
  70. package/dist/plugins/cast/index.d.ts.map +1 -1
  71. package/dist/plugins/doc-pip/index.d.ts.map +1 -1
  72. package/dist/plugins/doc-pip/strings.d.ts +8 -0
  73. package/dist/plugins/doc-pip/strings.d.ts.map +1 -0
  74. package/dist/plugins/heatmap/Heatmap.d.ts +8 -0
  75. package/dist/plugins/heatmap/Heatmap.d.ts.map +1 -1
  76. package/dist/plugins/heatmap/index.d.ts.map +1 -1
  77. package/dist/plugins/heatmap/strings.d.ts +8 -0
  78. package/dist/plugins/heatmap/strings.d.ts.map +1 -0
  79. package/dist/plugins/history/index.d.ts.map +1 -1
  80. package/dist/plugins/interactive/index.d.ts.map +1 -1
  81. package/dist/plugins/interactive/strings.d.ts +8 -0
  82. package/dist/plugins/interactive/strings.d.ts.map +1 -0
  83. package/dist/plugins/multiview/Multiview.d.ts +92 -0
  84. package/dist/plugins/multiview/Multiview.d.ts.map +1 -0
  85. package/dist/plugins/multiview/index.d.ts +6 -0
  86. package/dist/plugins/multiview/index.d.ts.map +1 -0
  87. package/dist/plugins/multiview/strings.d.ts +8 -0
  88. package/dist/plugins/multiview/strings.d.ts.map +1 -0
  89. package/dist/plugins/pause-ad/index.d.ts.map +1 -1
  90. package/dist/plugins/redirect-screen/index.d.ts.map +1 -1
  91. package/dist/plugins/redirect-screen/strings.d.ts +8 -0
  92. package/dist/plugins/redirect-screen/strings.d.ts.map +1 -0
  93. package/dist/plugins/rewarded/index.d.ts.map +1 -1
  94. package/dist/plugins/share/Share.d.ts +45 -0
  95. package/dist/plugins/share/Share.d.ts.map +1 -0
  96. package/dist/plugins/share/index.d.ts +6 -0
  97. package/dist/plugins/share/index.d.ts.map +1 -0
  98. package/dist/plugins/share/strings.d.ts +8 -0
  99. package/dist/plugins/share/strings.d.ts.map +1 -0
  100. package/dist/plugins/skip-segments/index.d.ts.map +1 -1
  101. package/dist/plugins/sponsorship/index.d.ts.map +1 -1
  102. package/dist/plugins/transcript/index.d.ts.map +1 -1
  103. package/dist/plugins/transcript/strings.d.ts +8 -0
  104. package/dist/plugins/transcript/strings.d.ts.map +1 -0
  105. package/dist/types/index.d.ts +93 -0
  106. package/dist/types/index.d.ts.map +1 -1
  107. package/package.json +1 -1
  108. package/dist/chunks/docPip-wybMVP1H.js.map +0 -1
  109. package/dist/chunks/heatmap-Bb7neaYU.js +0 -92
  110. package/dist/chunks/heatmap-Bb7neaYU.js.map +0 -1
  111. package/dist/chunks/interactive-CgltIneu.js +0 -189
  112. package/dist/chunks/interactive-CgltIneu.js.map +0 -1
  113. package/dist/chunks/player-D2_HRzot.js.map +0 -1
  114. package/dist/chunks/redirectScreen-TIqLdvBY.js.map +0 -1
  115. package/dist/chunks/rewardedUnlock-DUqYwXTr.js +0 -264
  116. package/dist/chunks/sponsorship-BT21uwN5.js +0 -240
  117. package/dist/chunks/transcript-LG7E9UYE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"spriteThumbnails-Cr9UmkM9.js","sources":["../../src/plugins/sprite-thumbnails/SpriteThumbnails.ts","../../src/plugins/sprite-thumbnails/index.ts"],"sourcesContent":["import type { SpriteThumbnailsOptions } from '../../types';\nimport { formatTime } from '../../utils/format-time';\n\nexport interface SpriteThumbnailsPlayerContext {\n videoEl: HTMLVideoElement;\n /** Önizlemenin bağlandığı seek bar — zaman eşlemesi (chapter boşlukları dahil) onun `ratioAtClientX`'inden. */\n seekBar: {\n readonly el: HTMLElement;\n ratioAtClientX(clientX: number): number;\n suppressHoverTime(key: string, suppressed: boolean): void;\n markerLabelAt?(clientX: number): string | null;\n };\n /** Responsive ölçekleme için referans genişlik — genelde player/video alanının genişliği. */\n playerWidth(): number;\n}\n\n/** Bir önizleme karesi: hangi görselin hangi dikdörtgeni. */\ninterface Frame {\n url: string;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\ninterface Sheet {\n img: HTMLImageElement;\n ready: boolean;\n failed: boolean;\n promise: Promise<void>;\n}\n\nexport interface VttCue {\n start: number;\n end: number;\n url: string;\n /** `#xywh` yoksa null → görselin tamamı. */\n rect: { x: number; y: number; w: number; h: number } | null;\n}\n\n/** Aynı anda bellekte (decode edilmiş) tutulan en fazla sheet — uzun videolarda bellek sınırsız büyümesin. */\nconst MAX_CACHED_SHEETS = 8;\n/** Sheet numarası şablonu: `%d` ya da sıfır dolgulu `%03d`. */\nconst SHEET_TEMPLATE = /%(0(\\d+))?d/;\n\n/**\n * Seek bar hover önizlemesi. Kaynak: tek görsel, çok parçalı (%d / %03d şablonu ya da sheets) veya WebVTT (#xywh).\n * sheetDuration verilmezse ilk sheet'in ızgarasından hesaplanır. Kurulumda hiçbir şey indirilmez; yalnızca imlecin\n * altındaki sheet + komşuları yüklenir, decode bitmeden gösterilmez, LRU cache.\n */\nexport class SpriteThumbnails {\n private readonly tooltip: HTMLElement;\n private readonly imageEl: HTMLElement;\n private readonly timeEl: HTMLElement;\n private readonly sheets = new Map<string, Sheet>();\n private vttCues: VttCue[] | null = null;\n private vttLoading: Promise<void> | null = null;\n /** Çok parçalı modda otomatik hesaplanan sheet süresi (ilk sheet yüklenince). */\n private derivedSheetDuration: number | null = null;\n /** `lowRes` sheet'i — LRU dışında, hep bellekte. */\n private lowSheet: Sheet | null = null;\n /** Son çizilen asıl karenin genişliği (VTT'de `width` yok). */\n private lastFrameWidth = 0;\n private warmed = false;\n private hovering = false;\n private lastClientX = 0;\n private rafId: number | null = null;\n private destroyed = false;\n\n constructor(\n private readonly ctx: SpriteThumbnailsPlayerContext,\n private readonly options: SpriteThumbnailsOptions\n ) {\n this.tooltip = document.createElement('div');\n this.tooltip.setAttribute('part', 'sprite-tooltip');\n this.tooltip.className = 'hp-sprite-tooltip';\n this.imageEl = document.createElement('div');\n this.imageEl.className = 'hp-sprite-image';\n this.timeEl = document.createElement('div');\n this.timeEl.className = 'hp-sprite-time';\n this.tooltip.append(this.imageEl, this.timeEl);\n ctx.seekBar.el.appendChild(this.tooltip);\n // Önizlemenin altında zaman zaten yazıyor — varsayılan hover zamanı ikinci kez göstermesin.\n ctx.seekBar.suppressHoverTime('sprite', true);\n\n ctx.seekBar.el.addEventListener('pointerenter', this.onPointerEnter);\n ctx.seekBar.el.addEventListener('pointermove', this.onPointerMove);\n ctx.seekBar.el.addEventListener('pointerleave', this.onPointerLeave);\n ctx.videoEl.addEventListener('play', this.warm);\n }\n\n destroy(): void {\n this.destroyed = true;\n if (this.rafId !== null) cancelAnimationFrame(this.rafId);\n this.ctx.seekBar.el.removeEventListener('pointerenter', this.onPointerEnter);\n this.ctx.seekBar.el.removeEventListener('pointermove', this.onPointerMove);\n this.ctx.seekBar.el.removeEventListener('pointerleave', this.onPointerLeave);\n this.ctx.videoEl.removeEventListener('play', this.warm);\n this.tooltip.remove();\n this.ctx.seekBar.suppressHoverTime('sprite', false);\n for (const sheet of this.sheets.values()) sheet.img.src = '';\n if (this.lowSheet) this.lowSheet.img.src = '';\n this.sheets.clear();\n }\n\n // ── olaylar ──\n\n private readonly onPointerEnter = (e: PointerEvent): void => {\n this.hovering = true;\n this.lastClientX = e.clientX;\n this.warm();\n this.scheduleRender();\n };\n\n private readonly onPointerMove = (e: PointerEvent): void => {\n this.hovering = true;\n this.lastClientX = e.clientX;\n this.scheduleRender();\n };\n\n private readonly onPointerLeave = (): void => {\n this.hovering = false;\n this.tooltip.removeAttribute('data-visible');\n };\n\n /** İlk ihtiyaç anında (hover / oynatma) kaynağı hazırla — kurulumda hiçbir şey indirilmiyor. */\n private readonly warm = (): void => {\n if (this.warmed || this.destroyed) return;\n this.warmed = true;\n // Küçük sheet bağlantı hızından bağımsız hemen iner.\n if (this.options.lowRes?.url) this.lowSheet = this.createSheet(this.options.lowRes.url, () => this.hovering && this.scheduleRender());\n if (this.options.vtt) {\n void this.loadVtt();\n return;\n }\n const duration = this.ctx.videoEl.duration;\n const t = Number.isFinite(duration) ? this.ctx.videoEl.currentTime : 0;\n // Şablonlu/çok parçalı modda sheet süresi henüz bilinmiyorsa ilk sheet'ten öğrenilecek.\n void this.ensureSheet(this.sheetUrl(this.isMultiSheet() && this.sheetDuration() === null ? 0 : this.sheetIndexAt(t)));\n };\n\n private scheduleRender(): void {\n if (this.rafId !== null) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.render();\n });\n }\n\n // ── çizim ──\n\n private render(): void {\n if (!this.hovering || this.destroyed) return;\n const duration = this.ctx.videoEl.duration;\n if (!Number.isFinite(duration) || duration <= 0) return;\n\n const seconds = this.ctx.seekBar.ratioAtClientX(this.lastClientX) * duration;\n const label = this.ctx.seekBar.markerLabelAt?.(this.lastClientX);\n this.timeEl.textContent = label ? `${label} · ${formatTime(seconds)}` : formatTime(seconds);\n\n // Asıl kare hazır değilse küçük sheet'ten doğru zamanın karesi; o da yoksa son kare ekranda kalır.\n const hi = this.isNetworkEligible() ? this.frameAt(seconds, duration) : null;\n if (hi) this.lastFrameWidth = hi.w;\n const frame = hi ?? this.lowResFrameAt(seconds, duration);\n const img = hi ? this.sheets.get(hi.url)!.img : this.lowSheet?.img;\n if (frame && img) {\n // Hedef genişlik: displayWidth → kare genişliği; küçük kare aynı boyuta büyütülür.\n const target = (this.options.displayWidth ?? (hi ? hi.w : this.options.width || this.lastFrameWidth || frame.w)) * this.scale();\n const k = target / frame.w;\n this.imageEl.style.display = '';\n this.imageEl.toggleAttribute('data-lowres', !hi);\n this.imageEl.style.width = `${target}px`;\n this.imageEl.style.height = `${frame.h * k}px`;\n this.imageEl.style.backgroundImage = `url(\"${frame.url}\")`;\n this.imageEl.style.backgroundSize = `${img.naturalWidth * k}px ${img.naturalHeight * k}px`;\n this.imageEl.style.backgroundPosition = `${-frame.x * k}px ${-frame.y * k}px`;\n } else if (!this.imageEl.style.backgroundImage) {\n // Henüz hiçbir kare yüklenmedi — yalnızca zaman (yükleme bitince yeniden çizilir).\n this.imageEl.style.display = 'none';\n }\n\n // Kenarlarda taşmasın: imleci ortala ama seek bar sınırlarında kal.\n this.tooltip.setAttribute('data-visible', '');\n const barRect = this.ctx.seekBar.el.getBoundingClientRect();\n const tipWidth = this.tooltip.offsetWidth;\n const x = Math.min(Math.max(this.lastClientX - barRect.left - tipWidth / 2, 0), Math.max(barRect.width - tipWidth, 0));\n this.tooltip.style.transform = `translateX(${x}px)`;\n }\n\n private scale(): number {\n const responsive = this.options.responsive;\n const playerWidth = this.ctx.playerWidth();\n return responsive && playerWidth && playerWidth < responsive ? playerWidth / responsive : 1;\n }\n\n private isNetworkEligible(): boolean {\n const nav = navigator as Navigator & { connection?: { downlink?: number } };\n const downlink = nav.connection?.downlink;\n const anyReady = Array.from(this.sheets.values()).some((s) => s.ready);\n return downlink === undefined || downlink >= (this.options.downlink ?? 2) || anyReady;\n }\n\n // ── kare çözümleme ──\n\n /** `lowRes` sheet'inden saniyedeki kare (hazır değilse null). */\n private lowResFrameAt(seconds: number, duration: number): Frame | null {\n const o = this.options.lowRes;\n const img = this.lowSheet?.ready ? this.lowSheet.img : null;\n if (!o || !img || !o.width || !o.height) return null;\n const columns = Math.max(1, Math.floor(img.naturalWidth / o.width));\n const count = columns * Math.max(1, Math.floor(img.naturalHeight / o.height));\n const interval = o.interval || duration / count;\n const i = Math.min(count - 1, Math.max(0, Math.floor(seconds / interval)));\n return { url: o.url, x: (i % columns) * o.width, y: Math.floor(i / columns) * o.height, w: o.width, h: o.height };\n }\n\n /** Saniyedeki kareyi döner; gereken sheet hazır değilse yüklemeyi başlatıp null döner (yüklenince render tekrar çağrılır). */\n private frameAt(seconds: number, duration: number): Frame | null {\n return this.options.vtt ? this.vttFrameAt(seconds) : this.gridFrameAt(seconds, duration);\n }\n\n private isMultiSheet(): boolean {\n return !!this.options.sheets?.length || SHEET_TEMPLATE.test(this.options.url ?? '');\n }\n\n /** Tek sheet → Infinity (tüm video); çok parçalı → verilen ya da ilk sheet'ten hesaplanan süre; henüz bilinmiyorsa null. */\n private sheetDuration(): number | null {\n if (!this.isMultiSheet()) return Infinity;\n return this.options.sheetDuration ?? this.derivedSheetDuration;\n }\n\n private sheetIndexAt(seconds: number): number {\n const d = this.sheetDuration();\n if (d === null || d === Infinity) return 0;\n // floor (ceil DEĞİL): tam sınırda (ör. 60. sn) bir SONRAKİ sheet'in ilk karesi.\n let index = Math.floor(Math.max(0, seconds) / d);\n if (this.options.sheets?.length) index = Math.min(index, this.options.sheets.length - 1);\n return index;\n }\n\n /** 0 tabanlı sheet index'inden URL. */\n private sheetUrl(index: number): string {\n if (this.options.sheets?.length) return this.options.sheets[Math.min(index, this.options.sheets.length - 1)]!;\n const url = this.options.url ?? '';\n const number = index + (this.options.firstSheetIndex ?? 1);\n return url.replace(SHEET_TEMPLATE, (_m, _p, width?: string) => String(number).padStart(width ? Number(width) : 0, '0'));\n }\n\n private gridFrameAt(seconds: number, duration: number): Frame | null {\n const { width, height } = this.options;\n if (!width || !height) return null;\n const interval = this.options.interval || 1;\n\n const sheetDuration = this.sheetDuration();\n if (sheetDuration === null) {\n // Çok parçalı ama süre bilinmiyor — ilk sheet yüklenince hesaplanacak.\n void this.ensureSheet(this.sheetUrl(0));\n return null;\n }\n\n const lastIndex = sheetDuration === Infinity ? 0 : this.sheetIndexAt(Math.max(0, duration - 0.001));\n const index = Math.min(this.sheetIndexAt(seconds), lastIndex);\n const url = this.sheetUrl(index);\n this.preloadAround(index, lastIndex);\n\n const sheet = this.sheets.get(url);\n if (!sheet?.ready) {\n void this.ensureSheet(url);\n return null;\n }\n this.touch(url);\n\n // Her sheet'in KENDİ boyutu (son sheet daha kısa olabilir).\n const columns = Math.max(1, Math.floor(sheet.img.naturalWidth / width));\n const rows = Math.max(1, Math.floor(sheet.img.naturalHeight / height));\n const local = sheetDuration === Infinity ? seconds : seconds - index * sheetDuration;\n const frameIndex = Math.min(Math.max(0, Math.floor(local / interval)), columns * rows - 1);\n return { url, x: (frameIndex % columns) * width, y: Math.floor(frameIndex / columns) * height, w: width, h: height };\n }\n\n private preloadAround(index: number, lastIndex: number): void {\n const n = this.options.preloadSheets ?? 1;\n for (let d = 1; d <= n; d++) {\n if (index + d <= lastIndex) void this.ensureSheet(this.sheetUrl(index + d));\n if (index - d >= 0) void this.ensureSheet(this.sheetUrl(index - d));\n }\n }\n\n private vttFrameAt(seconds: number): Frame | null {\n if (!this.vttCues) {\n void this.loadVtt();\n return null;\n }\n const cues = this.vttCues;\n if (!cues.length) return null;\n // İkili arama — saatlerce süren videolarda binlerce cue olabilir.\n let lo = 0;\n let hi = cues.length - 1;\n while (lo < hi) {\n const mid = (lo + hi + 1) >> 1;\n if (cues[mid]!.start <= seconds) lo = mid;\n else hi = mid - 1;\n }\n const cue = cues[lo]!;\n const neighbours = [cues[lo + 1], cues[lo - 1]].filter((c): c is VttCue => !!c && c.url !== cue.url);\n neighbours.forEach((c) => void this.ensureSheet(c.url));\n\n const sheet = this.sheets.get(cue.url);\n if (!sheet?.ready) {\n void this.ensureSheet(cue.url);\n return null;\n }\n this.touch(cue.url);\n const rect = cue.rect ?? { x: 0, y: 0, w: sheet.img.naturalWidth, h: sheet.img.naturalHeight };\n return { url: cue.url, ...rect };\n }\n\n // ── yükleme / cache ──\n\n private ensureSheet(url: string): Promise<void> {\n if (!url) return Promise.resolve();\n const existing = this.sheets.get(url);\n if (existing) return existing.promise;\n\n const sheet = this.createSheet(url, (img) => {\n this.learnSheetDuration(img);\n if (this.hovering) this.scheduleRender();\n });\n this.sheets.set(url, sheet);\n this.evict();\n return sheet.promise;\n }\n\n /** Görseli yükler; decode bitmeden hazır sayılmaz (sheet geçişinde titreme olmasın). */\n private createSheet(url: string, onReady: (img: HTMLImageElement) => void): Sheet {\n const img = new Image();\n img.decoding = 'async';\n const sheet: Sheet = { img, ready: false, failed: false, promise: Promise.resolve() };\n sheet.promise = new Promise<void>((resolve) => {\n img.onload = () => {\n const done = () => {\n if (this.destroyed) return resolve();\n sheet.ready = true;\n onReady(img);\n resolve();\n };\n img.decode ? img.decode().then(done, done) : done();\n };\n img.onerror = () => {\n sheet.failed = true;\n resolve();\n };\n });\n img.src = url;\n return sheet;\n }\n\n /** Çok parçalı modda `sheetDuration` verilmediyse ilk yüklenen sheet'in ızgara kapasitesinden hesapla. */\n private learnSheetDuration(img: HTMLImageElement): void {\n if (this.derivedSheetDuration !== null || this.options.vtt || !this.isMultiSheet() || this.options.sheetDuration) return;\n const { width, height } = this.options;\n if (!width || !height) return;\n const capacity = Math.max(1, Math.floor(img.naturalWidth / width)) * Math.max(1, Math.floor(img.naturalHeight / height));\n this.derivedSheetDuration = capacity * (this.options.interval || 1);\n }\n\n /** LRU: kullanılan sheet'i sona taşı. */\n private touch(url: string): void {\n const sheet = this.sheets.get(url);\n if (!sheet) return;\n this.sheets.delete(url);\n this.sheets.set(url, sheet);\n }\n\n private evict(): void {\n while (this.sheets.size > MAX_CACHED_SHEETS) {\n const oldest = this.sheets.keys().next().value as string;\n const sheet = this.sheets.get(oldest)!;\n sheet.img.onload = null;\n sheet.img.onerror = null;\n this.sheets.delete(oldest);\n }\n }\n\n private loadVtt(): Promise<void> {\n if (this.vttLoading) return this.vttLoading;\n const vttUrl = this.options.vtt!;\n this.vttLoading = fetch(vttUrl)\n .then((r) => {\n if (!r.ok) throw new Error(`HTTP ${r.status}`);\n return r.text();\n })\n .then((text) => {\n if (this.destroyed) return;\n this.vttCues = parseThumbnailVtt(text, new URL(vttUrl, document.baseURI).href);\n if (this.vttCues.length) void this.ensureSheet(this.vttCues[0]!.url);\n if (this.hovering) this.scheduleRender();\n })\n .catch((err) => {\n console.warn('[HopePlayer sprite-thumbnails] VTT yüklenemedi:', err);\n this.vttCues = [];\n });\n return this.vttLoading;\n }\n}\n\n/** \"01:02:03.500\" / \"02:03.500\" → saniye. */\nfunction parseVttTime(value: string): number {\n const parts = value.trim().split(':').map(Number);\n return parts.reduce((acc, n) => acc * 60 + n, 0);\n}\n\n/** WebVTT thumbnail dosyası → sıralı cue listesi. Görsel yolları VTT dosyasına göre çözümlenir. */\nexport function parseThumbnailVtt(text: string, baseUrl: string): VttCue[] {\n const cues: VttCue[] = [];\n const blocks = text.replace(/\\r/g, '').split(/\\n\\n+/);\n for (const block of blocks) {\n const lines = block.split('\\n').filter(Boolean);\n const timingIndex = lines.findIndex((l) => l.includes('-->'));\n if (timingIndex === -1) continue;\n const [startStr, endStr] = lines[timingIndex]!.split('-->');\n const target = lines[timingIndex + 1]?.trim();\n if (!startStr || !endStr || !target) continue;\n\n const [path, hash] = target.split('#');\n const match = hash?.match(/xywh=(\\d+),(\\d+),(\\d+),(\\d+)/);\n cues.push({\n start: parseVttTime(startStr),\n end: parseVttTime(endStr.trim().split(/\\s+/)[0]!),\n url: new URL(path!, baseUrl).href,\n rect: match ? { x: +match[1]!, y: +match[2]!, w: +match[3]!, h: +match[4]! } : null,\n });\n }\n return cues.sort((a, b) => a.start - b.start);\n}\n","import { SpriteThumbnails, type SpriteThumbnailsPlayerContext } from './SpriteThumbnails';\nimport type { SpriteThumbnailsOptions } from '../../types';\n\nexport function installSpriteThumbnails(ctx: SpriteThumbnailsPlayerContext, options: SpriteThumbnailsOptions): SpriteThumbnails {\n return new SpriteThumbnails(ctx, options);\n}\n\nexport { SpriteThumbnails };\nexport type { SpriteThumbnailsPlayerContext };\n"],"names":["MAX_CACHED_SHEETS","SHEET_TEMPLATE","SpriteThumbnails","ctx","options","__publicField","e","_a","duration","t","sheet","seconds","label","_b","formatTime","hi","frame","img","_c","target","k","barRect","tipWidth","x","responsive","playerWidth","downlink","anyReady","s","o","columns","count","interval","i","d","index","url","number","_m","_p","width","height","sheetDuration","lastIndex","rows","local","frameIndex","n","cues","lo","mid","cue","c","rect","existing","onReady","resolve","done","capacity","oldest","vttUrl","r","text","parseThumbnailVtt","err","parseVttTime","value","acc","baseUrl","blocks","block","lines","timingIndex","l","startStr","endStr","path","hash","match","a","b","installSpriteThumbnails"],"mappings":"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"}
1
+ {"version":3,"file":"spriteThumbnails-BYg-DHx4.js","sources":["../../src/plugins/sprite-thumbnails/SpriteThumbnails.ts","../../src/plugins/sprite-thumbnails/index.ts"],"sourcesContent":["import type { SpriteThumbnailsOptions } from '../../types';\nimport { formatTime } from '../../utils/format-time';\n\nexport interface SpriteThumbnailsPlayerContext {\n videoEl: HTMLVideoElement;\n /** Önizlemenin bağlandığı seek bar — zaman eşlemesi (chapter boşlukları dahil) onun `ratioAtClientX`'inden. */\n seekBar: {\n readonly el: HTMLElement;\n ratioAtClientX(clientX: number): number;\n suppressHoverTime(key: string, suppressed: boolean): void;\n markerLabelAt?(clientX: number): string | null;\n };\n /** Responsive ölçekleme için referans genişlik — genelde player/video alanının genişliği. */\n playerWidth(): number;\n}\n\n/** Bir önizleme karesi: hangi görselin hangi dikdörtgeni. */\ninterface Frame {\n url: string;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\ninterface Sheet {\n img: HTMLImageElement;\n ready: boolean;\n failed: boolean;\n promise: Promise<void>;\n}\n\nexport interface VttCue {\n start: number;\n end: number;\n url: string;\n /** `#xywh` yoksa null → görselin tamamı. */\n rect: { x: number; y: number; w: number; h: number } | null;\n}\n\n/** Aynı anda bellekte (decode edilmiş) tutulan en fazla sheet — uzun videolarda bellek sınırsız büyümesin. */\nconst MAX_CACHED_SHEETS = 8;\n/** Sheet numarası şablonu: `%d` ya da sıfır dolgulu `%03d`. */\nconst SHEET_TEMPLATE = /%(0(\\d+))?d/;\n\n/**\n * Seek bar hover önizlemesi. Kaynak: tek görsel, çok parçalı (%d / %03d şablonu ya da sheets) veya WebVTT (#xywh).\n * sheetDuration verilmezse ilk sheet'in ızgarasından hesaplanır. Kurulumda hiçbir şey indirilmez; yalnızca imlecin\n * altındaki sheet + komşuları yüklenir, decode bitmeden gösterilmez, LRU cache.\n */\nexport class SpriteThumbnails {\n private readonly tooltip: HTMLElement;\n private readonly imageEl: HTMLElement;\n private readonly timeEl: HTMLElement;\n private readonly sheets = new Map<string, Sheet>();\n private vttCues: VttCue[] | null = null;\n private vttLoading: Promise<void> | null = null;\n /** Çok parçalı modda otomatik hesaplanan sheet süresi (ilk sheet yüklenince). */\n private derivedSheetDuration: number | null = null;\n /** `lowRes` sheet'i — LRU dışında, hep bellekte. */\n private lowSheet: Sheet | null = null;\n /** Son çizilen asıl karenin genişliği (VTT'de `width` yok). */\n private lastFrameWidth = 0;\n private warmed = false;\n private hovering = false;\n private lastClientX = 0;\n private rafId: number | null = null;\n private destroyed = false;\n\n constructor(\n private readonly ctx: SpriteThumbnailsPlayerContext,\n private readonly options: SpriteThumbnailsOptions\n ) {\n this.tooltip = document.createElement('div');\n this.tooltip.setAttribute('part', 'sprite-tooltip');\n this.tooltip.className = 'hp-sprite-tooltip';\n this.imageEl = document.createElement('div');\n this.imageEl.className = 'hp-sprite-image';\n this.timeEl = document.createElement('div');\n this.timeEl.className = 'hp-sprite-time';\n this.tooltip.append(this.imageEl, this.timeEl);\n ctx.seekBar.el.appendChild(this.tooltip);\n // Önizlemenin altında zaman zaten yazıyor — varsayılan hover zamanı ikinci kez göstermesin.\n ctx.seekBar.suppressHoverTime('sprite', true);\n\n ctx.seekBar.el.addEventListener('pointerenter', this.onPointerEnter);\n ctx.seekBar.el.addEventListener('pointermove', this.onPointerMove);\n ctx.seekBar.el.addEventListener('pointerleave', this.onPointerLeave);\n ctx.videoEl.addEventListener('play', this.warm);\n }\n\n destroy(): void {\n this.destroyed = true;\n if (this.rafId !== null) cancelAnimationFrame(this.rafId);\n this.ctx.seekBar.el.removeEventListener('pointerenter', this.onPointerEnter);\n this.ctx.seekBar.el.removeEventListener('pointermove', this.onPointerMove);\n this.ctx.seekBar.el.removeEventListener('pointerleave', this.onPointerLeave);\n this.ctx.videoEl.removeEventListener('play', this.warm);\n this.tooltip.remove();\n this.ctx.seekBar.suppressHoverTime('sprite', false);\n for (const sheet of this.sheets.values()) sheet.img.src = '';\n if (this.lowSheet) this.lowSheet.img.src = '';\n this.sheets.clear();\n }\n\n // ── olaylar ──\n\n private readonly onPointerEnter = (e: PointerEvent): void => {\n this.hovering = true;\n this.lastClientX = e.clientX;\n this.warm();\n this.scheduleRender();\n };\n\n private readonly onPointerMove = (e: PointerEvent): void => {\n this.hovering = true;\n this.lastClientX = e.clientX;\n this.scheduleRender();\n };\n\n private readonly onPointerLeave = (): void => {\n this.hovering = false;\n this.tooltip.removeAttribute('data-visible');\n };\n\n /** İlk ihtiyaç anında (hover / oynatma) kaynağı hazırla — kurulumda hiçbir şey indirilmiyor. */\n private readonly warm = (): void => {\n if (this.warmed || this.destroyed) return;\n this.warmed = true;\n // Küçük sheet bağlantı hızından bağımsız hemen iner.\n if (this.options.lowRes?.url) this.lowSheet = this.createSheet(this.options.lowRes.url, () => this.hovering && this.scheduleRender());\n if (this.options.vtt) {\n void this.loadVtt();\n return;\n }\n const duration = this.ctx.videoEl.duration;\n const t = Number.isFinite(duration) ? this.ctx.videoEl.currentTime : 0;\n // Şablonlu/çok parçalı modda sheet süresi henüz bilinmiyorsa ilk sheet'ten öğrenilecek.\n void this.ensureSheet(this.sheetUrl(this.isMultiSheet() && this.sheetDuration() === null ? 0 : this.sheetIndexAt(t)));\n };\n\n private scheduleRender(): void {\n if (this.rafId !== null) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.render();\n });\n }\n\n // ── çizim ──\n\n private render(): void {\n if (!this.hovering || this.destroyed) return;\n const duration = this.ctx.videoEl.duration;\n if (!Number.isFinite(duration) || duration <= 0) return;\n\n const seconds = this.ctx.seekBar.ratioAtClientX(this.lastClientX) * duration;\n const label = this.ctx.seekBar.markerLabelAt?.(this.lastClientX);\n this.timeEl.textContent = label ? `${label} · ${formatTime(seconds)}` : formatTime(seconds);\n\n // Asıl kare hazır değilse küçük sheet'ten doğru zamanın karesi; o da yoksa son kare ekranda kalır.\n const hi = this.isNetworkEligible() ? this.frameAt(seconds, duration) : null;\n if (hi) this.lastFrameWidth = hi.w;\n const frame = hi ?? this.lowResFrameAt(seconds, duration);\n const img = hi ? this.sheets.get(hi.url)!.img : this.lowSheet?.img;\n if (frame && img) {\n // Hedef genişlik: displayWidth → kare genişliği; küçük kare aynı boyuta büyütülür.\n const target = (this.options.displayWidth ?? (hi ? hi.w : this.options.width || this.lastFrameWidth || frame.w)) * this.scale();\n const k = target / frame.w;\n this.imageEl.style.display = '';\n this.imageEl.toggleAttribute('data-lowres', !hi);\n this.imageEl.style.width = `${target}px`;\n this.imageEl.style.height = `${frame.h * k}px`;\n this.imageEl.style.backgroundImage = `url(\"${frame.url}\")`;\n this.imageEl.style.backgroundSize = `${img.naturalWidth * k}px ${img.naturalHeight * k}px`;\n this.imageEl.style.backgroundPosition = `${-frame.x * k}px ${-frame.y * k}px`;\n } else if (!this.imageEl.style.backgroundImage) {\n // Henüz hiçbir kare yüklenmedi — yalnızca zaman (yükleme bitince yeniden çizilir).\n this.imageEl.style.display = 'none';\n }\n\n // Kenarlarda taşmasın: imleci ortala ama seek bar sınırlarında kal.\n this.tooltip.setAttribute('data-visible', '');\n const barRect = this.ctx.seekBar.el.getBoundingClientRect();\n const tipWidth = this.tooltip.offsetWidth;\n const x = Math.min(Math.max(this.lastClientX - barRect.left - tipWidth / 2, 0), Math.max(barRect.width - tipWidth, 0));\n this.tooltip.style.transform = `translateX(${x}px)`;\n }\n\n private scale(): number {\n const responsive = this.options.responsive;\n const playerWidth = this.ctx.playerWidth();\n return responsive && playerWidth && playerWidth < responsive ? playerWidth / responsive : 1;\n }\n\n private isNetworkEligible(): boolean {\n const nav = navigator as Navigator & { connection?: { downlink?: number } };\n const downlink = nav.connection?.downlink;\n const anyReady = Array.from(this.sheets.values()).some((s) => s.ready);\n return downlink === undefined || downlink >= (this.options.downlink ?? 2) || anyReady;\n }\n\n // ── kare çözümleme ──\n\n /** `lowRes` sheet'inden saniyedeki kare (hazır değilse null). */\n private lowResFrameAt(seconds: number, duration: number): Frame | null {\n const o = this.options.lowRes;\n const img = this.lowSheet?.ready ? this.lowSheet.img : null;\n if (!o || !img || !o.width || !o.height) return null;\n const columns = Math.max(1, Math.floor(img.naturalWidth / o.width));\n const count = columns * Math.max(1, Math.floor(img.naturalHeight / o.height));\n const interval = o.interval || duration / count;\n const i = Math.min(count - 1, Math.max(0, Math.floor(seconds / interval)));\n return { url: o.url, x: (i % columns) * o.width, y: Math.floor(i / columns) * o.height, w: o.width, h: o.height };\n }\n\n /** Saniyedeki kareyi döner; gereken sheet hazır değilse yüklemeyi başlatıp null döner (yüklenince render tekrar çağrılır). */\n private frameAt(seconds: number, duration: number): Frame | null {\n return this.options.vtt ? this.vttFrameAt(seconds) : this.gridFrameAt(seconds, duration);\n }\n\n private isMultiSheet(): boolean {\n return !!this.options.sheets?.length || SHEET_TEMPLATE.test(this.options.url ?? '');\n }\n\n /** Tek sheet → Infinity (tüm video); çok parçalı → verilen ya da ilk sheet'ten hesaplanan süre; henüz bilinmiyorsa null. */\n private sheetDuration(): number | null {\n if (!this.isMultiSheet()) return Infinity;\n return this.options.sheetDuration ?? this.derivedSheetDuration;\n }\n\n private sheetIndexAt(seconds: number): number {\n const d = this.sheetDuration();\n if (d === null || d === Infinity) return 0;\n // floor (ceil DEĞİL): tam sınırda (ör. 60. sn) bir SONRAKİ sheet'in ilk karesi.\n let index = Math.floor(Math.max(0, seconds) / d);\n if (this.options.sheets?.length) index = Math.min(index, this.options.sheets.length - 1);\n return index;\n }\n\n /** 0 tabanlı sheet index'inden URL. */\n private sheetUrl(index: number): string {\n if (this.options.sheets?.length) return this.options.sheets[Math.min(index, this.options.sheets.length - 1)]!;\n const url = this.options.url ?? '';\n const number = index + (this.options.firstSheetIndex ?? 1);\n return url.replace(SHEET_TEMPLATE, (_m, _p, width?: string) => String(number).padStart(width ? Number(width) : 0, '0'));\n }\n\n private gridFrameAt(seconds: number, duration: number): Frame | null {\n const { width, height } = this.options;\n if (!width || !height) return null;\n const interval = this.options.interval || 1;\n\n const sheetDuration = this.sheetDuration();\n if (sheetDuration === null) {\n // Çok parçalı ama süre bilinmiyor — ilk sheet yüklenince hesaplanacak.\n void this.ensureSheet(this.sheetUrl(0));\n return null;\n }\n\n const lastIndex = sheetDuration === Infinity ? 0 : this.sheetIndexAt(Math.max(0, duration - 0.001));\n const index = Math.min(this.sheetIndexAt(seconds), lastIndex);\n const url = this.sheetUrl(index);\n this.preloadAround(index, lastIndex);\n\n const sheet = this.sheets.get(url);\n if (!sheet?.ready) {\n void this.ensureSheet(url);\n return null;\n }\n this.touch(url);\n\n // Her sheet'in KENDİ boyutu (son sheet daha kısa olabilir).\n const columns = Math.max(1, Math.floor(sheet.img.naturalWidth / width));\n const rows = Math.max(1, Math.floor(sheet.img.naturalHeight / height));\n const local = sheetDuration === Infinity ? seconds : seconds - index * sheetDuration;\n const frameIndex = Math.min(Math.max(0, Math.floor(local / interval)), columns * rows - 1);\n return { url, x: (frameIndex % columns) * width, y: Math.floor(frameIndex / columns) * height, w: width, h: height };\n }\n\n private preloadAround(index: number, lastIndex: number): void {\n const n = this.options.preloadSheets ?? 1;\n for (let d = 1; d <= n; d++) {\n if (index + d <= lastIndex) void this.ensureSheet(this.sheetUrl(index + d));\n if (index - d >= 0) void this.ensureSheet(this.sheetUrl(index - d));\n }\n }\n\n private vttFrameAt(seconds: number): Frame | null {\n if (!this.vttCues) {\n void this.loadVtt();\n return null;\n }\n const cues = this.vttCues;\n if (!cues.length) return null;\n // İkili arama — saatlerce süren videolarda binlerce cue olabilir.\n let lo = 0;\n let hi = cues.length - 1;\n while (lo < hi) {\n const mid = (lo + hi + 1) >> 1;\n if (cues[mid]!.start <= seconds) lo = mid;\n else hi = mid - 1;\n }\n const cue = cues[lo]!;\n const neighbours = [cues[lo + 1], cues[lo - 1]].filter((c): c is VttCue => !!c && c.url !== cue.url);\n neighbours.forEach((c) => void this.ensureSheet(c.url));\n\n const sheet = this.sheets.get(cue.url);\n if (!sheet?.ready) {\n void this.ensureSheet(cue.url);\n return null;\n }\n this.touch(cue.url);\n const rect = cue.rect ?? { x: 0, y: 0, w: sheet.img.naturalWidth, h: sheet.img.naturalHeight };\n return { url: cue.url, ...rect };\n }\n\n // ── yükleme / cache ──\n\n private ensureSheet(url: string): Promise<void> {\n if (!url) return Promise.resolve();\n const existing = this.sheets.get(url);\n if (existing) return existing.promise;\n\n const sheet = this.createSheet(url, (img) => {\n this.learnSheetDuration(img);\n if (this.hovering) this.scheduleRender();\n });\n this.sheets.set(url, sheet);\n this.evict();\n return sheet.promise;\n }\n\n /** Görseli yükler; decode bitmeden hazır sayılmaz (sheet geçişinde titreme olmasın). */\n private createSheet(url: string, onReady: (img: HTMLImageElement) => void): Sheet {\n const img = new Image();\n img.decoding = 'async';\n const sheet: Sheet = { img, ready: false, failed: false, promise: Promise.resolve() };\n sheet.promise = new Promise<void>((resolve) => {\n img.onload = () => {\n const done = () => {\n if (this.destroyed) return resolve();\n sheet.ready = true;\n onReady(img);\n resolve();\n };\n img.decode ? img.decode().then(done, done) : done();\n };\n img.onerror = () => {\n sheet.failed = true;\n resolve();\n };\n });\n img.src = url;\n return sheet;\n }\n\n /** Çok parçalı modda `sheetDuration` verilmediyse ilk yüklenen sheet'in ızgara kapasitesinden hesapla. */\n private learnSheetDuration(img: HTMLImageElement): void {\n if (this.derivedSheetDuration !== null || this.options.vtt || !this.isMultiSheet() || this.options.sheetDuration) return;\n const { width, height } = this.options;\n if (!width || !height) return;\n const capacity = Math.max(1, Math.floor(img.naturalWidth / width)) * Math.max(1, Math.floor(img.naturalHeight / height));\n this.derivedSheetDuration = capacity * (this.options.interval || 1);\n }\n\n /** LRU: kullanılan sheet'i sona taşı. */\n private touch(url: string): void {\n const sheet = this.sheets.get(url);\n if (!sheet) return;\n this.sheets.delete(url);\n this.sheets.set(url, sheet);\n }\n\n private evict(): void {\n while (this.sheets.size > MAX_CACHED_SHEETS) {\n const oldest = this.sheets.keys().next().value as string;\n const sheet = this.sheets.get(oldest)!;\n sheet.img.onload = null;\n sheet.img.onerror = null;\n this.sheets.delete(oldest);\n }\n }\n\n private loadVtt(): Promise<void> {\n if (this.vttLoading) return this.vttLoading;\n const vttUrl = this.options.vtt!;\n this.vttLoading = fetch(vttUrl)\n .then((r) => {\n if (!r.ok) throw new Error(`HTTP ${r.status}`);\n return r.text();\n })\n .then((text) => {\n if (this.destroyed) return;\n this.vttCues = parseThumbnailVtt(text, new URL(vttUrl, document.baseURI).href);\n if (this.vttCues.length) void this.ensureSheet(this.vttCues[0]!.url);\n if (this.hovering) this.scheduleRender();\n })\n .catch((err) => {\n console.warn('[HopePlayer sprite-thumbnails] VTT yüklenemedi:', err);\n this.vttCues = [];\n });\n return this.vttLoading;\n }\n}\n\n/** \"01:02:03.500\" / \"02:03.500\" → saniye. */\nfunction parseVttTime(value: string): number {\n const parts = value.trim().split(':').map(Number);\n return parts.reduce((acc, n) => acc * 60 + n, 0);\n}\n\n/** WebVTT thumbnail dosyası → sıralı cue listesi. Görsel yolları VTT dosyasına göre çözümlenir. */\nexport function parseThumbnailVtt(text: string, baseUrl: string): VttCue[] {\n const cues: VttCue[] = [];\n const blocks = text.replace(/\\r/g, '').split(/\\n\\n+/);\n for (const block of blocks) {\n const lines = block.split('\\n').filter(Boolean);\n const timingIndex = lines.findIndex((l) => l.includes('-->'));\n if (timingIndex === -1) continue;\n const [startStr, endStr] = lines[timingIndex]!.split('-->');\n const target = lines[timingIndex + 1]?.trim();\n if (!startStr || !endStr || !target) continue;\n\n const [path, hash] = target.split('#');\n const match = hash?.match(/xywh=(\\d+),(\\d+),(\\d+),(\\d+)/);\n cues.push({\n start: parseVttTime(startStr),\n end: parseVttTime(endStr.trim().split(/\\s+/)[0]!),\n url: new URL(path!, baseUrl).href,\n rect: match ? { x: +match[1]!, y: +match[2]!, w: +match[3]!, h: +match[4]! } : null,\n });\n }\n return cues.sort((a, b) => a.start - b.start);\n}\n","import { SpriteThumbnails, type SpriteThumbnailsPlayerContext } from './SpriteThumbnails';\nimport type { SpriteThumbnailsOptions } from '../../types';\n\nexport function installSpriteThumbnails(ctx: SpriteThumbnailsPlayerContext, options: SpriteThumbnailsOptions): SpriteThumbnails {\n return new SpriteThumbnails(ctx, options);\n}\n\nexport { SpriteThumbnails };\nexport type { SpriteThumbnailsPlayerContext };\n"],"names":["MAX_CACHED_SHEETS","SHEET_TEMPLATE","SpriteThumbnails","ctx","options","__publicField","e","_a","duration","t","sheet","seconds","label","_b","formatTime","hi","frame","img","_c","target","k","barRect","tipWidth","x","responsive","playerWidth","downlink","anyReady","s","o","columns","count","interval","i","d","index","url","number","_m","_p","width","height","sheetDuration","lastIndex","rows","local","frameIndex","n","cues","lo","mid","cue","c","rect","existing","onReady","resolve","done","capacity","oldest","vttUrl","r","text","parseThumbnailVtt","err","parseVttTime","value","acc","baseUrl","blocks","block","lines","timingIndex","l","startStr","endStr","path","hash","match","a","b","installSpriteThumbnails"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  var A = Object.defineProperty;
2
2
  var N = (h, t, e) => t in h ? A(h, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : h[t] = e;
3
3
  var r = (h, t, e) => N(h, typeof t != "symbol" ? t + "" : t, e);
4
- import { c as b } from "./player-D2_HRzot.js";
4
+ import { c as b } from "./player-B7mYS--8.js";
5
5
  const P = {
6
6
  startIndex: 0,
7
7
  loop: !0,
@@ -331,4 +331,4 @@ export {
331
331
  L as HopeStory,
332
332
  M as installStory
333
333
  };
334
- //# sourceMappingURL=story-CodA2dfn.js.map
334
+ //# sourceMappingURL=story-DcBG6jUg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"story-CodA2dfn.js","sources":["../../src/plugins/story/HopeStory.ts","../../src/plugins/story/index.ts"],"sourcesContent":["import { createIcon } from '../../icons/Icon';\nimport type { PlayableItem, StoryOptions } from '../../types';\nimport type { HopeLocaleStrings } from '../../i18n/types';\n\nexport interface StoryPlayerContext {\n videoEl: HTMLVideoElement;\n hostEl: HTMLElement;\n /** .video-area — story aktifken 9:16'ya çevrilir (data-story attribute ile), destroy'da geri alınır. */\n videoAreaEl: HTMLElement;\n /** Gerçek player gövdesi (.media-layer + chrome + center-play-button) — orta pane'e taşınır, destroy'da geri alınır. */\n playerBodyEls: HTMLElement[];\n loadSource(src: string, type?: string): Promise<void>;\n setPoster(url: string): void;\n requestFreshAd(prerollTag?: string): void;\n i18n: HopeLocaleStrings;\n}\n\ntype Dir = 'next' | 'prev';\n\nconst DEFAULTS: Required<Omit<StoryOptions, 'items' | 'adTagPreroll' | 'gestures' | 'ui'>> = {\n startIndex: 0,\n loop: true,\n autoplayNext: true,\n preferHls: true,\n transitionMs: 380,\n adsOnItemChange: true,\n};\n\n/** Dikey video akışı (Shorts/Story): tek <video>, item değişiminde kaynak değişir. */\nexport class HopeStory {\n private readonly options: Required<Omit<StoryOptions, 'items' | 'adTagPreroll' | 'gestures' | 'ui'>>;\n private readonly gestureOpts: Required<NonNullable<StoryOptions['gestures']>>;\n private readonly uiOpts: Required<NonNullable<StoryOptions['ui']>>;\n private readonly items: PlayableItem[];\n\n private index: number;\n private destroyed = false;\n private switching = false;\n /** Geçiş sürerken gelen buton / klavye isteği — yok sayılmaz, geçiş bitince uygulanır (yalnızca sonuncusu). */\n private pendingNav: { dir: Dir; userInitiated: boolean } | null = null;\n private listOpen = false;\n private userHasStartedPlayback = false;\n private lastAdsIndex: number | null = null;\n private wheelAccum = 0;\n private lastNavAt = 0;\n private drag: { startY: number; startX: number; dy: number; active: boolean; id: number } | null = null;\n\n private readonly els: {\n viewport: HTMLElement;\n track: HTMLElement;\n panePrev: HTMLElement;\n paneCurrent: HTMLElement;\n paneNext: HTMLElement;\n overlay: HTMLElement;\n counter: HTMLElement;\n titleEl: HTMLElement;\n spotEl: HTMLElement;\n dots: HTMLElement;\n progressBar: HTMLElement;\n upBtn: HTMLButtonElement;\n downBtn: HTMLButtonElement;\n listBtn: HTMLButtonElement;\n panel: HTMLElement;\n grid: HTMLElement;\n };\n\n constructor(\n private readonly ctx: StoryPlayerContext,\n private readonly rawOptions: StoryOptions\n ) {\n this.options = { ...DEFAULTS, ...rawOptions };\n this.gestureOpts = {\n swipe: true,\n swipeThreshold: 0.12,\n wheel: true,\n wheelThreshold: 42,\n wheelCooldownMs: 620,\n keyboard: true,\n ...rawOptions.gestures,\n };\n this.uiOpts = { counter: true, title: true, spot: true, dots: true, progress: true, ...rawOptions.ui };\n this.items = Array.isArray(rawOptions.items) ? rawOptions.items : [];\n this.index = this.clamp(this.options.startIndex);\n\n this.els = this.buildDom();\n this.bindEvents();\n this.syncUi();\n this.preloadNeighbours();\n\n if (this.items.length) void this.loadItem(this.index, { isStart: true });\n }\n\n refreshLabels(): void {\n this.els.upBtn.setAttribute('aria-label', this.ctx.i18n.storyPrev);\n this.els.downBtn.setAttribute('aria-label', this.ctx.i18n.storyNext);\n this.els.listBtn.setAttribute('aria-label', this.ctx.i18n.storyAllVideos);\n this.renderList(this.els.grid);\n }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n\n this.ctx.videoEl.removeEventListener('ended', this.onEnded);\n this.ctx.videoEl.removeEventListener('playing', this.onPlaying);\n this.ctx.videoEl.removeEventListener('play', this.onFirstPlay);\n this.ctx.videoEl.removeEventListener('timeupdate', this.onTimeUpdate);\n this.els.viewport.removeEventListener('wheel', this.onWheel);\n this.els.viewport.removeEventListener('pointerdown', this.onPointerDown);\n window.removeEventListener('pointermove', this.onPointerMove);\n window.removeEventListener('pointerup', this.onPointerUp);\n document.removeEventListener('keydown', this.onKeyDown);\n\n // player gövdesini .video-area'ya geri taşı, story DOM'unu kaldır.\n this.ctx.playerBodyEls.forEach((el) => this.ctx.videoAreaEl.appendChild(el));\n this.ctx.videoAreaEl.removeAttribute('data-story');\n this.els.viewport.remove();\n this.els.panel.remove();\n }\n\n // ── public api ──\n\n next(userInitiated = true): void {\n if (this.switching) {\n this.pendingNav = { dir: 'next', userInitiated };\n return;\n }\n const target = this.index + 1;\n if (target >= this.items.length) {\n if (!this.options.loop) return;\n void this.goTo(0, 'next', userInitiated);\n return;\n }\n void this.goTo(target, 'next', userInitiated);\n }\n\n prev(userInitiated = true): void {\n if (this.switching) {\n this.pendingNav = { dir: 'prev', userInitiated };\n return;\n }\n const target = this.index - 1;\n if (target < 0) {\n if (!this.options.loop) return;\n void this.goTo(this.items.length - 1, 'prev', userInitiated);\n return;\n }\n void this.goTo(target, 'prev', userInitiated);\n }\n\n async goTo(target: number, direction: Dir | null = null, userInitiated = true): Promise<void> {\n if (this.destroyed || this.switching) return;\n const i = this.clamp(target);\n if (i === this.index) return;\n\n const dir = direction || (i > this.index ? 'next' : 'prev');\n this.switching = true;\n try {\n this.fillPane(dir, this.items[i]);\n await this.animate(dir);\n this.index = i;\n this.syncUi();\n await this.loadItem(i, { userInitiated });\n this.preloadNeighbours();\n } finally {\n this.switching = false;\n }\n // Hızlı art arda dokunuş (ör. iki kez \"önceki\"): ikincisi kaybolmasın — hedef şimdiki konumdan hesaplanır.\n const pending = this.pendingNav;\n this.pendingNav = null;\n if (pending && !this.destroyed) pending.dir === 'next' ? this.next(pending.userInitiated) : this.prev(pending.userInitiated);\n }\n\n toggleList(force?: boolean): void {\n this.listOpen = typeof force === 'boolean' ? force : !this.listOpen;\n this.els.panel.setAttribute('aria-hidden', this.listOpen ? 'false' : 'true');\n this.els.listBtn.setAttribute('aria-expanded', this.listOpen ? 'true' : 'false');\n // translate-x/-y utility yerine inline transform: Shadow DOM'da tek eksenli Tailwind translate 'none' oluyor.\n this.els.panel.style.transform = this.listOpen ? 'translateX(0)' : 'translateX(100%)';\n }\n\n // ── dom ──\n\n private buildDom() {\n this.ctx.videoAreaEl.setAttribute('data-story', '1');\n\n const viewport = document.createElement('div');\n viewport.className = 'hp:absolute hp:inset-0 hp:overflow-hidden hp:touch-none';\n viewport.setAttribute('tabindex', '0');\n\n const track = document.createElement('div');\n track.className = 'hp:relative hp:w-full';\n track.style.height = '300%';\n track.style.transform = 'translate3d(0,-33.3333%,0)';\n track.style.transition = `transform ${this.options.transitionMs}ms ease`;\n\n const panePrev = this.createPane();\n const paneCurrent = document.createElement('div');\n paneCurrent.className = 'hp:absolute hp:inset-x-0 hp:h-1/3';\n paneCurrent.style.top = '33.3333%';\n const paneNext = this.createPane();\n paneNext.style.top = '66.6667%';\n\n // Gerçek player gövdesini orta pane'e taşı.\n this.ctx.playerBodyEls.forEach((el) => paneCurrent.appendChild(el));\n\n track.append(panePrev, paneCurrent, paneNext);\n viewport.appendChild(track);\n\n const overlay = document.createElement('div');\n overlay.className = 'hp:absolute hp:inset-0 hp:z-20 hp:pointer-events-none hp:flex hp:flex-col hp:justify-between hp:p-3';\n\n const progressBar = document.createElement('div');\n progressBar.className = 'hp:h-0.5 hp:bg-white/30 hp:rounded-full hp:overflow-hidden';\n const progressFill = document.createElement('div');\n progressFill.className = 'hp:h-full hp:bg-accent hp:w-0';\n progressBar.appendChild(progressFill);\n\n const meta = document.createElement('div');\n meta.className = 'hp:flex hp:flex-col hp:gap-0.5 hp:text-white hp:drop-shadow hp:mt-2 hp:pointer-events-auto';\n const counter = document.createElement('span');\n counter.setAttribute('part', 'story-counter');\n counter.className = 'hp:text-xs hp:opacity-80';\n const titleEl = document.createElement('strong');\n titleEl.className = 'hp:text-sm';\n const spotEl = document.createElement('span');\n spotEl.className = 'hp:text-xs hp:opacity-80';\n meta.append(counter, titleEl, spotEl);\n\n const dots = document.createElement('div');\n dots.className = 'hp:absolute hp:right-2 hp:top-1/2 hp-center-y hp:flex hp:flex-col hp:gap-1 hp:pointer-events-none';\n\n const navWrap = document.createElement('div');\n navWrap.className = 'hp:flex hp:flex-col hp:gap-2 hp:self-end hp:pointer-events-auto hp:mb-16';\n const upBtn = this.navBtn('chevron-left', this.ctx.i18n.storyPrev);\n upBtn.style.transform = 'rotate(90deg)';\n const downBtn = this.navBtn('chevron-left', this.ctx.i18n.storyNext);\n downBtn.style.transform = 'rotate(-90deg)';\n navWrap.append(upBtn, downBtn);\n\n const listBtn = document.createElement('button');\n listBtn.type = 'button';\n listBtn.setAttribute('aria-label', this.ctx.i18n.storyAllVideos);\n listBtn.setAttribute('aria-expanded', 'false');\n // Konum tailwind.css `.hp-story-list-btn` — dar (dikey) player'da üst bara (ayarlar/PiP) taşınan butonların altında.\n listBtn.className =\n 'hp-story-list-btn hp:absolute hp:flex hp:items-center hp:justify-center hp:w-9 hp:h-9 hp:rounded-full ' +\n 'hp:bg-black/40 hp:text-white hp:border-0 hp:cursor-pointer hp:pointer-events-auto';\n listBtn.setAttribute('part', 'story-list-button');\n listBtn.appendChild(createIcon('grid', 'hp:text-base'));\n\n overlay.append(progressBar, meta, dots, navWrap, listBtn);\n\n const panel = document.createElement('aside');\n panel.className =\n 'hp:absolute hp:inset-y-0 hp:right-0 hp:w-72 hp:max-w-[80%] hp:bg-surface-elev hp:z-30 hp:overflow-y-auto hp:p-3 ' +\n 'hp:transition-transform hp:duration-300';\n panel.style.transform = 'translateX(100%)';\n panel.setAttribute('aria-hidden', 'true');\n const grid = document.createElement('div');\n grid.className = 'hp:flex hp:flex-col hp:gap-2 hp:mt-8';\n panel.appendChild(grid);\n\n this.ctx.videoAreaEl.append(viewport, overlay, panel);\n\n this.renderList(grid);\n\n return {\n viewport, track, panePrev, paneCurrent, paneNext, overlay,\n counter, titleEl, spotEl, dots, progressBar: progressFill,\n upBtn, downBtn, listBtn, panel, grid,\n };\n }\n\n private createPane(): HTMLElement {\n const pane = document.createElement('div');\n pane.className = 'hp:absolute hp:inset-x-0 hp:h-1/3 hp:bg-cover hp:bg-center hp:bg-black';\n return pane;\n }\n\n private navBtn(iconName: string, label: string): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.setAttribute('aria-label', label);\n btn.className =\n 'hp:flex hp:items-center hp:justify-center hp:w-8 hp:h-8 hp:rounded-full hp:bg-black/40 hp:text-white hp:border-0 hp:cursor-pointer';\n btn.appendChild(createIcon(iconName, 'hp:text-sm'));\n return btn;\n }\n\n private fillPane(dir: Dir, item: PlayableItem | undefined): void {\n const pane = dir === 'next' ? this.els.paneNext : this.els.panePrev;\n const img = item?.image || '';\n pane.style.backgroundImage = img ? `url(\"${img}\")` : 'none';\n }\n\n private animate(dir: Dir): Promise<void> {\n const track = this.els.track;\n return new Promise((resolve) => {\n let done = false;\n const finish = () => {\n if (done) return;\n done = true;\n track.removeEventListener('transitionend', finish);\n clearTimeout(timer);\n track.style.transition = 'none';\n track.style.transform = 'translate3d(0,-33.3333%,0)';\n void track.offsetHeight;\n track.style.transition = `transform ${this.options.transitionMs}ms ease`;\n resolve();\n };\n track.addEventListener('transitionend', finish);\n const timer = setTimeout(finish, this.options.transitionMs + 120);\n track.style.transform = dir === 'next' ? 'translate3d(0,-66.6667%,0)' : 'translate3d(0,0,0)';\n });\n }\n\n // ── source / playback ──\n\n private async loadItem(i: number, opts: { userInitiated?: boolean; isStart?: boolean } = {}): Promise<void> {\n const item = this.items[i];\n if (!item) return;\n\n const mode = this.resolveMode(item);\n const payload = this.buildPayload(item, mode);\n if (!payload) return;\n\n this.ctx.videoEl.pause();\n if (item.image) this.ctx.setPoster(item.image);\n await this.ctx.loadSource(payload.src, payload.type);\n\n if (this.options.adsOnItemChange && this.lastAdsIndex !== i) {\n this.lastAdsIndex = i;\n this.ctx.requestFreshAd(item.adTagPreroll || this.rawOptions.adTagPreroll);\n }\n\n if (this.shouldAutoPlay(opts)) {\n try {\n await this.ctx.videoEl.play();\n } catch {\n /* autoplay engellendi */\n }\n }\n }\n\n private shouldAutoPlay({ userInitiated, isStart }: { userInitiated?: boolean; isStart?: boolean }): boolean {\n if (isStart) return !!this.ctx.videoEl.autoplay;\n if (userInitiated) return true;\n return this.options.autoplayNext && this.userHasStartedPlayback;\n }\n\n private resolveMode(item: PlayableItem): 'hls' | 'mp4' {\n const hasHls = this.hasMode(item, 'hls');\n const hasMp4 = this.hasMode(item, 'mp4');\n if (this.options.preferHls) return hasHls ? 'hls' : hasMp4 ? 'mp4' : 'hls';\n return hasMp4 ? 'mp4' : hasHls ? 'hls' : 'mp4';\n }\n\n private hasMode(item: PlayableItem, mode: 'hls' | 'mp4'): boolean {\n return Array.isArray(item[mode]) && item[mode]!.some((v) => v?.src);\n }\n\n private buildPayload(item: PlayableItem, mode: 'hls' | 'mp4'): { src: string; type?: string } | null {\n const list = (item[mode] || []).filter((v) => v?.src);\n if (!list.length) return null;\n const src = mode === 'mp4' ? list.find((v) => v.selected) || list[0] : list[0];\n return { src: src!.src, type: src!.type || (mode === 'hls' ? 'application/x-mpegURL' : 'video/mp4') };\n }\n\n // ── preload ──\n\n private preloadNeighbours(): void {\n const nav = navigator as Navigator & { connection?: { saveData?: boolean } };\n if (nav.connection?.saveData) return;\n\n [this.wrapIndex(this.index + 1), this.wrapIndex(this.index - 1)].forEach((i) => {\n if (i === this.index) return;\n const item = this.items[i];\n if (item?.image) {\n const img = new Image();\n img.decoding = 'async';\n img.src = item.image;\n }\n });\n }\n\n // ── ui sync ──\n\n private syncUi(): void {\n const item = this.items[this.index];\n const total = this.items.length;\n\n if (this.uiOpts.counter) this.els.counter.textContent = `${this.index + 1} / ${total}`;\n if (this.uiOpts.title) this.els.titleEl.textContent = item?.title || '';\n if (this.uiOpts.spot) this.els.spotEl.textContent = item?.spot || '';\n\n this.fillPane('prev', this.items[this.wrapIndex(this.index - 1)]);\n this.fillPane('next', this.items[this.wrapIndex(this.index + 1)]);\n\n const atStart = !this.options.loop && this.index === 0;\n const atEnd = !this.options.loop && this.index === total - 1;\n this.els.upBtn.disabled = atStart;\n this.els.downBtn.disabled = atEnd;\n\n if (this.uiOpts.dots) {\n if (this.els.dots.children.length !== total) {\n this.els.dots.innerHTML = '';\n for (let i = 0; i < total; i++) {\n const dot = document.createElement('i');\n dot.className = 'hp:block hp:w-1 hp:h-1 hp:rounded-full hp:bg-white/40';\n this.els.dots.appendChild(dot);\n }\n }\n Array.from(this.els.dots.children).forEach((el, i) => {\n (el as HTMLElement).className = `hp:block hp:w-1 hp:h-1 hp:rounded-full ${i === this.index ? 'hp:bg-white' : 'hp:bg-white/40'}`;\n });\n }\n\n this.setActiveThumb();\n this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:itemchange', { detail: { index: this.index, source: 'story' } }));\n }\n\n private renderList(grid: HTMLElement): void {\n grid.innerHTML = '';\n this.items.forEach((item, i) => {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = 'hp:flex hp:items-center hp:gap-2 hp:w-full hp:p-1.5 hp:rounded hp:text-left hp:text-on-surface hp:bg-transparent hp:border-0 hp:cursor-pointer hp:hover:bg-on-surface/5';\n btn.dataset.index = String(i);\n if (item.image) {\n const img = document.createElement('img');\n img.src = item.image;\n img.loading = 'lazy';\n img.className = 'hp:w-14 hp:aspect-[9/16] hp:object-cover hp:rounded hp:shrink-0';\n btn.appendChild(img);\n }\n const title = document.createElement('span');\n title.className = 'hp:text-xs hp:truncate';\n title.textContent = item.title || this.ctx.i18n.videoFallbackTitle(i);\n btn.appendChild(title);\n btn.addEventListener('click', () => {\n this.toggleList(false);\n void this.goTo(i);\n });\n grid.appendChild(btn);\n });\n }\n\n private setActiveThumb(): void {\n Array.from(this.els.grid.children).forEach((el, i) => {\n el.classList.toggle('hp:bg-accent/15', i === this.index);\n });\n }\n\n // ── events ──\n\n private bindEvents(): void {\n this.ctx.videoEl.addEventListener('ended', this.onEnded);\n this.ctx.videoEl.addEventListener('playing', this.onPlaying);\n this.ctx.videoEl.addEventListener('play', this.onFirstPlay);\n if (this.uiOpts.progress) this.ctx.videoEl.addEventListener('timeupdate', this.onTimeUpdate);\n\n this.els.upBtn.addEventListener('click', () => this.prev());\n this.els.downBtn.addEventListener('click', () => this.next());\n this.els.listBtn.addEventListener('click', () => this.toggleList());\n\n this.els.grid.parentElement?.addEventListener('keydown', (e) => {\n if ((e as KeyboardEvent).key === 'Escape') this.toggleList(false);\n });\n\n if (this.gestureOpts.wheel) this.els.viewport.addEventListener('wheel', this.onWheel, { passive: false });\n if (this.gestureOpts.swipe) {\n this.els.viewport.addEventListener('pointerdown', this.onPointerDown);\n window.addEventListener('pointermove', this.onPointerMove, { passive: false });\n window.addEventListener('pointerup', this.onPointerUp);\n }\n if (this.gestureOpts.keyboard) document.addEventListener('keydown', this.onKeyDown);\n }\n\n private readonly onEnded = (): void => {\n if (!this.options.autoplayNext) return;\n if (!this.options.loop && this.index === this.items.length - 1) return;\n this.next(false);\n };\n\n private readonly onPlaying = (): void => {};\n\n private readonly onFirstPlay = (): void => {\n this.userHasStartedPlayback = true;\n };\n\n private readonly onTimeUpdate = (): void => {\n const dur = this.ctx.videoEl.duration || 0;\n const cur = this.ctx.videoEl.currentTime || 0;\n this.els.progressBar.style.width = dur > 0 ? `${Math.min(100, (cur / dur) * 100)}%` : '0%';\n };\n\n private readonly onWheel = (e: WheelEvent): void => {\n if (this.switching) {\n e.preventDefault();\n return;\n }\n const dir: Dir = e.deltaY > 0 ? 'next' : 'prev';\n if (!this.canGo(dir)) return;\n e.preventDefault();\n\n const now = Date.now();\n if (now - this.lastNavAt < this.gestureOpts.wheelCooldownMs) return;\n this.wheelAccum += e.deltaY;\n if (Math.abs(this.wheelAccum) < this.gestureOpts.wheelThreshold) return;\n this.wheelAccum = 0;\n this.lastNavAt = now;\n dir === 'next' ? this.next() : this.prev();\n };\n\n private readonly onPointerDown = (e: PointerEvent): void => {\n if (this.switching || this.listOpen) return;\n if (e.pointerType === 'mouse' && e.button !== 0) return;\n this.drag = { startY: e.clientY, startX: e.clientX, dy: 0, active: false, id: e.pointerId };\n };\n\n private readonly onPointerMove = (e: PointerEvent): void => {\n const drag = this.drag;\n if (!drag || e.pointerId !== drag.id) return;\n const dy = e.clientY - drag.startY;\n const dx = e.clientX - drag.startX;\n\n if (!drag.active) {\n if (Math.abs(dy) < 10 || Math.abs(dy) < Math.abs(dx)) return;\n drag.active = true;\n this.els.track.style.transition = 'none';\n }\n e.preventDefault();\n\n const h = this.els.viewport.clientHeight || 1;\n const resisted = this.canGo(dy < 0 ? 'next' : 'prev') ? dy : dy * 0.25;\n drag.dy = resisted;\n\n const pct = -33.3333 + (resisted / h) * 33.3333;\n this.els.track.style.transform = `translate3d(0, ${pct}%, 0)`;\n };\n\n private readonly onPointerUp = (): void => {\n const drag = this.drag;\n this.drag = null;\n if (!drag?.active) return;\n\n const h = this.els.viewport.clientHeight || 1;\n const ratio = Math.abs(drag.dy) / h;\n const dir: Dir = drag.dy < 0 ? 'next' : 'prev';\n\n this.els.track.style.transition = `transform ${this.options.transitionMs}ms ease`;\n if (ratio >= this.gestureOpts.swipeThreshold && this.canGo(dir)) {\n this.els.track.style.transform = 'translate3d(0,-33.3333%,0)';\n dir === 'next' ? this.next() : this.prev();\n } else {\n this.els.track.style.transform = 'translate3d(0,-33.3333%,0)';\n }\n };\n\n private readonly onKeyDown = (e: KeyboardEvent): void => {\n if (this.destroyed) return;\n if (e.key === 'Escape' && this.listOpen) {\n this.toggleList(false);\n return;\n }\n const tag = document.activeElement?.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA') return;\n if (!this.isInViewport()) return;\n\n if (e.key === 'ArrowDown' || e.key === 'PageDown' || e.key === 'j') {\n e.preventDefault();\n this.next();\n } else if (e.key === 'ArrowUp' || e.key === 'PageUp' || e.key === 'k') {\n e.preventDefault();\n this.prev();\n }\n };\n\n // ── helpers ──\n\n private canGo(dir: Dir): boolean {\n if (this.options.loop) return this.items.length > 1;\n return dir === 'next' ? this.index < this.items.length - 1 : this.index > 0;\n }\n\n private isInViewport(): boolean {\n const r = this.ctx.hostEl.getBoundingClientRect();\n return r.bottom > 0 && r.top < (window.innerHeight || 0);\n }\n\n private clamp(i: number): number {\n if (!Number.isFinite(i) || !this.items.length) return 0;\n return Math.max(0, Math.min(this.items.length - 1, Math.trunc(i)));\n }\n\n private wrapIndex(i: number): number {\n const n = this.items.length;\n if (!n) return 0;\n if (this.options.loop) return ((i % n) + n) % n;\n return this.clamp(i);\n }\n}\n","import { HopeStory, type StoryPlayerContext } from './HopeStory';\nimport type { StoryOptions } from '../../types';\n\nexport function installStory(ctx: StoryPlayerContext, options: StoryOptions): HopeStory {\n return new HopeStory(ctx, options);\n}\n\nexport { HopeStory };\nexport type { StoryPlayerContext };\n"],"names":["DEFAULTS","HopeStory","ctx","rawOptions","__publicField","dur","cur","e","dir","now","drag","dy","dx","h","resisted","pct","ratio","tag","_a","el","userInitiated","target","direction","pending","force","viewport","track","panePrev","paneCurrent","paneNext","overlay","progressBar","progressFill","meta","counter","titleEl","spotEl","dots","navWrap","upBtn","downBtn","listBtn","createIcon","panel","grid","pane","iconName","label","btn","item","img","resolve","done","finish","timer","i","opts","mode","payload","isStart","hasHls","hasMp4","v","list","src","total","atStart","atEnd","dot","title","r","n","installStory","options"],"mappings":"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"}
1
+ {"version":3,"file":"story-DcBG6jUg.js","sources":["../../src/plugins/story/HopeStory.ts","../../src/plugins/story/index.ts"],"sourcesContent":["import { createIcon } from '../../icons/Icon';\nimport type { PlayableItem, StoryOptions } from '../../types';\nimport type { HopeLocaleStrings } from '../../i18n/types';\n\nexport interface StoryPlayerContext {\n videoEl: HTMLVideoElement;\n hostEl: HTMLElement;\n /** .video-area — story aktifken 9:16'ya çevrilir (data-story attribute ile), destroy'da geri alınır. */\n videoAreaEl: HTMLElement;\n /** Gerçek player gövdesi (.media-layer + chrome + center-play-button) — orta pane'e taşınır, destroy'da geri alınır. */\n playerBodyEls: HTMLElement[];\n loadSource(src: string, type?: string): Promise<void>;\n setPoster(url: string): void;\n requestFreshAd(prerollTag?: string): void;\n i18n: HopeLocaleStrings;\n}\n\ntype Dir = 'next' | 'prev';\n\nconst DEFAULTS: Required<Omit<StoryOptions, 'items' | 'adTagPreroll' | 'gestures' | 'ui'>> = {\n startIndex: 0,\n loop: true,\n autoplayNext: true,\n preferHls: true,\n transitionMs: 380,\n adsOnItemChange: true,\n};\n\n/** Dikey video akışı (Shorts/Story): tek <video>, item değişiminde kaynak değişir. */\nexport class HopeStory {\n private readonly options: Required<Omit<StoryOptions, 'items' | 'adTagPreroll' | 'gestures' | 'ui'>>;\n private readonly gestureOpts: Required<NonNullable<StoryOptions['gestures']>>;\n private readonly uiOpts: Required<NonNullable<StoryOptions['ui']>>;\n private readonly items: PlayableItem[];\n\n private index: number;\n private destroyed = false;\n private switching = false;\n /** Geçiş sürerken gelen buton / klavye isteği — yok sayılmaz, geçiş bitince uygulanır (yalnızca sonuncusu). */\n private pendingNav: { dir: Dir; userInitiated: boolean } | null = null;\n private listOpen = false;\n private userHasStartedPlayback = false;\n private lastAdsIndex: number | null = null;\n private wheelAccum = 0;\n private lastNavAt = 0;\n private drag: { startY: number; startX: number; dy: number; active: boolean; id: number } | null = null;\n\n private readonly els: {\n viewport: HTMLElement;\n track: HTMLElement;\n panePrev: HTMLElement;\n paneCurrent: HTMLElement;\n paneNext: HTMLElement;\n overlay: HTMLElement;\n counter: HTMLElement;\n titleEl: HTMLElement;\n spotEl: HTMLElement;\n dots: HTMLElement;\n progressBar: HTMLElement;\n upBtn: HTMLButtonElement;\n downBtn: HTMLButtonElement;\n listBtn: HTMLButtonElement;\n panel: HTMLElement;\n grid: HTMLElement;\n };\n\n constructor(\n private readonly ctx: StoryPlayerContext,\n private readonly rawOptions: StoryOptions\n ) {\n this.options = { ...DEFAULTS, ...rawOptions };\n this.gestureOpts = {\n swipe: true,\n swipeThreshold: 0.12,\n wheel: true,\n wheelThreshold: 42,\n wheelCooldownMs: 620,\n keyboard: true,\n ...rawOptions.gestures,\n };\n this.uiOpts = { counter: true, title: true, spot: true, dots: true, progress: true, ...rawOptions.ui };\n this.items = Array.isArray(rawOptions.items) ? rawOptions.items : [];\n this.index = this.clamp(this.options.startIndex);\n\n this.els = this.buildDom();\n this.bindEvents();\n this.syncUi();\n this.preloadNeighbours();\n\n if (this.items.length) void this.loadItem(this.index, { isStart: true });\n }\n\n refreshLabels(): void {\n this.els.upBtn.setAttribute('aria-label', this.ctx.i18n.storyPrev);\n this.els.downBtn.setAttribute('aria-label', this.ctx.i18n.storyNext);\n this.els.listBtn.setAttribute('aria-label', this.ctx.i18n.storyAllVideos);\n this.renderList(this.els.grid);\n }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n\n this.ctx.videoEl.removeEventListener('ended', this.onEnded);\n this.ctx.videoEl.removeEventListener('playing', this.onPlaying);\n this.ctx.videoEl.removeEventListener('play', this.onFirstPlay);\n this.ctx.videoEl.removeEventListener('timeupdate', this.onTimeUpdate);\n this.els.viewport.removeEventListener('wheel', this.onWheel);\n this.els.viewport.removeEventListener('pointerdown', this.onPointerDown);\n window.removeEventListener('pointermove', this.onPointerMove);\n window.removeEventListener('pointerup', this.onPointerUp);\n document.removeEventListener('keydown', this.onKeyDown);\n\n // player gövdesini .video-area'ya geri taşı, story DOM'unu kaldır.\n this.ctx.playerBodyEls.forEach((el) => this.ctx.videoAreaEl.appendChild(el));\n this.ctx.videoAreaEl.removeAttribute('data-story');\n this.els.viewport.remove();\n this.els.panel.remove();\n }\n\n // ── public api ──\n\n next(userInitiated = true): void {\n if (this.switching) {\n this.pendingNav = { dir: 'next', userInitiated };\n return;\n }\n const target = this.index + 1;\n if (target >= this.items.length) {\n if (!this.options.loop) return;\n void this.goTo(0, 'next', userInitiated);\n return;\n }\n void this.goTo(target, 'next', userInitiated);\n }\n\n prev(userInitiated = true): void {\n if (this.switching) {\n this.pendingNav = { dir: 'prev', userInitiated };\n return;\n }\n const target = this.index - 1;\n if (target < 0) {\n if (!this.options.loop) return;\n void this.goTo(this.items.length - 1, 'prev', userInitiated);\n return;\n }\n void this.goTo(target, 'prev', userInitiated);\n }\n\n async goTo(target: number, direction: Dir | null = null, userInitiated = true): Promise<void> {\n if (this.destroyed || this.switching) return;\n const i = this.clamp(target);\n if (i === this.index) return;\n\n const dir = direction || (i > this.index ? 'next' : 'prev');\n this.switching = true;\n try {\n this.fillPane(dir, this.items[i]);\n await this.animate(dir);\n this.index = i;\n this.syncUi();\n await this.loadItem(i, { userInitiated });\n this.preloadNeighbours();\n } finally {\n this.switching = false;\n }\n // Hızlı art arda dokunuş (ör. iki kez \"önceki\"): ikincisi kaybolmasın — hedef şimdiki konumdan hesaplanır.\n const pending = this.pendingNav;\n this.pendingNav = null;\n if (pending && !this.destroyed) pending.dir === 'next' ? this.next(pending.userInitiated) : this.prev(pending.userInitiated);\n }\n\n toggleList(force?: boolean): void {\n this.listOpen = typeof force === 'boolean' ? force : !this.listOpen;\n this.els.panel.setAttribute('aria-hidden', this.listOpen ? 'false' : 'true');\n this.els.listBtn.setAttribute('aria-expanded', this.listOpen ? 'true' : 'false');\n // translate-x/-y utility yerine inline transform: Shadow DOM'da tek eksenli Tailwind translate 'none' oluyor.\n this.els.panel.style.transform = this.listOpen ? 'translateX(0)' : 'translateX(100%)';\n }\n\n // ── dom ──\n\n private buildDom() {\n this.ctx.videoAreaEl.setAttribute('data-story', '1');\n\n const viewport = document.createElement('div');\n viewport.className = 'hp:absolute hp:inset-0 hp:overflow-hidden hp:touch-none';\n viewport.setAttribute('tabindex', '0');\n\n const track = document.createElement('div');\n track.className = 'hp:relative hp:w-full';\n track.style.height = '300%';\n track.style.transform = 'translate3d(0,-33.3333%,0)';\n track.style.transition = `transform ${this.options.transitionMs}ms ease`;\n\n const panePrev = this.createPane();\n const paneCurrent = document.createElement('div');\n paneCurrent.className = 'hp:absolute hp:inset-x-0 hp:h-1/3';\n paneCurrent.style.top = '33.3333%';\n const paneNext = this.createPane();\n paneNext.style.top = '66.6667%';\n\n // Gerçek player gövdesini orta pane'e taşı.\n this.ctx.playerBodyEls.forEach((el) => paneCurrent.appendChild(el));\n\n track.append(panePrev, paneCurrent, paneNext);\n viewport.appendChild(track);\n\n const overlay = document.createElement('div');\n overlay.className = 'hp:absolute hp:inset-0 hp:z-20 hp:pointer-events-none hp:flex hp:flex-col hp:justify-between hp:p-3';\n\n const progressBar = document.createElement('div');\n progressBar.className = 'hp:h-0.5 hp:bg-white/30 hp:rounded-full hp:overflow-hidden';\n const progressFill = document.createElement('div');\n progressFill.className = 'hp:h-full hp:bg-accent hp:w-0';\n progressBar.appendChild(progressFill);\n\n const meta = document.createElement('div');\n meta.className = 'hp:flex hp:flex-col hp:gap-0.5 hp:text-white hp:drop-shadow hp:mt-2 hp:pointer-events-auto';\n const counter = document.createElement('span');\n counter.setAttribute('part', 'story-counter');\n counter.className = 'hp:text-xs hp:opacity-80';\n const titleEl = document.createElement('strong');\n titleEl.className = 'hp:text-sm';\n const spotEl = document.createElement('span');\n spotEl.className = 'hp:text-xs hp:opacity-80';\n meta.append(counter, titleEl, spotEl);\n\n const dots = document.createElement('div');\n dots.className = 'hp:absolute hp:right-2 hp:top-1/2 hp-center-y hp:flex hp:flex-col hp:gap-1 hp:pointer-events-none';\n\n const navWrap = document.createElement('div');\n navWrap.className = 'hp:flex hp:flex-col hp:gap-2 hp:self-end hp:pointer-events-auto hp:mb-16';\n const upBtn = this.navBtn('chevron-left', this.ctx.i18n.storyPrev);\n upBtn.style.transform = 'rotate(90deg)';\n const downBtn = this.navBtn('chevron-left', this.ctx.i18n.storyNext);\n downBtn.style.transform = 'rotate(-90deg)';\n navWrap.append(upBtn, downBtn);\n\n const listBtn = document.createElement('button');\n listBtn.type = 'button';\n listBtn.setAttribute('aria-label', this.ctx.i18n.storyAllVideos);\n listBtn.setAttribute('aria-expanded', 'false');\n // Konum tailwind.css `.hp-story-list-btn` — dar (dikey) player'da üst bara (ayarlar/PiP) taşınan butonların altında.\n listBtn.className =\n 'hp-story-list-btn hp:absolute hp:flex hp:items-center hp:justify-center hp:w-9 hp:h-9 hp:rounded-full ' +\n 'hp:bg-black/40 hp:text-white hp:border-0 hp:cursor-pointer hp:pointer-events-auto';\n listBtn.setAttribute('part', 'story-list-button');\n listBtn.appendChild(createIcon('grid', 'hp:text-base'));\n\n overlay.append(progressBar, meta, dots, navWrap, listBtn);\n\n const panel = document.createElement('aside');\n panel.className =\n 'hp:absolute hp:inset-y-0 hp:right-0 hp:w-72 hp:max-w-[80%] hp:bg-surface-elev hp:z-30 hp:overflow-y-auto hp:p-3 ' +\n 'hp:transition-transform hp:duration-300';\n panel.style.transform = 'translateX(100%)';\n panel.setAttribute('aria-hidden', 'true');\n const grid = document.createElement('div');\n grid.className = 'hp:flex hp:flex-col hp:gap-2 hp:mt-8';\n panel.appendChild(grid);\n\n this.ctx.videoAreaEl.append(viewport, overlay, panel);\n\n this.renderList(grid);\n\n return {\n viewport, track, panePrev, paneCurrent, paneNext, overlay,\n counter, titleEl, spotEl, dots, progressBar: progressFill,\n upBtn, downBtn, listBtn, panel, grid,\n };\n }\n\n private createPane(): HTMLElement {\n const pane = document.createElement('div');\n pane.className = 'hp:absolute hp:inset-x-0 hp:h-1/3 hp:bg-cover hp:bg-center hp:bg-black';\n return pane;\n }\n\n private navBtn(iconName: string, label: string): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.setAttribute('aria-label', label);\n btn.className =\n 'hp:flex hp:items-center hp:justify-center hp:w-8 hp:h-8 hp:rounded-full hp:bg-black/40 hp:text-white hp:border-0 hp:cursor-pointer';\n btn.appendChild(createIcon(iconName, 'hp:text-sm'));\n return btn;\n }\n\n private fillPane(dir: Dir, item: PlayableItem | undefined): void {\n const pane = dir === 'next' ? this.els.paneNext : this.els.panePrev;\n const img = item?.image || '';\n pane.style.backgroundImage = img ? `url(\"${img}\")` : 'none';\n }\n\n private animate(dir: Dir): Promise<void> {\n const track = this.els.track;\n return new Promise((resolve) => {\n let done = false;\n const finish = () => {\n if (done) return;\n done = true;\n track.removeEventListener('transitionend', finish);\n clearTimeout(timer);\n track.style.transition = 'none';\n track.style.transform = 'translate3d(0,-33.3333%,0)';\n void track.offsetHeight;\n track.style.transition = `transform ${this.options.transitionMs}ms ease`;\n resolve();\n };\n track.addEventListener('transitionend', finish);\n const timer = setTimeout(finish, this.options.transitionMs + 120);\n track.style.transform = dir === 'next' ? 'translate3d(0,-66.6667%,0)' : 'translate3d(0,0,0)';\n });\n }\n\n // ── source / playback ──\n\n private async loadItem(i: number, opts: { userInitiated?: boolean; isStart?: boolean } = {}): Promise<void> {\n const item = this.items[i];\n if (!item) return;\n\n const mode = this.resolveMode(item);\n const payload = this.buildPayload(item, mode);\n if (!payload) return;\n\n this.ctx.videoEl.pause();\n if (item.image) this.ctx.setPoster(item.image);\n await this.ctx.loadSource(payload.src, payload.type);\n\n if (this.options.adsOnItemChange && this.lastAdsIndex !== i) {\n this.lastAdsIndex = i;\n this.ctx.requestFreshAd(item.adTagPreroll || this.rawOptions.adTagPreroll);\n }\n\n if (this.shouldAutoPlay(opts)) {\n try {\n await this.ctx.videoEl.play();\n } catch {\n /* autoplay engellendi */\n }\n }\n }\n\n private shouldAutoPlay({ userInitiated, isStart }: { userInitiated?: boolean; isStart?: boolean }): boolean {\n if (isStart) return !!this.ctx.videoEl.autoplay;\n if (userInitiated) return true;\n return this.options.autoplayNext && this.userHasStartedPlayback;\n }\n\n private resolveMode(item: PlayableItem): 'hls' | 'mp4' {\n const hasHls = this.hasMode(item, 'hls');\n const hasMp4 = this.hasMode(item, 'mp4');\n if (this.options.preferHls) return hasHls ? 'hls' : hasMp4 ? 'mp4' : 'hls';\n return hasMp4 ? 'mp4' : hasHls ? 'hls' : 'mp4';\n }\n\n private hasMode(item: PlayableItem, mode: 'hls' | 'mp4'): boolean {\n return Array.isArray(item[mode]) && item[mode]!.some((v) => v?.src);\n }\n\n private buildPayload(item: PlayableItem, mode: 'hls' | 'mp4'): { src: string; type?: string } | null {\n const list = (item[mode] || []).filter((v) => v?.src);\n if (!list.length) return null;\n const src = mode === 'mp4' ? list.find((v) => v.selected) || list[0] : list[0];\n return { src: src!.src, type: src!.type || (mode === 'hls' ? 'application/x-mpegURL' : 'video/mp4') };\n }\n\n // ── preload ──\n\n private preloadNeighbours(): void {\n const nav = navigator as Navigator & { connection?: { saveData?: boolean } };\n if (nav.connection?.saveData) return;\n\n [this.wrapIndex(this.index + 1), this.wrapIndex(this.index - 1)].forEach((i) => {\n if (i === this.index) return;\n const item = this.items[i];\n if (item?.image) {\n const img = new Image();\n img.decoding = 'async';\n img.src = item.image;\n }\n });\n }\n\n // ── ui sync ──\n\n private syncUi(): void {\n const item = this.items[this.index];\n const total = this.items.length;\n\n if (this.uiOpts.counter) this.els.counter.textContent = `${this.index + 1} / ${total}`;\n if (this.uiOpts.title) this.els.titleEl.textContent = item?.title || '';\n if (this.uiOpts.spot) this.els.spotEl.textContent = item?.spot || '';\n\n this.fillPane('prev', this.items[this.wrapIndex(this.index - 1)]);\n this.fillPane('next', this.items[this.wrapIndex(this.index + 1)]);\n\n const atStart = !this.options.loop && this.index === 0;\n const atEnd = !this.options.loop && this.index === total - 1;\n this.els.upBtn.disabled = atStart;\n this.els.downBtn.disabled = atEnd;\n\n if (this.uiOpts.dots) {\n if (this.els.dots.children.length !== total) {\n this.els.dots.innerHTML = '';\n for (let i = 0; i < total; i++) {\n const dot = document.createElement('i');\n dot.className = 'hp:block hp:w-1 hp:h-1 hp:rounded-full hp:bg-white/40';\n this.els.dots.appendChild(dot);\n }\n }\n Array.from(this.els.dots.children).forEach((el, i) => {\n (el as HTMLElement).className = `hp:block hp:w-1 hp:h-1 hp:rounded-full ${i === this.index ? 'hp:bg-white' : 'hp:bg-white/40'}`;\n });\n }\n\n this.setActiveThumb();\n this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:itemchange', { detail: { index: this.index, source: 'story' } }));\n }\n\n private renderList(grid: HTMLElement): void {\n grid.innerHTML = '';\n this.items.forEach((item, i) => {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = 'hp:flex hp:items-center hp:gap-2 hp:w-full hp:p-1.5 hp:rounded hp:text-left hp:text-on-surface hp:bg-transparent hp:border-0 hp:cursor-pointer hp:hover:bg-on-surface/5';\n btn.dataset.index = String(i);\n if (item.image) {\n const img = document.createElement('img');\n img.src = item.image;\n img.loading = 'lazy';\n img.className = 'hp:w-14 hp:aspect-[9/16] hp:object-cover hp:rounded hp:shrink-0';\n btn.appendChild(img);\n }\n const title = document.createElement('span');\n title.className = 'hp:text-xs hp:truncate';\n title.textContent = item.title || this.ctx.i18n.videoFallbackTitle(i);\n btn.appendChild(title);\n btn.addEventListener('click', () => {\n this.toggleList(false);\n void this.goTo(i);\n });\n grid.appendChild(btn);\n });\n }\n\n private setActiveThumb(): void {\n Array.from(this.els.grid.children).forEach((el, i) => {\n el.classList.toggle('hp:bg-accent/15', i === this.index);\n });\n }\n\n // ── events ──\n\n private bindEvents(): void {\n this.ctx.videoEl.addEventListener('ended', this.onEnded);\n this.ctx.videoEl.addEventListener('playing', this.onPlaying);\n this.ctx.videoEl.addEventListener('play', this.onFirstPlay);\n if (this.uiOpts.progress) this.ctx.videoEl.addEventListener('timeupdate', this.onTimeUpdate);\n\n this.els.upBtn.addEventListener('click', () => this.prev());\n this.els.downBtn.addEventListener('click', () => this.next());\n this.els.listBtn.addEventListener('click', () => this.toggleList());\n\n this.els.grid.parentElement?.addEventListener('keydown', (e) => {\n if ((e as KeyboardEvent).key === 'Escape') this.toggleList(false);\n });\n\n if (this.gestureOpts.wheel) this.els.viewport.addEventListener('wheel', this.onWheel, { passive: false });\n if (this.gestureOpts.swipe) {\n this.els.viewport.addEventListener('pointerdown', this.onPointerDown);\n window.addEventListener('pointermove', this.onPointerMove, { passive: false });\n window.addEventListener('pointerup', this.onPointerUp);\n }\n if (this.gestureOpts.keyboard) document.addEventListener('keydown', this.onKeyDown);\n }\n\n private readonly onEnded = (): void => {\n if (!this.options.autoplayNext) return;\n if (!this.options.loop && this.index === this.items.length - 1) return;\n this.next(false);\n };\n\n private readonly onPlaying = (): void => {};\n\n private readonly onFirstPlay = (): void => {\n this.userHasStartedPlayback = true;\n };\n\n private readonly onTimeUpdate = (): void => {\n const dur = this.ctx.videoEl.duration || 0;\n const cur = this.ctx.videoEl.currentTime || 0;\n this.els.progressBar.style.width = dur > 0 ? `${Math.min(100, (cur / dur) * 100)}%` : '0%';\n };\n\n private readonly onWheel = (e: WheelEvent): void => {\n if (this.switching) {\n e.preventDefault();\n return;\n }\n const dir: Dir = e.deltaY > 0 ? 'next' : 'prev';\n if (!this.canGo(dir)) return;\n e.preventDefault();\n\n const now = Date.now();\n if (now - this.lastNavAt < this.gestureOpts.wheelCooldownMs) return;\n this.wheelAccum += e.deltaY;\n if (Math.abs(this.wheelAccum) < this.gestureOpts.wheelThreshold) return;\n this.wheelAccum = 0;\n this.lastNavAt = now;\n dir === 'next' ? this.next() : this.prev();\n };\n\n private readonly onPointerDown = (e: PointerEvent): void => {\n if (this.switching || this.listOpen) return;\n if (e.pointerType === 'mouse' && e.button !== 0) return;\n this.drag = { startY: e.clientY, startX: e.clientX, dy: 0, active: false, id: e.pointerId };\n };\n\n private readonly onPointerMove = (e: PointerEvent): void => {\n const drag = this.drag;\n if (!drag || e.pointerId !== drag.id) return;\n const dy = e.clientY - drag.startY;\n const dx = e.clientX - drag.startX;\n\n if (!drag.active) {\n if (Math.abs(dy) < 10 || Math.abs(dy) < Math.abs(dx)) return;\n drag.active = true;\n this.els.track.style.transition = 'none';\n }\n e.preventDefault();\n\n const h = this.els.viewport.clientHeight || 1;\n const resisted = this.canGo(dy < 0 ? 'next' : 'prev') ? dy : dy * 0.25;\n drag.dy = resisted;\n\n const pct = -33.3333 + (resisted / h) * 33.3333;\n this.els.track.style.transform = `translate3d(0, ${pct}%, 0)`;\n };\n\n private readonly onPointerUp = (): void => {\n const drag = this.drag;\n this.drag = null;\n if (!drag?.active) return;\n\n const h = this.els.viewport.clientHeight || 1;\n const ratio = Math.abs(drag.dy) / h;\n const dir: Dir = drag.dy < 0 ? 'next' : 'prev';\n\n this.els.track.style.transition = `transform ${this.options.transitionMs}ms ease`;\n if (ratio >= this.gestureOpts.swipeThreshold && this.canGo(dir)) {\n this.els.track.style.transform = 'translate3d(0,-33.3333%,0)';\n dir === 'next' ? this.next() : this.prev();\n } else {\n this.els.track.style.transform = 'translate3d(0,-33.3333%,0)';\n }\n };\n\n private readonly onKeyDown = (e: KeyboardEvent): void => {\n if (this.destroyed) return;\n if (e.key === 'Escape' && this.listOpen) {\n this.toggleList(false);\n return;\n }\n const tag = document.activeElement?.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA') return;\n if (!this.isInViewport()) return;\n\n if (e.key === 'ArrowDown' || e.key === 'PageDown' || e.key === 'j') {\n e.preventDefault();\n this.next();\n } else if (e.key === 'ArrowUp' || e.key === 'PageUp' || e.key === 'k') {\n e.preventDefault();\n this.prev();\n }\n };\n\n // ── helpers ──\n\n private canGo(dir: Dir): boolean {\n if (this.options.loop) return this.items.length > 1;\n return dir === 'next' ? this.index < this.items.length - 1 : this.index > 0;\n }\n\n private isInViewport(): boolean {\n const r = this.ctx.hostEl.getBoundingClientRect();\n return r.bottom > 0 && r.top < (window.innerHeight || 0);\n }\n\n private clamp(i: number): number {\n if (!Number.isFinite(i) || !this.items.length) return 0;\n return Math.max(0, Math.min(this.items.length - 1, Math.trunc(i)));\n }\n\n private wrapIndex(i: number): number {\n const n = this.items.length;\n if (!n) return 0;\n if (this.options.loop) return ((i % n) + n) % n;\n return this.clamp(i);\n }\n}\n","import { HopeStory, type StoryPlayerContext } from './HopeStory';\nimport type { StoryOptions } from '../../types';\n\nexport function installStory(ctx: StoryPlayerContext, options: StoryOptions): HopeStory {\n return new HopeStory(ctx, options);\n}\n\nexport { HopeStory };\nexport type { StoryPlayerContext };\n"],"names":["DEFAULTS","HopeStory","ctx","rawOptions","__publicField","dur","cur","e","dir","now","drag","dy","dx","h","resisted","pct","ratio","tag","_a","el","userInitiated","target","direction","pending","force","viewport","track","panePrev","paneCurrent","paneNext","overlay","progressBar","progressFill","meta","counter","titleEl","spotEl","dots","navWrap","upBtn","downBtn","listBtn","createIcon","panel","grid","pane","iconName","label","btn","item","img","resolve","done","finish","timer","i","opts","mode","payload","isStart","hasHls","hasMp4","v","list","src","total","atStart","atEnd","dot","title","r","n","installStory","options"],"mappings":"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"}
@@ -1,16 +1,35 @@
1
1
  var d = Object.defineProperty;
2
2
  var u = (p, t, s) => t in p ? d(p, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : p[t] = s;
3
3
  var r = (p, t, s) => u(p, typeof t != "symbol" ? t + "" : t, s);
4
- import { c as m, t as x, f } from "./player-D2_HRzot.js";
5
- import { a as b } from "./plugin-style-CPJELe-i.js";
6
- const v = ".hp-transcript{position:absolute;top:12px;bottom:76px;z-index:24;display:flex;flex-direction:column;width:min(340px,45%);overflow:hidden;border:1px solid var(--hp-panel-border);border-radius:12px;background:var(--hp-panel-bg);backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);color:var(--hp-panel-text);box-shadow:0 8px 28px #00000059;font:13px/1.45 system-ui,-apple-system,sans-serif;transition:bottom .2s ease}.hp-transcript[hidden],.hp-transcript[data-ad],.hp-transcript [hidden]{display:none}.hp-transcript[data-position=right]{right:12px}.hp-transcript[data-position=left]{left:12px}.video-area[data-chrome-hidden] .hp-transcript{bottom:12px}.video-area[data-compact] .hp-transcript{top:8px;bottom:56px;left:8px;right:8px;width:auto}.video-area[data-compact][data-chrome-hidden] .hp-transcript{bottom:8px}.hp-transcript-head{display:flex;align-items:center;gap:8px;padding:10px 10px 6px 14px}.hp-transcript-title{flex:1;font-weight:600;font-size:14px}.hp-transcript-select,.hp-transcript-search{border:1px solid var(--hp-panel-border);border-radius:8px;background:color-mix(in srgb,var(--hp-panel-text) 8%,transparent);color:inherit;font:inherit}.hp-transcript-select{max-width:45%;padding:3px 6px;font-size:12px}.hp-transcript-select option{color:#000}.hp-transcript-close{display:grid;place-items:center;flex:none;width:26px;height:26px;padding:0;border:0;border-radius:999px;background:transparent;color:inherit;font-size:13px;cursor:pointer}.hp-transcript-close:hover{background:color-mix(in srgb,var(--hp-panel-text) 14%,transparent)}.hp-transcript-search{margin:0 10px 8px;padding:6px 10px;outline:none}.hp-transcript-search:focus-visible,.hp-transcript-select:focus-visible,.hp-transcript-close:focus-visible,.hp-transcript-line button:focus-visible{outline:2px solid var(--hp-panel-text);outline-offset:-2px}.hp-transcript-list{position:relative;flex:1;margin:0;padding:0 6px 8px;overflow-y:auto;overscroll-behavior:contain;list-style:none}.hp-transcript-line button{display:flex;gap:10px;width:100%;padding:6px 8px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;text-align:start;cursor:pointer}.hp-transcript-line button:hover{background:color-mix(in srgb,var(--hp-panel-text) 10%,transparent)}.hp-transcript-line[data-active] button{background:color-mix(in srgb,var(--hp-panel-text) 16%,transparent);font-weight:500}.hp-transcript-time{flex:none;min-width:3.2em;padding-top:1px;color:var(--hp-panel-text-muted, var(--hp-panel-text));font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.hp-transcript-text mark{border-radius:3px;background:color-mix(in srgb,var(--hp-panel-text) 24%,transparent);color:inherit}.hp-transcript-status{margin:0;padding:4px 14px 14px;opacity:.7;font-size:12px}.hp-transcript-btn[aria-pressed=true]{color:var(--hp-color-accent, #fff)}@media(prefers-reduced-motion:reduce){.hp-transcript{transition:none}}", g = { "&amp;": "&", "&lt;": "<", "&gt;": ">", "&nbsp;": " ", "&quot;": '"', "&#39;": "'" };
7
- function E(p) {
8
- return p.replace(/<[^>]*>/g, "").replace(/&(amp|lt|gt|nbsp|quot|#39);/g, (t) => g[t] ?? t).replace(/\s+/g, " ").trim();
4
+ import { c as m, t as x, f, r as b } from "./player-B7mYS--8.js";
5
+ import { a as v } from "./plugin-style-CPJELe-i.js";
6
+ const g = {
7
+ tr: {
8
+ transcript: "Transkript",
9
+ transcriptSearch: "Transkriptte ara",
10
+ transcriptClose: "Transkripti kapat",
11
+ transcriptTrack: "Transkript dili",
12
+ transcriptEmpty: "Bu video için altyazı yok.",
13
+ transcriptNoResults: "Sonuç bulunamadı.",
14
+ transcriptWaiting: "Altyazılar yükleniyor…"
15
+ },
16
+ en: {
17
+ transcript: "Transcript",
18
+ transcriptSearch: "Search transcript",
19
+ transcriptClose: "Close transcript",
20
+ transcriptTrack: "Transcript language",
21
+ transcriptEmpty: "No captions for this video.",
22
+ transcriptNoResults: "No results.",
23
+ transcriptWaiting: "Loading captions…"
24
+ }
25
+ }, E = ".hp-transcript{position:absolute;top:12px;bottom:76px;z-index:24;display:flex;flex-direction:column;width:min(340px,45%);overflow:hidden;border:1px solid var(--hp-panel-border);border-radius:12px;background:var(--hp-panel-bg);backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);color:var(--hp-panel-text);box-shadow:0 8px 28px #00000059;font:13px/1.45 system-ui,-apple-system,sans-serif;transition:bottom .2s ease}.hp-transcript[hidden],.hp-transcript[data-ad],.hp-transcript [hidden]{display:none}.hp-transcript[data-position=right]{right:12px}.hp-transcript[data-position=left]{left:12px}.video-area[data-chrome-hidden] .hp-transcript{bottom:12px}.video-area[data-compact] .hp-transcript{top:8px;bottom:56px;left:8px;right:8px;width:auto}.video-area[data-compact][data-chrome-hidden] .hp-transcript{bottom:8px}.hp-transcript-head{display:flex;align-items:center;gap:8px;padding:10px 10px 6px 14px}.hp-transcript-title{flex:1;font-weight:600;font-size:14px}.hp-transcript-select,.hp-transcript-search{border:1px solid var(--hp-panel-border);border-radius:8px;background:color-mix(in srgb,var(--hp-panel-text) 8%,transparent);color:inherit;font:inherit}.hp-transcript-select{max-width:45%;padding:3px 6px;font-size:12px}.hp-transcript-select option{color:#000}.hp-transcript-close{display:grid;place-items:center;flex:none;width:26px;height:26px;padding:0;border:0;border-radius:999px;background:transparent;color:inherit;font-size:13px;cursor:pointer}.hp-transcript-close:hover{background:color-mix(in srgb,var(--hp-panel-text) 14%,transparent)}.hp-transcript-search{margin:0 10px 8px;padding:6px 10px;outline:none}.hp-transcript-search:focus-visible,.hp-transcript-select:focus-visible,.hp-transcript-close:focus-visible,.hp-transcript-line button:focus-visible{outline:2px solid var(--hp-panel-text);outline-offset:-2px}.hp-transcript-list{position:relative;flex:1;margin:0;padding:0 6px 8px;overflow-y:auto;overscroll-behavior:contain;list-style:none}.hp-transcript-line button{display:flex;gap:10px;width:100%;padding:6px 8px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;text-align:start;cursor:pointer}.hp-transcript-line button:hover{background:color-mix(in srgb,var(--hp-panel-text) 10%,transparent)}.hp-transcript-line[data-active] button{background:color-mix(in srgb,var(--hp-panel-text) 16%,transparent);font-weight:500}.hp-transcript-time{flex:none;min-width:3.2em;padding-top:1px;color:var(--hp-panel-text-muted, var(--hp-panel-text));font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.hp-transcript-text mark{border-radius:3px;background:color-mix(in srgb,var(--hp-panel-text) 24%,transparent);color:inherit}.hp-transcript-status{margin:0;padding:4px 14px 14px;opacity:.7;font-size:12px}.hp-transcript-btn[aria-pressed=true]{color:var(--hp-color-accent, #fff)}@media(prefers-reduced-motion:reduce){.hp-transcript{transition:none}}", k = { "&amp;": "&", "&lt;": "<", "&gt;": ">", "&nbsp;": " ", "&quot;": '"', "&#39;": "'" };
26
+ function T(p) {
27
+ return p.replace(/<[^>]*>/g, "").replace(/&(amp|lt|gt|nbsp|quot|#39);/g, (t) => k[t] ?? t).replace(/\s+/g, " ").trim();
9
28
  }
10
29
  function h(p) {
11
30
  return p.toLocaleLowerCase("tr").normalize("NFD").replace(/[̀-ͯ]/g, "");
12
31
  }
13
- class k {
32
+ class y {
14
33
  constructor(t, s) {
15
34
  r(this, "panel");
16
35
  r(this, "list");
@@ -62,7 +81,7 @@ class k {
62
81
  const n = (o = this.lines[e]) == null ? void 0 : o.row;
63
82
  n == null || n.setAttribute("data-active", ""), (c = n == null ? void 0 : n.firstElementChild) == null || c.setAttribute("aria-current", "true"), this.scrollToActive(!1);
64
83
  });
65
- this.ctx = t, this.options = s, this.autoScroll = s.autoScroll !== !1, b(t.overlayEl, "transcript", v);
84
+ this.ctx = t, this.options = s, this.autoScroll = s.autoScroll !== !1, v(t.overlayEl, "transcript", E);
66
85
  const e = document.createElement("aside");
67
86
  e.className = "hp-transcript", e.setAttribute("part", "transcript"), e.setAttribute("data-position", s.position === "left" ? "left" : "right"), e.hidden = !0;
68
87
  const n = document.createElement("div");
@@ -118,7 +137,7 @@ class k {
118
137
  this.cueCount = s;
119
138
  const e = (t ?? []).slice().sort((i, a) => i.start - a.start), n = [];
120
139
  for (const i of e) {
121
- const a = E(i.text);
140
+ const a = T(i.text);
122
141
  if (!a) continue;
123
142
  const o = n[n.length - 1];
124
143
  if (o && o.text === a) {
@@ -176,11 +195,12 @@ class k {
176
195
  this.ctx.getTracks().length ? this.lines.length ? t || (e = s.transcriptNoResults) : e = s.transcriptWaiting : e = s.transcriptEmpty, this.status.textContent = e, this.status.hidden = !e;
177
196
  }
178
197
  }
179
- function w(p, t) {
180
- return new k(p, t);
198
+ b(g);
199
+ function A(p, t) {
200
+ return new y(p, t);
181
201
  }
182
202
  export {
183
- k as Transcript,
184
- w as installTranscript
203
+ y as Transcript,
204
+ A as installTranscript
185
205
  };
186
- //# sourceMappingURL=transcript-LG7E9UYE.js.map
206
+ //# sourceMappingURL=transcript-CHPQ6S6E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-CHPQ6S6E.js","sources":["../../src/plugins/transcript/strings.ts","../../src/plugins/transcript/Transcript.ts","../../src/plugins/transcript/index.ts"],"sourcesContent":["// Bu eklentinin metinleri — ana pakete girmez, eklenti yüklenince sözlüğe eklenir (bkz. i18n/index.ts).\nimport type { HopeLocaleStrings } from '../../i18n/types';\n\ntype Strings = Pick<HopeLocaleStrings, 'transcript' | 'transcriptSearch' | 'transcriptClose' | 'transcriptTrack' | 'transcriptEmpty' | 'transcriptNoResults' | 'transcriptWaiting'>;\n\nexport const strings: { tr: Strings; en: Strings } = {\n tr: {\n transcript: 'Transkript',\n transcriptSearch: 'Transkriptte ara',\n transcriptClose: 'Transkripti kapat',\n transcriptTrack: 'Transkript dili',\n transcriptEmpty: 'Bu video için altyazı yok.',\n transcriptNoResults: 'Sonuç bulunamadı.',\n transcriptWaiting: 'Altyazılar yükleniyor…',\n },\n en: {\n transcript: 'Transcript',\n transcriptSearch: 'Search transcript',\n transcriptClose: 'Close transcript',\n transcriptTrack: 'Transcript language',\n transcriptEmpty: 'No captions for this video.',\n transcriptNoResults: 'No results.',\n transcriptWaiting: 'Loading captions…',\n },\n};\n","import type { TranscriptOptions } from '../../types';\nimport type { HopeLocaleStrings } from '../../i18n/types';\nimport { createIcon } from '../../icons/Icon';\nimport { formatTime } from '../../utils/format-time';\nimport { trackCues } from '../../subtitles/attachTracks';\nimport { adoptStyle } from '../../utils/plugin-style';\nimport css from './transcript.css?inline';\n\nexport interface TranscriptPlayerContext {\n hostEl: HTMLElement;\n videoEl: HTMLVideoElement;\n overlayEl: HTMLElement;\n i18n: HopeLocaleStrings;\n /** Altyazı menüsündeki izler (dosya + yayın). */\n getTracks(): { label: string; track: TextTrack }[];\n /** Seçili altyazının adı (kapalıysa null). */\n activeLabel(): string | null;\n addButton(label: string, iconName: string, onClick: () => void): { btn: HTMLButtonElement; icon: HTMLElement };\n}\n\ninterface Line {\n start: number;\n end: number;\n text: string;\n row: HTMLLIElement;\n textEl: HTMLSpanElement;\n}\n\nconst ENTITIES: Record<string, string> = { '&amp;': '&', '&lt;': '<', '&gt;': '>', '&nbsp;': ' ', '&quot;': '\"', '&#39;': \"'\" };\n\n/** VTT etiketlerini (<v Ad>, <b>, <c.renk>, zaman damgası) atar, satırları birleştirir. */\nfunction cleanCueText(raw: string): string {\n return raw\n .replace(/<[^>]*>/g, '')\n .replace(/&(amp|lt|gt|nbsp|quot|#39);/g, (m) => ENTITIES[m] ?? m)\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n/** Arama için harf/aksan duyarsız biçim (İ/ı dahil). */\nfunction fold(s: string): string {\n return s.toLocaleLowerCase('tr').normalize('NFD').replace(/[̀-ͯ]/g, '');\n}\n\n/**\n * Transkript paneli: seçili (ya da `track`) altyazı izinin tüm satırları; tıklayınca o ana gider, oynayan satır\n * vurgulanır ve görünür tutulur, aranabilir. Dosyadan gelen altyazılar iz kapalıyken de okunur; yayın içi izler\n * (HLS / DASH) yalnızca açıkken dolar.\n */\nexport class Transcript {\n private readonly panel: HTMLElement;\n private readonly list: HTMLOListElement;\n private readonly status: HTMLParagraphElement;\n private readonly select: HTMLSelectElement;\n private readonly search: HTMLInputElement | null = null;\n private readonly titleEl: HTMLSpanElement;\n private readonly closeBtn: HTMLButtonElement;\n private button: HTMLButtonElement | null = null;\n private lines: Line[] = [];\n private activeIndex = -1;\n private sourceLabel: string | null = null;\n private sourceTrack: TextTrack | null = null;\n private cueCount = -1;\n private query = '';\n private open = false;\n private userScrollUntil = 0;\n private lastSync = 0;\n private readonly autoScroll: boolean;\n\n constructor(\n private readonly ctx: TranscriptPlayerContext,\n private readonly options: TranscriptOptions\n ) {\n this.autoScroll = options.autoScroll !== false;\n adoptStyle(ctx.overlayEl, 'transcript', css);\n const panel = document.createElement('aside');\n panel.className = 'hp-transcript';\n panel.setAttribute('part', 'transcript');\n panel.setAttribute('data-position', options.position === 'left' ? 'left' : 'right');\n panel.hidden = true;\n\n const head = document.createElement('div');\n head.className = 'hp-transcript-head';\n this.titleEl = document.createElement('span');\n this.titleEl.className = 'hp-transcript-title';\n this.select = document.createElement('select');\n this.select.className = 'hp-transcript-select';\n this.select.addEventListener('change', () => {\n this.sourceLabel = this.select.value;\n this.load();\n });\n this.closeBtn = document.createElement('button');\n this.closeBtn.type = 'button';\n this.closeBtn.className = 'hp-transcript-close';\n this.closeBtn.appendChild(createIcon('close'));\n this.closeBtn.addEventListener('click', () => this.setOpen(false));\n head.append(this.titleEl, this.select, this.closeBtn);\n panel.appendChild(head);\n\n if (options.search !== false) {\n const search = document.createElement('input');\n search.type = 'search';\n search.className = 'hp-transcript-search';\n search.addEventListener('input', () => {\n this.query = search.value;\n this.applyFilter();\n });\n this.search = search;\n panel.appendChild(search);\n }\n\n this.list = document.createElement('ol');\n this.list.className = 'hp-transcript-list';\n // Kullanıcı kaydırırken otomatik kaydırma birkaç saniye durur.\n for (const ev of ['wheel', 'touchmove'] as const) {\n this.list.addEventListener(ev, () => (this.userScrollUntil = performance.now() + 4000), { passive: true });\n }\n this.status = document.createElement('p');\n this.status.className = 'hp-transcript-status';\n this.status.setAttribute('aria-live', 'polite');\n panel.append(this.list, this.status);\n\n // Panel içindeki tıklama / yazma oynatıcıya (oynat-duraklat, kısayollar) gitmesin.\n for (const ev of ['pointerdown', 'click', 'dblclick'] as const) panel.addEventListener(ev, (e) => e.stopPropagation());\n panel.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n this.setOpen(false);\n this.button?.focus();\n }\n e.stopPropagation();\n });\n ctx.overlayEl.appendChild(panel);\n this.panel = panel;\n\n if (options.button !== false) {\n const { btn } = ctx.addButton(ctx.i18n.transcript, 'transcript', () => this.setOpen(!this.open));\n btn.classList.add('hp-transcript-btn');\n btn.setAttribute('aria-pressed', 'false');\n this.button = btn;\n }\n\n this.refreshLabels();\n ctx.videoEl.addEventListener('timeupdate', this.onTimeUpdate);\n ctx.videoEl.addEventListener('seeked', this.onTimeUpdate);\n ctx.videoEl.addEventListener('hp-internal:subtitle-loaded', this.onTracksChanged);\n ctx.hostEl.addEventListener('hp:adstart', this.onAd);\n ctx.hostEl.addEventListener('hp:adend', this.onAd);\n this.onTracksChanged();\n if (options.open) this.setOpen(true, false);\n }\n\n get isOpen(): boolean {\n return this.open;\n }\n\n setOpen(open: boolean, emit = true): void {\n if (open === this.open) return;\n this.open = open;\n this.panel.hidden = !open;\n this.button?.setAttribute('aria-pressed', String(open));\n this.ctx.overlayEl.toggleAttribute('data-transcript-open', open);\n if (open) {\n this.onTracksChanged();\n this.scrollToActive(true);\n }\n if (emit) this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:transcript', { detail: { state: open ? 'open' : 'close' } }));\n }\n\n /** Altyazı listesi / seçimi değişti — kaynak iz yeniden seçilir. */\n readonly onTracksChanged = (): void => {\n const tracks = this.ctx.getTracks();\n const prev = this.select.value;\n this.select.replaceChildren(\n ...tracks.map((t) => {\n const o = document.createElement('option');\n o.value = o.textContent = t.label;\n return o;\n })\n );\n this.select.hidden = tracks.length < 2;\n const want = this.options.track;\n const byOption = want ? tracks.find((t) => t.label === want || t.track.language === want) : undefined;\n const keep = this.sourceLabel ? tracks.find((t) => t.label === this.sourceLabel) : undefined;\n const active = this.ctx.activeLabel();\n const pick = keep ?? (active ? tracks.find((t) => t.label === active) : undefined) ?? byOption ?? tracks[0];\n if (pick) this.select.value = pick.label;\n if (pick?.track !== this.sourceTrack || prev !== this.select.value || this.cueCount < 0) this.load();\n else this.syncCues();\n };\n\n refreshLabels(): void {\n const i18n = this.ctx.i18n;\n this.titleEl.textContent = i18n.transcript;\n this.panel.setAttribute('aria-label', i18n.transcript);\n this.select.setAttribute('aria-label', i18n.transcriptTrack);\n this.closeBtn.setAttribute('aria-label', i18n.transcriptClose);\n if (this.search) {\n this.search.placeholder = i18n.transcriptSearch;\n this.search.setAttribute('aria-label', i18n.transcriptSearch);\n }\n this.button?.setAttribute('aria-label', i18n.transcript);\n this.updateStatus();\n }\n\n destroy(): void {\n const v = this.ctx.videoEl;\n v.removeEventListener('timeupdate', this.onTimeUpdate);\n v.removeEventListener('seeked', this.onTimeUpdate);\n v.removeEventListener('hp-internal:subtitle-loaded', this.onTracksChanged);\n this.ctx.hostEl.removeEventListener('hp:adstart', this.onAd);\n this.ctx.hostEl.removeEventListener('hp:adend', this.onAd);\n this.ctx.overlayEl.removeAttribute('data-transcript-open');\n this.panel.remove();\n this.button?.remove();\n }\n\n private readonly onAd = (e: Event): void => {\n this.panel.toggleAttribute('data-ad', e.type === 'hp:adstart');\n };\n\n /** Seçili izin cue'larını baştan kurar. */\n private load(): void {\n const label = this.select.value || null;\n this.sourceTrack = this.ctx.getTracks().find((t) => t.label === label)?.track ?? null;\n this.cueCount = -1;\n this.syncCues();\n }\n\n /** Cue sayısı değiştiyse (yayın izi parça parça dolar) satırları yeniden çizer. */\n private syncCues(): void {\n const cues = this.sourceTrack ? trackCues(this.sourceTrack) : null;\n const count = cues?.length ?? 0;\n if (count === this.cueCount) return;\n this.cueCount = count;\n const sorted = (cues ?? []).slice().sort((a, b) => a.start - b.start);\n const lines: Line[] = [];\n for (const c of sorted) {\n const text = cleanCueText(c.text);\n if (!text) continue;\n // Kayan (roll-up) altyazılarda aynı satır art arda tekrar eder — birleştir.\n const last = lines[lines.length - 1];\n if (last && last.text === text) {\n last.end = Math.max(last.end, c.end);\n continue;\n }\n lines.push(this.buildLine(c.start, c.end, text));\n }\n this.lines = lines;\n this.activeIndex = -1;\n this.list.replaceChildren(...lines.map((l) => l.row));\n this.applyFilter();\n this.onTimeUpdate();\n }\n\n private buildLine(start: number, end: number, text: string): Line {\n const row = document.createElement('li');\n row.className = 'hp-transcript-line';\n const btn = document.createElement('button');\n btn.type = 'button';\n const time = document.createElement('span');\n time.className = 'hp-transcript-time';\n time.textContent = formatTime(start);\n const textEl = document.createElement('span');\n textEl.className = 'hp-transcript-text';\n textEl.textContent = text;\n btn.append(time, textEl);\n btn.addEventListener('click', () => {\n const v = this.ctx.videoEl;\n v.currentTime = start;\n this.userScrollUntil = 0;\n this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:transcript', { detail: { state: 'seek', time: start } }));\n });\n row.appendChild(btn);\n return { start, end, text, row, textEl };\n }\n\n private readonly onTimeUpdate = (): void => {\n // Yayın izleri oynarken dolar — saniyede bir bakılır.\n const now = performance.now();\n if (this.sourceTrack && this.cueCount >= 0 && now - this.lastSync > 1000) {\n this.lastSync = now;\n this.syncCues();\n }\n const t = this.ctx.videoEl.currentTime;\n let index = -1;\n for (let i = 0; i < this.lines.length; i++) {\n if (this.lines[i]!.start > t) break;\n index = i;\n }\n // Satırlar arası boşlukta son satır vurgulu kalır; satırın bitişinden 3 sn sonra söner.\n if (index >= 0 && t > this.lines[index]!.end + 3) index = -1;\n if (index === this.activeIndex) return;\n if (this.activeIndex >= 0) {\n const prev = this.lines[this.activeIndex]?.row;\n prev?.removeAttribute('data-active');\n prev?.firstElementChild?.removeAttribute('aria-current');\n }\n this.activeIndex = index;\n const row = this.lines[index]?.row;\n row?.setAttribute('data-active', '');\n row?.firstElementChild?.setAttribute('aria-current', 'true');\n this.scrollToActive(false);\n };\n\n private scrollToActive(force: boolean): void {\n if (!this.open || (!force && (!this.autoScroll || performance.now() < this.userScrollUntil))) return;\n const row = this.lines[this.activeIndex]?.row;\n if (!row || row.hidden) return;\n // scrollIntoView sayfayı da kaydırır — yalnızca listeyi kaydır.\n const list = this.list;\n const top = row.offsetTop - list.offsetTop;\n if (force || top < list.scrollTop || top + row.offsetHeight > list.scrollTop + list.clientHeight) {\n list.scrollTop = Math.max(0, top - list.clientHeight / 3);\n }\n }\n\n /** Arama: eşleşmeyen satırlar gizlenir, eşleşen kısım <mark> ile vurgulanır. */\n private applyFilter(): void {\n const q = fold(this.query.trim());\n let shown = 0;\n for (const line of this.lines) {\n if (!q) {\n line.row.hidden = false;\n line.textEl.textContent = line.text;\n shown++;\n continue;\n }\n const at = fold(line.text).indexOf(q);\n line.row.hidden = at < 0;\n if (at < 0) continue;\n shown++;\n // fold() uzunluğu değiştirmeyen harflerde konum aynıdır; değiştiyse vurgusuz göster.\n if (fold(line.text).length !== line.text.length) {\n line.textEl.textContent = line.text;\n continue;\n }\n const mark = document.createElement('mark');\n mark.textContent = line.text.slice(at, at + q.length);\n line.textEl.replaceChildren(line.text.slice(0, at), mark, line.text.slice(at + q.length));\n }\n this.updateStatus(shown);\n }\n\n private updateStatus(shown = this.lines.filter((l) => !l.row.hidden).length): void {\n const i18n = this.ctx.i18n;\n let msg = '';\n if (!this.ctx.getTracks().length) msg = i18n.transcriptEmpty;\n else if (!this.lines.length) msg = i18n.transcriptWaiting;\n else if (!shown) msg = i18n.transcriptNoResults;\n this.status.textContent = msg;\n this.status.hidden = !msg;\n }\n}\n","import { registerLocaleStrings } from '../../i18n';\nimport { strings } from './strings';\nimport { Transcript, type TranscriptPlayerContext } from './Transcript';\nimport type { TranscriptOptions } from '../../types';\n\nregisterLocaleStrings(strings);\n\nexport function installTranscript(ctx: TranscriptPlayerContext, options: TranscriptOptions): Transcript {\n return new Transcript(ctx, options);\n}\n\nexport { Transcript };\nexport type { TranscriptPlayerContext };\n"],"names":["strings","ENTITIES","cleanCueText","raw","m","fold","s","Transcript","ctx","options","__publicField","tracks","prev","t","o","want","byOption","keep","active","pick","e","now","index","i","_a","_b","row","_c","_d","adoptStyle","css","panel","head","createIcon","search","ev","btn","open","emit","i18n","v","label","cues","trackCues","count","sorted","a","b","lines","c","text","last","l","start","end","time","formatTime","textEl","force","list","top","q","shown","line","at","mark","msg","registerLocaleStrings","installTranscript"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SeekBar.d.ts","sourceRoot":"","sources":["../../src/controls/SeekBar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SeekBar.d.ts","sourceRoot":"","sources":["../../src/controls/SeekBar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAIvD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAeD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,qBAAa,OAAO;IAChB,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAsB;IACtC,oIAAoI;IACpI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,KAAK,CAAuB;gBAExB,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB;IA6E9D,8GAA8G;IAC9G,gBAAgB,UAAS;IACzB;;;OAGG;IACH,UAAU,EAAE,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAQ;IAEhD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAehB,6FAA6F;IAC7F,OAAO,CAAC,UAAU;IAIlB,yGAAyG;IACzG,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAMzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAoC1B;IAEF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAI3B;IAEF,OAAO,CAAC,cAAc;IAItB,gKAAgK;IAChK,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAiBvC,qEAAqE;IACrE,OAAO,CAAC,QAAQ;IAQhB,6FAA6F;IAC7F,WAAW,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,cAAc,EAAE;IA+B5D,aAAa,IAAI,IAAI;IAQrB;;;;OAIG;IACH,8GAA8G;IAC9G,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAO5B;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAG5B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAK1B;IAEF,uGAAuG;IACvG,YAAY,SAAK;IACjB,sFAAsF;IACtF,cAAc,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAExD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAaxB;IAEF,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAOxB;IAEF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAMvB;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAgDrB;IAEF,6GAA6G;IAC7G,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,SAAK,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc;IAczE,yGAAyG;IACzG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7C,OAAO,CAAC,QAAQ;IAkBhB,YAAY,IAAI,IAAI;IAKpB,aAAa,IAAI,IAAI;IAIrB,OAAO,IAAI,IAAI;CAclB"}
@@ -39,6 +39,8 @@ export interface StreamAudioTrack {
39
39
  index: number;
40
40
  label: string;
41
41
  lang: string;
42
+ /** Sesli betimleme izi (HLS CHARACTERISTICS describes-video, Safari kind 'description' / 'main-desc'). */
43
+ description?: boolean;
42
44
  }
43
45
  export interface SourceManagerCallbacks {
44
46
  onLevelsChanged(levels: HlsQualityLevel[], activeIndex: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"SourceManager.d.ts","sourceRoot":"","sources":["../../src/hls/SourceManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SourceManager.d.ts","sourceRoot":"","sources":["../../src/hls/SourceManager.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { H as a, b as r, P as s, d as E, r as i } from "./chunks/player-D2_HRzot.js";
1
+ import { H as a, b as s, P as r, d as E, e as i } from "./chunks/player-B7mYS--8.js";
2
2
  export {
3
3
  a as HOPE_PLAYER_VERSION,
4
- r as HopePlayerElement,
5
- s as PLUGIN_API_VERSION,
4
+ s as HopePlayerElement,
5
+ r as PLUGIN_API_VERSION,
6
6
  E as definePlugin,
7
7
  i as registerPlugin
8
8
  };