@hopeplayer/core 1.0.13 → 1.0.15

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 (50) hide show
  1. package/dist/HopePlayerElement.d.ts +21 -0
  2. package/dist/HopePlayerElement.d.ts.map +1 -1
  3. package/dist/chunks/{index-9NzklChR.js → index-BOoNcKeR.js} +2 -2
  4. package/dist/chunks/{index-9NzklChR.js.map → index-BOoNcKeR.js.map} +1 -1
  5. package/dist/chunks/{index-BgJJr55r.js → index-BeJNpAyx.js} +121 -106
  6. package/dist/chunks/index-BeJNpAyx.js.map +1 -0
  7. package/dist/chunks/{index-n-1IIClr.js → index-BvoB2O1p.js} +2 -2
  8. package/dist/chunks/{index-n-1IIClr.js.map → index-BvoB2O1p.js.map} +1 -1
  9. package/dist/chunks/{index-BO0tjMR6.js → index-ClQg_X1N.js} +2 -2
  10. package/dist/chunks/{index-BO0tjMR6.js.map → index-ClQg_X1N.js.map} +1 -1
  11. package/dist/chunks/index-D5P-LWbg.js +245 -0
  12. package/dist/chunks/index-D5P-LWbg.js.map +1 -0
  13. package/dist/chunks/{index-048h1-5X.js → index-DRlQC-ev.js} +2 -2
  14. package/dist/chunks/{index-048h1-5X.js.map → index-DRlQC-ev.js.map} +1 -1
  15. package/dist/chunks/{index-CP1Y6U0c.js → index-DpUZXNJS.js} +2 -2
  16. package/dist/chunks/{index-CP1Y6U0c.js.map → index-DpUZXNJS.js.map} +1 -1
  17. package/dist/chunks/index-TkG8IO6q.js +239 -0
  18. package/dist/chunks/index-TkG8IO6q.js.map +1 -0
  19. package/dist/chunks/{index-01P9jpUY.js → index-w7pACyTw.js} +528 -335
  20. package/dist/chunks/index-w7pACyTw.js.map +1 -0
  21. package/dist/controls/ControlBar.d.ts +13 -0
  22. package/dist/controls/ControlBar.d.ts.map +1 -1
  23. package/dist/controls/SettingsMenu.d.ts +5 -0
  24. package/dist/controls/SettingsMenu.d.ts.map +1 -1
  25. package/dist/hls/SourceManager.d.ts +2 -0
  26. package/dist/hls/SourceManager.d.ts.map +1 -1
  27. package/dist/hope-player.js +1 -1
  28. package/dist/i18n/locales/en.d.ts.map +1 -1
  29. package/dist/i18n/locales/tr.d.ts.map +1 -1
  30. package/dist/i18n/types.d.ts +13 -0
  31. package/dist/i18n/types.d.ts.map +1 -1
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/plugins/audio/AudioStage.d.ts +9 -0
  35. package/dist/plugins/audio/AudioStage.d.ts.map +1 -1
  36. package/dist/plugins/rewarded/RewardedUnlock.d.ts +66 -0
  37. package/dist/plugins/rewarded/RewardedUnlock.d.ts.map +1 -0
  38. package/dist/plugins/rewarded/gpt.d.ts +8 -0
  39. package/dist/plugins/rewarded/gpt.d.ts.map +1 -0
  40. package/dist/plugins/rewarded/index.d.ts +7 -0
  41. package/dist/plugins/rewarded/index.d.ts.map +1 -0
  42. package/dist/plugins/sponsorship/SponsorshipLayer.d.ts +73 -0
  43. package/dist/plugins/sponsorship/SponsorshipLayer.d.ts.map +1 -0
  44. package/dist/plugins/sponsorship/index.d.ts +7 -0
  45. package/dist/plugins/sponsorship/index.d.ts.map +1 -0
  46. package/dist/types/index.d.ts +120 -0
  47. package/dist/types/index.d.ts.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/chunks/index-01P9jpUY.js.map +0 -1
  50. package/dist/chunks/index-BgJJr55r.js.map +0 -1
