tmg-media-player 0.0.42 → 0.0.44

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 (190) hide show
  1. package/dist/{chunk-XN5CVECC.js → chunk-2R2AAV4Y.js} +56 -56
  2. package/dist/{chunk-U6XDI2FQ.js → chunk-2VXGUKAW.js} +2 -2
  3. package/dist/chunk-2VXGUKAW.js.map +1 -0
  4. package/dist/{chunk-4JJV6NZM.js → chunk-GS7D7I7X.js} +2 -2
  5. package/dist/{chunk-4JJV6NZM.js.map → chunk-GS7D7I7X.js.map} +1 -1
  6. package/dist/{chunk-6WK4XXTL.js → chunk-MSP3WUNO.js} +4 -4
  7. package/dist/{chunk-C5VHC67O.js → chunk-NGCMGTU6.js} +2 -2
  8. package/dist/{chunk-PXK56QO3.js → chunk-PIHNTBUU.js} +2 -2
  9. package/dist/chunk-PIHNTBUU.js.map +1 -0
  10. package/dist/{chunk-PZWBGXMX.js → chunk-QZLPEALR.js} +3 -3
  11. package/dist/chunk-QZLPEALR.js.map +1 -0
  12. package/dist/{chunk-X24LFSYJ.js → chunk-RKKQSC3R.js} +4 -4
  13. package/dist/chunk-RKKQSC3R.js.map +1 -0
  14. package/dist/{chunk-LQSU7JDG.js → chunk-WA5VZIDC.js} +5 -5
  15. package/dist/{chunk-ROJPK64M.js → chunk-X2PY4DAZ.js} +2 -2
  16. package/dist/{chunk-3JYTCSCR.js → chunk-YE3BZM2J.js} +27 -27
  17. package/dist/{chunk-O6VCD64X.js → chunk-ZWZMWXXS.js} +32 -32
  18. package/dist/components/controls/airplay.js +1 -1
  19. package/dist/components/controls/backward10.js +1 -1
  20. package/dist/components/controls/bigNext.js +1 -1
  21. package/dist/components/controls/bigPlayPause.js +1 -1
  22. package/dist/components/controls/bigPrevious.js +1 -1
  23. package/dist/components/controls/brightness/index.js +1 -1
  24. package/dist/components/controls/captions.js +1 -1
  25. package/dist/components/controls/capture.js +1 -1
  26. package/dist/components/controls/cast.js +1 -1
  27. package/dist/components/controls/expandMiniplayer.js +1 -1
  28. package/dist/components/controls/forward10.js +1 -1
  29. package/dist/components/controls/fullscreen.js +1 -1
  30. package/dist/components/controls/fullscreenLock.js +1 -1
  31. package/dist/components/controls/fullscreenOrientation.js +1 -1
  32. package/dist/components/controls/next.js +1 -1
  33. package/dist/components/controls/objectFit.js +1 -1
  34. package/dist/components/controls/pictureInPicture.js +1 -1
  35. package/dist/components/controls/playPause.js +1 -1
  36. package/dist/components/controls/previous.js +1 -1
  37. package/dist/components/controls/removeMiniplayer.js +1 -1
  38. package/dist/components/controls/settings.js +1 -1
  39. package/dist/components/controls/theater.js +1 -1
  40. package/dist/components/controls/timeline/index.js +1 -1
  41. package/dist/components/controls/voice.js +1 -1
  42. package/dist/components/controls/volume/index.js +1 -1
  43. package/dist/components/holders/airplayPlaceholder.js +1 -1
  44. package/dist/components/holders/castPlaceholder.js +1 -1
  45. package/dist/components/holders/errorPlaceholder.js +1 -1
  46. package/dist/components/holders/pipPlaceholder.js +1 -1
  47. package/dist/components/notifiers/airplay.js +1 -1
  48. package/dist/components/notifiers/brightness.js +1 -1
  49. package/dist/components/notifiers/captions.js +1 -1
  50. package/dist/components/notifiers/capture.js +1 -1
  51. package/dist/components/notifiers/cast.js +1 -1
  52. package/dist/components/notifiers/fastPlay.js +1 -1
  53. package/dist/components/notifiers/fwdBwd.js +1 -1
  54. package/dist/components/notifiers/objectFit.js +1 -1
  55. package/dist/components/notifiers/playPause.js +1 -1
  56. package/dist/components/notifiers/playbackRate.js +1 -1
  57. package/dist/components/notifiers/prevNext.js +1 -1
  58. package/dist/components/notifiers/scrub.js +1 -1
  59. package/dist/components/notifiers/touchBrightness.js +1 -1
  60. package/dist/components/notifiers/touchVolume.js +1 -1
  61. package/dist/components/notifiers/volume.js +1 -1
  62. package/dist/components/notifiers/z-register.js +1 -1
  63. package/dist/components/screenLock.js +1 -1
  64. package/dist/components/z-register.js +1 -1
  65. package/dist/core/controller.js +1 -1
  66. package/dist/index.js +1 -1
  67. package/dist/init.js +1 -1
  68. package/dist/plugs/base/index.js +1 -1
  69. package/dist/plugs/base/slider.js +1 -1
  70. package/dist/plugs/main/ads/index.js +1 -1
  71. package/dist/plugs/main/disabled/index.js +1 -1
  72. package/dist/plugs/main/light/index.js +1 -1
  73. package/dist/plugs/main/playlist/index.js +1 -1
  74. package/dist/plugs/main/skeleton/index.js +1 -1
  75. package/dist/plugs/menus/main/actions.js +1 -1
  76. package/dist/plugs/menus/settings/auto.js +1 -1
  77. package/dist/plugs/menus/settings/frame.js +1 -1
  78. package/dist/plugs/menus/settings/keys.cjs +2 -2
  79. package/dist/plugs/menus/settings/keys.cjs.map +1 -1
  80. package/dist/plugs/menus/settings/keys.js +3 -3
  81. package/dist/plugs/menus/settings/modes.js +1 -1
  82. package/dist/plugs/menus/settings/sleepTimer.js +1 -1
  83. package/dist/plugs/menus/settings/toasts.js +1 -1
  84. package/dist/plugs/menus/settings/voice.js +1 -1
  85. package/dist/plugs/menus/z-register.cjs +2 -2
  86. package/dist/plugs/menus/z-register.cjs.map +1 -1
  87. package/dist/plugs/menus/z-register.js +16 -16
  88. package/dist/plugs/settings/ambience/index.js +1 -1
  89. package/dist/plugs/settings/auto/index.js +1 -1
  90. package/dist/plugs/settings/brightness/index.js +1 -1
  91. package/dist/plugs/settings/captions/index.js +1 -1
  92. package/dist/plugs/settings/controlPanel/draggable.js +1 -1
  93. package/dist/plugs/settings/controlPanel/index.js +1 -1
  94. package/dist/plugs/settings/css/index.js +1 -1
  95. package/dist/plugs/settings/errors/index.js +1 -1
  96. package/dist/plugs/settings/fastPlay/index.js +1 -1
  97. package/dist/plugs/settings/frame/index.cjs +1 -1
  98. package/dist/plugs/settings/frame/index.cjs.map +1 -1
  99. package/dist/plugs/settings/frame/index.js +2 -2
  100. package/dist/plugs/settings/gesture/base.js +1 -1
  101. package/dist/plugs/settings/gesture/index.js +1 -1
  102. package/dist/plugs/settings/gesture/touch.js +1 -1
  103. package/dist/plugs/settings/gesture/wheel.js +1 -1
  104. package/dist/plugs/settings/keys/build.cjs +2 -2
  105. package/dist/plugs/settings/keys/build.cjs.map +1 -1
  106. package/dist/plugs/settings/keys/build.js +1 -1
  107. package/dist/plugs/settings/keys/index.cjs +2 -2
  108. package/dist/plugs/settings/keys/index.cjs.map +1 -1
  109. package/dist/plugs/settings/keys/index.js +3 -3
  110. package/dist/plugs/settings/locked/index.cjs +1 -1
  111. package/dist/plugs/settings/locked/index.cjs.map +1 -1
  112. package/dist/plugs/settings/locked/index.js +2 -2
  113. package/dist/plugs/settings/metadata/index.js +1 -1
  114. package/dist/plugs/settings/modes/airplay.js +1 -1
  115. package/dist/plugs/settings/modes/cast.js +1 -1
  116. package/dist/plugs/settings/modes/fullscreen.js +1 -1
  117. package/dist/plugs/settings/modes/index.js +1 -1
  118. package/dist/plugs/settings/modes/miniplayer.js +1 -1
  119. package/dist/plugs/settings/modes/pictureInPicture.js +1 -1
  120. package/dist/plugs/settings/modes/theater.js +1 -1
  121. package/dist/plugs/settings/notifiers/index.js +1 -1
  122. package/dist/plugs/settings/objectFit/index.js +1 -1
  123. package/dist/plugs/settings/overlay/index.js +1 -1
  124. package/dist/plugs/settings/panel/index.cjs +3 -3
  125. package/dist/plugs/settings/panel/index.cjs.map +1 -1
  126. package/dist/plugs/settings/panel/index.js +2 -2
  127. package/dist/plugs/settings/panel/menu/index.js +1 -1
  128. package/dist/plugs/settings/panel/menu/panel/main.js +1 -1
  129. package/dist/plugs/settings/panel/menu/panel/sub.js +1 -1
  130. package/dist/plugs/settings/panel/menu/widgets/base.js +1 -1
  131. package/dist/plugs/settings/panel/menu/widgets/button.js +1 -1
  132. package/dist/plugs/settings/panel/menu/widgets/color.js +1 -1
  133. package/dist/plugs/settings/panel/menu/widgets/dragselect.js +1 -1
  134. package/dist/plugs/settings/panel/menu/widgets/group.js +1 -1
  135. package/dist/plugs/settings/panel/menu/widgets/index.js +1 -1
  136. package/dist/plugs/settings/panel/menu/widgets/input.js +1 -1
  137. package/dist/plugs/settings/panel/menu/widgets/limits.js +1 -1
  138. package/dist/plugs/settings/panel/menu/widgets/range.js +1 -1
  139. package/dist/plugs/settings/panel/menu/widgets/select.js +1 -1
  140. package/dist/plugs/settings/panel/menu/widgets/toggle.js +1 -1
  141. package/dist/plugs/settings/persist/index.js +1 -1
  142. package/dist/plugs/settings/playbackRate/index.js +1 -1
  143. package/dist/plugs/settings/poster/index.cjs +1 -1
  144. package/dist/plugs/settings/poster/index.cjs.map +1 -1
  145. package/dist/plugs/settings/poster/index.js +2 -2
  146. package/dist/plugs/settings/sleepTimer/index.js +1 -1
  147. package/dist/plugs/settings/time/index.js +1 -1
  148. package/dist/plugs/settings/timeTravel/index.js +1 -1
  149. package/dist/plugs/settings/toasts/index.js +1 -1
  150. package/dist/plugs/settings/voice/index.js +1 -1
  151. package/dist/plugs/settings/volume/index.js +1 -1
  152. package/dist/plugs/z-register.cjs +8 -8
  153. package/dist/plugs/z-register.cjs.map +1 -1
  154. package/dist/plugs/z-register.js +24 -24
  155. package/dist/super/components/index.js +2 -2
  156. package/dist/super/components/notifiers.js +1 -1
  157. package/dist/super/consts.js +5 -5
  158. package/dist/super/plugs/index.cjs +8 -8
  159. package/dist/super/plugs/index.cjs.map +1 -1
  160. package/dist/super/plugs/index.js +71 -71
  161. package/dist/super/plugs/menus.cjs +2 -2
  162. package/dist/super/plugs/menus.cjs.map +1 -1
  163. package/dist/super/plugs/menus.js +35 -35
  164. package/dist/super/techs.js +5 -5
  165. package/dist/super.cjs +8 -8
  166. package/dist/super.cjs.map +1 -1
  167. package/dist/super.global.js +26 -25
  168. package/dist/super.global.js.map +1 -1
  169. package/dist/super.js +56 -56
  170. package/dist/techs/dash.js +1 -1
  171. package/dist/techs/hls.js +1 -1
  172. package/dist/techs/html5.js +1 -1
  173. package/dist/techs/ima.js +1 -1
  174. package/dist/techs/shaka.js +1 -1
  175. package/dist/techs/youtube.js +1 -1
  176. package/dist/techs/z-register.js +1 -1
  177. package/dist/tools/player.js +1 -1
  178. package/dist/tools/runtime/index.js +1 -1
  179. package/package.json +6 -6
  180. package/dist/chunk-PXK56QO3.js.map +0 -1
  181. package/dist/chunk-PZWBGXMX.js.map +0 -1
  182. package/dist/chunk-U6XDI2FQ.js.map +0 -1
  183. package/dist/chunk-X24LFSYJ.js.map +0 -1
  184. /package/dist/{chunk-XN5CVECC.js.map → chunk-2R2AAV4Y.js.map} +0 -0
  185. /package/dist/{chunk-6WK4XXTL.js.map → chunk-MSP3WUNO.js.map} +0 -0
  186. /package/dist/{chunk-C5VHC67O.js.map → chunk-NGCMGTU6.js.map} +0 -0
  187. /package/dist/{chunk-LQSU7JDG.js.map → chunk-WA5VZIDC.js.map} +0 -0
  188. /package/dist/{chunk-ROJPK64M.js.map → chunk-X2PY4DAZ.js.map} +0 -0
  189. /package/dist/{chunk-3JYTCSCR.js.map → chunk-YE3BZM2J.js.map} +0 -0
  190. /package/dist/{chunk-O6VCD64X.js.map → chunk-ZWZMWXXS.js.map} +0 -0
@@ -1,10 +1,3 @@
1
- import {
2
- VoicePlug
3
- } from "./chunk-UCO75OSK.js";
4
- import {
5
- VOICE_BUILD,
6
- VOICE_COMMANDS
7
- } from "./chunk-F6YDG235.js";
8
1
  import {
9
2
  VolumePlug
10
3
  } from "./chunk-I6Q53IPI.js";
@@ -12,14 +5,21 @@ import {
12
5
  VOLUME_BUILD
13
6
  } from "./chunk-Q2XYS26I.js";
14
7
  import {
15
- OverlayPlug
16
- } from "./chunk-AUHJS22O.js";
8
+ VoicePlug
9
+ } from "./chunk-UCO75OSK.js";
17
10
  import {
18
- OVERLAY_BUILD
19
- } from "./chunk-PXU563OY.js";
11
+ VOICE_BUILD,
12
+ VOICE_COMMANDS
13
+ } from "./chunk-F6YDG235.js";
14
+ import {
15
+ PosterPlug
16
+ } from "./chunk-PIHNTBUU.js";
20
17
  import {
21
18
  TimePlug
22
19
  } from "./chunk-XNQILPYL.js";
20
+ import {
21
+ TIME_BUILD
22
+ } from "./chunk-2SZXTLHZ.js";
23
23
  import {
24
24
  TimeTravelPlug
25
25
  } from "./chunk-SUEKTA5D.js";
@@ -27,11 +27,11 @@ import {
27
27
  TIME_TRAVEL_BUILD
28
28
  } from "./chunk-33JQXI7I.js";
29
29
  import {
30
- PosterPlug
31
- } from "./chunk-PXK56QO3.js";
30
+ PlaybackRatePlug
31
+ } from "./chunk-JDC4FBXX.js";
32
32
  import {
33
- POSTER_BUILD
34
- } from "./chunk-MBRGHAFE.js";
33
+ PLAYBACK_RATE_BUILD
34
+ } from "./chunk-K7AAKFQF.js";
35
35
  import {
36
36
  SleepTimerPlug
37
37
  } from "./chunk-PI7JPTSL.js";
@@ -39,27 +39,27 @@ import {
39
39
  SLEEP_TIMER_BUILD
40
40
  } from "./chunk-XLFHANYG.js";
41
41
  import {
42
- TIME_BUILD
43
- } from "./chunk-2SZXTLHZ.js";
44
- import {
45
- PersistPlug
46
- } from "./chunk-JCSBCUKA.js";
47
- import {
48
- PERSIST_BUILD
49
- } from "./chunk-NAUZH3E6.js";
42
+ POSTER_BUILD
43
+ } from "./chunk-MBRGHAFE.js";
50
44
  import {
51
45
  PanelPlug
52
- } from "./chunk-X24LFSYJ.js";
46
+ } from "./chunk-RKKQSC3R.js";
53
47
  import {
54
48
  MENU_FOCUS_SELECTOR,
55
49
  SETTINGS_BUILD
56
50
  } from "./chunk-H3WJQ4QQ.js";
57
51
  import {
58
- PlaybackRatePlug
59
- } from "./chunk-JDC4FBXX.js";
52
+ PersistPlug
53
+ } from "./chunk-JCSBCUKA.js";
60
54
  import {
61
- PLAYBACK_RATE_BUILD
62
- } from "./chunk-K7AAKFQF.js";
55
+ PERSIST_BUILD
56
+ } from "./chunk-NAUZH3E6.js";
57
+ import {
58
+ OverlayPlug
59
+ } from "./chunk-AUHJS22O.js";
60
+ import {
61
+ OVERLAY_BUILD
62
+ } from "./chunk-PXU563OY.js";
63
63
  import {
64
64
  NotifiersPlug
65
65
  } from "./chunk-KST5YWTX.js";
@@ -91,15 +91,15 @@ import {
91
91
  ORIENTATION_OPTS,
92
92
  RESIZE_DIRS
93
93
  } from "./chunk-OBT4ZZUV.js";
94
- import {
95
- KeysPlug
96
- } from "./chunk-ROJPK64M.js";
97
94
  import {
98
95
  LockedPlug
99
- } from "./chunk-4JJV6NZM.js";
96
+ } from "./chunk-GS7D7I7X.js";
100
97
  import {
101
98
  LOCKED_BUILD
102
99
  } from "./chunk-IQS7GQSK.js";
100
+ import {
101
+ KeysPlug
102
+ } from "./chunk-X2PY4DAZ.js";
103
103
  import {
104
104
  MetadataPlug
105
105
  } from "./chunk-65ZJKSNP.js";
@@ -108,7 +108,7 @@ import {
108
108
  } from "./chunk-VZG6IJLU.js";