@@ -57,6 +57,15 @@ export declare class HopePlayerElement extends HTMLElement {
57
57
  private gestureControls;
58
58
  private loopSection;
59
59
  private audioStage;
60
+ /** Kalite kilidi (rewardedUnlock eklentisi) — kilitliyse yüksek kaliteler menüde kilitli, HLS'te üst sınır var. */
61
+ private qualityGate;
62
+ private rewardedUnlock;
63
+ private sponsorship;
64
+ /** Son uygulanan MP4 kaynak listesi ve seçili etiket — kilit açılınca menü yeniden kurulur. */
65
+ private currentSources;
66
+ private activeSourceLabel;
67
+ private lastHlsLevels;
68
+ private lastHlsActive;
60
69
  /** options.audio — kapak + plak sahnesi, kontroller hep görünür, tam ekran yok. */
61
70
  private audioMode;
62
71
  private inViewAutoplay;
@@ -190,6 +199,18 @@ export declare class HopePlayerElement extends HTMLElement {
190
199
  /** Playlist panelinin monte edileceği, .video-area'nın ALTINDAKİ (shadow root içi) kapsayıcı — ilk ihtiyaçta oluşturulur. */
191
200
  private panelContainer;
192
201
  private getOrCreatePanelContainer;
202
+ /** Kaynağın yüksekliği: `height` ya da etiketten ("1080p" → 1080); bilinmiyorsa null. */
203
+ private sourceHeight;
204
+ private isSourceLocked;
205
+ /** Başlangıç kaynağı: `selected` (ya da ilk); kilitliyse serbest kaynakların en yükseği. */
206
+ private pickInitialSource;
207
+ private renderSourceQualities;
208
+ /** Kilitli kalite var mı (ödüllü reklam butonu yalnızca o zaman görünür) ve en yükseğinin etiketi. */
209
+ lockedQualityLabel(): string | null;
210
+ /** Kilit durumu değişti: menüleri yeniden kur, HLS üst sınırını güncelle; `upgrade` ise en iyi kaliteye geç. */
211
+ private refreshQualityGate;
212
+ private applyRewardedUnlock;
213
+ private applySponsorship;
193
214
  /** Kalite değişirken oynatma konumunu ve play/pause durumunu korur. */
194
215
  private switchQualitySource;
195
216
  private readonly onHlsLevelsChanged;
@@ -1 +1 @@
1
- {"version":3,"file":"HopePlayerElement.d.ts","sourceRoot":"","sources":["../src/HopePlayerElement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HopePlayerElement.d.ts","sourceRoot":"","sources":["../src/HopePlayerElement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgC,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,GAAG,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAuC,KAAK,kBAAkB,EAA+C,MAAM,qBAAqB,CAAC;AAuBhJ,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA2C5C,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAoBpD,gHAAgH;AAChH,qBAAa,iBAAkB,SAAQ,WAAW;IAC9C,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,4CAA4C;IAC5C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,0GAA0G;IAC1G,OAAO,CAAC,UAAU,CAA8B;IAChD,2GAA2G;IAC3G,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,oFAAoF;IACpF,OAAO,CAAC,iBAAiB,CAA+C;IACxE,6CAA6C;IAC7C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,UAAU,CAA2B;IAC7C,yEAAyE;IACzE,OAAO,CAAC,YAAY,CAAS;IAC7B,mGAAmG;IACnG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,2GAA2G;IAC3G,OAAO,CAAC,eAAe,CAAW;IAClC,4DAA4D;IAC5D,OAAO,CAAC,WAAW,CAA4B;IAC/C,oGAAoG;IACpG,OAAO,CAAC,cAAc,CAAK;IAC3B,kFAAkF;IAClF,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,UAAU,CAA2B;IAC7C,mHAAmH;IACnH,OAAO,CAAC,WAAW,CAAoF;IACvG,OAAO,CAAC,cAAc,CAA4D;IAClF,OAAO,CAAC,WAAW,CAAiE;IACpF,+FAA+F;IAC/F,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAM;IAC3B,mFAAmF;IACnF,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,cAAc,CAAuB;IAC7C,2FAA2F;IAC3F,OAAO,CAAC,aAAa,CAAiD;IACtE,6HAA6H;IAC7H,OAAO,CAAC,kBAAkB,CAAS;IACnC,kCAAkC;IAClC,OAAO,CAAC,YAAY,CAAuB;IAC3C,kHAAkH;IAClH,OAAO,CAAC,YAAY,CAA0C;IAC9D,qFAAqF;IACrF,OAAO,CAAC,aAAa,CAAqC;IAC1D,oEAAoE;IACpE,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,WAAW,CAA8E;IACjG;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CAAkC;IAChE,OAAO,CAAC,sBAAsB,CAAS;IACvC;;;OAGG;IACH,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAA8C;IACpE;;;OAGG;IACH,OAAO,CAAC,UAAU,CAA8D;IAChF;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,WAAW,CAA8C;IACjE,qEAAqE;IACrE,OAAO,CAAC,iBAAiB,CAA+C;IACxE,gIAAgI;IAChI,OAAO,CAAC,mBAAmB,CAAS;IACpC,uFAAuF;IACvF,OAAO,CAAC,iBAAiB,CAAS;IAClC,mEAAmE;IACnE,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;IACtB,mGAAmG;IACnG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgD;IACrE,6HAA6H;IAC7H,OAAO,CAAC,UAAU,CAAQ;;IA8I1B,iBAAiB,IAAI,IAAI;IAwDzB,oBAAoB,IAAI,IAAI;IAuE5B,4FAA4F;IAC5F,WAAW,IAAI,OAAO;IAItB,wBAAwB,IAAI,IAAI;IAIhC,IAAI,OAAO,IAAI,iBAAiB,CAE/B;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAWnC;IAED,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,KAAK,IAAI,IAAI;IAIb,gHAAgH;IAChH,IAAI,cAAc,IAAI,kBAAkB,CAEvC;IAED,kCAAkC;IAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,SAAuB;IAE9C,oGAAoG;IACpG,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,mFAAmF;IAC7E,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAQnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAW3B;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG9B;IAEF,6HAA6H;IACvH,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAEjC;IAEF,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAY5B;IAEF,8GAA8G;IAC9G,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,CAEpB;IAED,kNAAkN;IAClN,YAAY,IAAI,IAAI;IAIpB,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAEnC;IAED,iBAAiB,IAAI,IAAI;IAIzB,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,gBAAgB;YAoBV,YAAY;IA4E1B,6FAA6F;YAC/E,uBAAuB;YAoDvB,YAAY;IAsQ1B,oGAAoG;IACpG,OAAO,CAAC,eAAe;IAkCvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAYxB,2FAA2F;IAC3F,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAkBjC;IAEF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAW3B;IAEF,sGAAsG;IACtG,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAexC;IAEF,+GAA+G;IAC/G,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAelC;IAEF,qJAAqJ;IACrJ,OAAO,CAAC,sBAAsB;IAgD9B,6HAA6H;IAC7H,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,yBAAyB;IAUjC,yFAAyF;IACzF,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAItB,4FAA4F;IAC5F,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,qBAAqB;IAgB7B,sGAAsG;IACtG,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAenC,gHAAgH;IAChH,OAAO,CAAC,kBAAkB;YAmBZ,mBAAmB;YAsCnB,gBAAgB;IAwB9B,uEAAuE;YACzD,mBAAmB;IAWjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAqCjC;IAIF,mHAAmH;IACnH,OAAO,KAAK,QAAQ,GAMnB;IAED,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAIjC;IAEF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2C;IAC1E,OAAO,KAAK,eAAe,GAE1B;IACD,OAAO,KAAK,mBAAmB,GAG9B;IAED,OAAO,CAAC,QAAQ,CAAC,MAAM,CASrB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAUtB;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAIjC;IAEF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAMhC;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CA4B9B;IAEF;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAgCxB,qGAAqG;IACrG,OAAO,CAAC,cAAc;IAMtB,uGAAuG;IACvG,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAEjC;IAEF,OAAO,CAAC,UAAU;IAIlB,+GAA+G;IAC/G,OAAO,CAAC,gBAAgB;IAQxB,iHAAiH;IACjH,OAAO,CAAC,kBAAkB;IAI1B;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,GAAG,SAAoB,GAAG,IAAI;IAgBrE,gGAAgG;IAChG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IA0BhC,yIAAyI;IACzI,cAAc,IAAI,IAAI;IAMtB,aAAa,IAAI,IAAI;IAMrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAY5B;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAK7B;IAEF,uIAAuI;IACvI,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,UAAU;IAMlB,wGAAwG;YAC1F,cAAc;IAoC5B,yFAAyF;IACzF,OAAO,CAAC,cAAc;IAqDtB,8GAA8G;IAC9G,OAAO,CAAC,mBAAmB;IAU3B,wFAAwF;IACxF,OAAO,CAAC,iBAAiB;IAMzB,+GAA+G;IAC/G,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAW/B;CACL"}
@@ -1,7 +1,7 @@
1
1
  var m = Object.defineProperty;
2
2
  var v = (r, t, e) => t in r ? m(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
3
3
  var n = (r, t, e) => v(r, typeof t != "symbol" ? t + "" : t, e);
4
- import { f as E } from "./index-01P9jpUY.js";
4
+ import { f as E } from "./index-w7pACyTw.js";
5
5
  class u {
6
6
  constructor(t, e) {
7
7
  n(this, "chapters", []);
@@ -60,4 +60,4 @@ export {
60
60
  u as Segments,
61
61
  g as installSegments
62
62
  };
63
- //# sourceMappingURL=index-9NzklChR.js.map
63
+ //# sourceMappingURL=index-BOoNcKeR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-9NzklChR.js","sources":["../../src/plugins/segments/Segments.ts","../../src/plugins/segments/index.ts"],"sourcesContent":["import type { SegmentItem } from '../../types';\nimport type { SeekBarChapterRange } from '../../controls/SeekBar';\nimport { formatTime } from '../../utils/format-time';\n\nexport interface SegmentsPlayerContext {\n videoEl: HTMLVideoElement;\n /** Chapter modunu destekleyen seek bar — parçalara bölme/zaman eşlemesi onda. */\n seekBar: {\n readonly el: HTMLElement;\n setChapters(ranges: SeekBarChapterRange[]): HTMLElement[];\n suppressHoverTime(key: string, suppressed: boolean): void;\n clearChapters(): void;\n ratioAtClientX(clientX: number): number;\n };\n}\n\ninterface Chapter {\n start: number;\n end: number;\n text?: string;\n color?: string;\n}\n\n/**\n * YouTube tarzı bölümler: seek bar parçalara bölünür (SeekBar.setChapters), hover'da bölüm adı + zaman.\n * Zaman çizgisi her zaman tam kaplanır (boşluklar adsız bölüm, son bölüm sona uzar).\n */\nexport class Segments {\n private chapters: Chapter[] = [];\n private chapterEls: HTMLElement[] = [];\n private hoverIndex = -1;\n private readonly tooltipEl: HTMLDivElement;\n private readonly titleEl: HTMLDivElement;\n private readonly timeEl: HTMLDivElement;\n\n constructor(\n private readonly ctx: SegmentsPlayerContext,\n private readonly segments: SegmentItem[]\n ) {\n this.tooltipEl = document.createElement('div');\n this.tooltipEl.className = 'hp-chapter-tooltip';\n this.tooltipEl.setAttribute('part', 'segment-tooltip');\n this.titleEl = document.createElement('div');\n this.titleEl.className = 'hp-chapter-tooltip-title';\n this.timeEl = document.createElement('div');\n this.timeEl.className = 'hp-chapter-tooltip-time';\n this.tooltipEl.append(this.titleEl, this.timeEl);\n ctx.seekBar.el.appendChild(this.tooltipEl);\n // Popup zamanı zaten gösteriyor — seek bar'ın varsayılan hover zamanı ikinci kez yazmasın.\n ctx.seekBar.suppressHoverTime('segments', true);\n\n ctx.seekBar.el.addEventListener('pointermove', this.onPointerMove);\n ctx.seekBar.el.addEventListener('pointerleave', this.onPointerLeave);\n ctx.videoEl.addEventListener('loadedmetadata', this.onLoadedMetadata);\n if (ctx.videoEl.readyState >= 1) this.onLoadedMetadata();\n }\n\n destroy(): void {\n this.ctx.videoEl.removeEventListener('loadedmetadata', this.onLoadedMetadata);\n this.ctx.seekBar.el.removeEventListener('pointermove', this.onPointerMove);\n this.ctx.seekBar.el.removeEventListener('pointerleave', this.onPointerLeave);\n this.ctx.seekBar.clearChapters();\n this.ctx.seekBar.suppressHoverTime('segments', false);\n this.tooltipEl.remove();\n this.chapterEls = [];\n this.chapters = [];\n }\n\n private readonly onLoadedMetadata = (): void => {\n const duration = this.ctx.videoEl.duration;\n if (!Number.isFinite(duration) || duration <= 0) return;\n\n this.chapters = buildChapters(this.segments, duration);\n this.chapterEls = this.ctx.seekBar.setChapters(\n this.chapters.map((c) => ({ start: c.start / duration, end: c.end / duration, color: c.color }))\n );\n };\n\n private readonly onPointerMove = (e: PointerEvent): void => {\n const duration = this.ctx.videoEl.duration;\n if (!this.chapters.length || !Number.isFinite(duration) || duration <= 0) return;\n\n const time = this.ctx.seekBar.ratioAtClientX(e.clientX) * duration;\n let index = this.chapters.findIndex((c) => time < c.end);\n if (index === -1) index = this.chapters.length - 1;\n this.setHover(index);\n\n const chapter = this.chapters[index]!;\n this.titleEl.textContent = chapter.text ?? '';\n this.titleEl.style.display = chapter.text ? '' : 'none';\n this.timeEl.textContent = formatTime(time);\n\n // sprite-thumbnails önizlemesi de seek bar'ın hemen üstünde açılıyor —\n // görünürse popup onun ÜSTÜNE çıkıyor (üst üste binmesin).\n const sprite = this.ctx.seekBar.el.querySelector<HTMLElement>('[part=\"sprite-tooltip\"]');\n const spriteH = sprite && sprite.hasAttribute('data-visible') && sprite.offsetHeight > 0 ? sprite.offsetHeight + 8 : 0;\n this.tooltipEl.style.bottom = spriteH ? `calc(100% + 6px + ${spriteH}px)` : '';\n // Sprite önizlemesi zamanı zaten kendi altında gösteriyor — aynı zaman iki kez yazılmasın.\n this.timeEl.style.display = spriteH ? 'none' : '';\n\n // Popup imleci ortalar ama seek bar kenarlarından taşmaz.\n const barRect = this.ctx.seekBar.el.getBoundingClientRect();\n this.tooltipEl.setAttribute('data-visible', '');\n const tipWidth = this.tooltipEl.offsetWidth;\n const x = Math.min(Math.max(e.clientX - barRect.left - tipWidth / 2, 0), Math.max(barRect.width - tipWidth, 0));\n this.tooltipEl.style.transform = `translateX(${x}px)`;\n };\n\n private readonly onPointerLeave = (): void => {\n this.setHover(-1);\n this.tooltipEl.removeAttribute('data-visible');\n };\n\n private setHover(index: number): void {\n if (index === this.hoverIndex) return;\n this.chapterEls[this.hoverIndex]?.removeAttribute('data-hover');\n this.hoverIndex = index;\n this.chapterEls[index]?.setAttribute('data-hover', '');\n }\n}\n\n/** Segmentleri sıralar, boşlukları adsız bölümle doldurur, son bölümü video sonuna uzatır — sonuç 0→duration'ı kesintisiz kaplar. */\nfunction buildChapters(segments: SegmentItem[], duration: number): Chapter[] {\n const sorted = segments\n .filter((s) => Number.isFinite(s.start) && s.start < duration)\n .slice()\n .sort((a, b) => a.start - b.start);\n\n const chapters: Chapter[] = [];\n let cursor = 0;\n for (const seg of sorted) {\n const start = Math.max(seg.start, cursor);\n const end = Math.min(Number.isFinite(seg.end) ? seg.end : duration, duration);\n if (end <= start) continue;\n if (start > cursor) chapters.push({ start: cursor, end: start });\n chapters.push({ start, end, text: seg.text, color: seg.color });\n cursor = end;\n }\n if (!chapters.length) return [];\n if (cursor < duration) chapters[chapters.length - 1]!.end = duration;\n return chapters;\n}\n","import { Segments, type SegmentsPlayerContext } from './Segments';\nimport type { SegmentItem } from '../../types';\n\nexport function installSegments(ctx: SegmentsPlayerContext, items: SegmentItem[]): Segments {\n return new Segments(ctx, items);\n}\n\nexport { Segments };\nexport type { SegmentsPlayerContext };\n"],"names":["Segments","ctx","segments","__publicField","duration","buildChapters","c","e","time","index","chapter","formatTime","sprite","spriteH","barRect","tipWidth","x","_a","_b","sorted","a","b","chapters","cursor","seg","start","end","installSegments","items"],"mappings":"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"}
1
+ {"version":3,"file":"index-BOoNcKeR.js","sources":["../../src/plugins/segments/Segments.ts","../../src/plugins/segments/index.ts"],"sourcesContent":["import type { SegmentItem } from '../../types';\nimport type { SeekBarChapterRange } from '../../controls/SeekBar';\nimport { formatTime } from '../../utils/format-time';\n\nexport interface SegmentsPlayerContext {\n videoEl: HTMLVideoElement;\n /** Chapter modunu destekleyen seek bar — parçalara bölme/zaman eşlemesi onda. */\n seekBar: {\n readonly el: HTMLElement;\n setChapters(ranges: SeekBarChapterRange[]): HTMLElement[];\n suppressHoverTime(key: string, suppressed: boolean): void;\n clearChapters(): void;\n ratioAtClientX(clientX: number): number;\n };\n}\n\ninterface Chapter {\n start: number;\n end: number;\n text?: string;\n color?: string;\n}\n\n/**\n * YouTube tarzı bölümler: seek bar parçalara bölünür (SeekBar.setChapters), hover'da bölüm adı + zaman.\n * Zaman çizgisi her zaman tam kaplanır (boşluklar adsız bölüm, son bölüm sona uzar).\n */\nexport class Segments {\n private chapters: Chapter[] = [];\n private chapterEls: HTMLElement[] = [];\n private hoverIndex = -1;\n private readonly tooltipEl: HTMLDivElement;\n private readonly titleEl: HTMLDivElement;\n private readonly timeEl: HTMLDivElement;\n\n constructor(\n private readonly ctx: SegmentsPlayerContext,\n private readonly segments: SegmentItem[]\n ) {\n this.tooltipEl = document.createElement('div');\n this.tooltipEl.className = 'hp-chapter-tooltip';\n this.tooltipEl.setAttribute('part', 'segment-tooltip');\n this.titleEl = document.createElement('div');\n this.titleEl.className = 'hp-chapter-tooltip-title';\n this.timeEl = document.createElement('div');\n this.timeEl.className = 'hp-chapter-tooltip-time';\n this.tooltipEl.append(this.titleEl, this.timeEl);\n ctx.seekBar.el.appendChild(this.tooltipEl);\n // Popup zamanı zaten gösteriyor — seek bar'ın varsayılan hover zamanı ikinci kez yazmasın.\n ctx.seekBar.suppressHoverTime('segments', true);\n\n ctx.seekBar.el.addEventListener('pointermove', this.onPointerMove);\n ctx.seekBar.el.addEventListener('pointerleave', this.onPointerLeave);\n ctx.videoEl.addEventListener('loadedmetadata', this.onLoadedMetadata);\n if (ctx.videoEl.readyState >= 1) this.onLoadedMetadata();\n }\n\n destroy(): void {\n this.ctx.videoEl.removeEventListener('loadedmetadata', this.onLoadedMetadata);\n this.ctx.seekBar.el.removeEventListener('pointermove', this.onPointerMove);\n this.ctx.seekBar.el.removeEventListener('pointerleave', this.onPointerLeave);\n this.ctx.seekBar.clearChapters();\n this.ctx.seekBar.suppressHoverTime('segments', false);\n this.tooltipEl.remove();\n this.chapterEls = [];\n this.chapters = [];\n }\n\n private readonly onLoadedMetadata = (): void => {\n const duration = this.ctx.videoEl.duration;\n if (!Number.isFinite(duration) || duration <= 0) return;\n\n this.chapters = buildChapters(this.segments, duration);\n this.chapterEls = this.ctx.seekBar.setChapters(\n this.chapters.map((c) => ({ start: c.start / duration, end: c.end / duration, color: c.color }))\n );\n };\n\n private readonly onPointerMove = (e: PointerEvent): void => {\n const duration = this.ctx.videoEl.duration;\n if (!this.chapters.length || !Number.isFinite(duration) || duration <= 0) return;\n\n const time = this.ctx.seekBar.ratioAtClientX(e.clientX) * duration;\n let index = this.chapters.findIndex((c) => time < c.end);\n if (index === -1) index = this.chapters.length - 1;\n this.setHover(index);\n\n const chapter = this.chapters[index]!;\n this.titleEl.textContent = chapter.text ?? '';\n this.titleEl.style.display = chapter.text ? '' : 'none';\n this.timeEl.textContent = formatTime(time);\n\n // sprite-thumbnails önizlemesi de seek bar'ın hemen üstünde açılıyor —\n // görünürse popup onun ÜSTÜNE çıkıyor (üst üste binmesin).\n const sprite = this.ctx.seekBar.el.querySelector<HTMLElement>('[part=\"sprite-tooltip\"]');\n const spriteH = sprite && sprite.hasAttribute('data-visible') && sprite.offsetHeight > 0 ? sprite.offsetHeight + 8 : 0;\n this.tooltipEl.style.bottom = spriteH ? `calc(100% + 6px + ${spriteH}px)` : '';\n // Sprite önizlemesi zamanı zaten kendi altında gösteriyor — aynı zaman iki kez yazılmasın.\n this.timeEl.style.display = spriteH ? 'none' : '';\n\n // Popup imleci ortalar ama seek bar kenarlarından taşmaz.\n const barRect = this.ctx.seekBar.el.getBoundingClientRect();\n this.tooltipEl.setAttribute('data-visible', '');\n const tipWidth = this.tooltipEl.offsetWidth;\n const x = Math.min(Math.max(e.clientX - barRect.left - tipWidth / 2, 0), Math.max(barRect.width - tipWidth, 0));\n this.tooltipEl.style.transform = `translateX(${x}px)`;\n };\n\n private readonly onPointerLeave = (): void => {\n this.setHover(-1);\n this.tooltipEl.removeAttribute('data-visible');\n };\n\n private setHover(index: number): void {\n if (index === this.hoverIndex) return;\n this.chapterEls[this.hoverIndex]?.removeAttribute('data-hover');\n this.hoverIndex = index;\n this.chapterEls[index]?.setAttribute('data-hover', '');\n }\n}\n\n/** Segmentleri sıralar, boşlukları adsız bölümle doldurur, son bölümü video sonuna uzatır — sonuç 0→duration'ı kesintisiz kaplar. */\nfunction buildChapters(segments: SegmentItem[], duration: number): Chapter[] {\n const sorted = segments\n .filter((s) => Number.isFinite(s.start) && s.start < duration)\n .slice()\n .sort((a, b) => a.start - b.start);\n\n const chapters: Chapter[] = [];\n let cursor = 0;\n for (const seg of sorted) {\n const start = Math.max(seg.start, cursor);\n const end = Math.min(Number.isFinite(seg.end) ? seg.end : duration, duration);\n if (end <= start) continue;\n if (start > cursor) chapters.push({ start: cursor, end: start });\n chapters.push({ start, end, text: seg.text, color: seg.color });\n cursor = end;\n }\n if (!chapters.length) return [];\n if (cursor < duration) chapters[chapters.length - 1]!.end = duration;\n return chapters;\n}\n","import { Segments, type SegmentsPlayerContext } from './Segments';\nimport type { SegmentItem } from '../../types';\n\nexport function installSegments(ctx: SegmentsPlayerContext, items: SegmentItem[]): Segments {\n return new Segments(ctx, items);\n}\n\nexport { Segments };\nexport type { SegmentsPlayerContext };\n"],"names":["Segments","ctx","segments","__publicField","duration","buildChapters","c","e","time","index","chapter","formatTime","sprite","spriteH","barRect","tipWidth","x","_a","_b","sorted","a","b","chapters","cursor","seg","start","end","installSegments","items"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
- var f = Object.defineProperty;
2
- var y = (n, t, e) => t in n ? f(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var s = (n, t, e) => y(n, typeof t != "symbol" ? t + "" : t, e);
4
- const m = "http://www.w3.org/2000/svg";
5
- let S = 0;
1
+ var y = Object.defineProperty;
2
+ var S = (n, t, e) => t in n ? y(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
+ var i = (n, t, e) => S(n, typeof t != "symbol" ? t + "" : t, e);
4
+ const g = "http://www.w3.org/2000/svg";
5
+ let b = 0;
6
6
  function E() {
7
7
  let n = "";
8
8
  for (let t = 40; t <= 95; t += 1.25) {
9
- const i = Math.abs(t - 58) < 0.7 || Math.abs(t - 74) < 0.7 ? 0 : 0.035 + t * 7 % 5 * 8e-3;
10
- n += `<circle cx="100" cy="100" r="${t}" fill="none" stroke="rgba(255,255,255,${i.toFixed(3)})" stroke-width="0.45"/>`;
9
+ const s = Math.abs(t - 58) < 0.7 || Math.abs(t - 74) < 0.7 ? 0 : 0.035 + t * 7 % 5 * 8e-3;
10
+ n += `<circle cx="100" cy="100" r="${t}" fill="none" stroke="rgba(255,255,255,${s.toFixed(3)})" stroke-width="0.45"/>`;
11
11
  }
12
12
  return n;
13
13
  }
14
- function b() {
15
- const n = `hp-vinyl-${++S}`, t = document.createElement("div");
14
+ function x() {
15
+ const n = `hp-vinyl-${++b}`, t = document.createElement("div");
16
16
  t.innerHTML = `
17
- <svg xmlns="${m}" viewBox="0 0 200 200" aria-hidden="true" focusable="false">
17
+ <svg xmlns="${g}" viewBox="0 0 200 200" aria-hidden="true" focusable="false">
18
18
  <defs>
19
19
  <radialGradient id="${n}-disc" cx="50%" cy="50%" r="50%">
20
20
  <stop offset="0" stop-color="#1c1c1f"/>
@@ -38,32 +38,32 @@ function b() {
38
38
  <circle cx="100" cy="100" r="3.6" fill="#0b0b0c"/>
39
39
  <circle cx="100" cy="100" r="3.6" fill="none" stroke="rgba(255,255,255,0.35)" stroke-width="0.6"/>
40
40
  </svg>`;
41
- const e = t.firstElementChild, i = e.querySelector(".hp-vinyl-cover"), r = e.querySelector(".hp-vinyl-text");
41
+ const e = t.firstElementChild, s = e.querySelector(".hp-vinyl-cover"), r = e.querySelector(".hp-vinyl-text");
42
42
  return {
43
43
  el: e,
44
- setLabel(a, l) {
45
- a ? (i.setAttribute("href", a), i.style.display = "") : (i.removeAttribute("href"), i.style.display = "none"), r.textContent = a ? "" : l.slice(0, 22);
44
+ setLabel(a, o) {
45
+ a ? (s.setAttribute("href", a), s.style.display = "") : (s.removeAttribute("href"), s.style.display = "none"), r.textContent = a ? "" : o.slice(0, 22);
46
46
  }
47
47
  };
48
48
  }
49
- function x() {
49
+ function k() {
50
50
  const n = document.createElement("div");
51
51
  return n.innerHTML = `
52
- <svg xmlns="${m}" viewBox="0 0 100 200" aria-hidden="true" focusable="false">
52
+ <svg xmlns="${g}" viewBox="0 0 100 200" aria-hidden="true" focusable="false">
53
53
  <circle cx="70" cy="22" r="15" fill="#2b2b30" stroke="rgba(255,255,255,0.18)" stroke-width="1"/>
54
54
  <circle cx="70" cy="22" r="7" fill="#9a9aa2"/>
55
55
  <path d="M70 22 L66 120 L40 162" fill="none" stroke="#c9c9cf" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
56
56
  <rect x="26" y="156" width="20" height="28" rx="3" transform="rotate(32 36 170)" fill="#3a3a40" stroke="rgba(255,255,255,0.25)" stroke-width="1"/>
57
57
  </svg>`, n.firstElementChild;
58
58
  }
59
- const v = 0.78, g = 100 / 3, u = 4, k = 250, p = 10;
60
- function w(n) {
59
+ const c = 0.78, f = 100 / 3, w = 230, p = 4, A = 250, m = 10;
60
+ function v(n) {
61
61
  if (n === !1) return null;
62
- const t = n === !0 || n === void 0 ? {} : n, e = typeof t.size == "number" && Number.isFinite(t.size) ? Math.min(1, Math.max(0.3, t.size)) : v, i = typeof t.rpm == "number" && t.rpm > 0 ? t.rpm : g;
62
+ const t = n === !0 || n === void 0 ? {} : n, e = typeof t.size == "number" && Number.isFinite(t.size) ? Math.min(1, Math.max(0.3, t.size)) : c, s = typeof t.rpm == "number" && t.rpm > 0 ? t.rpm : f;
63
63
  return {
64
64
  position: t.position === "center" || t.position === "left" ? t.position : "right",
65
65
  size: e,
66
- rpm: i,
66
+ rpm: s,
67
67
  scratch: t.scratch !== !1,
68
68
  scratchSound: t.scratchSound === !0,
69
69
  tonearm: t.tonearm !== !1
@@ -72,93 +72,95 @@ function w(n) {
72
72
  function P(n) {
73
73
  return ((n + 180) % 360 + 360) % 360 - 180;
74
74
  }
75
- const d = class d {
75
+ const h = class h {
76
76
  constructor(t) {
77
- s(this, "el");
78
- s(this, "backdropImg");
79
- s(this, "sleeve");
80
- s(this, "sleeveImg");
81
- s(this, "vinylEl");
82
- s(this, "discEl");
83
- s(this, "armHolder");
84
- s(this, "titleEl");
85
- s(this, "artistEl");
86
- s(this, "disc");
87
- s(this, "options", {});
88
- s(this, "vinyl", null);
89
- s(this, "frame", 0);
90
- s(this, "lastAriaSecond", -1);
91
- s(this, "lastPositionState", 0);
77
+ i(this, "el");
78
+ i(this, "backdropImg");
79
+ i(this, "sleeve");
80
+ i(this, "sleeveImg");
81
+ i(this, "vinylEl");
82
+ i(this, "discEl");
83
+ i(this, "armHolder");
84
+ i(this, "titleEl");
85
+ i(this, "artistEl");
86
+ i(this, "areaEl");
87
+ i(this, "resizeObserver");
88
+ i(this, "disc");
89
+ i(this, "options", {});
90
+ i(this, "vinyl", null);
91
+ i(this, "frame", 0);
92
+ i(this, "lastAriaSecond", -1);
93
+ i(this, "lastPositionState", 0);
92
94
  // Scratch durumu
93
- s(this, "dragging", !1);
94
- s(this, "dragPointer", -1);
95
- s(this, "center", { x: 0, y: 0 });
96
- s(this, "lastPointerAngle", 0);
97
- s(this, "accum", 0);
98
- s(this, "dragStartTime", 0);
99
- s(this, "dragStartAngle", 0);
100
- s(this, "moved", !1);
101
- s(this, "wasPlaying", !1);
102
- s(this, "downAt", 0);
103
- s(this, "seekFrame", 0);
104
- s(this, "pendingSeek", null);
95
+ i(this, "dragging", !1);
96
+ i(this, "dragPointer", -1);
97
+ i(this, "center", { x: 0, y: 0 });
98
+ i(this, "lastPointerAngle", 0);
99
+ i(this, "accum", 0);
100
+ i(this, "dragStartTime", 0);
101
+ i(this, "dragStartAngle", 0);
102
+ i(this, "moved", !1);
103
+ i(this, "wasPlaying", !1);
104
+ i(this, "downAt", 0);
105
+ i(this, "seekFrame", 0);
106
+ i(this, "pendingSeek", null);
105
107
  /** vinyl.scratchSound — ayrı parça olarak yalnızca açıksa yüklenir. */
106
- s(this, "sound", null);
107
- s(this, "soundImport", null);
108
- s(this, "prepareTimer", null);
109
- s(this, "render", () => {
108
+ i(this, "sound", null);
109
+ i(this, "soundImport", null);
110
+ i(this, "prepareTimer", null);
111
+ i(this, "render", () => {
110
112
  !this.vinyl || this.dragging || (this.discEl.style.transform = `rotate(${this.angleForTime(this.ctx.videoEl.currentTime || 0)}deg)`);
111
113
  });
112
- s(this, "loop", () => {
114
+ i(this, "loop", () => {
113
115
  this.render(), this.frame = requestAnimationFrame(this.loop);
114
116
  });
115
- s(this, "onPlay", () => {
117
+ i(this, "onPlay", () => {
116
118
  this.el.setAttribute("data-playing", ""), this.schedulePrepareSound(), cancelAnimationFrame(this.frame), this.vinyl && (this.frame = requestAnimationFrame(this.loop)), this.options.mediaSession !== !1 && "mediaSession" in navigator && (this.applyMediaSession(), navigator.mediaSession.playbackState = "playing");
117
119
  });
118
- s(this, "onPause", () => {
120
+ i(this, "onPause", () => {
119
121
  this.dragging || this.el.removeAttribute("data-playing"), cancelAnimationFrame(this.frame), this.render(), this.ownsMediaSession() && (navigator.mediaSession.playbackState = "paused");
120
122
  });
121
- s(this, "onTimeUpdate", () => {
123
+ i(this, "onTimeUpdate", () => {
122
124
  const t = this.ctx.videoEl;
123
125
  t.paused && this.render();
124
126
  const e = Math.floor(t.currentTime || 0);
125
127
  e !== this.lastAriaSecond && (this.lastAriaSecond = e, this.vinylEl.setAttribute("aria-valuenow", String(e))), performance.now() - this.lastPositionState > 1e3 && this.updatePositionState();
126
128
  });
127
- s(this, "onDurationChange", () => {
129
+ i(this, "onDurationChange", () => {
128
130
  const t = this.ctx.videoEl.duration, e = Number.isFinite(t) && t > 0;
129
131
  e ? this.vinylEl.setAttribute("aria-valuemax", String(Math.floor(t))) : this.vinylEl.removeAttribute("aria-valuemax"), this.vinylEl.toggleAttribute("data-live", !e && t === 1 / 0), this.updatePositionState();
130
132
  });
131
- s(this, "onPointerDown", (t) => {
132
- var i;
133
+ i(this, "onPointerDown", (t) => {
134
+ var s;
133
135
  if (!this.vinyl || this.dragging || t.pointerType === "mouse" && t.button !== 0) return;
134
136
  t.stopPropagation(), t.preventDefault();
135
137
  const e = this.vinylEl.getBoundingClientRect();
136
- this.center = { x: e.left + e.width / 2, y: e.top + e.height / 2 }, this.dragging = !0, this.dragPointer = t.pointerId, this.lastPointerAngle = this.pointerAngle(t), this.accum = 0, this.moved = !1, this.dragStartTime = this.ctx.videoEl.currentTime || 0, this.dragStartAngle = this.angleForTime(this.dragStartTime), this.wasPlaying = !this.ctx.videoEl.paused, this.downAt = performance.now(), this.wasPlaying && this.canScratch() && this.ctx.videoEl.pause(), this.vinyl.scratchSound && this.canScratch() && ((i = this.sound) != null && i.ready ? this.sound.start(this.dragStartTime) : this.loadSound().then((r) => r == null ? void 0 : r.prepare()));
138
+ this.center = { x: e.left + e.width / 2, y: e.top + e.height / 2 }, this.dragging = !0, this.dragPointer = t.pointerId, this.lastPointerAngle = this.pointerAngle(t), this.accum = 0, this.moved = !1, this.dragStartTime = this.ctx.videoEl.currentTime || 0, this.dragStartAngle = this.angleForTime(this.dragStartTime), this.wasPlaying = !this.ctx.videoEl.paused, this.downAt = performance.now(), this.wasPlaying && this.canScratch() && this.ctx.videoEl.pause(), this.vinyl.scratchSound && this.canScratch() && ((s = this.sound) != null && s.ready ? this.sound.start(this.dragStartTime) : this.loadSound().then((r) => r == null ? void 0 : r.prepare()));
137
139
  try {
138
140
  this.vinylEl.setPointerCapture(t.pointerId);
139
141
  } catch {
140
142
  }
141
143
  });
142
- s(this, "onPointerMove", (t) => {
143
- var h;
144
+ i(this, "onPointerMove", (t) => {
145
+ var d;
144
146
  if (!this.dragging || t.pointerId !== this.dragPointer) return;
145
147
  t.stopPropagation();
146
- const e = this.pointerAngle(t), i = P(e - this.lastPointerAngle);
148
+ const e = this.pointerAngle(t), s = P(e - this.lastPointerAngle);
147
149
  if (this.lastPointerAngle = e, !this.canScratch()) {
148
- this.accum += i, Math.abs(this.accum) > u && (this.moved = !0);
150
+ this.accum += s, Math.abs(this.accum) > p && (this.moved = !0);
149
151
  return;
150
152
  }
151
- const r = this.secondsPerTurn, a = this.ctx.videoEl.duration, l = -this.dragStartTime / r * 360, o = (a - this.dragStartTime) / r * 360;
152
- this.accum = Math.min(o, Math.max(l, this.accum + i)), !this.moved && Math.abs(this.accum) > u && (this.moved = !0, this.el.setAttribute("data-scratching", "")), this.moved && (this.discEl.style.transform = `rotate(${this.dragStartAngle + this.accum}deg)`, this.pendingSeek = this.dragStartTime + this.accum / 360 * r, (h = this.sound) == null || h.setTarget(this.pendingSeek), this.seekFrame || (this.seekFrame = requestAnimationFrame(this.flushSeek)));
153
+ const r = this.secondsPerTurn, a = this.ctx.videoEl.duration, o = -this.dragStartTime / r * 360, l = (a - this.dragStartTime) / r * 360;
154
+ this.accum = Math.min(l, Math.max(o, this.accum + s)), !this.moved && Math.abs(this.accum) > p && (this.moved = !0, this.el.setAttribute("data-scratching", "")), this.moved && (this.discEl.style.transform = `rotate(${this.dragStartAngle + this.accum}deg)`, this.pendingSeek = this.dragStartTime + this.accum / 360 * r, (d = this.sound) == null || d.setTarget(this.pendingSeek), this.seekFrame || (this.seekFrame = requestAnimationFrame(this.flushSeek)));
153
155
  });
154
- s(this, "flushSeek", () => {
156
+ i(this, "flushSeek", () => {
155
157
  this.seekFrame = 0, this.pendingSeek !== null && (this.ctx.videoEl.currentTime = this.pendingSeek, this.pendingSeek = null);
156
158
  });
157
- s(this, "onPointerUp", (t) => {
159
+ i(this, "onPointerUp", (t) => {
158
160
  var e;
159
161
  if (!(!this.dragging || t.pointerId !== this.dragPointer)) {
160
162
  if (t.stopPropagation(), this.dragging = !1, this.dragPointer = -1, this.el.removeAttribute("data-scratching"), (e = this.sound) == null || e.stop(), this.seekFrame && (cancelAnimationFrame(this.seekFrame), this.flushSeek()), !this.moved && this.canScratch() && this.wasPlaying) {
161
- performance.now() - this.downAt >= k || t.type !== "pointerup" ? this.ctx.play() : (this.el.removeAttribute("data-playing"), this.render());
163
+ performance.now() - this.downAt >= A || t.type !== "pointerup" ? this.ctx.play() : (this.el.removeAttribute("data-playing"), this.render());
162
164
  return;
163
165
  }
164
166
  if (!this.moved) {
@@ -168,7 +170,7 @@ const d = class d {
168
170
  this.wasPlaying ? this.ctx.play() : this.render();
169
171
  }
170
172
  });
171
- s(this, "updatePositionState", () => {
173
+ i(this, "updatePositionState", () => {
172
174
  if (!this.ownsMediaSession()) return;
173
175
  this.lastPositionState = performance.now();
174
176
  const t = this.ctx.videoEl, e = t.duration;
@@ -182,6 +184,7 @@ const d = class d {
182
184
  } catch {
183
185
  }
184
186
  });
187
+ var r, a;
185
188
  this.ctx = t;
186
189
  const e = document.createElement("div");
187
190
  e.className = "hp-audio", e.setAttribute("part", "audio-stage"), e.innerHTML = `
@@ -196,29 +199,40 @@ const d = class d {
196
199
  <div class="hp-tonearm-holder"><div class="hp-tonearm"></div></div>
197
200
  </div>
198
201
  </div>
199
- </div>`, this.el = e, this.backdropImg = e.querySelector(".hp-audio-backdrop img"), this.sleeve = e.querySelector(".hp-audio-sleeve"), this.sleeveImg = this.sleeve.querySelector("img"), this.vinylEl = e.querySelector(".hp-vinyl"), this.discEl = e.querySelector(".hp-vinyl-disc"), this.armHolder = e.querySelector(".hp-tonearm-holder"), this.titleEl = e.querySelector(".hp-audio-title"), this.artistEl = e.querySelector(".hp-audio-artist"), this.disc = b(), this.discEl.appendChild(this.disc.el), e.querySelector(".hp-tonearm").appendChild(x());
200
- for (const r of [this.backdropImg, this.sleeveImg])
201
- r.addEventListener("error", () => r.removeAttribute("src"));
202
- const i = t.videoEl;
203
- i.addEventListener("play", this.onPlay), i.addEventListener("pause", this.onPause), i.addEventListener("ended", this.onPause), i.addEventListener("seeked", this.render), i.addEventListener("timeupdate", this.onTimeUpdate), i.addEventListener("durationchange", this.onDurationChange), i.addEventListener("ratechange", this.updatePositionState), i.addEventListener("emptied", this.render), this.vinylEl.addEventListener("pointerdown", this.onPointerDown), this.vinylEl.addEventListener("pointermove", this.onPointerMove), this.vinylEl.addEventListener("pointerup", this.onPointerUp), this.vinylEl.addEventListener("pointercancel", this.onPointerUp), this.vinylEl.addEventListener("lostpointercapture", this.onPointerUp);
204
- for (const r of ["click", "mousedown", "mouseup", "touchstart", "touchend", "dblclick"])
205
- this.vinylEl.addEventListener(r, (a) => a.stopPropagation());
206
- t.layerEl.insertBefore(e, t.videoEl.nextSibling), this.refreshLabels();
202
+ </div>`, this.el = e, this.backdropImg = e.querySelector(".hp-audio-backdrop img"), this.sleeve = e.querySelector(".hp-audio-sleeve"), this.sleeveImg = this.sleeve.querySelector("img"), this.vinylEl = e.querySelector(".hp-vinyl"), this.discEl = e.querySelector(".hp-vinyl-disc"), this.armHolder = e.querySelector(".hp-tonearm-holder"), this.titleEl = e.querySelector(".hp-audio-title"), this.artistEl = e.querySelector(".hp-audio-artist"), this.disc = x(), this.discEl.appendChild(this.disc.el), e.querySelector(".hp-tonearm").appendChild(k());
203
+ for (const o of [this.backdropImg, this.sleeveImg])
204
+ o.addEventListener("error", () => o.removeAttribute("src"));
205
+ const s = t.videoEl;
206
+ s.addEventListener("play", this.onPlay), s.addEventListener("pause", this.onPause), s.addEventListener("ended", this.onPause), s.addEventListener("seeked", this.render), s.addEventListener("timeupdate", this.onTimeUpdate), s.addEventListener("durationchange", this.onDurationChange), s.addEventListener("ratechange", this.updatePositionState), s.addEventListener("emptied", this.render), this.vinylEl.addEventListener("pointerdown", this.onPointerDown), this.vinylEl.addEventListener("pointermove", this.onPointerMove), this.vinylEl.addEventListener("pointerup", this.onPointerUp), this.vinylEl.addEventListener("pointercancel", this.onPointerUp), this.vinylEl.addEventListener("lostpointercapture", this.onPointerUp);
207
+ for (const o of ["click", "mousedown", "mouseup", "touchstart", "touchend", "dblclick"])
208
+ this.vinylEl.addEventListener(o, (l) => l.stopPropagation());
209
+ t.layerEl.insertBefore(e, t.videoEl.nextSibling), this.areaEl = e.querySelector(".hp-audio-area"), this.resizeObserver = typeof ResizeObserver < "u" ? new ResizeObserver(() => this.layout()) : null, (r = this.resizeObserver) == null || r.observe(e), (a = this.resizeObserver) == null || a.observe(this.areaEl), this.refreshLabels();
207
210
  }
208
211
  update(t) {
209
- this.options = t, this.vinyl = w(t.vinyl);
210
- const e = t.cover || this.ctx.poster() || "";
211
- for (const r of [this.backdropImg, this.sleeveImg])
212
- e ? r.src = e : r.removeAttribute("src");
213
- this.el.toggleAttribute("data-cover", !!e), this.titleEl.textContent = t.title ?? "", this.artistEl.textContent = [t.artist, t.album].filter(Boolean).join(" · "), this.el.toggleAttribute("data-meta", !!(t.title || t.artist || t.album));
214
- const i = this.vinyl;
215
- this.el.setAttribute("data-position", i ? i.position : "none"), this.el.style.setProperty("--hp-vinyl-size", String((i == null ? void 0 : i.size) ?? v)), this.vinylEl.hidden = !i, this.sleeve.hidden = !!i && i.position === "center", this.disc.setLabel(e || null, t.title || "HopeCore"), this.armHolder.hidden = !(i != null && i.tonearm), this.vinylEl.toggleAttribute("data-scratch", !!(i != null && i.scratch)), this.vinylEl.tabIndex = i ? 0 : -1, i != null && i.scratchSound ? this.ctx.videoEl.paused || this.schedulePrepareSound() : this.disableSound(), this.applyMediaSession(), this.onDurationChange(), this.render(), this.ctx.videoEl.paused || this.onPlay();
212
+ this.options = t;
213
+ const e = t.layout === "compact";
214
+ this.el.setAttribute("data-layout", e ? "compact" : "full"), this.ctx.setBarMeta(
215
+ e ? { title: t.title ?? "", subtitle: [t.artist, t.album].filter(Boolean).join(" · ") } : null
216
+ ), this.vinyl = e ? null : v(t.vinyl);
217
+ const s = t.cover || this.ctx.poster() || "";
218
+ for (const a of [this.backdropImg, this.sleeveImg])
219
+ s ? a.src = s : a.removeAttribute("src");
220
+ this.el.toggleAttribute("data-cover", !!s), this.titleEl.textContent = t.title ?? "", this.artistEl.textContent = [t.artist, t.album].filter(Boolean).join(" · "), this.el.toggleAttribute("data-meta", !!(t.title || t.artist || t.album));
221
+ const r = this.vinyl;
222
+ this.el.setAttribute("data-position", r ? r.position : "none"), this.el.style.setProperty("--hp-vinyl-size", String((r == null ? void 0 : r.size) ?? c)), this.vinylEl.hidden = !r, this.sleeve.hidden = !!r && r.position === "center", this.disc.setLabel(s || null, t.title || "HopeCore"), this.armHolder.hidden = !(r != null && r.tonearm), this.vinylEl.toggleAttribute("data-scratch", !!(r != null && r.scratch)), this.vinylEl.tabIndex = r ? 0 : -1, r != null && r.scratchSound ? this.ctx.videoEl.paused || this.schedulePrepareSound() : this.disableSound(), this.applyMediaSession(), this.onDurationChange(), this.layout(), this.render(), this.ctx.videoEl.paused || this.onPlay();
223
+ }
224
+ /** Kapak / plak yüksekliği: alan yüksekliğinin `size` katı, genişliğe sığacak kadar (kılıf + yarım plak ≈ 1,46 H). */
225
+ layout() {
226
+ var o, l;
227
+ if (!this.el.isConnected) return;
228
+ const t = this.areaEl.clientWidth, e = this.areaEl.clientHeight, s = ((o = this.vinyl) == null ? void 0 : o.size) ?? ((l = v(this.options.vinyl)) == null ? void 0 : l.size) ?? c, r = !!this.vinyl && this.vinyl.position !== "center", a = Math.max(0, Math.min(s * e, (r ? 0.62 : 0.9) * t));
229
+ this.el.style.setProperty("--hp-deck-h", `${Math.round(a * 10) / 10}px`), a > 0 && !this.el.hasAttribute("data-laid-out") && requestAnimationFrame(() => requestAnimationFrame(() => this.el.setAttribute("data-laid-out", ""))), this.el.toggleAttribute("data-short", this.el.clientHeight > 0 && this.el.clientHeight < w);
216
230
  }
217
231
  // ── Scratch sesi ────────────────────────────────────────────────────
218
232
  loadSound() {
219
233
  return this.sound ? Promise.resolve(this.sound) : (this.soundImport ?? (this.soundImport = import("./ScratchSound-0XKHUcJK.js").then(({ ScratchSound: t }) => {
220
234
  var e;
221
- return !((e = this.vinyl) != null && e.scratchSound) || !t.isSupported() ? (this.el.setAttribute("data-scratch-sound", "unsupported"), null) : (this.sound ?? (this.sound = new t(this.ctx.videoEl)), this.sound.onStateChange = (i) => this.el.setAttribute("data-scratch-sound", i), this.sound);
235
+ return !((e = this.vinyl) != null && e.scratchSound) || !t.isSupported() ? (this.el.setAttribute("data-scratch-sound", "unsupported"), null) : (this.sound ?? (this.sound = new t(this.ctx.videoEl)), this.sound.onStateChange = (s) => this.el.setAttribute("data-scratch-sound", s), this.sound);
222
236
  }).catch(() => null).finally(() => {
223
237
  this.soundImport = null;
224
238
  })), this.soundImport);
@@ -228,8 +242,8 @@ const d = class d {
228
242
  var t, e;
229
243
  !((t = this.vinyl) != null && t.scratchSound) || this.prepareTimer || (e = this.sound) != null && e.ready || (this.prepareTimer = setTimeout(() => {
230
244
  this.prepareTimer = null;
231
- const i = () => void this.loadSound().then((r) => r == null ? void 0 : r.prepare());
232
- "requestIdleCallback" in window ? window.requestIdleCallback(i, { timeout: 2e3 }) : i();
245
+ const s = () => void this.loadSound().then((r) => r == null ? void 0 : r.prepare());
246
+ "requestIdleCallback" in window ? window.requestIdleCallback(s, { timeout: 2e3 }) : s();
233
247
  }, 300));
234
248
  }
235
249
  disableSound() {
@@ -242,7 +256,7 @@ const d = class d {
242
256
  // ── Dönüş ────────────────────────────────────────────────────────────
243
257
  get secondsPerTurn() {
244
258
  var t;
245
- return 60 / (((t = this.vinyl) == null ? void 0 : t.rpm) ?? g);
259
+ return 60 / (((t = this.vinyl) == null ? void 0 : t.rpm) ?? f);
246
260
  }
247
261
  angleForTime(t) {
248
262
  return t / this.secondsPerTurn * 360 % 360;
@@ -258,32 +272,32 @@ const d = class d {
258
272
  }
259
273
  // ── Media Session ───────────────────────────────────────────────────
260
274
  ownsMediaSession() {
261
- return this.options.mediaSession !== !1 && "mediaSession" in navigator && d.sessionOwner === this;
275
+ return this.options.mediaSession !== !1 && "mediaSession" in navigator && h.sessionOwner === this;
262
276
  }
263
277
  applyMediaSession() {
264
278
  if (this.options.mediaSession === !1 || !("mediaSession" in navigator) || typeof MediaMetadata > "u") return;
265
- const t = d.sessionOwner;
279
+ const t = h.sessionOwner;
266
280
  if (t && t !== this && !t.ctx.videoEl.paused && this.ctx.videoEl.paused) return;
267
- d.sessionOwner = this;
268
- const e = this.options, i = e.cover || this.ctx.poster(), r = navigator.mediaSession;
281
+ h.sessionOwner = this;
282
+ const e = this.options, s = e.cover || this.ctx.poster(), r = navigator.mediaSession;
269
283
  r.metadata = new MediaMetadata({
270
284
  title: e.title ?? "",
271
285
  artist: e.artist ?? "",
272
286
  album: e.album ?? "",
273
- artwork: i ? [{ src: new URL(i, document.baseURI).href }] : []
287
+ artwork: s ? [{ src: new URL(s, document.baseURI).href }] : []
274
288
  });
275
- const a = this.ctx.videoEl, l = (o, h) => {
289
+ const a = this.ctx.videoEl, o = (l, d) => {
276
290
  try {
277
- r.setActionHandler(o, h);
291
+ r.setActionHandler(l, d);
278
292
  } catch {
279
293
  }
280
294
  };
281
- l("play", () => this.ctx.play()), l("pause", () => a.pause()), l("seekbackward", (o) => a.currentTime = Math.max(0, a.currentTime - (o.seekOffset ?? p))), l("seekforward", (o) => a.currentTime = Math.min(a.duration || 1 / 0, a.currentTime + (o.seekOffset ?? p))), l("seekto", (o) => {
282
- typeof o.seekTime == "number" && (a.currentTime = o.seekTime);
295
+ o("play", () => this.ctx.play()), o("pause", () => a.pause()), o("seekbackward", (l) => a.currentTime = Math.max(0, a.currentTime - (l.seekOffset ?? m))), o("seekforward", (l) => a.currentTime = Math.min(a.duration || 1 / 0, a.currentTime + (l.seekOffset ?? m))), o("seekto", (l) => {
296
+ typeof l.seekTime == "number" && (a.currentTime = l.seekTime);
283
297
  }), this.updatePositionState();
284
298
  }
285
299
  releaseMediaSession() {
286
- if (d.sessionOwner !== this || (d.sessionOwner = null, !("mediaSession" in navigator))) return;
300
+ if (h.sessionOwner !== this || (h.sessionOwner = null, !("mediaSession" in navigator))) return;
287
301
  const t = navigator.mediaSession;
288
302
  t.metadata = null;
289
303
  for (const e of ["play", "pause", "seekbackward", "seekforward", "seekto"])
@@ -293,19 +307,20 @@ const d = class d {
293
307
  }
294
308
  }
295
309
  destroy() {
310
+ var e;
296
311
  cancelAnimationFrame(this.frame), cancelAnimationFrame(this.seekFrame);
297
312
  const t = this.ctx.videoEl;
298
- t.removeEventListener("play", this.onPlay), t.removeEventListener("pause", this.onPause), t.removeEventListener("ended", this.onPause), t.removeEventListener("seeked", this.render), t.removeEventListener("timeupdate", this.onTimeUpdate), t.removeEventListener("durationchange", this.onDurationChange), t.removeEventListener("ratechange", this.updatePositionState), t.removeEventListener("emptied", this.render), this.releaseMediaSession(), this.disableSound(), this.el.remove();
313
+ t.removeEventListener("play", this.onPlay), t.removeEventListener("pause", this.onPause), t.removeEventListener("ended", this.onPause), t.removeEventListener("seeked", this.render), t.removeEventListener("timeupdate", this.onTimeUpdate), t.removeEventListener("durationchange", this.onDurationChange), t.removeEventListener("ratechange", this.updatePositionState), t.removeEventListener("emptied", this.render), this.releaseMediaSession(), this.disableSound(), (e = this.resizeObserver) == null || e.disconnect(), this.ctx.setBarMeta(null), this.el.remove();
299
314
  }
300
315
  };
301
- s(d, "sessionOwner", null);
302
- let c = d;
303
- function T(n, t) {
304
- const e = new c(n);
316
+ i(h, "sessionOwner", null);
317
+ let u = h;
318
+ function M(n, t) {
319
+ const e = new u(n);
305
320
  return e.update(t), e;
306
321
  }
307
322
  export {
308
- c as AudioStage,
309
- T as installAudioStage
323
+ u as AudioStage,
324
+ M as installAudioStage
310
325
  };
311
- //# sourceMappingURL=index-BgJJr55r.js.map
326
+ //# sourceMappingURL=index-BeJNpAyx.js.map