109
109
  import {
110
110
  FramePlug
111
- } from "./chunk-U6XDI2FQ.js";
111
+ } from "./chunk-2VXGUKAW.js";
112
112
  import {
113
113
  GesturePlug,
114
114
  GestureTouchPin,
@@ -162,6 +162,15 @@ import {
162
162
  APT_AUTOPLAY_OPTIONS,
163
163
  AUTO_BUILD
164
164
  } from "./chunk-ITCB3POV.js";
165
+ import {
166
+ PlaylistPlug
167
+ } from "./chunk-3VN6SCE4.js";
168
+ import {
169
+ LightPlug
170
+ } from "./chunk-AKSQNAZS.js";
171
+ import {
172
+ LIGHT_BUILD
173
+ } from "./chunk-ZFOHXLB2.js";
165
174
  import {
166
175
  BrightnessPlug
167
176
  } from "./chunk-X543EHRV.js";
@@ -174,6 +183,13 @@ import {
174
183
  import {
175
184
  AMBIENT_BUILD
176
185
  } from "./chunk-PPWMZTPS.js";
186
+ import {
187
+ AdsPlug
188
+ } from "./chunk-6CXX7WZO.js";
189
+ import {
190
+ ADS_BUILD,
191
+ AD_ROLL_BUILD
192
+ } from "./chunk-IW5NSWNS.js";
177
193
  import {
178
194
  SkeletonPlug
179
195
  } from "./chunk-EO2SYXX5.js";
@@ -186,31 +202,10 @@ import {
186
202
  import {
187
203
  DISABLED_BUILD
188
204
  } from "./chunk-WW56NFQS.js";
189
- import {
190
- LightPlug
191
- } from "./chunk-AKSQNAZS.js";
192
- import {
193
- LIGHT_BUILD
194
- } from "./chunk-ZFOHXLB2.js";
195
- import {
196
- PlaylistPlug
197
- } from "./chunk-3VN6SCE4.js";
198
- import {
199
- AdsPlug
200
- } from "./chunk-6CXX7WZO.js";
201
- import {
202
- ADS_BUILD,
203
- AD_ROLL_BUILD
204
- } from "./chunk-IW5NSWNS.js";
205
205
  import {
206
206
  BasePin,
207
207
  BasePlug
208
208
  } from "./chunk-5EKOUIF3.js";
209
- import {
210
- CAPTIONS_BUILD,
211
- ROTATE_PATHS,
212
- STYLE_PATHS
213
- } from "./chunk-IFRYW3PY.js";
214
209
  import {
215
210
  CONTROLS,
216
211
  CONTROL_PANEL_BUILD,
@@ -223,7 +218,12 @@ import {
223
218
  KEYS_OVERIDES,
224
219
  KEYS_SHORTCUTS,
225
220
  KEYS_WHITELIST
226
- } from "./chunk-PZWBGXMX.js";
221
+ } from "./chunk-QZLPEALR.js";
222
+ import {
223
+ CAPTIONS_BUILD,
224
+ ROTATE_PATHS,
225
+ STYLE_PATHS
226
+ } from "./chunk-IFRYW3PY.js";
227
227
  import {
228
228
  PLAYLIST_BUILD,
229
229
  PLAY_ITEM_BUILD
@@ -340,4 +340,4 @@ __export(plugs_exports, {
340
340
  export {
341
341
  plugs_exports
342
342
  };
343
- //# sourceMappingURL=chunk-XN5CVECC.js.map
343
+ //# sourceMappingURL=chunk-2R2AAV4Y.js.map
@@ -43,7 +43,7 @@ var FramePlug = class extends BasePlug {
43
43
  wire() {
44
44
  this.media.watch("tech", this.syncFeatures, { init: true, signal: this.signal });
45
45
  this.ctlr.config.watch("settings.frame.disabled", this.syncFeatures, { signal: this.signal });
46
- this.ctlr.learn("capture", { fn: () => this.capture("") }, this.signal);
46
+ this.ctlr.learn("capture", { fn: (e) => this.capture(e?.altKey ? "monochrome" : "") }, this.signal);
47
47
  this.ctlr.learn("timeStepFwd", { fn: () => this.moveFrame("forwards"), keyboard: { phase: "keydown" } }, this.signal);
48
48
  this.ctlr.learn("timeStepBwd", { fn: () => this.moveFrame("backwards"), keyboard: { phase: "keydown" } }, this.signal);
49
49
  super.wire();
@@ -115,4 +115,4 @@ __publicField(FramePlug, "BUILD", FRAME_BUILD);
115
115
  export {
116
116
  FramePlug
117
117
  };
118
- //# sourceMappingURL=chunk-U6XDI2FQ.js.map
118
+ //# sourceMappingURL=chunk-2VXGUKAW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ts/plugs/settings/frame/index.ts"],"sourcesContent":["import { BasePlug } from \"../../base\";\r\nimport type { FrameConfig } from \"./types\";\r\nimport { FRAME_BUILD } from \"./build\";\r\nimport { getDominantColor, getRGBBri, getRGBSat } from \"@utils/color\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { clamp, safeNum } from \"@utils/num\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { formatMediaTime } from \"@utils/time\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { getMediaMin, getMediaMax } from \"@utils/time\";\r\n\r\nexport class FramePlug extends BasePlug<FrameConfig> {\r\n public static readonly plugName = \"frame\";\r\n public static readonly BUILD = FRAME_BUILD;\r\n public exportCanvas: HTMLCanvasElement = createEl(\"canvas\");\r\n public exportCtx: CanvasRenderingContext2D = this.exportCanvas.getContext(\"2d\", { alpha: false })!;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.watch(\"settings.frame.disabled\", this.syncFeatures, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.learn(\"capture\", { fn: (e?: KeyboardEvent) => this.capture(e?.altKey ? \"monochrome\" : \"\") }, this.signal);\r\n this.ctlr.learn(\"timeStepFwd\", { fn: () => this.moveFrame(\"forwards\"), keyboard: { phase: \"keydown\" } }, this.signal);\r\n this.ctlr.learn(\"timeStepBwd\", { fn: () => this.moveFrame(\"backwards\"), keyboard: { phase: \"keydown\" } }, this.signal);\r\n super.wire();\r\n }\r\n\r\n public async extract(display: \"\" | \"monochrome\", time?: number, raw?: false, min?: number, video?: HTMLVideoElement): Promise<{ blob: Blob | null; url: string }>;\r\n public async extract(display: \"\" | \"monochrome\", time?: number, raw?: true, min?: number, video?: HTMLVideoElement): Promise<{ canvas: HTMLCanvasElement; context: CanvasRenderingContext2D }>;\r\n public async extract(display: string = \"\", time = safeNum(this.media.state.currentTime), raw = false, min = 0, video = this.media.pseudoElement as HTMLVideoElement): Promise<any> {\r\n if (!this.media.features.frameCapture) return raw ? { canvas: this.exportCanvas, context: (this.exportCtx.clearRect(0, 0, this.exportCanvas.width, this.exportCanvas.height), this.exportCtx) } : { blob: null, url: \"\" };\r\n if (video !== this.media.element) {\r\n if (this.ctlr.state.frameReadyPromise) await this.ctlr.state.frameReadyPromise; // wait for it to get set by last getter 5 lines below\r\n if (Math.abs(video.currentTime - time) > 0.01 || !video.readyState) {\r\n this.ctlr.state.frameReadyPromise ??= new Promise<null>((res, _, cb = () => (clearTimeout(t), res(null)), t?: any) => ([video.readyState ? \"timeupdate\" : \"loadeddata\", \"error\", \"abort\", \"emptied\"].forEach((ev) => video.addEventListener(ev, cb, { once: true, signal: this.signal })), (t = setTimeout(cb, 15000, this.signal)))); // me sef no small, been burned before this\r\n video.currentTime = time; // small epsilon tolerance for video time comparison - 0.01(10ms)\r\n }\r\n this.ctlr.state.frameReadyPromise = await this.ctlr.state.frameReadyPromise;\r\n }\r\n (this.exportCanvas.width = video.videoWidth || min), (this.exportCanvas.height = video.videoHeight || min);\r\n this.exportCtx.filter = `${this.settings.css.filter as string}${display === \"monochrome\" ? \" grayscale(100%)\" : \"\"}`;\r\n this.exportCtx.drawImage(video, 0, 0, this.exportCanvas.width, this.exportCanvas.height);\r\n this.exportCtx.filter = \"none\";\r\n if (raw === true) return { canvas: this.exportCanvas, context: this.exportCtx };\r\n let blob: Blob | null | false | 0 = null;\r\n try {\r\n blob = (this.exportCanvas.width || this.exportCanvas.height) && (await new Promise<Blob | null>((res) => this.exportCanvas.toBlob(res)));\r\n } catch (err) {\r\n this.ctlr.log(err, \"error\", true); // #LESS: error not worth notifying\r\n }\r\n return { blob: blob || null, url: blob ? URL.createObjectURL(blob) : \"\" };\r\n }\r\n\r\n public async capture(display: \"\" | \"monochrome\" = \"\", time = safeNum(this.media.state.currentTime)): Promise<void> {\r\n if (!this.media.features.frameCapture) return;\r\n this.ctlr.notify?.(\"capture\"); // #STALLING: necessary optimistic distraction\r\n const toast = this.ctlr.toast,\r\n tTxt = formatMediaTime({ time, format: \"human\", showMs: true }),\r\n fTxt = `video frame ${display === \"monochrome\" ? \"in b&w \" : \"\"}at ${tTxt}`,\r\n tId = toast?.loading(`Capturing ${fTxt}...`, { delay: parseCSSTime(this.settings.css.notifiersAnimationTime), image: window.TMG_MEDIA_ALT_IMG_SRC, tag: `tmg-${this.media.settings.metadata.title ?? \"Video\"}fcpa${tTxt}${display}`, signal: this.signal, ...this.config.toast }) as string,\r\n frame = await this.extract(display, time, false, 0, this.media.element as HTMLVideoElement),\r\n filename = `${this.media.settings.metadata.title ?? \"Video\"}_${display === \"monochrome\" ? `black&white_` : \"\"}at_${tTxt}.png`.replace(/[\\/:*?\"<>|\\s]+/g, \"_\"); // system filename safe\r\n const Save = () => {\r\n toast?.loading(tId, { render: `Saving ${fTxt}`, actions: false });\r\n createEl(\"a\", { href: frame.url as string, download: filename })?.click?.();\r\n toast?.success(tId, { delay: 1000, render: `Saved ${fTxt}`, actions: false });\r\n };\r\n const Share = () => {\r\n toast?.loading(tId, { render: `Sharing ${fTxt}`, actions: false });\r\n navigator.share?.({ title: this.media.settings.metadata.title ?? \"Video\", text: `Captured ${fTxt}`, files: [new File([frame.blob!], filename, { type: frame.blob!.type })] }).then(\r\n () => toast?.success(tId, { render: `Shared ${fTxt}`, actions: false }),\r\n () => toast?.error(tId, { render: `Failed sharing ${fTxt}`, autoClose: this.config.toast.autoClose, actions: { Save } })\r\n ) || toast?.warn(tId, { delay: 1000, render: `Couldn't share ${fTxt}`, autoClose: this.config.toast.autoClose, actions: { Save } });\r\n };\r\n frame?.url ? toast?.success(tId, { render: `Captured ${fTxt}`, image: frame.url, actions: { Save, Share }, onClose: () => URL.revokeObjectURL(frame.url), autoClose: this.config.toast.autoClose }) : toast?.error(tId, { render: `Failed capturing ${fTxt}` });\r\n }\r\n\r\n public async getGoodTime({ time: t = safeNum(this.media.state.currentTime), secondsLimit: s = 25, saturation: sat = 12, brightness: bri = 40 } = {}): Promise<number | undefined> {\r\n const end = clamp(getMediaMin(this.media), t + s, getMediaMax(this.media)),\r\n seq = ++this.findSeq;\r\n for (; t <= end; t += 0.333) {\r\n if (seq !== this.findSeq) return;\r\n const rgb = await getDominantColor((await this.extract(\"\", t, true, 1)).canvas, \"rgb\", true);\r\n if (rgb && getRGBBri(rgb) > bri && getRGBSat(rgb) > sat) return t; // <= FIRST legit content frame\r\n }\r\n return;\r\n }\r\n private findSeq = 0;\r\n\r\n public async getMainColor(time?: number, poster = this.media.state.poster, config?: Parameters<typeof this.getGoodTime>[0]): Promise<string | null> {\r\n return getDominantColor(poster ? poster : (await this.extract(\"\", time ?? (await this.getGoodTime(config)), true, 1)).canvas);\r\n }\r\n\r\n public moveFrame(dir: \"forwards\" | \"backwards\" = \"forwards\"): void {\r\n this.media.state.paused && this.ctlr.throttle(\"frameStepping\", () => silence(() => (this.media.intent.currentTime = clamp(getMediaMin(this.media), Math.round(this.media.state.currentTime * this.config.fps) + (dir === \"backwards\" ? -1 : 1), Math.floor(getMediaMax(this.media) * this.config.fps)) / this.config.fps)), Math.round(1000 / this.config.fps));\r\n }\r\n\r\n public syncFeatures(): void {\r\n this.media.tech.polyfill(\"frameCapture\", this.ctlr.isNativeEl && this.media.type === \"video\", this.config.disabled);\r\n }\r\n} // Video only\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.frame\": typeof FramePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n frame: FrameConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaFeaturesExt {\r\n frameCapture: boolean;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
@@ -63,7 +63,7 @@ var LockedPlug = class extends BasePlug {
63
63
  }
64
64
  // #STANDALONE: needs scoped behavior
65
65
  handleScreenClick(e) {
66
- if (!e.target && !this.config.disabled) this.state.visible ? this?.hideOverlay() : this?.showOverlay();
66
+ if (!this.config.disabled && e.target === this.media.container) this.state.visible ? this?.hideOverlay() : this?.showOverlay();
67
67
  }
68
68
  showOverlay() {
69
69
  this.media.container.classList.add("tmg-media-locked-overlay");
@@ -91,4 +91,4 @@ __publicField(LockedPlug, "BUILD", LOCKED_BUILD);
91
91
  export {
92
92
  LockedPlug
93
93
  };
94
- //# sourceMappingURL=chunk-4JJV6NZM.js.map
94
+ //# sourceMappingURL=chunk-GS7D7I7X.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts/plugs/settings/locked/index.ts"],"sourcesContent":["import { BasePlug } from \"../../base\";\r\nimport type { LockedConfig, LockedState } from \"./types\";\r\nimport { LOCKED_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { ScreenLockButton } from \"@components/screenLock\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { setTimeout, mockAsync } from \"@utils/fn\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\n\r\nexport class LockedPlug extends BasePlug<LockedConfig, LockedState> {\r\n public static readonly plugName = \"locked\";\r\n public static readonly BUILD = LOCKED_BUILD;\r\n public lockOverlayDelayId = -1;\r\n public wrapper?: HTMLDivElement;\r\n public control: ScreenLockButton | null = null;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.locked) {\r\n super(ctlr, config, { visible: false });\r\n }\r\n\r\n public override unmount(): void {\r\n this.wrapper?.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.media.container.addEventListener(\"click\", this.handleScreenClick, { signal: this.signal });\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.watch(\"settings.locked.disabled\", this.syncFeatures, { signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.locked\", this.handleLockedIntent, { capture: true, init: this.ctlr.flags.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleLockedIntent(e: REvent<CtlrMedia, \"intent.locked\">): void {\r\n if (e.resolved) return;\r\n const active = this.ctlr.isUIActive(\"locked\");\r\n e.value ? !active && this.enter() : active && this.exit();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected enter(): void {\r\n this.ctlr.plug(\"settings.panel\")?.exitMore();\r\n this.wrapper ??= this.ctlr.DOM.containerContentWrapper?.appendChild(createEl(\"div\", { className: \"tmg-media-locked-wrapper tmg-media-no-pointer\", innerHTML: `<p>Screen Locked</p><p>Tap to Unlock</p>` }));\r\n this.control ??= ComponentRegistry.init(\"screenLock\", this.ctlr);\r\n setTimeout(this.showOverlay, 0, this.signal);\r\n this.media.container.classList.add(\"tmg-media-locked\", \"tmg-media-progress-bar\"), this.media.pseudoContainer.classList.add(\"tmg-media-locked\"); // #TWINING\r\n this.media.state.locked = true;\r\n } // #STANDALONE: suitable partner courtesy\r\n\r\n protected async exit(): Promise<void> {\r\n this.hideOverlay();\r\n await mockAsync(parseCSSTime(this.settings.css.switchTransitionTime));\r\n this.media.container.classList.toggle(\"tmg-media-progress-bar\", this.settings.controlPanel.progressBar);\r\n this.media.container.classList.remove(\"tmg-media-locked\"), this.media.pseudoContainer.classList.remove(\"tmg-media-locked\"); // #TWINING\r\n this.media.state.locked = false;\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected handleScreenClick(e: MouseEvent): void {\r\n if (!e.target && !this.config.disabled) this.state.visible ? this?.hideOverlay() : this?.showOverlay();\r\n }\r\n\r\n public showOverlay(): void {\r\n this.media.container.classList.add(\"tmg-media-locked-overlay\");\r\n this.state.visible = true;\r\n this.delayOverlay();\r\n }\r\n\r\n public hideOverlay(): void {\r\n this.media.container.classList.remove(\"tmg-media-locked-overlay\");\r\n this.state.visible = false;\r\n }\r\n\r\n public delayOverlay(): void {\r\n clearTimeout(this.lockOverlayDelayId);\r\n this.lockOverlayDelayId = setTimeout(this.hideOverlay, this.settings.overlay.delay, this.signal);\r\n }\r\n\r\n public syncFeatures(): void {\r\n this.media.tech.polyfill(\"locked\", true, this.config.disabled);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.control?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.locked\": typeof LockedPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n locked: LockedConfig;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/ts/plugs/settings/locked/index.ts"],"sourcesContent":["import { BasePlug } from \"../../base\";\r\nimport type { LockedConfig, LockedState } from \"./types\";\r\nimport { LOCKED_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { ScreenLockButton } from \"@components/screenLock\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { setTimeout, mockAsync } from \"@utils/fn\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\n\r\nexport class LockedPlug extends BasePlug<LockedConfig, LockedState> {\r\n public static readonly plugName = \"locked\";\r\n public static readonly BUILD = LOCKED_BUILD;\r\n public lockOverlayDelayId = -1;\r\n public wrapper?: HTMLDivElement;\r\n public control: ScreenLockButton | null = null;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.locked) {\r\n super(ctlr, config, { visible: false });\r\n }\r\n\r\n public override unmount(): void {\r\n this.wrapper?.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.media.container.addEventListener(\"click\", this.handleScreenClick, { signal: this.signal });\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.watch(\"settings.locked.disabled\", this.syncFeatures, { signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.locked\", this.handleLockedIntent, { capture: true, init: this.ctlr.flags.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleLockedIntent(e: REvent<CtlrMedia, \"intent.locked\">): void {\r\n if (e.resolved) return;\r\n const active = this.ctlr.isUIActive(\"locked\");\r\n e.value ? !active && this.enter() : active && this.exit();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected enter(): void {\r\n this.ctlr.plug(\"settings.panel\")?.exitMore();\r\n this.wrapper ??= this.ctlr.DOM.containerContentWrapper?.appendChild(createEl(\"div\", { className: \"tmg-media-locked-wrapper tmg-media-no-pointer\", innerHTML: `<p>Screen Locked</p><p>Tap to Unlock</p>` }));\r\n this.control ??= ComponentRegistry.init(\"screenLock\", this.ctlr);\r\n setTimeout(this.showOverlay, 0, this.signal);\r\n this.media.container.classList.add(\"tmg-media-locked\", \"tmg-media-progress-bar\"), this.media.pseudoContainer.classList.add(\"tmg-media-locked\"); // #TWINING\r\n this.media.state.locked = true;\r\n } // #STANDALONE: suitable partner courtesy\r\n\r\n protected async exit(): Promise<void> {\r\n this.hideOverlay();\r\n await mockAsync(parseCSSTime(this.settings.css.switchTransitionTime));\r\n this.media.container.classList.toggle(\"tmg-media-progress-bar\", this.settings.controlPanel.progressBar);\r\n this.media.container.classList.remove(\"tmg-media-locked\"), this.media.pseudoContainer.classList.remove(\"tmg-media-locked\"); // #TWINING\r\n this.media.state.locked = false;\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected handleScreenClick(e: MouseEvent): void {\r\n if (!this.config.disabled && e.target === this.media.container) this.state.visible ? this?.hideOverlay() : this?.showOverlay();\r\n }\r\n\r\n public showOverlay(): void {\r\n this.media.container.classList.add(\"tmg-media-locked-overlay\");\r\n this.state.visible = true;\r\n this.delayOverlay();\r\n }\r\n\r\n public hideOverlay(): void {\r\n this.media.container.classList.remove(\"tmg-media-locked-overlay\");\r\n this.state.visible = false;\r\n }\r\n\r\n public delayOverlay(): void {\r\n clearTimeout(this.lockOverlayDelayId);\r\n this.lockOverlayDelayId = setTimeout(this.hideOverlay, this.settings.overlay.delay, this.signal);\r\n }\r\n\r\n public syncFeatures(): void {\r\n this.media.tech.polyfill(\"locked\", true, this.config.disabled);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.control?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.locked\": typeof LockedPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n locked: LockedConfig;\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAYO,IAAM,aAAN,cAAyB,SAAoC;AAAA,EAOlE,YAAY,MAAkB,SAAS,KAAK,SAAS,QAAQ;AAC3D,UAAM,MAAM,QAAQ,EAAE,SAAS,MAAM,CAAC;AALxC,wBAAO,sBAAqB;AAC5B,wBAAO;AACP,wBAAO,WAAmC;AAAA,EAI1C;AAAA,EAEgB,UAAgB;AAC9B,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA,EAEgB,OAAa;AAE3B,SAAK,MAAM,UAAU,iBAAiB,SAAS,KAAK,mBAAmB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE9F,SAAK,MAAM,MAAM,QAAQ,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/E,SAAK,KAAK,OAAO,MAAM,4BAA4B,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE7F,SAAK,MAAM,GAAG,iBAAiB,KAAK,oBAAoB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,MAAM,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE5I,UAAM,KAAK;AAAA,EACb;AAAA,EAEU,mBAAmB,GAA6C;AACxE,QAAI,EAAE,SAAU;AAChB,UAAM,SAAS,KAAK,KAAK,WAAW,QAAQ;AAC5C,MAAE,QAAQ,CAAC,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK;AACxD,MAAE,QAAQ,KAAK,IAAI;AAAA,EACrB;AAAA,EAEU,QAAc;AACtB,SAAK,KAAK,KAAK,gBAAgB,GAAG,SAAS;AAC3C,SAAK,YAAL,KAAK,UAAY,KAAK,KAAK,IAAI,yBAAyB,YAAY,SAAS,OAAO,EAAE,WAAW,iDAAiD,WAAW,2CAA2C,CAAC,CAAC;AAC1M,SAAK,YAAL,KAAK,UAAY,kBAAkB,KAAK,cAAc,KAAK,IAAI;AAC/D,eAAW,KAAK,aAAa,GAAG,KAAK,MAAM;AAC3C,SAAK,MAAM,UAAU,UAAU,IAAI,oBAAoB,wBAAwB,GAAG,KAAK,MAAM,gBAAgB,UAAU,IAAI,kBAAkB;AAC7I,SAAK,MAAM,MAAM,SAAS;AAAA,EAC5B;AAAA;AAAA,EAEA,MAAgB,OAAsB;AACpC,SAAK,YAAY;AACjB,UAAM,UAAU,aAAa,KAAK,SAAS,IAAI,oBAAoB,CAAC;AACpE,SAAK,MAAM,UAAU,UAAU,OAAO,0BAA0B,KAAK,SAAS,aAAa,WAAW;AACtG,SAAK,MAAM,UAAU,UAAU,OAAO,kBAAkB,GAAG,KAAK,MAAM,gBAAgB,UAAU,OAAO,kBAAkB;AACzH,SAAK,MAAM,MAAM,SAAS;AAAA,EAC5B;AAAA;AAAA,EAEU,kBAAkB,GAAqB;AAC/C,QAAI,CAAC,KAAK,OAAO,YAAY,EAAE,WAAW,KAAK,MAAM,UAAW,MAAK,MAAM,UAAU,MAAM,YAAY,IAAI,MAAM,YAAY;AAAA,EAC/H;AAAA,EAEO,cAAoB;AACzB,SAAK,MAAM,UAAU,UAAU,IAAI,0BAA0B;AAC7D,SAAK,MAAM,UAAU;AACrB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,cAAoB;AACzB,SAAK,MAAM,UAAU,UAAU,OAAO,0BAA0B;AAChE,SAAK,MAAM,UAAU;AAAA,EACvB;AAAA,EAEO,eAAqB;AAC1B,iBAAa,KAAK,kBAAkB;AACpC,SAAK,qBAAqB,WAAW,KAAK,aAAa,KAAK,SAAS,QAAQ,OAAO,KAAK,MAAM;AAAA,EACjG;AAAA,EAEO,eAAqB;AAC1B,SAAK,MAAM,KAAK,SAAS,UAAU,MAAM,KAAK,OAAO,QAAQ;AAAA,EAC/D;AAAA,EAEmB,YAAkB;AACnC,SAAK,SAAS,QAAQ,GAAG,MAAM,UAAU;AAAA,EAC3C;AACF;AA9EE,cADW,YACY,YAAW;AAClC,cAFW,YAEY,SAAQ;","names":[]}
@@ -11,12 +11,12 @@ import {
11
11
  import {
12
12
  HLSTech
13
13
  } from "./chunk-LNING7Z4.js";
14
- import {
15
- ShakaTech
16
- } from "./chunk-5V7L4U3B.js";
17
14
  import {
18
15
  IMATech
19
16
  } from "./chunk-XOAJMIHO.js";
17
+ import {
18
+ ShakaTech
19
+ } from "./chunk-5V7L4U3B.js";
20
20
  import {
21
21
  HTML5Tech
22
22
  } from "./chunk-QT5XXSG7.js";
@@ -46,4 +46,4 @@ __export(techs_exports, {
46
46
  export {
47
47
  techs_exports
48
48
  };
49
- //# sourceMappingURL=chunk-6WK4XXTL.js.map
49
+ //# sourceMappingURL=chunk-MSP3WUNO.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  KEYS_MODS_ACTIONS
3
- } from "./chunk-PZWBGXMX.js";
3
+ } from "./chunk-QZLPEALR.js";
4
4
  import {
5
5
  getUIOpt,
6
6
  isDef
@@ -105,4 +105,4 @@ var getSettingsKeysMenu = (plug) => ({
105
105
  export {
106
106
  getSettingsKeysMenu
107
107
  };
108
- //# sourceMappingURL=chunk-C5VHC67O.js.map
108
+ //# sourceMappingURL=chunk-NGCMGTU6.js.map
@@ -39,7 +39,7 @@ var PosterPlug = class extends BasePlug {
39
39
  this.media.on("state.poster", ({ value }) => this.syncSrc(value), { init: this.ctlr.flags.wired, signal: this.signal });
40
40
  this.media.on("state.paused", ({ value }) => !value && this.config.eager && this.syncState(false), { init: this.ctlr.flags.wired, signal: this.signal });
41
41
  this.media.on("state.currentTime", (e) => (!this.config.eager || e.value) && this.ctlr.when("loadedData", e, () => this.syncState(false), this.signal), { init: this.ctlr.flags.wired, signal: this.signal });
42
- this.media.on("status.loadedMetadata", this.autoGenerate, { init: this.ctlr.flags.wired, signal: this.signal });
42
+ this.media.on("status.loadedData", (e) => e.value && this.autoGenerate(), { init: this.ctlr.flags.wired, signal: this.signal });
43
43
  for (const k of ["ended", "teasing"]) this.media.on(`status.${k}`, this.syncView, { signal: this.signal });
44
44
  super.wire();
45
45
  }
@@ -73,4 +73,4 @@ __publicField(PosterPlug, "BUILD", POSTER_BUILD);
73
73
  export {
74
74
  PosterPlug
75
75
  };
76
- //# sourceMappingURL=chunk-PXK56QO3.js.map
76
+ //# sourceMappingURL=chunk-PIHNTBUU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ts/plugs/settings/poster/index.ts"],"sourcesContent":["import { BasePlug } from \"../../base\";\r\nimport type { PosterConfig, PosterState } from \"./types\";\r\nimport { POSTER_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { isSameURL } from \"@utils/str\";\r\n\r\nexport class PosterPlug extends BasePlug<PosterConfig, PosterState> {\r\n public static readonly plugName = \"poster\";\r\n public static readonly BUILD = POSTER_BUILD;\r\n public element!: HTMLImageElement;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.poster) {\r\n super(ctlr, config, { visible: true });\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.ctlr.DOM.poster = this.element = this.ctlr.syncImgLoadState(createEl(\"img\", { className: \"tmg-media-poster tmg-media-no-pointer tmg-media-filtered tmg-media-object\", alt: \"Poster Image\" }));\r\n // Event Listeners\r\n this.element.addEventListener(\"load\", () => this.ctlr.plug(\"settings.objectFit\")?.syncPosterSize(), { signal: this.signal });\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.element);\r\n }\r\n public override unmount(): void {\r\n this.element.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // State Setters\r\n this.state.set(\"visible\", (v) => this.media.type === \"audio\" || v, { signal: this.signal });\r\n // ---- Listeners\r\n this.state.on(\"visible\", this.syncView, { signal: this.signal });\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.tech.polyfill(\"poster\", true), this.syncView()), { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"type\", this.syncView, { signal: this.signal });\r\n this.media.on(\"intent.poster\", this.handlePosterIntent, { capture: true, init: this.ctlr.flags.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"state.src\", () => this.syncState(true), { signal: this.signal });\r\n this.media.on(\"state.poster\", ({ value }) => this.syncSrc(value), { init: this.ctlr.flags.wired, signal: this.signal });\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.config.eager && this.syncState(false), { init: this.ctlr.flags.wired, signal: this.signal });\r\n this.media.on(\"state.currentTime\", (e) => (!this.config.eager || e.value) && this.ctlr.when(\"loadedData\", e, () => this.syncState(false), this.signal), { init: this.ctlr.flags.wired, signal: this.signal }); // if strict, sets hides like html5, light Plug blocks\r\n this.media.on(\"status.loadedData\", (e) => e.value && this.autoGenerate(), { init: this.ctlr.flags.wired, signal: this.signal });\r\n for (const k of [\"ended\", \"teasing\"] as const) this.media.on(`status.${k}`, this.syncView, { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handlePosterIntent(e: REvent<CtlrMedia, \"intent.poster\">): void {\r\n if (e.resolved) return;\r\n this.media.state.poster = e.value;\r\n this.syncView(), this.syncSrc(); // UX boost\r\n e.resolve(this.name);\r\n }\r\n\r\n protected syncSrc(src = this.media.state.poster): void {\r\n if (!isSameURL(src, this.element.src)) (this.element.dataset.loaded = \"false\"), src ? (this.element.src = src) : this.element.removeAttribute(\"src\");\r\n }\r\n protected syncView(): void {\r\n if (this.media.type === \"audio\") this.media.state.poster ||= window.TMG_MEDIA_ALT_IMG_SRC || \"\";\r\n this.media.container.classList.toggle(\"tmg-media-poster-visible\", this.syncState());\r\n }\r\n protected syncState(bool = this.state.visible): boolean {\r\n return (this.state.visible = !this.media.status.teasing && (bool || (this.config.eager && this.media.status.ended)));\r\n }\r\n\r\n public async autoGenerate(): Promise<void> {\r\n const url = this.media.state.poster;\r\n if (!this.config.allowAutoGenerate || !this.ctlr.isNativeEl || this.media.type === \"audio\" || (url && !url.endsWith(this.ctlr.hash))) return;\r\n const frame = await this.ctlr.plug(\"settings.frame\")?.extract(\"\", this.ctlr.config.light.preview.max);\r\n silence(() => (this.media.intent.poster = frame?.url ? frame.url + this.ctlr.hash : \"\")), url && URL.revokeObjectURL(url.replace(this.ctlr.hash, \"\"));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.poster\": typeof PosterPlug;\r\n }\r\n interface ControllerDOMMap {\r\n poster?: HTMLImageElement | null;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n poster: PosterConfig;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
@@ -63,7 +63,7 @@ var KEYS_SHORTCUTS = {
63
63
  };
64
64
  for (const k in ACTIONS_DICT) KEYS_SHORTCUTS[k] ?? (KEYS_SHORTCUTS[k] = "");
65
65
  var KEYS_OVERIDES = ["Space", "ArrowDown", "ArrowUp", "ArrowLeft", "ArrowRight", "Home", "End"];
66
- var KEYS_WHITELIST = ["Space", "Enter", "Escape", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
66
+ var KEYS_WHITELIST = ["Space", "Escape", "ArrowLeft", "ArrowRight", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
67
67
  var KEYS_MODS_ACTIONS = ["timeSkip", "volume", "brightness", "playbackRate", "captionsFontSize"];
68
68
  var KEYS_BUILD = {
69
69
  disabled: false,
@@ -73,7 +73,7 @@ var KEYS_BUILD = {
73
73
  shortcuts: KEYS_SHORTCUTS,
74
74
  blocks: KEYS_BLOCKS,
75
75
  whitelist: KEYS_WHITELIST,
76
- moddedlist: ["ArrowLeft", "ArrowRight", ...Object.keys(KEYS_SHORTCUTS).filter((k) => KEYS_MODS_ACTIONS.some((m) => k.startsWith(m)))],
76
+ moddedlist: [" ", "arrowleft", "arrowright", ...Object.keys(KEYS_SHORTCUTS).filter((k) => KEYS_MODS_ACTIONS.some((m) => k.startsWith(m))), "capture"],
77
77
  mods: {
78
78
  disabled: false,
79
79
  timeSkip: {
@@ -113,4 +113,4 @@ export {
113
113
  KEYS_MODS_ACTIONS,
114
114
  KEYS_BUILD
115
115
  };
116
- //# sourceMappingURL=chunk-PZWBGXMX.js.map
116
+ //# sourceMappingURL=chunk-QZLPEALR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ts/plugs/settings/keys/build.ts"],"sourcesContent":["import { DeepPartial } from \"sia-reactor\";\r\nimport { KeysConfig } from \"./types\";\r\nimport { KEYS_BLOCKS } from \"@t007/utils\";\r\nimport { ACTIONS_DICT } from \"@consts/actions\";\r\n\r\nexport const KEYS_SHORTCUTS: Record<string, string | string[]> = {\r\n previous: \"Shift+p\",\r\n next: \"Shift+n\",\r\n playPause: \"k\",\r\n mute: \"m\",\r\n dark: \"d\",\r\n timeSkipBwd: \"j\",\r\n timeSkipFwd: \"l\",\r\n timeStart: [\"Home\", \"0\"],\r\n timeEnd: [\"End\"],\r\n timePreviousChapter: \"p\",\r\n timeNextChapter: \"n\",\r\n volumeUp: \"ArrowUp\",\r\n volumeDown: \"ArrowDown\",\r\n brightnessUp: \"y\",\r\n brightnessDown: \"h\",\r\n playbackRateUp: \">\",\r\n playbackRateDown: \"<\",\r\n timeStepFwd: \".\",\r\n timeStepBwd: \",\",\r\n timeFormat: \"z\",\r\n timeMode: \"q\",\r\n capture: \"s\", // screenshot\r\n objectFit: \"a\",\r\n pictureInPicture: \"i\",\r\n theater: \"t\",\r\n fullscreen: \"f\",\r\n captions: \"c\",\r\n captionsFontSizeUp: [\"+\", \"=\"],\r\n captionsFontSizeDown: [\"-\", \"_\"],\r\n captionsFontFamily: \"u\",\r\n captionsFontWeight: \"g\", // g in weight or gravity\r\n captionsFontVariant: \"v\",\r\n captionsFontOpacity: \"o\",\r\n captionsBackgroundOpacity: \"b\",\r\n captionsWindowOpacity: \"w\",\r\n captionsCharacterEdgeStyle: \"e\", // edges\r\n captionsTextAlignment: \"r\", // shift 'r'ight\r\n settings: \"?\",\r\n cast: \"Shift+c\",\r\n airplay: \"Shift+a\",\r\n escape: \"Escape\",\r\n skipAd: \"x\", // like pushing an \"x\" button\r\n timeTravelUndo: [\"Ctrl+z\", \"Cmd+z\"],\r\n timeTravelRedo: [\"Ctrl+y\", \"Ctrl+Shift+z\", \"Cmd+Shift+z\"], // \"Cmd+y\" -> history\r\n voiceWake: \"Shift+v\",\r\n voiceQuit: \"Shift+q\",\r\n voiceSleep: \"Shift+z\", // zz\r\n voiceMute: \"Shift+m\",\r\n};\r\nfor (const k in ACTIONS_DICT) KEYS_SHORTCUTS[k] ??= \"\"; // UX boost\r\n\r\nexport const KEYS_OVERIDES = [\"Space\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"];\r\n\r\nexport const KEYS_WHITELIST = [\"Space\", \"Escape\", \"ArrowLeft\", \"ArrowRight\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]; // \"ArrowUp\", \"ArrowDown\", \"Enter\", \"Home\", \"End\", \"0\",\r\n\r\nexport const KEYS_MODS_ACTIONS = [\"timeSkip\", \"volume\", \"brightness\", \"playbackRate\", \"captionsFontSize\"] as const; // numerical values\r\n\r\nexport const KEYS_BUILD: DeepPartial<KeysConfig> = {\r\n disabled: false,\r\n strictMatch: false,\r\n rankedMatch: true,\r\n overrides: KEYS_OVERIDES,\r\n shortcuts: KEYS_SHORTCUTS,\r\n blocks: KEYS_BLOCKS,\r\n whitelist: KEYS_WHITELIST,\r\n moddedlist: [\" \", \"arrowleft\", \"arrowright\", ...Object.keys(KEYS_SHORTCUTS).filter((k) => KEYS_MODS_ACTIONS.some((m) => k.startsWith(m))), \"capture\"],\r\n mods: {\r\n disabled: false,\r\n timeSkip: {\r\n ctrl: 60,\r\n shift: 10,\r\n },\r\n volume: {\r\n ctrl: 50,\r\n shift: 10,\r\n },\r\n brightness: {\r\n ctrl: 50,\r\n shift: 10,\r\n },\r\n playbackRate: {\r\n ctrl: 1,\r\n }, // \">|<\" has shift\r\n captionsFontSize: {},\r\n },\r\n showOverlay: true,\r\n phase: {\r\n value: \"keyup\",\r\n options: [\r\n { value: \"\", display: \"Default\" },\r\n { value: \"keydown\", display: \"Key down\" },\r\n { value: \"keyup\", display: \"Key up\" },\r\n { value: \"none\", display: \"None\" },\r\n ],\r\n },\r\n};\r\n"],"mappings":";;;;;AAEA,SAAS,mBAAmB;AAGrB,IAAM,iBAAoD;AAAA,EAC/D,UAAU;AAAA,EACV,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW,CAAC,QAAQ,GAAG;AAAA,EACvB,SAAS,CAAC,KAAK;AAAA,EACf,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,SAAS;AAAA;AAAA,EACT,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,oBAAoB,CAAC,KAAK,GAAG;AAAA,EAC7B,sBAAsB,CAAC,KAAK,GAAG;AAAA,EAC/B,oBAAoB;AAAA,EACpB,oBAAoB;AAAA;AAAA,EACpB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,2BAA2B;AAAA,EAC3B,uBAAuB;AAAA,EACvB,4BAA4B;AAAA;AAAA,EAC5B,uBAAuB;AAAA;AAAA,EACvB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA;AAAA,EACR,gBAAgB,CAAC,UAAU,OAAO;AAAA,EAClC,gBAAgB,CAAC,UAAU,gBAAgB,aAAa;AAAA;AAAA,EACxD,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA;AAAA,EACZ,WAAW;AACb;AACA,WAAW,KAAK,aAAc,2CAAsB;AAE7C,IAAM,gBAAgB,CAAC,SAAS,aAAa,WAAW,aAAa,cAAc,QAAQ,KAAK;AAEhG,IAAM,iBAAiB,CAAC,SAAS,UAAU,aAAa,cAAc,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAEjH,IAAM,oBAAoB,CAAC,YAAY,UAAU,cAAc,gBAAgB,kBAAkB;AAEjG,IAAM,aAAsC;AAAA,EACjD,UAAU;AAAA,EACV,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,YAAY,CAAC,KAAK,aAAa,cAAc,GAAG,OAAO,KAAK,cAAc,EAAE,OAAO,CAAC,MAAM,kBAAkB,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;AAAA,EACpJ,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,UAAU;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,IACR;AAAA;AAAA,IACA,kBAAkB,CAAC;AAAA,EACrB;AAAA,EACA,aAAa;AAAA,EACb,OAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,MACP,EAAE,OAAO,IAAI,SAAS,UAAU;AAAA,MAChC,EAAE,OAAO,WAAW,SAAS,WAAW;AAAA,MACxC,EAAE,OAAO,SAAS,SAAS,SAAS;AAAA,MACpC,EAAE,OAAO,QAAQ,SAAS,OAAO;AAAA,IACnC;AAAA,EACF;AACF;","names":[]}
@@ -75,7 +75,7 @@ var PanelPlug = class extends BasePlug {
75
75
  this.ctlr.config.watch("settings.css.brandColor", (v = defs.brand) => (v = v.toLowerCase(), cBField.inputEl.value = v, bField.inputEl.value = !defs.bcolors.includes(v) ? !this.settings.css.syncWithMedia.brandColor ? "custom" : "auto" : v), { init: true, signal: this.signal });
76
76
  this.ctlr.config.watch("settings.css.themeColor", (v = defs.theme) => (v = v.toLowerCase(), cTField.inputEl.value = v, tField.inputEl.value = !defs.tcolors.includes(v) ? !this.settings.css.syncWithMedia.themeColor ? "custom" : "auto" : v), { init: true, signal: this.signal });
77
77
  this.ctlr.DOM.settingsBottomPanel?.append((bWrapper.append(bField, cBField), bWrapper), (tWrapper.append(tField, cTField), tWrapper));
78
- const id = { theme: "", brand: "" }, sync = (cb, req = true, type = "brand") => (this.settings.css.syncWithMedia[`${type}Color`] = req, cb(req)), assert = (opts, type = "brand") => this.ctlr.toast?.update(id[type], { render: `Still here in case you change your choice about the ${type}`, ...opts }), onBColorChange = ({ target: { value: val } }) => this.ctlr.throttle(
78
+ const id = { theme: "", brand: "" }, sync = (cb, req = true, type = "brand") => (this.settings.css.syncWithMedia[`${type}Color`] = req, cb(req)), assert = (opts, type = "brand") => this.ctlr.toast?.update(id[type], opts), onBColorChange = ({ target: { value: val } }) => this.ctlr.throttle(
79
79
  "brandColorPicking",
80
80
  async () => {
81
81
  id.brand && t007.toast?.dismiss(id.brand);
@@ -85,7 +85,7 @@ var PanelPlug = class extends BasePlug {
85
85
  else col = this.settings.css.brandColor = (this.media.status.loadedData ? await this.ctlr.plug("settings.frame")?.getMainColor(this.media.state.currentTime, this.media.features.frameCapture ? "" : void 0) : null) ?? this.ctlr.plug("settings.css")?.build.brandColor;
86
86
  const cb = (s) => bField.inputEl.value = defs.bcolors.includes(col) ? col : s ? "auto" : "custom", No = () => (sync(cb, false), assert({ actions: { Yes } })), Yes = () => (sync(cb, true), assert({ actions: { No } }));
87
87
  sync(cb, val === "auto");
88
- val === "auto" && (id.brand = this.ctlr.toast?.("Should the brand color change anytime a video loads?", { icon: "\u{1F3A8}", autoClose: 15e3, hideProgressBar: false, actions: { Yes, No }, onClose: () => id.brand = "", signal: this.signal }) || "");
88
+ val === "auto" && (id.brand = this.ctlr.toast?.("The brand color will change anytime a video loads", { icon: "\u{1F3A8}", autoClose: 15e3, hideProgressBar: false, actions: { No }, onClose: () => id.brand = "", signal: this.signal }) || "");
89
89
  },
90
90
  150
91
91
  ), onTColorChange = ({ target: { value: val } }) => this.ctlr.throttle(
@@ -98,7 +98,7 @@ var PanelPlug = class extends BasePlug {
98
98
  else col = this.settings.css.themeColor = (this.media.status.loadedData ? await this.ctlr.plug("settings.frame")?.getMainColor(this.media.state.currentTime, this.media.features.frameCapture ? "" : void 0) : null) ?? this.ctlr.plug("settings.css")?.build.themeColor;
99
99
  const cb = (s) => tField.inputEl.value = defs.tcolors.includes(col) ? col : s ? "auto" : "custom", No = () => (sync(cb, false, "theme"), assert({ actions: { Yes } }, "theme")), Yes = () => (sync(cb, true, "theme"), assert({ actions: { No } }, "theme"));
100
100
  sync(cb, val === "auto", "theme");
101
- val === "auto" && (id.theme = this.ctlr.toast?.("Should the theme color change anytime a video loads?", { icon: "\u{1F3A8}", autoClose: 15e3, hideProgressBar: false, actions: { Yes, No }, onClose: () => id.theme = "", signal: this.signal }) || "");
101
+ val === "auto" && (id.theme = this.ctlr.toast?.("The theme color will change anytime a video loads", { icon: "\u{1F3A8}", autoClose: 15e3, hideProgressBar: false, actions: { No }, onClose: () => id.theme = "", signal: this.signal }) || "");
102
102
  },
103
103
  150
104
104
  );
@@ -167,4 +167,4 @@ __publicField(PanelPlug, "BUILD", SETTINGS_BUILD);
167
167
  export {
168
168
  PanelPlug
169
169
  };
170
- //# sourceMappingURL=chunk-X24LFSYJ.js.map
170
+ //# sourceMappingURL=chunk-RKKQSC3R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ts/plugs/settings/panel/index.ts"],"sourcesContent":["import { silence } from \"sia-reactor/modules\";\r\nimport { BasePlug } from \"../../base\";\r\nimport { SETTINGS_BUILD } from \"./build\";\r\nimport type { panelConfig, panelState } from \"./types\";\r\nimport { SettingsMenu } from \"./menu\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { mockAsync } from \"@utils/fn\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { isPOJO } from \"@utils/obj\";\r\n\r\nexport class PanelPlug extends BasePlug<panelConfig, panelState> {\r\n public static readonly plugName = \"panel\";\r\n public static readonly BUILD = SETTINGS_BUILD;\r\n public closeBtn!: HTMLButtonElement | null;\r\n public menu!: SettingsMenu;\r\n protected wasPaused = false;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.panel) {\r\n super(ctlr, config, { viewOpen: false });\r\n this.menu = new SettingsMenu(this.ctlr, this.config.menu);\r\n }\r\n\r\n public override mount(): void {\r\n this.closeBtn = this.ctlr.queryDOM(\".tmg-media-settings-close-btn\")!;\r\n this.menu.onViewClick = this.toggleView;\r\n }\r\n public override unmount(): void {\r\n this.media.container.classList.remove(\"tmg-media-more-settings\");\r\n this.ctlr.queryDOM(\".tmg-media-settings-tips-btn\")?.remove(), this.ctlr.queryDOM(\".tmg-media-settings-brand-wrapper\")?.remove(), this.ctlr.queryDOM(\".tmg-media-settings-theme-wrapper\")?.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.closeBtn?.addEventListener(\"click\", this.exitMore, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.exitMore(), { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.learn(\"settings\", { fn: () => this.menu.toggle(undefined, true) }, this.signal);\r\n !this.config.menu.disabled && this.menu.wire(), super.wire();\r\n }\r\n\r\n public async enterMore(): Promise<void> {\r\n if (this.ctlr.isUIActive(\"moreSettings\")) return;\r\n if (!this.viewReady) this.initView(), (this.viewReady = true);\r\n (this.wasPaused = this.media.state.paused), this.config.autoPause && silence(() => (this.media.intent.paused = true));\r\n !isPOJO(this.menu.anchor) && this.menu.close(), this.media.container.classList.add(\"tmg-media-more-settings\"), (this.state.viewOpen = true);\r\n await mockAsync(parseCSSTime(this.settings.css.panelTransitionTime));\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n this.ctlr.DOM.settings?.removeAttribute(\"inert\"), this.ctlr.DOM.containerContent?.setAttribute(\"inert\", \"\");\r\n !isPOJO(this.menu.anchor) && this.closeBtn?.focus();\r\n } // #STANDALONE: needs scoped behavior\r\n private viewReady = false;\r\n\r\n public async exitMore(): Promise<void> {\r\n if (!this.ctlr.isUIActive(\"moreSettings\")) return;\r\n !isPOJO(this.menu.anchor) && this.menu.close(), this.media.container.classList.remove(\"tmg-media-more-settings\"), (this.state.viewOpen = false);\r\n await mockAsync(parseCSSTime(this.settings.css.panelTransitionTime));\r\n this.config.autoPause && silence(() => (this.media.intent.paused = this.wasPaused));\r\n this.ctlr.DOM.settings?.setAttribute(\"inert\", \"\"), this.ctlr.DOM.containerContent?.removeAttribute(\"inert\");\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n public async toggleView(): Promise<void> {\r\n this.ctlr.isUIActive(\"moreSettings\") ? await this.exitMore() : await this.enterMore();\r\n }\r\n\r\n private initView() {\r\n // Theming\r\n // prettier-ignore\r\n const options = [{ option: \"Light Blue\", value: \"#3198f5\" }, { option: \"Hot Pink\", value: \"#ff69b4\" }, { option: \"Fiery Red\", value: \"#ff0033\" }, { option: \"Dark Turquoise\", value: \"#00ced1\" }, { option: \"Custom Hue\", value: \"custom\" }, { option: \"Video Derived\", value: \"auto\" }],\r\n gcolors = options.slice(0, -2).map((opt) => opt.value),\r\n defs = { brand: this.settings.css.brandColor as string ?? \"#e26e02\", theme: this.settings.css.themeColor as string ?? \"#ffffff\", bcolors: [\"#e26e02\", ...gcolors], tcolors: [\"#ffffff\", ...gcolors] },\r\n bField = t007.field({ type: \"select\", label: \"Brand Color\", helperText: { info: \"Just try changing your brand color for now\" }, options: [{ option: \"Tastey Orange\", value: \"#e26e02\" }, ...options], value: !defs.bcolors.includes(defs.brand as string) ? (!this.settings.css.syncWithMedia.brandColor ? \"custom\" : \"auto\") : defs.brand }),\r\n cBField = t007.field({ type: \"color\" }),\r\n tField = t007.field({ type: \"select\", label: \"Theme Color\", helperText: { info: \"Also try changing your theme color for now\" }, options: [{ option: \"Pure White\", value: \"#ffffff\" }, ...options], value: !defs.tcolors.includes(defs.theme as string) ? (!this.settings.css.syncWithMedia.themeColor ? \"custom\" : \"auto\") : defs.theme }),\r\n cTField = t007.field({ type: \"color\" }),\r\n bWrapper = createEl(\"div\", { className: \"tmg-media-settings-brand-wrapper\" }),\r\n tWrapper = createEl(\"div\", { className: \"tmg-media-settings-theme-wrapper\" });\r\n this.ctlr.config.watch(\"settings.css.brandColor\", (v = defs.brand) => ((v = (v as string).toLowerCase()), (cBField.inputEl.value = v), (bField.inputEl.value = !defs.bcolors.includes(v) ? (!this.settings.css.syncWithMedia.brandColor ? \"custom\" : \"auto\") : v)), { init: true, signal: this.signal });\r\n this.ctlr.config.watch(\"settings.css.themeColor\", (v = defs.theme) => ((v = (v as string).toLowerCase()), (cTField.inputEl.value = v), (tField.inputEl.value = !defs.tcolors.includes(v) ? (!this.settings.css.syncWithMedia.themeColor ? \"custom\" : \"auto\") : v)), { init: true, signal: this.signal });\r\n this.ctlr.DOM.settingsBottomPanel?.append((bWrapper.append(bField, cBField), bWrapper), (tWrapper.append(tField, cTField), tWrapper));\r\n const id = { theme: \"\", brand: \"\" },\r\n sync = (cb: any, req = true, type = \"brand\") => ((this.settings.css.syncWithMedia[`${type}Color`] = req), cb(req)),\r\n assert = (opts: any, type: \"brand\" | \"theme\" = \"brand\") => this.ctlr.toast?.update(id[type], opts),\r\n onBColorChange = ({ target: { value: val } }: any) =>\r\n this.ctlr.throttle(\r\n \"brandColorPicking\",\r\n async () => {\r\n id.brand && t007.toast?.dismiss(id.brand);\r\n let col;\r\n if (val === \"custom\") return cBField.inputEl.click();\r\n if (val !== \"auto\") col = this.settings.css.brandColor = val;\r\n else col = this.settings.css.brandColor = (this.media.status.loadedData ? await this.ctlr.plug(\"settings.frame\")?.getMainColor(this.media.state.currentTime, this.media.features.frameCapture ? \"\" : undefined) : null) ?? this.ctlr.plug(\"settings.css\")?.build.brandColor!; // said 'video' not 'poster' derived\r\n const cb = (s: any) => (bField.inputEl.value = defs.bcolors.includes(col as string) ? (col as string) : s ? \"auto\" : \"custom\"),\r\n No = () => (sync(cb, false), assert({ actions: { Yes } })),\r\n Yes = () => (sync(cb, true), assert({ actions: { No } }));\r\n sync(cb, val === \"auto\");\r\n val === \"auto\" && (id.brand = this.ctlr.toast?.(\"The brand color will change anytime a video loads\", { icon: \"🎨\", autoClose: 15000, hideProgressBar: false, actions: { No }, onClose: () => (id.brand = \"\"), signal: this.signal }) || \"\");\r\n },\r\n 150\r\n ),\r\n onTColorChange = ({ target: { value: val } }: any) =>\r\n this.ctlr.throttle(\r\n \"themeColorPicking\",\r\n async () => {\r\n id.theme && t007.toast?.dismiss(id.theme);\r\n let col;\r\n if (val === \"custom\") return cTField.inputEl.click();\r\n if (val !== \"auto\") col = this.settings.css.themeColor = val;\r\n else col = this.settings.css.themeColor = (this.media.status.loadedData ? await this.ctlr.plug(\"settings.frame\")?.getMainColor(this.media.state.currentTime, this.media.features.frameCapture ? \"\" : undefined) : null) ?? this.ctlr.plug(\"settings.css\")?.build.themeColor!;\r\n const cb = (s: any) => (tField.inputEl.value = defs.tcolors.includes(col as string) ? (col as string) : s ? \"auto\" : \"custom\"),\r\n No = () => (sync(cb, false, \"theme\"), assert({ actions: { Yes } }, \"theme\")),\r\n Yes = () => (sync(cb, true, \"theme\"), assert({ actions: { No } }, \"theme\"));\r\n sync(cb, val === \"auto\", \"theme\");\r\n val === \"auto\" && (id.theme = this.ctlr.toast?.(\"The theme color will change anytime a video loads\", { icon: \"🎨\", autoClose: 15000, hideProgressBar: false, actions: { No }, onClose: () => (id.theme = \"\"), signal: this.signal }) || \"\");\r\n },\r\n 150\r\n );\r\n bField.inputEl.addEventListener(\"input\", onBColorChange, { signal: this.signal }), cBField.inputEl.addEventListener(\"input\", onBColorChange, { signal: this.signal });\r\n tField.inputEl.addEventListener(\"input\", onTColorChange, { signal: this.signal }), cTField.inputEl.addEventListener(\"input\", onTColorChange, { signal: this.signal });\r\n // Helpful Tips\r\n const tipsBtn = createEl(\"button\", { className: \"tmg-media-settings-tips-btn\", innerHTML: `<span>💡 Did You Know?</span>` });\r\n this.closeBtn?.insertAdjacentElement(\"afterend\", tipsBtn);\r\n tipsBtn.addEventListener(\"click\", this.showTipsDialog, { signal: this.signal });\r\n }\r\n\r\n private getTipsHTML() {\r\n return `\r\n <div style=\"font-family: inherit; color: inherit;\">\r\n <div style=\"text-align: center; margin-bottom: 25px;\">\r\n <h2 style=\"margin: 0 0 10px 0; letter-spacing: -0.5px;\">🎬 Welcome to TVP</h2>\r\n <p style=\"margin: 0; opacity: 0.9; line-height: 1.5;\">\r\n You aren't just watching a video; you're sitting in the cockpit of the most advanced, performance-first media engine on the web. We are thrilled to have you here. \r\n <br><strong>Here is your official flight manual to unlock its full power:</strong>\r\n </p>\r\n </div>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🎛️ The Smart Canvas (Mouse & Touch)</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>Hyper-speed on demand:</strong> Click and hold the right side of the video screen or the play key (<strong>Spacebar</strong>) to fast-forward, left side or <strong>Shift</strong> + play key rewinds.</li>\r\n <li><strong>Smart scrubbing:</strong> Don't hunt for the tiny progress bar. Just scroll horizontally across the middle of the screen to scrub smoothly through time.</li>\r\n <li><strong>Invisible sliders:</strong> Scroll vertically on the <em>right edge</em> for Volume, and the <em>left edge</em> for Brightness.</li>\r\n <li><strong>Precision taps:</strong> Double-tap the edges to skip forward or backward. Double tap the center to toggle Fullscreen (or Play/Pause on mobile).</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🏗️ Total UI Control</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>Build your own player:</strong> Don't like our layout? <strong>Click and drag</strong> almost any button on the bottom control bar to physically rearrange the interface exactly how you want it.</li>\r\n <li><strong>Draggable subtitles:</strong> Subtitles blocking a crucial part of the scene? Just grab the text box and drag it anywhere else on the screen.</li>\r\n <li><strong>The chameleon engine:</strong> Head to settings and set your Brand/Theme colors to \"Video Derived\". TVP will actively analyze the video frames and extract dominant colors to paint the UI dynamically.</li>\r\n <li><strong>Descriptive hints:</strong> Hover over the controls to expose their tooltips and get more information about how to trigger each function.</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">⌨️ Keyboard Ninja Status</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>The playback trinity (J, K, L):</strong> Skip backward, Play/Pause, and Skip forward like a pro editor. Do the same with arrow keys, hold <strong>Ctrl</strong>, <strong>Shift</strong> or <strong>Alt</strong> to spice things up.</li>\r\n <li><strong>Time travel (0 - 9):</strong> Hit any number key to instantly jump to that percentage of the video (e.g., hitting '5' jumps to the exact middle).</li>\r\n <li><strong>Frame-by-frame:</strong> Paused the video? Use <strong>,</strong> (comma) and <strong>.</strong> (period) to step backward or forward one single frame at a time.</li>\r\n <li><strong>Warp speed:</strong> Use <strong>&gt;</strong> and <strong>&lt;</strong> to crank the playback speed up or down.</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🔬 Advanced Window Tech</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 20px;\">\r\n <li><strong>The snapshot engine:</strong> Click the Camera icon or press <strong>s</strong> to screenshot a high-res image of the exact frame. <em>(Easter Egg: Double-Click or press <strong>Alt + s</strong> to capture in pure Black &amp; White!)</em></li>\r\n <li><strong>Ultra-readable time:</strong> Click the time display or press <strong>q</strong> to toggle between elapsed time and remaining time. <em>(Easter Egg: Double-Click or press <strong>z</strong> to display the time in different formats!)</em></li>\r\n <li><strong>Floating miniplayer:</strong> Start playing a video and just scroll down the page. TVP will automatically detach into a draggable miniplayer so you never miss a second.</li>\r\n <li><strong>Custom picture-in-picture:</strong> We bypassed standard browser limits to give you a floating player that actually keeps all your custom UI controls intact.</li>\r\n </ul>\r\n <div style=\"text-align: center; margin-top: 30px; padding: 15px; border-radius: 8px; background: rgba(128, 128, 128, 0.1);\">\r\n <p style=\"margin: 0 0 10px 0;\"><strong>Enjoy the player.</strong> We're still in active development, but already miles ahead. Welcome to the bleeding edge.</p>\r\n <p style=\"margin: 0; opacity: 0.8;\">🧪 <strong>beta tester?</strong> Check the bottom of the page to find the hidden button to travel through linear time, or <a href=\"mailto:tobioketade007@gmail.com\" style=\"color: inherit; text-decoration: underline;\">drop me an email</a> to collaborate!</p>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n private async showTipsDialog() {\r\n await this.exitMore();\r\n t007.alert(this.getTipsHTML(), { id: `${this.ctlr.config.id}-tips-dialog`, rootElement: this.ctlr.DOM.containerContent, confirmText: \"Got it!\" });\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.menu.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.panel\": typeof PanelPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n panel: panelConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n"],"mappings":"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","names":[]}
@@ -9,14 +9,14 @@ import {
9
9
  CONFIG_BUILD,
10
10
  STATE_BUILD
11
11
  } from "./chunk-DZGMINRA.js";
12
- import {
13
- ACTIONS_DICT,
14
- ACTIONS_ENTRIES
15
- } from "./chunk-EEZLT2G2.js";
16
12
  import {
17
13
  FN_KEY,
18
14
  LUID_KEY
19
15
  } from "./chunk-26QMCQE3.js";
16
+ import {
17
+ ACTIONS_DICT,
18
+ ACTIONS_ENTRIES
19
+ } from "./chunk-EEZLT2G2.js";
20
20
  import {
21
21
  __export
22
22
  } from "./chunk-UVKRO5ER.js";
@@ -40,4 +40,4 @@ __export(consts_exports, {
40
40
  export {
41
41
  consts_exports
42
42
  };
43
- //# sourceMappingURL=chunk-LQSU7JDG.js.map
43
+ //# sourceMappingURL=chunk-WA5VZIDC.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-5EKOUIF3.js";
4
4
  import {
5
5
  KEYS_BUILD
6
- } from "./chunk-PZWBGXMX.js";
6
+ } from "./chunk-QZLPEALR.js";
7
7
  import {
8
8
  keyEventAllowed
9
9
  } from "./chunk-JG62LR2N.js";
@@ -90,4 +90,4 @@ __publicField(KeysPlug, "BUILD", KEYS_BUILD);
90
90
  export {
91
91
  KeysPlug
92
92
  };
93
- //# sourceMappingURL=chunk-ROJPK64M.js.map
93
+ //# sourceMappingURL=chunk-X2PY4DAZ.js.map