tmg-media-player 0.0.64 → 0.0.65

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 (281) hide show
  1. package/dist/{chunk-Q2PVLSNG.js → chunk-25REL4ZN.js} +2 -2
  2. package/dist/{chunk-CO6YWIOA.js → chunk-2I6QHYQC.js} +92 -92
  3. package/dist/{chunk-JZZNDOWL.js → chunk-2VPRTOIE.js} +1 -2
  4. package/dist/{chunk-JZZNDOWL.js.map → chunk-2VPRTOIE.js.map} +1 -1
  5. package/dist/{chunk-D4OMTN35.js → chunk-3C5WA6NQ.js} +2 -2
  6. package/dist/{chunk-6V3JMNRX.js → chunk-3KTAU4LB.js} +4 -4
  7. package/dist/{chunk-VMGCCVRJ.js → chunk-3MNXCJXK.js} +17 -13
  8. package/dist/{chunk-VMGCCVRJ.js.map → chunk-3MNXCJXK.js.map} +1 -1
  9. package/dist/{chunk-FI44MLF6.js → chunk-5ZPP3KJI.js} +4 -4
  10. package/dist/{chunk-3NYQJFCX.js → chunk-7LAB4OEC.js} +2 -3
  11. package/dist/chunk-7LAB4OEC.js.map +1 -0
  12. package/dist/{chunk-TQZCDUEH.js → chunk-BAGDFZVR.js} +2 -2
  13. package/dist/{chunk-YE27TO6L.js → chunk-DGS4Z7ZU.js} +1 -2
  14. package/dist/chunk-DGS4Z7ZU.js.map +1 -0
  15. package/dist/{chunk-6ITPIHGM.js → chunk-EAM7QVWC.js} +2 -2
  16. package/dist/{chunk-6ITPIHGM.js.map → chunk-EAM7QVWC.js.map} +1 -1
  17. package/dist/{chunk-AX6N6UEH.js → chunk-ERWKYNVK.js} +5 -5
  18. package/dist/{chunk-XLD6XFKI.js → chunk-G5C4MZHF.js} +2 -3
  19. package/dist/chunk-G5C4MZHF.js.map +1 -0
  20. package/dist/{chunk-DIR774ND.js → chunk-GZRN3Q6A.js} +2 -2
  21. package/dist/{chunk-LDEUMAZQ.js → chunk-H2NWNVAI.js} +2 -2
  22. package/dist/{chunk-C73M5LUY.js → chunk-IW6MFACP.js} +47 -47
  23. package/dist/{chunk-4QFXOHHF.js → chunk-LNAOARU6.js} +5 -5
  24. package/dist/{chunk-F3I7HKUF.js → chunk-OCOHD75Y.js} +9 -9
  25. package/dist/{chunk-GTK5KLUZ.js → chunk-OHQLLCPA.js} +4 -4
  26. package/dist/{chunk-WYDJLWLT.js → chunk-PJBGNEGE.js} +5 -5
  27. package/dist/{chunk-QDGNEBXT.js → chunk-PSGY2S3W.js} +2 -5
  28. package/dist/chunk-PSGY2S3W.js.map +1 -0
  29. package/dist/{chunk-HEMADBDM.js → chunk-QB3DP5ZO.js} +38 -38
  30. package/dist/{chunk-IDOHPT5V.js → chunk-QGERW4TY.js} +2 -2
  31. package/dist/{chunk-L6GEH3VZ.js → chunk-RG5EFXDF.js} +2 -2
  32. package/dist/{chunk-PTA6NO4A.js → chunk-TEQGVO75.js} +4 -4
  33. package/dist/{chunk-X2VCMMOV.js → chunk-TZ2SGV36.js} +7 -7
  34. package/dist/{chunk-ZJFJ23KS.js → chunk-UAMYO73Y.js} +2 -2
  35. package/dist/{chunk-MNIV3ULN.js → chunk-VS6YMOWX.js} +55 -55
  36. package/dist/{chunk-OR3EGSRH.js → chunk-WTKWRIYK.js} +2 -2
  37. package/dist/{chunk-SW3MKGZV.js → chunk-YSKLRJ46.js} +79 -79
  38. package/dist/components/controls/airplay.js +1 -1
  39. package/dist/components/controls/backward10.js +1 -1
  40. package/dist/components/controls/bigNext.js +1 -1
  41. package/dist/components/controls/bigPlayPause.js +1 -1
  42. package/dist/components/controls/bigPrevious.js +1 -1
  43. package/dist/components/controls/brightness/index.js +1 -1
  44. package/dist/components/controls/captions.js +1 -1
  45. package/dist/components/controls/capture.js +1 -1
  46. package/dist/components/controls/cast.js +1 -1
  47. package/dist/components/controls/expandMiniplayer.js +1 -1
  48. package/dist/components/controls/forward10.js +1 -1
  49. package/dist/components/controls/fullscreen.js +1 -1
  50. package/dist/components/controls/fullscreenLock.js +1 -1
  51. package/dist/components/controls/fullscreenOrientation.cjs.map +1 -1
  52. package/dist/components/controls/fullscreenOrientation.js +3 -3
  53. package/dist/components/controls/next.js +1 -1
  54. package/dist/components/controls/objectFit.js +1 -1
  55. package/dist/components/controls/pictureInPicture.js +1 -1
  56. package/dist/components/controls/playPause.js +1 -1
  57. package/dist/components/controls/previous.js +1 -1
  58. package/dist/components/controls/removeMiniplayer.js +1 -1
  59. package/dist/components/controls/settings.js +1 -1
  60. package/dist/components/controls/theater.js +1 -1
  61. package/dist/components/controls/timeline/index.cjs +1 -1
  62. package/dist/components/controls/timeline/index.cjs.map +1 -1
  63. package/dist/components/controls/timeline/index.js +4 -4
  64. package/dist/components/controls/voice.js +1 -1
  65. package/dist/components/controls/volume/index.js +1 -1
  66. package/dist/components/holders/airplayPlaceholder.js +1 -1
  67. package/dist/components/holders/castPlaceholder.js +1 -1
  68. package/dist/components/holders/errorPlaceholder.js +1 -1
  69. package/dist/components/holders/pipPlaceholder.js +1 -1
  70. package/dist/components/icons/z-register.js +25 -25
  71. package/dist/components/notifiers/airplay.js +1 -1
  72. package/dist/components/notifiers/brightness.js +1 -1
  73. package/dist/components/notifiers/captions.js +1 -1
  74. package/dist/components/notifiers/capture.js +1 -1
  75. package/dist/components/notifiers/cast.js +1 -1
  76. package/dist/components/notifiers/fastPlay.js +1 -1
  77. package/dist/components/notifiers/fwdBwd.js +1 -1
  78. package/dist/components/notifiers/objectFit.js +1 -1
  79. package/dist/components/notifiers/playPause.js +1 -1
  80. package/dist/components/notifiers/playbackRate.js +1 -1
  81. package/dist/components/notifiers/prevNext.js +1 -1
  82. package/dist/components/notifiers/scrub.js +1 -1
  83. package/dist/components/notifiers/touchBrightness.js +1 -1
  84. package/dist/components/notifiers/touchVolume.js +1 -1
  85. package/dist/components/notifiers/volume.js +1 -1
  86. package/dist/components/notifiers/z-register.js +1 -1
  87. package/dist/components/screenLock.js +1 -1
  88. package/dist/components/z-register.cjs +1 -1
  89. package/dist/components/z-register.cjs.map +1 -1
  90. package/dist/components/z-register.js +22 -22
  91. package/dist/core/controller.cjs +1 -1
  92. package/dist/core/controller.cjs.map +1 -1
  93. package/dist/core/controller.js +3 -3
  94. package/dist/index.cjs +1 -1
  95. package/dist/index.cjs.map +1 -1
  96. package/dist/index.js +4 -4
  97. package/dist/init.cjs +1 -1
  98. package/dist/init.cjs.map +1 -1
  99. package/dist/init.js +4 -4
  100. package/dist/plugs/base/index.js +1 -1
  101. package/dist/plugs/base/slider.js +1 -1
  102. package/dist/plugs/main/ads/index.cjs +1 -1
  103. package/dist/plugs/main/ads/index.cjs.map +1 -1
  104. package/dist/plugs/main/ads/index.js +4 -4
  105. package/dist/plugs/main/disabled/index.js +1 -1
  106. package/dist/plugs/main/light/index.js +1 -1
  107. package/dist/plugs/main/playlist/index.js +3 -3
  108. package/dist/plugs/main/skeleton/index.js +1 -1
  109. package/dist/plugs/menus/main/actions.cjs.map +1 -1
  110. package/dist/plugs/menus/main/actions.js +3 -3
  111. package/dist/plugs/menus/settings/auto.cjs.map +1 -1
  112. package/dist/plugs/menus/settings/auto.js +3 -3
  113. package/dist/plugs/menus/settings/frame.cjs.map +1 -1
  114. package/dist/plugs/menus/settings/frame.js +3 -3
  115. package/dist/plugs/menus/settings/keys.js +1 -1
  116. package/dist/plugs/menus/settings/modes.cjs.map +1 -1
  117. package/dist/plugs/menus/settings/modes.js +3 -3
  118. package/dist/plugs/menus/settings/sleepTimer.cjs.map +1 -1
  119. package/dist/plugs/menus/settings/sleepTimer.js +3 -3
  120. package/dist/plugs/menus/settings/toasts.cjs.map +1 -1
  121. package/dist/plugs/menus/settings/toasts.js +3 -3
  122. package/dist/plugs/menus/settings/voice.cjs.map +1 -1
  123. package/dist/plugs/menus/settings/voice.js +3 -3
  124. package/dist/plugs/menus/z-register.cjs.map +1 -1
  125. package/dist/plugs/menus/z-register.js +3 -3
  126. package/dist/plugs/settings/ambience/index.js +1 -1
  127. package/dist/plugs/settings/auto/index.cjs.map +1 -1
  128. package/dist/plugs/settings/auto/index.js +3 -3
  129. package/dist/plugs/settings/brightness/index.js +1 -1
  130. package/dist/plugs/settings/captions/index.cjs +1 -1
  131. package/dist/plugs/settings/captions/index.cjs.map +1 -1
  132. package/dist/plugs/settings/captions/index.js +5 -5
  133. package/dist/plugs/settings/controlPanel/draggable.js +3 -3
  134. package/dist/plugs/settings/controlPanel/index.js +3 -3
  135. package/dist/plugs/settings/css/index.js +1 -1
  136. package/dist/plugs/settings/errors/index.js +1 -1
  137. package/dist/plugs/settings/fastPlay/index.js +1 -1
  138. package/dist/plugs/settings/frame/index.js +1 -1
  139. package/dist/plugs/settings/gesture/base.js +1 -1
  140. package/dist/plugs/settings/gesture/index.js +1 -1
  141. package/dist/plugs/settings/gesture/touch.js +1 -1
  142. package/dist/plugs/settings/gesture/wheel.js +1 -1
  143. package/dist/plugs/settings/keys/index.js +3 -3
  144. package/dist/plugs/settings/locked/index.js +1 -1
  145. package/dist/plugs/settings/metadata/index.js +1 -1
  146. package/dist/plugs/settings/modes/airplay.cjs +0 -1
  147. package/dist/plugs/settings/modes/airplay.cjs.map +1 -1
  148. package/dist/plugs/settings/modes/airplay.js +5 -5
  149. package/dist/plugs/settings/modes/cast.cjs +0 -1
  150. package/dist/plugs/settings/modes/cast.cjs.map +1 -1
  151. package/dist/plugs/settings/modes/cast.js +5 -5
  152. package/dist/plugs/settings/modes/fullscreen.cjs +0 -1
  153. package/dist/plugs/settings/modes/fullscreen.cjs.map +1 -1
  154. package/dist/plugs/settings/modes/fullscreen.js +4 -4
  155. package/dist/plugs/settings/modes/index.cjs +0 -3
  156. package/dist/plugs/settings/modes/index.cjs.map +1 -1
  157. package/dist/plugs/settings/modes/index.js +4 -4
  158. package/dist/plugs/settings/modes/miniplayer.cjs.map +1 -1
  159. package/dist/plugs/settings/modes/miniplayer.js +4 -4
  160. package/dist/plugs/settings/modes/pictureInPicture.cjs +0 -1
  161. package/dist/plugs/settings/modes/pictureInPicture.cjs.map +1 -1
  162. package/dist/plugs/settings/modes/pictureInPicture.js +4 -4
  163. package/dist/plugs/settings/modes/theater.cjs +0 -1
  164. package/dist/plugs/settings/modes/theater.cjs.map +1 -1
  165. package/dist/plugs/settings/modes/theater.js +4 -4
  166. package/dist/plugs/settings/notifiers/index.js +1 -1
  167. package/dist/plugs/settings/objectFit/index.js +1 -1
  168. package/dist/plugs/settings/overlay/index.js +1 -1
  169. package/dist/plugs/settings/panel/index.js +1 -1
  170. package/dist/plugs/settings/panel/menu/index.js +1 -1
  171. package/dist/plugs/settings/panel/menu/panel/main.js +1 -1
  172. package/dist/plugs/settings/panel/menu/panel/sub.js +1 -1
  173. package/dist/plugs/settings/panel/menu/widgets/base.js +1 -1
  174. package/dist/plugs/settings/panel/menu/widgets/button.js +1 -1
  175. package/dist/plugs/settings/panel/menu/widgets/color.js +1 -1
  176. package/dist/plugs/settings/panel/menu/widgets/dragselect.js +1 -1
  177. package/dist/plugs/settings/panel/menu/widgets/group.js +1 -1
  178. package/dist/plugs/settings/panel/menu/widgets/index.js +1 -1
  179. package/dist/plugs/settings/panel/menu/widgets/input.js +1 -1
  180. package/dist/plugs/settings/panel/menu/widgets/limits.js +1 -1
  181. package/dist/plugs/settings/panel/menu/widgets/range.js +1 -1
  182. package/dist/plugs/settings/panel/menu/widgets/select.js +1 -1
  183. package/dist/plugs/settings/panel/menu/widgets/toggle.js +1 -1
  184. package/dist/plugs/settings/persist/index.js +1 -1
  185. package/dist/plugs/settings/playbackRate/index.js +1 -1
  186. package/dist/plugs/settings/poster/index.js +1 -1
  187. package/dist/plugs/settings/sleepTimer/index.js +1 -1
  188. package/dist/plugs/settings/time/index.cjs +0 -1
  189. package/dist/plugs/settings/time/index.cjs.map +1 -1
  190. package/dist/plugs/settings/time/index.js +2 -2
  191. package/dist/plugs/settings/timeTravel/index.cjs.map +1 -1
  192. package/dist/plugs/settings/timeTravel/index.js +4 -4
  193. package/dist/plugs/settings/toasts/index.js +1 -1
  194. package/dist/plugs/settings/voice/index.cjs +0 -1
  195. package/dist/plugs/settings/voice/index.cjs.map +1 -1
  196. package/dist/plugs/settings/voice/index.js +4 -4
  197. package/dist/plugs/settings/volume/index.cjs.map +1 -1
  198. package/dist/plugs/settings/volume/index.js +4 -4
  199. package/dist/plugs/z-register.cjs +1 -8
  200. package/dist/plugs/z-register.cjs.map +1 -1
  201. package/dist/plugs/z-register.js +44 -44
  202. package/dist/super/components/icons.js +55 -55
  203. package/dist/super/components/index.cjs +1 -1
  204. package/dist/super/components/index.cjs.map +1 -1
  205. package/dist/super/components/index.js +99 -99
  206. package/dist/super/components/notifiers.js +1 -1
  207. package/dist/super/consts.js +5 -5
  208. package/dist/super/plugs/index.cjs +1 -8
  209. package/dist/super/plugs/index.cjs.map +1 -1
  210. package/dist/super/plugs/index.js +95 -95
  211. package/dist/super/plugs/menus.cjs.map +1 -1
  212. package/dist/super/plugs/menus.js +3 -3
  213. package/dist/super/techs.cjs +14 -10
  214. package/dist/super/techs.cjs.map +1 -1
  215. package/dist/super/techs.js +14 -14
  216. package/dist/super.cjs +14 -17
  217. package/dist/super.cjs.map +1 -1
  218. package/dist/super.global.js +14 -17
  219. package/dist/super.global.js.map +1 -1
  220. package/dist/super.js +104 -104
  221. package/dist/techs/base.cjs +1 -1
  222. package/dist/techs/base.cjs.map +1 -1
  223. package/dist/techs/base.js +1 -1
  224. package/dist/techs/dash.cjs +1 -1
  225. package/dist/techs/dash.cjs.map +1 -1
  226. package/dist/techs/dash.js +4 -4
  227. package/dist/techs/hls.cjs +1 -1
  228. package/dist/techs/hls.cjs.map +1 -1
  229. package/dist/techs/hls.js +4 -4
  230. package/dist/techs/html5.cjs +1 -1
  231. package/dist/techs/html5.cjs.map +1 -1
  232. package/dist/techs/html5.js +3 -3
  233. package/dist/techs/ima.cjs +1 -1
  234. package/dist/techs/ima.cjs.map +1 -1
  235. package/dist/techs/ima.js +3 -3
  236. package/dist/techs/shaka.cjs +1 -1
  237. package/dist/techs/shaka.cjs.map +1 -1
  238. package/dist/techs/shaka.js +4 -4
  239. package/dist/techs/vimeo.cjs +1 -1
  240. package/dist/techs/vimeo.cjs.map +1 -1
  241. package/dist/techs/vimeo.js +2 -2
  242. package/dist/techs/youtube.cjs +14 -10
  243. package/dist/techs/youtube.cjs.map +1 -1
  244. package/dist/techs/youtube.js +4 -4
  245. package/dist/techs/z-register.cjs +14 -10
  246. package/dist/techs/z-register.cjs.map +1 -1
  247. package/dist/techs/z-register.js +9 -9
  248. package/dist/tools/player.cjs +1 -1
  249. package/dist/tools/player.cjs.map +1 -1
  250. package/dist/tools/player.js +3 -3
  251. package/dist/tools/runtime/index.cjs +1 -1
  252. package/dist/tools/runtime/index.cjs.map +1 -1
  253. package/dist/tools/runtime/index.js +3 -3
  254. package/package.json +1 -1
  255. package/dist/chunk-3NYQJFCX.js.map +0 -1
  256. package/dist/chunk-QDGNEBXT.js.map +0 -1
  257. package/dist/chunk-XLD6XFKI.js.map +0 -1
  258. package/dist/chunk-YE27TO6L.js.map +0 -1
  259. /package/dist/{chunk-Q2PVLSNG.js.map → chunk-25REL4ZN.js.map} +0 -0
  260. /package/dist/{chunk-CO6YWIOA.js.map → chunk-2I6QHYQC.js.map} +0 -0
  261. /package/dist/{chunk-D4OMTN35.js.map → chunk-3C5WA6NQ.js.map} +0 -0
  262. /package/dist/{chunk-6V3JMNRX.js.map → chunk-3KTAU4LB.js.map} +0 -0
  263. /package/dist/{chunk-FI44MLF6.js.map → chunk-5ZPP3KJI.js.map} +0 -0
  264. /package/dist/{chunk-TQZCDUEH.js.map → chunk-BAGDFZVR.js.map} +0 -0
  265. /package/dist/{chunk-AX6N6UEH.js.map → chunk-ERWKYNVK.js.map} +0 -0
  266. /package/dist/{chunk-DIR774ND.js.map → chunk-GZRN3Q6A.js.map} +0 -0
  267. /package/dist/{chunk-LDEUMAZQ.js.map → chunk-H2NWNVAI.js.map} +0 -0
  268. /package/dist/{chunk-C73M5LUY.js.map → chunk-IW6MFACP.js.map} +0 -0
  269. /package/dist/{chunk-4QFXOHHF.js.map → chunk-LNAOARU6.js.map} +0 -0
  270. /package/dist/{chunk-F3I7HKUF.js.map → chunk-OCOHD75Y.js.map} +0 -0
  271. /package/dist/{chunk-GTK5KLUZ.js.map → chunk-OHQLLCPA.js.map} +0 -0
  272. /package/dist/{chunk-WYDJLWLT.js.map → chunk-PJBGNEGE.js.map} +0 -0
  273. /package/dist/{chunk-HEMADBDM.js.map → chunk-QB3DP5ZO.js.map} +0 -0
  274. /package/dist/{chunk-IDOHPT5V.js.map → chunk-QGERW4TY.js.map} +0 -0
  275. /package/dist/{chunk-L6GEH3VZ.js.map → chunk-RG5EFXDF.js.map} +0 -0
  276. /package/dist/{chunk-PTA6NO4A.js.map → chunk-TEQGVO75.js.map} +0 -0
  277. /package/dist/{chunk-X2VCMMOV.js.map → chunk-TZ2SGV36.js.map} +0 -0
  278. /package/dist/{chunk-ZJFJ23KS.js.map → chunk-UAMYO73Y.js.map} +0 -0
  279. /package/dist/{chunk-MNIV3ULN.js.map → chunk-VS6YMOWX.js.map} +0 -0
  280. /package/dist/{chunk-OR3EGSRH.js.map → chunk-WTKWRIYK.js.map} +0 -0
  281. /package/dist/{chunk-SW3MKGZV.js.map → chunk-YSKLRJ46.js.map} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-W5JTSVSF.js";
7
7
  import {
8
8
  getCtlrIdx
9
- } from "./chunk-6V3JMNRX.js";
9
+ } from "./chunk-3KTAU4LB.js";
10
10
  import {
11
11
  isArr
12
12
  } from "./chunk-ZNFV73SP.js";
@@ -63,4 +63,4 @@ __publicField(TimeTravelPlug, "BUILD", TIME_TRAVEL_BUILD);
63
63
  export {
64
64
  TimeTravelPlug
65
65
  };
66
- //# sourceMappingURL=chunk-Q2PVLSNG.js.map
66
+ //# sourceMappingURL=chunk-25REL4ZN.js.map
@@ -55,30 +55,12 @@ import {
55
55
  import {
56
56
  BaseNotifier
57
57
  } from "./chunk-GLIPLLR7.js";
58
- import {
59
- unlock
60
- } from "./chunk-TMTWPBFD.js";
61
- import {
62
- videoTrack
63
- } from "./chunk-AIJWNUXU.js";
64
- import {
65
- volumeHigh
66
- } from "./chunk-HBLGQTSF.js";
67
58
  import {
68
59
  volumeLow
69
60
  } from "./chunk-4G5GHO4D.js";
70
61
  import {
71
62
  volumeMuted
72
63
  } from "./chunk-VZQ7TOGL.js";
73
- import {
74
- settings
75
- } from "./chunk-2J3FJY73.js";
76
- import {
77
- shuffle
78
- } from "./chunk-OEHNS7YX.js";
79
- import {
80
- sort
81
- } from "./chunk-QP2X53HC.js";
82
64
  import {
83
65
  subtitles
84
66
  } from "./chunk-D7JQDN74.js";
@@ -95,14 +77,14 @@ import {
95
77
  tripleTriangleRight
96
78
  } from "./chunk-ZTOANBNR.js";
97
79
  import {
98
- play
99
- } from "./chunk-ELI54OVR.js";
80
+ unlock
81
+ } from "./chunk-TMTWPBFD.js";
100
82
  import {
101
- playbackRate
102
- } from "./chunk-C3IEUYR3.js";
83
+ videoTrack
84
+ } from "./chunk-AIJWNUXU.js";
103
85
  import {
104
- playlist
105
- } from "./chunk-KLAI7YSD.js";
86
+ volumeHigh
87
+ } from "./chunk-HBLGQTSF.js";
106
88
  import {
107
89
  previous
108
90
  } from "./chunk-65HPQXXZ.js";
@@ -119,14 +101,14 @@ import {
119
101
  returnBack
120
102
  } from "./chunk-BHHFZM5D.js";
121
103
  import {
122
- loop
123
- } from "./chunk-OSDM6ZVT.js";
104
+ settings
105
+ } from "./chunk-2J3FJY73.js";
124
106
  import {
125
- mic
126
- } from "./chunk-PEKXIISU.js";
107
+ shuffle
108
+ } from "./chunk-OEHNS7YX.js";
127
109
  import {
128
- next
129
- } from "./chunk-MP2GRDUX.js";
110
+ sort
111
+ } from "./chunk-QP2X53HC.js";
130
112
  import {
131
113
  objectFitContain
132
114
  } from "./chunk-KQU2L5UM.js";
@@ -143,14 +125,14 @@ import {
143
125
  pipPlaceholder
144
126
  } from "./chunk-7CRW7VGS.js";
145
127
  import {
146
- exitFullscreen
147
- } from "./chunk-DR2VKENG.js";
128
+ play
129
+ } from "./chunk-ELI54OVR.js";
148
130
  import {
149
- exitPip
150
- } from "./chunk-WZ7AVGG7.js";
131
+ playbackRate
132
+ } from "./chunk-C3IEUYR3.js";
151
133
  import {
152
- exitTheater
153
- } from "./chunk-LEKPWZQL.js";
134
+ playlist
135
+ } from "./chunk-KLAI7YSD.js";
154
136
  import {
155
137
  expandMiniplayer
156
138
  } from "./chunk-DN4TFOZV.js";
@@ -167,14 +149,14 @@ import {
167
149
  lock
168
150
  } from "./chunk-T4LAQEBY.js";
169
151
  import {
170
- doubleTriangleLeft
171
- } from "./chunk-NTVIMR7F.js";
152
+ loop
153
+ } from "./chunk-OSDM6ZVT.js";
172
154
  import {
173
- doubleTriangleRight
174
- } from "./chunk-N5KPQNEN.js";
155
+ mic
156
+ } from "./chunk-PEKXIISU.js";
175
157
  import {
176
- dragIndicator
177
- } from "./chunk-ZLZCQ3KJ.js";
158
+ next
159
+ } from "./chunk-MP2GRDUX.js";
178
160
  import {
179
161
  edit
180
162
  } from "./chunk-NLJQAJZB.js";
@@ -191,14 +173,14 @@ import {
191
173
  errorPlaceholder
192
174
  } from "./chunk-2K7QF6AQ.js";
193
175
  import {
194
- brightnessHigh
195
- } from "./chunk-6QYDSSPX.js";
176
+ exitFullscreen
177
+ } from "./chunk-DR2VKENG.js";
196
178
  import {
197
- brightnessLow
198
- } from "./chunk-HYPRNQ4D.js";
179
+ exitPip
180
+ } from "./chunk-WZ7AVGG7.js";
199
181
  import {
200
- captions
201
- } from "./chunk-CTSPKWKN.js";
182
+ exitTheater
183
+ } from "./chunk-LEKPWZQL.js";
202
184
  import {
203
185
  capture
204
186
  } from "./chunk-HA2GK6KH.js";
@@ -215,14 +197,14 @@ import {
215
197
  check
216
198
  } from "./chunk-O7XYY33O.js";
217
199
  import {
218
- airplay
219
- } from "./chunk-JP5X5JDL.js";
200
+ doubleTriangleLeft
201
+ } from "./chunk-NTVIMR7F.js";
220
202
  import {
221
- airplayPlaceholder
222
- } from "./chunk-URDNEQFP.js";
203
+ doubleTriangleRight
204
+ } from "./chunk-N5KPQNEN.js";
223
205
  import {
224
- ambience
225
- } from "./chunk-XHXIXEGS.js";
206
+ dragIndicator
207
+ } from "./chunk-ZLZCQ3KJ.js";
226
208
  import {
227
209
  audioTrack
228
210
  } from "./chunk-AH2VE4UI.js";
@@ -238,33 +220,54 @@ import {
238
220
  import {
239
221
  brightnessDark
240
222
  } from "./chunk-GNNKBZIR.js";
223
+ import {
224
+ brightnessHigh
225
+ } from "./chunk-6QYDSSPX.js";
226
+ import {
227
+ brightnessLow
228
+ } from "./chunk-HYPRNQ4D.js";
229
+ import {
230
+ captions
231
+ } from "./chunk-CTSPKWKN.js";
241
232
  import {
242
233
  add
243
234
  } from "./chunk-ID72UAJE.js";
244
235
  import {
245
- VolumeControl
246
- } from "./chunk-D6ULBPSS.js";
236
+ airplay
237
+ } from "./chunk-JP5X5JDL.js";
238
+ import {
239
+ airplayPlaceholder
240
+ } from "./chunk-URDNEQFP.js";
241
+ import {
242
+ ambience
243
+ } from "./chunk-XHXIXEGS.js";
244
+ import {
245
+ Timeline
246
+ } from "./chunk-UAMYO73Y.js";
247
247
  import {
248
248
  BrightnessControl
249
249
  } from "./chunk-CPHEU42C.js";
250
250
  import {
251
- Timeline
252
- } from "./chunk-ZJFJ23KS.js";
251
+ VolumeControl
252
+ } from "./chunk-D6ULBPSS.js";
253
253
  import {
254
254
  RangeInput
255
255
  } from "./chunk-Q2FTCDJV.js";
256
256
  import {
257
- ErrorPlaceholder
258
- } from "./chunk-NAR4YQRM.js";
257
+ TimeAndDurationButton
258
+ } from "./chunk-4ZMTEOTZ.js";
259
259
  import {
260
- PiPPlaceholder
261
- } from "./chunk-GFRR7CZM.js";
260
+ VoiceButton
261
+ } from "./chunk-BUMF7O6G.js";
262
262
  import {
263
- AirPlayPlaceholder
264
- } from "./chunk-QESJUJVR.js";
263
+ ObjectFitButton
264
+ } from "./chunk-EZFGCPYW.js";
265
265
  import {
266
- CastPlaceholder
267
- } from "./chunk-3HFZA4ZX.js";
266
+ PictureInPictureButton
267
+ } from "./chunk-74JOJRPK.js";
268
+ import {
269
+ PlayPauseButton
270
+ } from "./chunk-XFCIDKA5.js";
268
271
  import {
269
272
  PreviousButton
270
273
  } from "./chunk-FVA6MKFB.js";
@@ -281,11 +284,14 @@ import {
281
284
  TimeButton
282
285
  } from "./chunk-IGFWJM6J.js";
283
286
  import {
284
- TimeAndDurationButton
285
- } from "./chunk-4ZMTEOTZ.js";
287
+ DurationButton
288
+ } from "./chunk-AXJURPVZ.js";
286
289
  import {
287
- VoiceButton
288
- } from "./chunk-BUMF7O6G.js";
290
+ ExpandMiniplayerButton
291
+ } from "./chunk-B45CEO5D.js";
292
+ import {
293
+ Forward10Button
294
+ } from "./chunk-NBWHJSX6.js";
289
295
  import {
290
296
  FullscreenButton
291
297
  } from "./chunk-BCJ4NIQL.js";
@@ -302,14 +308,14 @@ import {
302
308
  NextButton
303
309
  } from "./chunk-XAMTFVQD.js";
304
310
  import {
305
- ObjectFitButton
306
- } from "./chunk-EZFGCPYW.js";
311
+ Backward10Button
312
+ } from "./chunk-7V3V2UFT.js";
307
313
  import {
308
- PictureInPictureButton
309
- } from "./chunk-74JOJRPK.js";
314
+ BigNextButton
315
+ } from "./chunk-CMKF52BC.js";
310
316
  import {
311
- PlayPauseButton
312
- } from "./chunk-XFCIDKA5.js";
317
+ BigPlayPauseButton
318
+ } from "./chunk-OAU2EW7G.js";
313
319
  import {
314
320
  BigPreviousButton
315
321
  } from "./chunk-I5TH36DP.js";
@@ -326,26 +332,20 @@ import {
326
332
  ChapterButton
327
333
  } from "./chunk-CL37OVTO.js";
328
334
  import {
329
- DurationButton
330
- } from "./chunk-AXJURPVZ.js";
335
+ AirPlayPlaceholder
336
+ } from "./chunk-QESJUJVR.js";
331
337
  import {
332
- ExpandMiniplayerButton
333
- } from "./chunk-B45CEO5D.js";
338
+ CastPlaceholder
339
+ } from "./chunk-3HFZA4ZX.js";
334
340
  import {
335
- Forward10Button
336
- } from "./chunk-NBWHJSX6.js";
341
+ ErrorPlaceholder
342
+ } from "./chunk-NAR4YQRM.js";
343
+ import {
344
+ PiPPlaceholder
345
+ } from "./chunk-GFRR7CZM.js";
337
346
  import {
338
347
  AirPlayButton
339
348
  } from "./chunk-WNZNIW5U.js";
340
- import {
341
- Backward10Button
342
- } from "./chunk-7V3V2UFT.js";
343
- import {
344
- BigNextButton
345
- } from "./chunk-CMKF52BC.js";
346
- import {
347
- BigPlayPauseButton
348
- } from "./chunk-OAU2EW7G.js";
349
349
  import {
350
350
  Buffer
351
351
  } from "./chunk-QTQPICRY.js";
@@ -490,4 +490,4 @@ __export(components_exports, {
490
490
  export {
491
491
  components_exports
492
492
  };
493
- //# sourceMappingURL=chunk-CO6YWIOA.js.map
493
+ //# sourceMappingURL=chunk-2I6QHYQC.js.map
@@ -75,7 +75,6 @@ var VoicePlug = class extends BasePlug {
75
75
  this.ctlr.config.on("disabled", this.syncListener, { signal: this.signal });
76
76
  this.ctlr.config.on("devMode", () => this.state.routing && this.predict(), { signal: this.signal });
77
77
  this.ctlr.learn("voiceWake", { voice: { stage: "anytime", match: "chunk" } }, this.signal);
78
- this.ctlr.learn("voiceSleep", void 0, this.signal);
79
78
  this.ctlr.learn("voiceQuit", { voice: { stage: "anytime" } }, this.signal);
80
79
  this.ctlr.learn("voiceMute", { voice: { stage: "anytime" } }, this.signal);
81
80
  this.ctlr.learn("voiceSubmit", { fn: () => this.submit(), voice: { stage: "pre-route" } }, this.signal);
@@ -287,4 +286,4 @@ var clame = (sfx) => `.tmg-media-voice-${sfx}`;
287
286
  export {
288
287
  VoicePlug
289
288
  };
290
- //# sourceMappingURL=chunk-JZZNDOWL.js.map
289
+ //# sourceMappingURL=chunk-2VPRTOIE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts/plugs/settings/voice/index.ts"],"sourcesContent":["import { BasePlug } from \"@plugs/base\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { force, getPath, setPath, mirror } from \"sia-reactor/utils\";\r\nimport { limited } from \"@utils/fn\";\r\nimport type { VoiceStage, VoiceConfig, VoiceState } from \"./types\";\r\nimport { VOICE_BUILD } from \"./build\";\r\nimport { capitalize, camelize, uncamelize, fuzzyBlobMatch, fuzzyChunkMatch, getLevenshteinSimilarity, luid } from \"@utils/str\";\r\nimport { formatActionTooltip } from \"@utils/keys\";\r\nimport { type ToastOptions } from \"@t007/toast\";\r\nimport { REvent } from \"sia-reactor\";\r\nimport { CtlrConfig } from \"@defs/config\";\r\nimport { tutorialOpts } from \"../toasts\";\r\nimport { Action } from \"@defs/action\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { isArr } from \"@utils/obj\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { globalState } from \"@tools/runtime\";\r\n\r\nexport class VoicePlug extends BasePlug<VoiceConfig, VoiceState> {\r\n public static readonly plugName = \"voice\";\r\n public static readonly BUILD = VOICE_BUILD;\r\n protected recognition?: any;\r\n protected teachBasics = limited(() => this.view?.(`Follow the guides at the ${(this.config.toasts.helper.position || \"bottom-left\").replace(\"-\", \" \")}. Click ⚙ for settings`, { ...tutorialOpts(() => (this.teachBasics.block(), t007.toast?.dismiss(this.TIDS.TEACHER))), id: this.TIDS.TEACHER, signal: this.signal }), { key: `${luid()}_voice_basics`, maxTimes: 6, perSession: 2 });\r\n protected snublist: Array<Action[\"id\"]> = [\"voiceToggleOn\", \"voiceToggleOff\"] as const;\r\n protected readonly TIDS = { ROUTER: `tmg-media-voice-router-for-${this.ctlr.config.id}`, HELPER: `tmg-media-voice-helper-for-${this.ctlr.config.id}`, TEACHER: `tmg-media-voice-teacher-for-${this.ctlr.config.id}` };\r\n protected history: string[] = [\"*\"];\r\n protected historyIdx: number = 0;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.voice) {\r\n super(ctlr, config, { ctx: \"*\", routing: false });\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\r\n if (!SpeechRecognition) return;\r\n this.recognition = new SpeechRecognition();\r\n Object.assign(this.recognition, { continuous: true, interimResults: true, onresult: this.onResult, onend: this.onEnd, onerror: this.onError });\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n [\"click\", \"click\", \"keydown\", \"mousemove\", \"touchmove\", \"scroll\"].forEach((ev, i) => this.container?.addEventListener(ev, !i ? this.handleClick : i < 3 ? this.handleInput : this.stayWoke, { passive: i > 3, signal: this.signal }));\r\n // State Watchers\r\n this.state.watch(\"ctx\", this.onCtx, { signal: this.signal });\r\n // ----- Listeners\r\n this.state.on(\"routing\", ({ value }) => (this.media.container.classList.toggle(\"tmg-media-voice-routing\", value), (this.config.toasts.router.autoClose = value || this.config.toasts.behavior.value === \"persistent\" ? false : true)), { signal: this.signal });\r\n // Ctlr Config Setters\r\n this.ctlr.config.set(\"settings.voice.active.value\", (v) => (v === \"passive\" && !this.config.commands.voiceWake.length ? false : v), { init: true, signal: this.signal });\r\n // ---- Media Watchers\r\n this.media.watch(\"tech\", () => this.media.tech.polyfill(\"voice\", true), { init: true, signal: this.signal }); // falls back to tap routing\r\n // ---- State Listeners\r\n this.ctlr.state.on(\"mediaIntersecting\", () => this.ctlr.debounce(\"syncingListener\", this.syncListener, 500, false, this.signal), { signal: this.signal });\r\n globalState.on(\"isVisible\", () => this.ctlr.debounce(\"syncingListener\", this.syncListener, 500, false, this.signal), { signal: this.signal });\r\n // ---- Config -------\r\n this.ctlr.config.on(\"settings.voice.active.value\", this.handleActive, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.muted\", ({ value }) => this.config.active.value && (value && this.recognition?.abort(), this.start()), { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.toasts.behavior.value\", ({ value }) => (this.config.toasts.router.autoClose = this.state.routing || value === \"persistent\" ? false : true), { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.toasts.router\", ({ type, value, target: { key } }) => this.view?.update(this.TIDS.ROUTER, type !== \"update\" ? value : ({ [key]: value } as any)), { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.toasts.helper\", ({ type, value, target: { key } }) => this.view?.update(this.TIDS.HELPER, type !== \"update\" ? value : ({ [key]: value } as any)), { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.commands.voiceWake\", ({ value }) => !this.state.routing && (value.length ? this.config.active.value && this.start() : (this.config.active.value = false)), { signal: this.signal });\r\n this.ctlr.config.on(\"disabled\", this.syncListener, { signal: this.signal });\r\n this.ctlr.config.on(\"devMode\", () => this.state.routing && this.predict(), { signal: this.signal });\r\n this.ctlr.learn(\"voiceWake\", { voice: { stage: \"anytime\", match: \"chunk\" } }, this.signal);\r\n this.ctlr.learn(\"voiceSleep\", undefined, this.signal);\r\n this.ctlr.learn(\"voiceQuit\", { voice: { stage: \"anytime\" } }, this.signal);\r\n this.ctlr.learn(\"voiceMute\", { voice: { stage: \"anytime\" } }, this.signal);\r\n this.ctlr.learn(\"voiceSubmit\", { fn: () => this.submit(), voice: { stage: \"pre-route\" } }, this.signal);\r\n this.ctlr.learn(\"voiceCtxPrevious\", { fn: this.goBack, keyboard: { phase: \"keydown\" } }, this.signal);\r\n this.ctlr.learn(\"voiceCtxNext\", { fn: this.goForward, keyboard: { phase: \"keydown\" } }, this.signal);\r\n this.ctlr.learn(\"voiceCtxClear\", { fn: () => this.clearCtx(false) }, this.signal);\r\n this.ctlr.flags.wired ? this.syncListener() : this.ctlr.state.wonce(\"readyState\", this.syncListener, { signal: this.signal }); // #HEAVY: waits for !light. If wake word is enabled, start the engine immediately in \"sleep\" mode\r\n super.wire();\r\n }\r\n\r\n protected onResult(e: any): void {\r\n this.snooze();\r\n let transcript = \"\";\r\n if (!this.config.muted) for (let i = e.resultIndex, len = e.results.length; i < len; ++i) transcript += e.results[i][0].transcript;\r\n transcript = transcript.trim().toLowerCase();\r\n !this.config.muted && (this.state.routing || this.config.toasts.behavior.value !== \"strict\") && this.view?.(transcript ? `${transcript}${!this.state.routing ? `... Say ${this.linked(isArr(this.config.commands.voiceWake) ? this.config.commands.voiceWake[0] : this.config.commands.voiceWake)}!` : \"\"}` : this.getRouterSpeech(this.state.routing && !IS_MOBILE ? \"Didn't catch that...\" : undefined, this.state.routing ? \"\" : undefined), this.getRouterOptions());\r\n const pathInput = this.container?.querySelector<HTMLInputElement>(\".tmg-media-voice-path-input\");\r\n if (pathInput) pathInput.value = transcript; // Update the Text UI\r\n transcript && this.ctlr.debounce(\"voiceProcessing\", () => `${e.resultIndex}-${transcript}` !== this.prevRes && ((this.prevRes = `${e.resultIndex}-${transcript}`), this.process(transcript)), 500, false, this.signal); // Process after delay\r\n }\r\n private prevRes: string | false = false;\r\n protected onEnd(): void {\r\n this.prevRes = false;\r\n this.config?.active.value && this.shouldListen() && this.start();\r\n }\r\n protected onError(e: any): void {\r\n if (e.error.endsWith(\"not-allowed\")) this.config.muted ? this.start() : (this.config.active.value = false), this.view?.error(\"Microphone access revoked. Please check your settings.\", { tag: \"tmg-mard\" });\r\n }\r\n\r\n protected handleActive({ value }: REvent<CtlrConfig, \"settings.voice.active.value\">): void {\r\n value === false ? this.stop() : this.shouldListen() && (value === \"passive\" ? this.sleep() : this.wakeUp(), this.start());\r\n }\r\n public syncListener(): void {\r\n !this.shouldListen() ? this.stop() : this.config.active.value && (this.config.active.value === true && this.wakeUp(), this.start());\r\n }\r\n protected shouldListen(): boolean {\r\n return this.ctlr.flags.wired && ((globalState.isVisible && this.ctlr.state.mediaIntersecting) || this.config.muted) && !this.ctlr.config.disabled;\r\n }\r\n\r\n protected async request(): Promise<\"granted\" | \"denied\" | \"cancelled\" | \"nuked\"> {\r\n const state = (await navigator.permissions?.query({ name: \"microphone\" }).catch(() => null))?.state ?? \"prompt\";\r\n if (state === \"granted\" || state === \"denied\") return state;\r\n // prettier-ignore\r\n return t007.toast?.dismiss(this.TIDS.HELPER), new Promise((res, _, req?: () => void, i = 0) => ((req = () => this.view?.info(\"Voice control requires mic access\", { id: this.TIDS.ROUTER, signal: this.signal, ...this.config.toasts.router, autoClose: false, actions: { OK: () => navigator.mediaDevices.getUserMedia({ audio: true }).then((s) => (s.getTracks().forEach((t) => t.stop()), res(\"granted\"))).catch(async (e) => (await navigator.permissions?.query({ name: \"microphone\" as any }).then(p => p?.state === \"denied\", () => e.message === \"Permission denied\")) || ++i > 3 ? res(\"cancelled\") : this.view?.warn(\"Grant permission to use microphone\", { id: this.TIDS.ROUTER, autoClose: false, actions: { Retry: req! } })), ...this.getRouterActions(false) }, onClose: (_, user) => res(user ? \"cancelled\" : \"nuked\") }) || res(\"nuked\"))())); // #EXTRA-MILE: doing the most with the least\r\n }\r\n public async start(): Promise<void> {\r\n let state = this.config.muted ? \"granted\" : await this.request();\r\n if (state === \"nuked\" || !this.config) return; // only death i know hence abort over config check\r\n state === \"granted\" && (this.config.toasts.behavior.value === \"persistent\" || t007.toast.isActive(this.TIDS.ROUTER)) && this.view?.(this.getRouterSpeech(), this.getRouterOptions());\r\n if (this.state.routing) this.goTo(), t007.toast.isActive(this.TIDS.HELPER) && this.teachBasics();\r\n try {\r\n state === \"granted\" ? !this.config.muted && this.recognition?.start() : this.onError({ error: \"not-allowed\" });\r\n } catch (e) {} // Silence the InvalidStateError since we might call when already on due to wake word\r\n }\r\n protected stop(): void {\r\n (this.state.routing = this.prevRes = false), this.recognition?.abort();\r\n for (const k in this.TIDS) t007.toast?.dismiss(this.TIDS[k as keyof typeof this.TIDS]);\r\n for (const k of [\"voiceSleeping\", \"voiceProcessing\"]) this.ctlr.cancelTimeout(\"debounce\", k);\r\n }\r\n\r\n protected wakeUp(): void {\r\n if (this.state.routing) return;\r\n this.state.routing = true;\r\n this.clearCtx(), this.view?.(this.getRouterSpeech(), this.getRouterOptions()), this.snooze();\r\n } // #STANDALONE: needs scoped behavior\r\n protected sleep(): void {\r\n if (!this.state.routing) return;\r\n this.state.routing = this.prevRes = false;\r\n this.clearCtx(), t007.toast?.dismiss(this.TIDS.HELPER), !this.config.active.value || this.config.toasts.behavior.value !== \"persistent\" ? t007.toast?.dismiss(this.TIDS.ROUTER) : this.view?.(this.getRouterSpeech(), this.getRouterOptions());\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected trigger(transcript: string, stage: VoiceStage = this.config.process.stage.value): boolean {\r\n for (const act of Object.values(this.ctlr.actions.entries)) {\r\n const cmd = this.config.commands[act.id];\r\n if (!cmd?.length || (act.id !== \"voiceWake\" && !this.config.process.allowCommands) || this.snublist.includes(act.id) || (act.voice?.stage || this.config.process.stage.value) !== stage || (act.id === \"voiceWake\" && this.state.routing)) continue;\r\n if (((act.voice?.match || this.config.process.match.value) === \"chunk\" ? fuzzyChunkMatch : fuzzyBlobMatch)(cmd, transcript, this.config.process.accuracy)) return this.ctlr.perform(act.id) && this.view?.success(`Triggered <b>${act.label ?? capitalize(uncamelize(act.id))}</b>`, { id: this.TIDS.ROUTER, icon: true, autoClose: this.config.toasts.router.autoClose }), true;\r\n }\r\n return false;\r\n }\r\n protected process(transcript: string, cleaned = transcript.replace(/[-\\s]/g, \"\"), isSubmit = false, dormant = !this.state.routing): boolean {\r\n if (this.trigger(transcript, \"anytime\") || dormant) return !dormant;\r\n // --- 1. PRE-ROUTE STAGE ---\r\n if (this.trigger(transcript, \"pre-route\")) return true;\r\n // --- 2. PATH|LEAF EXECUTION (PRIORITY) ---\r\n if (!this.ctlr.isLogical(this.state.ctx, true)) {\r\n const paths = this.ctlr.getLogicPaths(this.state.ctx);\r\n // prettier-ignore\r\n let match: string | null = null, highest = 0, len = paths.length;\r\n if (len)\r\n for (let i = 0; i < len; i++) {\r\n const leaf = paths[i].split(\".\").pop()!.toLowerCase();\r\n // prettier-ignore\r\n if (cleaned === leaf) { match = paths[i]; break; }\r\n const score = getLevenshteinSimilarity(leaf, transcript);\r\n if (score > this.config.process.accuracy && score > highest) (highest = score), (match = paths[i]);\r\n } // Fuzzy Match: Check if the user said the last word of any valid path\r\n if (match) {\r\n if (this.ctlr.isLogical(this.goTo(match), true)) return this.execute(transcript, match, true), true; // If a S.I.A path strongly matches what they said, TAKE IT. Bypasses commands completely.\r\n } else if (isSubmit) {\r\n const path = this.state.ctx === \"*\" ? transcript : `${this.state.ctx}.${camelize(transcript)}`,\r\n val = this.ctlr.isLogical(path) ? getPath(this.ctlr.logicRoot as any, mirror(path)) : undefined;\r\n if (val !== undefined && this.ctlr.isLogical(this.goTo(path), true, val)) return this.execute(transcript, path, true), true; // Hey dev or explorer, here u go!\r\n }\r\n } else if (this.execute(transcript, undefined, false)) return true;\r\n // --- 4. POST-ROUTE STAGE ---\r\n return this.trigger(transcript, \"post-route\");\r\n }\r\n protected parse(transcript: string, path = this.state.ctx, isNav = false, value = getPath(this.ctlr.logicRoot as any, mirror(path)), type = isArr(value) ? \"array\" : typeof value): any {\r\n if (type === \"boolean\") return isNav && this.config.routing.autoToggles ? !value : fuzzyChunkMatch(this.config.commands.voiceToggleOn, transcript, this.config.process.accuracy) ? true : fuzzyChunkMatch(this.config.commands.voiceToggleOff, transcript, this.config.process.accuracy) ? false : null;\r\n if (isNav) return null;\r\n if (type === \"number\") {\r\n const match = transcript.replace(/,/g, \"\").match(/-?\\d+(\\.\\d+)?/);\r\n return match ? Number(match[0]) : null;\r\n } else if (type === \"string\" || type === \"array\") return transcript ? (type === \"string\" ? transcript : transcript.split(/\\s*(?:,|and)\\s*/i).filter(Boolean)) : null;\r\n return null;\r\n }\r\n protected execute(transcript: string, path = this.state.ctx, isNav = false, isSubmit = false, value = this.parse(transcript, path, isNav), type = isArr(value) ? \"array\" : typeof value): boolean {\r\n if (value === null) return false;\r\n if ((this.config.routing.strict.value === true || (this.config.routing.strict.value === \"auto\" && type === \"string\")) && !isSubmit) {\r\n const input = this.container?.querySelector<HTMLInputElement>(clame(\"word-input\"));\r\n if (input) input.value = type === \"array\" ? value.join(\", \") : String(value);\r\n return this.view?.update(this.TIDS.ROUTER, { render: transcript || String(value), ...this.getRouterOptions(false) }), true;\r\n } // Auto-Strict: Blocks execution for strings only (or everything if true)\r\n return setPath(this.ctlr.logicRoot as any, path as any, value), this.view?.success(`${path.split(\".\").map(uncam).join(\" > \")} -> <code>${isArr(value) ? `[${value.join(\", \")}]` : value}</code>`, { id: this.TIDS.ROUTER, icon: true, autoClose: this.config.toasts.router.autoClose }), this.goBack(), true;\r\n }\r\n protected submit(render = this.container?.querySelector<HTMLInputElement>(clame(\"word-input\"))?.value.trim(), process = false): void {\r\n if (render) this.view?.update(this.TIDS.ROUTER, { render, ...this.getRouterOptions(false) }), !process ? this.execute(render, undefined, false, true) : this.process(render, undefined, true); // Execute with isSubmit = true\r\n }\r\n protected predict(): void {\r\n const crumbHtml = this.history.length < 2 ? \"\" : `<div class=\"tmg-media-voice-crumb-wrap\">` + this.history.map((p, idx, _, active = idx === this.historyIdx) => `<small style=\"${active ? \"font-weight: 500;\" : \"opacity: 0.8;\"}\">${this.linked(p === \"*\" ? \"Root\" : uncam(p.split(\".\").pop()!), p, true)}</small>`).join(\" <span style='opacity: 0.4;'><small>></small></span> \") + `</div>`,\r\n actions: ToastOptions[\"actions\"] = {};\r\n if (this.media.features.voiceItems) {\r\n actions[`<span title='Clear context${formatActionTooltip(this.settings.keys.shortcuts.voiceCtxClear, this.config.commands.voiceCtxClear)}'>×</span>`] = () => this.clearCtx(false);\r\n actions[`<span title='Go back${formatActionTooltip(this.settings.keys.shortcuts.voiceCtxPrevious, this.config.commands.voiceCtxPrevious)}' ${this.media.features.previousVoiceItem ? \"\" : \"disabled\"}>‹</span>`] = this.goBack;\r\n actions[`<span title='Go forward${formatActionTooltip(this.settings.keys.shortcuts.voiceCtxNext, this.config.commands.voiceCtxNext)}'${this.media.features.nextVoiceItem ? \"\" : \" disabled\"}>›</span>`] = this.goForward;\r\n }\r\n if (this.ctlr.isLogical(this.state.ctx, true)) {\r\n const value = getPath(this.ctlr.logicRoot as any, mirror(this.state.ctx)),\r\n type = isArr(value) ? \"array\" : typeof value,\r\n showInput = this.config.routing.strict.value === true || (this.config.routing.strict.value === \"auto\" && type !== \"boolean\"),\r\n showSubmit = this.media.tech.polyfill(\"voiceSubmit\", this.config.routing.strict.value === true || (this.config.routing.strict.value === \"auto\" && type === \"string\")),\r\n display = type === \"array\" ? value.join(\", \") : value ?? \"\",\r\n inputHtml = showInput ? `<div class=\"tmg-media-voice-input-wrap\"><input name=\"voice_value\" type=\"${type === \"number\" ? \"number\" : \"text\"}\" class=\"tmg-media-voice-word-input\" placeholder=\"${display || \"Type value...\"}\" value=\"${display}\"/>${showSubmit ? `<button type=\"button\" title='Submit ${formatActionTooltip(this.settings.keys.shortcuts.voiceSubmit, this.config.commands.voiceSubmit)}' class=\"tmg-media-voice-word-submit\">↳</button>` : \"\"}</div>` : \"\",\r\n // prettier-ignore\r\n hints = type === \"boolean\" ? `${(isArr(this.config.commands.voiceToggleOn) ? this.config.commands.voiceToggleOn.slice(0, 2) : [this.config.commands.voiceToggleOn]).map((v) => this.linked(v)).join(\", \")} or ${(isArr(this.config.commands.voiceToggleOff) ? this.config.commands.voiceToggleOff.slice(0, 2) : [this.config.commands.voiceToggleOff]).map((v) => this.linked(v)).join(\", \")} ${inputHtml}` : type === \"number\" ? `a number (like ${this.linked(\"0\")}, ${this.linked(\"50\")}):</small> ${inputHtml}` : type === \"array\" ? `comma-separated values:</small> ${inputHtml}` : `the exact text:</small> ${inputHtml}`;\r\n return void this.view?.(`${crumbHtml}<div class=\"tmg-media-voice-content\">${showInput ? '<small style=\"font-weight: 500;\">' : \"\"}Try ${this.config.muted ? (showInput ? \"typing\" : IS_MOBILE ? \"tapping\" : \"clicking\") : \"saying\"} ${hints}</div>`, this.getHelperOptions(actions));\r\n }\r\n const paths = this.ctlr.getLogicPaths(this.state.ctx);\r\n if (!paths.length) return;\r\n const inputHtml = `<input name=\"voice_path\" type=\"text\" class=\"tmg-media-voice-path-input\" placeholder=\"...text\"/>`;\r\n this.view?.(`${crumbHtml}<div class=\"tmg-media-voice-content\"><small style=\"font-weight: 500;\">Try ${this.config.muted ? (IS_MOBILE ? \"tapping\" : \"clicking\") : \"saying\"} any of these:</small><br>${inputHtml} • ${paths.map((p) => this.linked(uncam(p.split(\".\").pop()!))).join(\" • \")}</div>`, this.getHelperOptions(actions));\r\n }\r\n\r\n protected linked(text: string, value = text.toLowerCase(), isGoto = false, punc = isGoto || this.config.muted ? \"\" : '\"'): string {\r\n return `${punc}<u class=\"tmg-media-voice-link\" ${isGoto ? \"data-goto\" : \"data-cmd\"}=\"${value}\" title=\"${isGoto ? \"Go to\" : \"Say\"} ${value}\" tabindex=\"0\" style=\"cursor:pointer; text-decoration-color: rgb(from var(--tmg-media-brand-${isGoto ? \"accent-\" : \"\"}color) r g b / 0.75);\">${isGoto || this.config.muted ? text : value}</u>${punc}`;\r\n } // `\"\"` is my lil UI Experiment, crafting a standard here :)\r\n protected stayWoke(e: Event): void {\r\n this.state.routing && this.ctlr.throttle(\"voiceWaking\", () => e.composedPath().some((el) => (el as HTMLElement)?.matches?.(`:is([id=\"${this.TIDS.HELPER}\"],[id=\"${this.TIDS.ROUTER}\"])`)) && this.snooze(), 500);\r\n }\r\n protected handleClick(e: MouseEvent, t = e.target as HTMLElement): void {\r\n if (!t?.matches?.(clame(\"link\"))) return;\r\n e.preventDefault(), e.stopPropagation();\r\n if (t.dataset.goto) return void this.goTo(t.dataset.goto);\r\n this.view?.update(this.TIDS.ROUTER, { render: t.dataset.cmd, ...this.getRouterOptions(false) }); // Instantly update the router toast to show they \"clicked/said\" it\r\n this.process(t.dataset.cmd || \"\"); // Pipe it straight into the processor as if they spoke it!\r\n }\r\n protected handleInput(e: Event, t = e.target as HTMLInputElement, isEnter = e.type === \"keydown\" && (e as KeyboardEvent).key === \"Enter\", isClick = e.type === \"click\"): void {\r\n if (!t?.tagName) return;\r\n this.stayWoke(e);\r\n if ((isEnter && t.matches(clame(\"word-input\"))) || (isClick && t.matches(clame(\"word-submit\")))) e.preventDefault(), e.stopPropagation(), this.submit(t.closest(clame(\"input-wrap\"))?.querySelector<HTMLInputElement>(clame(\"word-input\"))?.value);\r\n else if (isEnter && t.matches(clame(\"path-input\"))) e.preventDefault(), e.stopPropagation(), this.submit(t.value, true);\r\n }\r\n public snooze(): void {\r\n this.ctlr.debounce(\"voiceSleeping\", this.snoozeCb, this.config.routing.timeout, false, this.signal);\r\n }\r\n private snoozeCb = () => (this.config.active.value = \"passive\");\r\n\r\n protected onCtx(value: string): void {\r\n if (this.history[this.historyIdx] !== this.state.ctx) {\r\n const idx = this.history.indexOf(this.state.ctx);\r\n idx === -1 && this.history.splice(this.historyIdx + 1, this.history.length, value), (this.historyIdx = idx !== -1 ? idx : this.history.length - 1);\r\n }\r\n this.media.tech.polyfill(\"voiceSubmit\", false), this.media.tech.polyfill(\"voiceItems\", this.history.length > 1);\r\n this.media.tech.polyfill(\"previousVoiceItem\", this.historyIdx > 0), this.media.tech.polyfill(\"nextVoiceItem\", this.historyIdx < this.history.length - 1);\r\n this.state.routing && this.predict(); // The single source of truth for rendering the UI\r\n }\r\n protected goTo(path = this.state.ctx, useForce = path === this.state.ctx): string {\r\n return force(() => (this.state.ctx = path), useForce);\r\n }\r\n protected goBack(): void {\r\n this.media.features.previousVoiceItem && this.goTo(this.history[--this.historyIdx]);\r\n }\r\n protected goForward(): void {\r\n this.media.features.nextVoiceItem && this.goTo(this.history[++this.historyIdx]);\r\n }\r\n protected clearCtx(direct = this.config.routing.direct): void {\r\n (this.history = direct ? [\"*\", \"media\", \"media.intent\"] : [\"*\"]), this.goTo(direct ? \"media.intent\" : \"*\", true);\r\n }\r\n\r\n protected getHelperOptions(actions?: ToastOptions[\"actions\"]): ToastOptions {\r\n return { id: this.TIDS.HELPER, actions, onClose: (_, user) => user && (this.config.active.value = \"passive\"), signal: this.signal, ...this.config.toasts.helper };\r\n }\r\n protected getRouterOptions(full = true): ToastOptions {\r\n return full ? { id: this.TIDS.ROUTER, actions: this.getRouterActions(), onClose: (_, user) => user && (this.config.active.value = false), signal: this.signal, ...this.config.toasts.router, ...this.getRouterOptions(false) } : { icon: this.config.toasts.router.icon, type: this.config.muted ? \"warning\" : this.config.toasts.router.type };\r\n }\r\n protected getRouterActions(full = true): ToastOptions[\"actions\"] {\r\n return { ...(full && this.state.routing && { [`<span title='Open actions'>${IconRegistry.get(\"settings\")}</span>`]: (_, __, menu = this.ctlr.plug(\"settings.panel\")?.menu) => (menu?.open(null), menu?.goTo(\"actions\")) }), [`<span title='${this.config.muted ? \"Unmute\" : \"Mute\"} my voice${formatActionTooltip(this.settings.keys.shortcuts.voiceMute, this.config.commands.voiceMute)}'>${IconRegistry.get(this.config.muted ? \"volumeMuted\" : \"volumeHigh\", true)}</span>`]: () => (this.config.muted = !this.config.muted) };\r\n }\r\n protected getRouterSpeech(firstHalf = this.config.muted ? \"Snubbing...\" : \"Listening...\", secondHalf = `${this.config.muted ? (IS_MOBILE ? \"Tap\" : \"Click\") : \"Say\"} ${!this.state.routing ? `${isArr(this.config.commands.voiceWake) ? this.config.commands.voiceWake.map((c = \"\") => this.linked(c)).join(\" or \") : this.linked(this.config.commands.voiceWake)} to wake me up` : this.config.muted ? \"or type instead\" : \"a path or command!\"}`): string {\r\n return `${firstHalf} ${secondHalf}`;\r\n }\r\n protected get container() {\r\n return this.ctlr.plug(\"settings.toasts\")?.container;\r\n }\r\n protected get view() {\r\n return this.ctlr.toast;\r\n }\r\n\r\n public override onDestroy(): void {\r\n this.stop(), super.onDestroy();\r\n }\r\n}\r\nconst uncam = (str: string) => capitalize(uncamelize(str)),\r\n clame = (sfx: string) => `.tmg-media-voice-${sfx}`;\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.voice\": typeof VoicePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n voice: VoiceConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaFeaturesExt {\r\n voice: boolean;\r\n voiceItems: boolean;\r\n voiceSubmit: boolean;\r\n nextVoiceItem: boolean;\r\n previousVoiceItem: boolean;\r\n }\r\n}\r\n"],"mappings":"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","names":["_","inputHtml"]}
1
+ {"version":3,"sources":["../src/ts/plugs/settings/voice/index.ts"],"sourcesContent":["import { BasePlug } from \"@plugs/base\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { force, getPath, setPath, mirror } from \"sia-reactor/utils\";\r\nimport { limited } from \"@utils/fn\";\r\nimport type { VoiceStage, VoiceConfig, VoiceState } from \"./types\";\r\nimport { VOICE_BUILD } from \"./build\";\r\nimport { capitalize, camelize, uncamelize, fuzzyBlobMatch, fuzzyChunkMatch, getLevenshteinSimilarity, luid } from \"@utils/str\";\r\nimport { formatActionTooltip } from \"@utils/keys\";\r\nimport { type ToastOptions } from \"@t007/toast\";\r\nimport { REvent } from \"sia-reactor\";\r\nimport { CtlrConfig } from \"@defs/config\";\r\nimport { tutorialOpts } from \"../toasts\";\r\nimport { Action } from \"@defs/action\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { isArr } from \"@utils/obj\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { globalState } from \"@tools/runtime\";\r\n\r\nexport class VoicePlug extends BasePlug<VoiceConfig, VoiceState> {\r\n public static readonly plugName = \"voice\";\r\n public static readonly BUILD = VOICE_BUILD;\r\n protected recognition?: any;\r\n protected teachBasics = limited(() => this.view?.(`Follow the guides at the ${(this.config.toasts.helper.position || \"bottom-left\").replace(\"-\", \" \")}. Click ⚙ for settings`, { ...tutorialOpts(() => (this.teachBasics.block(), t007.toast?.dismiss(this.TIDS.TEACHER))), id: this.TIDS.TEACHER, signal: this.signal }), { key: `${luid()}_voice_basics`, maxTimes: 6, perSession: 2 });\r\n protected snublist: Array<Action[\"id\"]> = [\"voiceToggleOn\", \"voiceToggleOff\"] as const;\r\n protected readonly TIDS = { ROUTER: `tmg-media-voice-router-for-${this.ctlr.config.id}`, HELPER: `tmg-media-voice-helper-for-${this.ctlr.config.id}`, TEACHER: `tmg-media-voice-teacher-for-${this.ctlr.config.id}` };\r\n protected history: string[] = [\"*\"];\r\n protected historyIdx: number = 0;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.voice) {\r\n super(ctlr, config, { ctx: \"*\", routing: false });\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\r\n if (!SpeechRecognition) return;\r\n this.recognition = new SpeechRecognition();\r\n Object.assign(this.recognition, { continuous: true, interimResults: true, onresult: this.onResult, onend: this.onEnd, onerror: this.onError });\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n [\"click\", \"click\", \"keydown\", \"mousemove\", \"touchmove\", \"scroll\"].forEach((ev, i) => this.container?.addEventListener(ev, !i ? this.handleClick : i < 3 ? this.handleInput : this.stayWoke, { passive: i > 3, signal: this.signal }));\r\n // State Watchers\r\n this.state.watch(\"ctx\", this.onCtx, { signal: this.signal });\r\n // ----- Listeners\r\n this.state.on(\"routing\", ({ value }) => (this.media.container.classList.toggle(\"tmg-media-voice-routing\", value), (this.config.toasts.router.autoClose = value || this.config.toasts.behavior.value === \"persistent\" ? false : true)), { signal: this.signal });\r\n // Ctlr Config Setters\r\n this.ctlr.config.set(\"settings.voice.active.value\", (v) => (v === \"passive\" && !this.config.commands.voiceWake.length ? false : v), { init: true, signal: this.signal });\r\n // ---- Media Watchers\r\n this.media.watch(\"tech\", () => this.media.tech.polyfill(\"voice\", true), { init: true, signal: this.signal }); // falls back to tap routing\r\n // ---- State Listeners\r\n this.ctlr.state.on(\"mediaIntersecting\", () => this.ctlr.debounce(\"syncingListener\", this.syncListener, 500, false, this.signal), { signal: this.signal });\r\n globalState.on(\"isVisible\", () => this.ctlr.debounce(\"syncingListener\", this.syncListener, 500, false, this.signal), { signal: this.signal });\r\n // ---- Config -------\r\n this.ctlr.config.on(\"settings.voice.active.value\", this.handleActive, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.muted\", ({ value }) => this.config.active.value && (value && this.recognition?.abort(), this.start()), { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.toasts.behavior.value\", ({ value }) => (this.config.toasts.router.autoClose = this.state.routing || value === \"persistent\" ? false : true), { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.toasts.router\", ({ type, value, target: { key } }) => this.view?.update(this.TIDS.ROUTER, type !== \"update\" ? value : ({ [key]: value } as any)), { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.toasts.helper\", ({ type, value, target: { key } }) => this.view?.update(this.TIDS.HELPER, type !== \"update\" ? value : ({ [key]: value } as any)), { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.commands.voiceWake\", ({ value }) => !this.state.routing && (value.length ? this.config.active.value && this.start() : (this.config.active.value = false)), { signal: this.signal });\r\n this.ctlr.config.on(\"disabled\", this.syncListener, { signal: this.signal });\r\n this.ctlr.config.on(\"devMode\", () => this.state.routing && this.predict(), { signal: this.signal });\r\n this.ctlr.learn(\"voiceWake\", { voice: { stage: \"anytime\", match: \"chunk\" } }, this.signal);\r\n this.ctlr.learn(\"voiceQuit\", { voice: { stage: \"anytime\" } }, this.signal);\r\n this.ctlr.learn(\"voiceMute\", { voice: { stage: \"anytime\" } }, this.signal);\r\n this.ctlr.learn(\"voiceSubmit\", { fn: () => this.submit(), voice: { stage: \"pre-route\" } }, this.signal);\r\n this.ctlr.learn(\"voiceCtxPrevious\", { fn: this.goBack, keyboard: { phase: \"keydown\" } }, this.signal);\r\n this.ctlr.learn(\"voiceCtxNext\", { fn: this.goForward, keyboard: { phase: \"keydown\" } }, this.signal);\r\n this.ctlr.learn(\"voiceCtxClear\", { fn: () => this.clearCtx(false) }, this.signal);\r\n this.ctlr.flags.wired ? this.syncListener() : this.ctlr.state.wonce(\"readyState\", this.syncListener, { signal: this.signal }); // #HEAVY: waits for !light. If wake word is enabled, start the engine immediately in \"sleep\" mode\r\n super.wire();\r\n }\r\n\r\n protected onResult(e: any): void {\r\n this.snooze();\r\n let transcript = \"\";\r\n if (!this.config.muted) for (let i = e.resultIndex, len = e.results.length; i < len; ++i) transcript += e.results[i][0].transcript;\r\n transcript = transcript.trim().toLowerCase();\r\n !this.config.muted && (this.state.routing || this.config.toasts.behavior.value !== \"strict\") && this.view?.(transcript ? `${transcript}${!this.state.routing ? `... Say ${this.linked(isArr(this.config.commands.voiceWake) ? this.config.commands.voiceWake[0] : this.config.commands.voiceWake)}!` : \"\"}` : this.getRouterSpeech(this.state.routing && !IS_MOBILE ? \"Didn't catch that...\" : undefined, this.state.routing ? \"\" : undefined), this.getRouterOptions());\r\n const pathInput = this.container?.querySelector<HTMLInputElement>(\".tmg-media-voice-path-input\");\r\n if (pathInput) pathInput.value = transcript; // Update the Text UI\r\n transcript && this.ctlr.debounce(\"voiceProcessing\", () => `${e.resultIndex}-${transcript}` !== this.prevRes && ((this.prevRes = `${e.resultIndex}-${transcript}`), this.process(transcript)), 500, false, this.signal); // Process after delay\r\n }\r\n private prevRes: string | false = false;\r\n protected onEnd(): void {\r\n this.prevRes = false;\r\n this.config?.active.value && this.shouldListen() && this.start();\r\n }\r\n protected onError(e: any): void {\r\n if (e.error.endsWith(\"not-allowed\")) this.config.muted ? this.start() : (this.config.active.value = false), this.view?.error(\"Microphone access revoked. Please check your settings.\", { tag: \"tmg-mard\" });\r\n }\r\n\r\n protected handleActive({ value }: REvent<CtlrConfig, \"settings.voice.active.value\">): void {\r\n value === false ? this.stop() : this.shouldListen() && (value === \"passive\" ? this.sleep() : this.wakeUp(), this.start());\r\n }\r\n public syncListener(): void {\r\n !this.shouldListen() ? this.stop() : this.config.active.value && (this.config.active.value === true && this.wakeUp(), this.start());\r\n }\r\n protected shouldListen(): boolean {\r\n return this.ctlr.flags.wired && ((globalState.isVisible && this.ctlr.state.mediaIntersecting) || this.config.muted) && !this.ctlr.config.disabled;\r\n }\r\n\r\n protected async request(): Promise<\"granted\" | \"denied\" | \"cancelled\" | \"nuked\"> {\r\n const state = (await navigator.permissions?.query({ name: \"microphone\" }).catch(() => null))?.state ?? \"prompt\";\r\n if (state === \"granted\" || state === \"denied\") return state;\r\n // prettier-ignore\r\n return t007.toast?.dismiss(this.TIDS.HELPER), new Promise((res, _, req?: () => void, i = 0) => ((req = () => this.view?.info(\"Voice control requires mic access\", { id: this.TIDS.ROUTER, signal: this.signal, ...this.config.toasts.router, autoClose: false, actions: { OK: () => navigator.mediaDevices.getUserMedia({ audio: true }).then((s) => (s.getTracks().forEach((t) => t.stop()), res(\"granted\"))).catch(async (e) => (await navigator.permissions?.query({ name: \"microphone\" as any }).then(p => p?.state === \"denied\", () => e.message === \"Permission denied\")) || ++i > 3 ? res(\"cancelled\") : this.view?.warn(\"Grant permission to use microphone\", { id: this.TIDS.ROUTER, autoClose: false, actions: { Retry: req! } })), ...this.getRouterActions(false) }, onClose: (_, user) => res(user ? \"cancelled\" : \"nuked\") }) || res(\"nuked\"))())); // #EXTRA-MILE: doing the most with the least\r\n }\r\n public async start(): Promise<void> {\r\n let state = this.config.muted ? \"granted\" : await this.request();\r\n if (state === \"nuked\" || !this.config) return; // only death i know hence abort over config check\r\n state === \"granted\" && (this.config.toasts.behavior.value === \"persistent\" || t007.toast.isActive(this.TIDS.ROUTER)) && this.view?.(this.getRouterSpeech(), this.getRouterOptions());\r\n if (this.state.routing) this.goTo(), t007.toast.isActive(this.TIDS.HELPER) && this.teachBasics();\r\n try {\r\n state === \"granted\" ? !this.config.muted && this.recognition?.start() : this.onError({ error: \"not-allowed\" });\r\n } catch (e) {} // Silence the InvalidStateError since we might call when already on due to wake word\r\n }\r\n protected stop(): void {\r\n (this.state.routing = this.prevRes = false), this.recognition?.abort();\r\n for (const k in this.TIDS) t007.toast?.dismiss(this.TIDS[k as keyof typeof this.TIDS]);\r\n for (const k of [\"voiceSleeping\", \"voiceProcessing\"]) this.ctlr.cancelTimeout(\"debounce\", k);\r\n }\r\n\r\n protected wakeUp(): void {\r\n if (this.state.routing) return;\r\n this.state.routing = true;\r\n this.clearCtx(), this.view?.(this.getRouterSpeech(), this.getRouterOptions()), this.snooze();\r\n } // #STANDALONE: needs scoped behavior\r\n protected sleep(): void {\r\n if (!this.state.routing) return;\r\n this.state.routing = this.prevRes = false;\r\n this.clearCtx(), t007.toast?.dismiss(this.TIDS.HELPER), !this.config.active.value || this.config.toasts.behavior.value !== \"persistent\" ? t007.toast?.dismiss(this.TIDS.ROUTER) : this.view?.(this.getRouterSpeech(), this.getRouterOptions());\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected trigger(transcript: string, stage: VoiceStage = this.config.process.stage.value): boolean {\r\n for (const act of Object.values(this.ctlr.actions.entries)) {\r\n const cmd = this.config.commands[act.id];\r\n if (!cmd?.length || (act.id !== \"voiceWake\" && !this.config.process.allowCommands) || this.snublist.includes(act.id) || (act.voice?.stage || this.config.process.stage.value) !== stage || (act.id === \"voiceWake\" && this.state.routing)) continue;\r\n if (((act.voice?.match || this.config.process.match.value) === \"chunk\" ? fuzzyChunkMatch : fuzzyBlobMatch)(cmd, transcript, this.config.process.accuracy)) return this.ctlr.perform(act.id) && this.view?.success(`Triggered <b>${act.label ?? capitalize(uncamelize(act.id))}</b>`, { id: this.TIDS.ROUTER, icon: true, autoClose: this.config.toasts.router.autoClose }), true;\r\n }\r\n return false;\r\n }\r\n protected process(transcript: string, cleaned = transcript.replace(/[-\\s]/g, \"\"), isSubmit = false, dormant = !this.state.routing): boolean {\r\n if (this.trigger(transcript, \"anytime\") || dormant) return !dormant;\r\n // --- 1. PRE-ROUTE STAGE ---\r\n if (this.trigger(transcript, \"pre-route\")) return true;\r\n // --- 2. PATH|LEAF EXECUTION (PRIORITY) ---\r\n if (!this.ctlr.isLogical(this.state.ctx, true)) {\r\n const paths = this.ctlr.getLogicPaths(this.state.ctx);\r\n // prettier-ignore\r\n let match: string | null = null, highest = 0, len = paths.length;\r\n if (len)\r\n for (let i = 0; i < len; i++) {\r\n const leaf = paths[i].split(\".\").pop()!.toLowerCase();\r\n // prettier-ignore\r\n if (cleaned === leaf) { match = paths[i]; break; }\r\n const score = getLevenshteinSimilarity(leaf, transcript);\r\n if (score > this.config.process.accuracy && score > highest) (highest = score), (match = paths[i]);\r\n } // Fuzzy Match: Check if the user said the last word of any valid path\r\n if (match) {\r\n if (this.ctlr.isLogical(this.goTo(match), true)) return this.execute(transcript, match, true), true; // If a S.I.A path strongly matches what they said, TAKE IT. Bypasses commands completely.\r\n } else if (isSubmit) {\r\n const path = this.state.ctx === \"*\" ? transcript : `${this.state.ctx}.${camelize(transcript)}`,\r\n val = this.ctlr.isLogical(path) ? getPath(this.ctlr.logicRoot as any, mirror(path)) : undefined;\r\n if (val !== undefined && this.ctlr.isLogical(this.goTo(path), true, val)) return this.execute(transcript, path, true), true; // Hey dev or explorer, here u go!\r\n }\r\n } else if (this.execute(transcript, undefined, false)) return true;\r\n // --- 4. POST-ROUTE STAGE ---\r\n return this.trigger(transcript, \"post-route\");\r\n }\r\n protected parse(transcript: string, path = this.state.ctx, isNav = false, value = getPath(this.ctlr.logicRoot as any, mirror(path)), type = isArr(value) ? \"array\" : typeof value): any {\r\n if (type === \"boolean\") return isNav && this.config.routing.autoToggles ? !value : fuzzyChunkMatch(this.config.commands.voiceToggleOn, transcript, this.config.process.accuracy) ? true : fuzzyChunkMatch(this.config.commands.voiceToggleOff, transcript, this.config.process.accuracy) ? false : null;\r\n if (isNav) return null;\r\n if (type === \"number\") {\r\n const match = transcript.replace(/,/g, \"\").match(/-?\\d+(\\.\\d+)?/);\r\n return match ? Number(match[0]) : null;\r\n } else if (type === \"string\" || type === \"array\") return transcript ? (type === \"string\" ? transcript : transcript.split(/\\s*(?:,|and)\\s*/i).filter(Boolean)) : null;\r\n return null;\r\n }\r\n protected execute(transcript: string, path = this.state.ctx, isNav = false, isSubmit = false, value = this.parse(transcript, path, isNav), type = isArr(value) ? \"array\" : typeof value): boolean {\r\n if (value === null) return false;\r\n if ((this.config.routing.strict.value === true || (this.config.routing.strict.value === \"auto\" && type === \"string\")) && !isSubmit) {\r\n const input = this.container?.querySelector<HTMLInputElement>(clame(\"word-input\"));\r\n if (input) input.value = type === \"array\" ? value.join(\", \") : String(value);\r\n return this.view?.update(this.TIDS.ROUTER, { render: transcript || String(value), ...this.getRouterOptions(false) }), true;\r\n } // Auto-Strict: Blocks execution for strings only (or everything if true)\r\n return setPath(this.ctlr.logicRoot as any, path as any, value), this.view?.success(`${path.split(\".\").map(uncam).join(\" > \")} -> <code>${isArr(value) ? `[${value.join(\", \")}]` : value}</code>`, { id: this.TIDS.ROUTER, icon: true, autoClose: this.config.toasts.router.autoClose }), this.goBack(), true;\r\n }\r\n protected submit(render = this.container?.querySelector<HTMLInputElement>(clame(\"word-input\"))?.value.trim(), process = false): void {\r\n if (render) this.view?.update(this.TIDS.ROUTER, { render, ...this.getRouterOptions(false) }), !process ? this.execute(render, undefined, false, true) : this.process(render, undefined, true); // Execute with isSubmit = true\r\n }\r\n protected predict(): void {\r\n const crumbHtml = this.history.length < 2 ? \"\" : `<div class=\"tmg-media-voice-crumb-wrap\">` + this.history.map((p, idx, _, active = idx === this.historyIdx) => `<small style=\"${active ? \"font-weight: 500;\" : \"opacity: 0.8;\"}\">${this.linked(p === \"*\" ? \"Root\" : uncam(p.split(\".\").pop()!), p, true)}</small>`).join(\" <span style='opacity: 0.4;'><small>></small></span> \") + `</div>`,\r\n actions: ToastOptions[\"actions\"] = {};\r\n if (this.media.features.voiceItems) {\r\n actions[`<span title='Clear context${formatActionTooltip(this.settings.keys.shortcuts.voiceCtxClear, this.config.commands.voiceCtxClear)}'>×</span>`] = () => this.clearCtx(false);\r\n actions[`<span title='Go back${formatActionTooltip(this.settings.keys.shortcuts.voiceCtxPrevious, this.config.commands.voiceCtxPrevious)}' ${this.media.features.previousVoiceItem ? \"\" : \"disabled\"}>‹</span>`] = this.goBack;\r\n actions[`<span title='Go forward${formatActionTooltip(this.settings.keys.shortcuts.voiceCtxNext, this.config.commands.voiceCtxNext)}'${this.media.features.nextVoiceItem ? \"\" : \" disabled\"}>›</span>`] = this.goForward;\r\n }\r\n if (this.ctlr.isLogical(this.state.ctx, true)) {\r\n const value = getPath(this.ctlr.logicRoot as any, mirror(this.state.ctx)),\r\n type = isArr(value) ? \"array\" : typeof value,\r\n showInput = this.config.routing.strict.value === true || (this.config.routing.strict.value === \"auto\" && type !== \"boolean\"),\r\n showSubmit = this.media.tech.polyfill(\"voiceSubmit\", this.config.routing.strict.value === true || (this.config.routing.strict.value === \"auto\" && type === \"string\")),\r\n display = type === \"array\" ? value.join(\", \") : value ?? \"\",\r\n inputHtml = showInput ? `<div class=\"tmg-media-voice-input-wrap\"><input name=\"voice_value\" type=\"${type === \"number\" ? \"number\" : \"text\"}\" class=\"tmg-media-voice-word-input\" placeholder=\"${display || \"Type value...\"}\" value=\"${display}\"/>${showSubmit ? `<button type=\"button\" title='Submit ${formatActionTooltip(this.settings.keys.shortcuts.voiceSubmit, this.config.commands.voiceSubmit)}' class=\"tmg-media-voice-word-submit\">↳</button>` : \"\"}</div>` : \"\",\r\n // prettier-ignore\r\n hints = type === \"boolean\" ? `${(isArr(this.config.commands.voiceToggleOn) ? this.config.commands.voiceToggleOn.slice(0, 2) : [this.config.commands.voiceToggleOn]).map((v) => this.linked(v)).join(\", \")} or ${(isArr(this.config.commands.voiceToggleOff) ? this.config.commands.voiceToggleOff.slice(0, 2) : [this.config.commands.voiceToggleOff]).map((v) => this.linked(v)).join(\", \")} ${inputHtml}` : type === \"number\" ? `a number (like ${this.linked(\"0\")}, ${this.linked(\"50\")}):</small> ${inputHtml}` : type === \"array\" ? `comma-separated values:</small> ${inputHtml}` : `the exact text:</small> ${inputHtml}`;\r\n return void this.view?.(`${crumbHtml}<div class=\"tmg-media-voice-content\">${showInput ? '<small style=\"font-weight: 500;\">' : \"\"}Try ${this.config.muted ? (showInput ? \"typing\" : IS_MOBILE ? \"tapping\" : \"clicking\") : \"saying\"} ${hints}</div>`, this.getHelperOptions(actions));\r\n }\r\n const paths = this.ctlr.getLogicPaths(this.state.ctx);\r\n if (!paths.length) return;\r\n const inputHtml = `<input name=\"voice_path\" type=\"text\" class=\"tmg-media-voice-path-input\" placeholder=\"...text\"/>`;\r\n this.view?.(`${crumbHtml}<div class=\"tmg-media-voice-content\"><small style=\"font-weight: 500;\">Try ${this.config.muted ? (IS_MOBILE ? \"tapping\" : \"clicking\") : \"saying\"} any of these:</small><br>${inputHtml} • ${paths.map((p) => this.linked(uncam(p.split(\".\").pop()!))).join(\" • \")}</div>`, this.getHelperOptions(actions));\r\n }\r\n\r\n protected linked(text: string, value = text.toLowerCase(), isGoto = false, punc = isGoto || this.config.muted ? \"\" : '\"'): string {\r\n return `${punc}<u class=\"tmg-media-voice-link\" ${isGoto ? \"data-goto\" : \"data-cmd\"}=\"${value}\" title=\"${isGoto ? \"Go to\" : \"Say\"} ${value}\" tabindex=\"0\" style=\"cursor:pointer; text-decoration-color: rgb(from var(--tmg-media-brand-${isGoto ? \"accent-\" : \"\"}color) r g b / 0.75);\">${isGoto || this.config.muted ? text : value}</u>${punc}`;\r\n } // `\"\"` is my lil UI Experiment, crafting a standard here :)\r\n protected stayWoke(e: Event): void {\r\n this.state.routing && this.ctlr.throttle(\"voiceWaking\", () => e.composedPath().some((el) => (el as HTMLElement)?.matches?.(`:is([id=\"${this.TIDS.HELPER}\"],[id=\"${this.TIDS.ROUTER}\"])`)) && this.snooze(), 500);\r\n }\r\n protected handleClick(e: MouseEvent, t = e.target as HTMLElement): void {\r\n if (!t?.matches?.(clame(\"link\"))) return;\r\n e.preventDefault(), e.stopPropagation();\r\n if (t.dataset.goto) return void this.goTo(t.dataset.goto);\r\n this.view?.update(this.TIDS.ROUTER, { render: t.dataset.cmd, ...this.getRouterOptions(false) }); // Instantly update the router toast to show they \"clicked/said\" it\r\n this.process(t.dataset.cmd || \"\"); // Pipe it straight into the processor as if they spoke it!\r\n }\r\n protected handleInput(e: Event, t = e.target as HTMLInputElement, isEnter = e.type === \"keydown\" && (e as KeyboardEvent).key === \"Enter\", isClick = e.type === \"click\"): void {\r\n if (!t?.tagName) return;\r\n this.stayWoke(e);\r\n if ((isEnter && t.matches(clame(\"word-input\"))) || (isClick && t.matches(clame(\"word-submit\")))) e.preventDefault(), e.stopPropagation(), this.submit(t.closest(clame(\"input-wrap\"))?.querySelector<HTMLInputElement>(clame(\"word-input\"))?.value);\r\n else if (isEnter && t.matches(clame(\"path-input\"))) e.preventDefault(), e.stopPropagation(), this.submit(t.value, true);\r\n }\r\n public snooze(): void {\r\n this.ctlr.debounce(\"voiceSleeping\", this.snoozeCb, this.config.routing.timeout, false, this.signal);\r\n }\r\n private snoozeCb = () => (this.config.active.value = \"passive\");\r\n\r\n protected onCtx(value: string): void {\r\n if (this.history[this.historyIdx] !== this.state.ctx) {\r\n const idx = this.history.indexOf(this.state.ctx);\r\n idx === -1 && this.history.splice(this.historyIdx + 1, this.history.length, value), (this.historyIdx = idx !== -1 ? idx : this.history.length - 1);\r\n }\r\n this.media.tech.polyfill(\"voiceSubmit\", false), this.media.tech.polyfill(\"voiceItems\", this.history.length > 1);\r\n this.media.tech.polyfill(\"previousVoiceItem\", this.historyIdx > 0), this.media.tech.polyfill(\"nextVoiceItem\", this.historyIdx < this.history.length - 1);\r\n this.state.routing && this.predict(); // The single source of truth for rendering the UI\r\n }\r\n protected goTo(path = this.state.ctx, useForce = path === this.state.ctx): string {\r\n return force(() => (this.state.ctx = path), useForce);\r\n }\r\n protected goBack(): void {\r\n this.media.features.previousVoiceItem && this.goTo(this.history[--this.historyIdx]);\r\n }\r\n protected goForward(): void {\r\n this.media.features.nextVoiceItem && this.goTo(this.history[++this.historyIdx]);\r\n }\r\n protected clearCtx(direct = this.config.routing.direct): void {\r\n (this.history = direct ? [\"*\", \"media\", \"media.intent\"] : [\"*\"]), this.goTo(direct ? \"media.intent\" : \"*\", true);\r\n }\r\n\r\n protected getHelperOptions(actions?: ToastOptions[\"actions\"]): ToastOptions {\r\n return { id: this.TIDS.HELPER, actions, onClose: (_, user) => user && (this.config.active.value = \"passive\"), signal: this.signal, ...this.config.toasts.helper };\r\n }\r\n protected getRouterOptions(full = true): ToastOptions {\r\n return full ? { id: this.TIDS.ROUTER, actions: this.getRouterActions(), onClose: (_, user) => user && (this.config.active.value = false), signal: this.signal, ...this.config.toasts.router, ...this.getRouterOptions(false) } : { icon: this.config.toasts.router.icon, type: this.config.muted ? \"warning\" : this.config.toasts.router.type };\r\n }\r\n protected getRouterActions(full = true): ToastOptions[\"actions\"] {\r\n return { ...(full && this.state.routing && { [`<span title='Open actions'>${IconRegistry.get(\"settings\")}</span>`]: (_, __, menu = this.ctlr.plug(\"settings.panel\")?.menu) => (menu?.open(null), menu?.goTo(\"actions\")) }), [`<span title='${this.config.muted ? \"Unmute\" : \"Mute\"} my voice${formatActionTooltip(this.settings.keys.shortcuts.voiceMute, this.config.commands.voiceMute)}'>${IconRegistry.get(this.config.muted ? \"volumeMuted\" : \"volumeHigh\", true)}</span>`]: () => (this.config.muted = !this.config.muted) };\r\n }\r\n protected getRouterSpeech(firstHalf = this.config.muted ? \"Snubbing...\" : \"Listening...\", secondHalf = `${this.config.muted ? (IS_MOBILE ? \"Tap\" : \"Click\") : \"Say\"} ${!this.state.routing ? `${isArr(this.config.commands.voiceWake) ? this.config.commands.voiceWake.map((c = \"\") => this.linked(c)).join(\" or \") : this.linked(this.config.commands.voiceWake)} to wake me up` : this.config.muted ? \"or type instead\" : \"a path or command!\"}`): string {\r\n return `${firstHalf} ${secondHalf}`;\r\n }\r\n protected get container() {\r\n return this.ctlr.plug(\"settings.toasts\")?.container;\r\n }\r\n protected get view() {\r\n return this.ctlr.toast;\r\n }\r\n\r\n public override onDestroy(): void {\r\n this.stop(), super.onDestroy();\r\n }\r\n}\r\nconst uncam = (str: string) => capitalize(uncamelize(str)),\r\n clame = (sfx: string) => `.tmg-media-voice-${sfx}`;\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.voice\": typeof VoicePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n voice: VoiceConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaFeaturesExt {\r\n voice: boolean;\r\n voiceItems: boolean;\r\n voiceSubmit: boolean;\r\n nextVoiceItem: boolean;\r\n previousVoiceItem: boolean;\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAS,OAAO,SAAS,SAAS,cAAc;AAgBzC,IAAM,YAAN,cAAwB,SAAkC;AAAA,EAU/D,YAAY,MAAkB,SAAS,KAAK,SAAS,OAAO;AAC1D,UAAM,MAAM,QAAQ,EAAE,KAAK,KAAK,SAAS,MAAM,CAAC;AARlD,wBAAU;AACV,wBAAU,eAAc,QAAQ,MAAM,KAAK,OAAO,6BAA6B,KAAK,OAAO,OAAO,OAAO,YAAY,eAAe,QAAQ,KAAK,GAAG,CAAC,+BAA0B,EAAE,GAAG,aAAa,OAAO,KAAK,YAAY,MAAM,GAAG,KAAK,OAAO,QAAQ,KAAK,KAAK,OAAO,EAAE,GAAG,IAAI,KAAK,KAAK,SAAS,QAAQ,KAAK,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,iBAAiB,UAAU,GAAG,YAAY,EAAE,CAAC;AACxX,wBAAU,YAAgC,CAAC,iBAAiB,gBAAgB;AAC5E,wBAAmB,QAAO,EAAE,QAAQ,8BAA8B,KAAK,KAAK,OAAO,EAAE,IAAI,QAAQ,8BAA8B,KAAK,KAAK,OAAO,EAAE,IAAI,SAAS,+BAA+B,KAAK,KAAK,OAAO,EAAE,GAAG;AACpN,wBAAU,WAAoB,CAAC,GAAG;AAClC,wBAAU,cAAqB;AA0D/B,wBAAQ,WAA0B;AA2JlC,wBAAQ,YAAW,MAAO,KAAK,OAAO,OAAO,QAAQ;AAAA,EAjNrD;AAAA,EAEgB,QAAc;AAE5B,UAAM,oBAAqB,OAAe,qBAAsB,OAAe;AAC/E,QAAI,CAAC,kBAAmB;AACxB,SAAK,cAAc,IAAI,kBAAkB;AACzC,WAAO,OAAO,KAAK,aAAa,EAAE,YAAY,MAAM,gBAAgB,MAAM,UAAU,KAAK,UAAU,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,CAAC;AAAA,EAC/I;AAAA,EAEgB,OAAa;AAE3B,KAAC,SAAS,SAAS,WAAW,aAAa,aAAa,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,KAAK,WAAW,iBAAiB,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,cAAc,KAAK,UAAU,EAAE,SAAS,IAAI,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC;AAEpO,SAAK,MAAM,MAAM,OAAO,KAAK,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3D,SAAK,MAAM,GAAG,WAAW,CAAC,EAAE,MAAM,OAAO,KAAK,MAAM,UAAU,UAAU,OAAO,2BAA2B,KAAK,GAAI,KAAK,OAAO,OAAO,OAAO,YAAY,SAAS,KAAK,OAAO,OAAO,SAAS,UAAU,eAAe,QAAQ,OAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE9P,SAAK,KAAK,OAAO,IAAI,+BAA+B,CAAC,MAAO,MAAM,aAAa,CAAC,KAAK,OAAO,SAAS,UAAU,SAAS,QAAQ,GAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEvK,SAAK,MAAM,MAAM,QAAQ,MAAM,KAAK,MAAM,KAAK,SAAS,SAAS,IAAI,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE3G,SAAK,KAAK,MAAM,GAAG,qBAAqB,MAAM,KAAK,KAAK,SAAS,mBAAmB,KAAK,cAAc,KAAK,OAAO,KAAK,MAAM,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AACxJ,gBAAY,GAAG,aAAa,MAAM,KAAK,KAAK,SAAS,mBAAmB,KAAK,cAAc,KAAK,OAAO,KAAK,MAAM,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE5I,SAAK,KAAK,OAAO,GAAG,+BAA+B,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7F,SAAK,KAAK,OAAO,GAAG,wBAAwB,CAAC,EAAE,MAAM,MAAM,KAAK,OAAO,OAAO,UAAU,SAAS,KAAK,aAAa,MAAM,GAAG,KAAK,MAAM,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClK,SAAK,KAAK,OAAO,GAAG,wCAAwC,CAAC,EAAE,MAAM,MAAO,KAAK,OAAO,OAAO,OAAO,YAAY,KAAK,MAAM,WAAW,UAAU,eAAe,QAAQ,MAAO,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACnN,SAAK,KAAK,OAAO,GAAG,gCAAgC,CAAC,EAAE,MAAM,OAAO,QAAQ,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,SAAS,WAAW,QAAS,EAAE,CAAC,GAAG,GAAG,MAAM,CAAS,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7M,SAAK,KAAK,OAAO,GAAG,gCAAgC,CAAC,EAAE,MAAM,OAAO,QAAQ,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,SAAS,WAAW,QAAS,EAAE,CAAC,GAAG,GAAG,MAAM,CAAS,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7M,SAAK,KAAK,OAAO,GAAG,qCAAqC,CAAC,EAAE,MAAM,MAAM,CAAC,KAAK,MAAM,YAAY,MAAM,SAAS,KAAK,OAAO,OAAO,SAAS,KAAK,MAAM,IAAK,KAAK,OAAO,OAAO,QAAQ,QAAS,EAAE,QAAQ,KAAK,OAAO,CAAC;AACtN,SAAK,KAAK,OAAO,GAAG,YAAY,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC1E,SAAK,KAAK,OAAO,GAAG,WAAW,MAAM,KAAK,MAAM,WAAW,KAAK,QAAQ,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClG,SAAK,KAAK,MAAM,aAAa,EAAE,OAAO,EAAE,OAAO,WAAW,OAAO,QAAQ,EAAE,GAAG,KAAK,MAAM;AACzF,SAAK,KAAK,MAAM,aAAa,EAAE,OAAO,EAAE,OAAO,UAAU,EAAE,GAAG,KAAK,MAAM;AACzE,SAAK,KAAK,MAAM,aAAa,EAAE,OAAO,EAAE,OAAO,UAAU,EAAE,GAAG,KAAK,MAAM;AACzE,SAAK,KAAK,MAAM,eAAe,EAAE,IAAI,MAAM,KAAK,OAAO,GAAG,OAAO,EAAE,OAAO,YAAY,EAAE,GAAG,KAAK,MAAM;AACtG,SAAK,KAAK,MAAM,oBAAoB,EAAE,IAAI,KAAK,QAAQ,UAAU,EAAE,OAAO,UAAU,EAAE,GAAG,KAAK,MAAM;AACpG,SAAK,KAAK,MAAM,gBAAgB,EAAE,IAAI,KAAK,WAAW,UAAU,EAAE,OAAO,UAAU,EAAE,GAAG,KAAK,MAAM;AACnG,SAAK,KAAK,MAAM,iBAAiB,EAAE,IAAI,MAAM,KAAK,SAAS,KAAK,EAAE,GAAG,KAAK,MAAM;AAChF,SAAK,KAAK,MAAM,QAAQ,KAAK,aAAa,IAAI,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5H,UAAM,KAAK;AAAA,EACb;AAAA,EAEU,SAAS,GAAc;AAC/B,SAAK,OAAO;AACZ,QAAI,aAAa;AACjB,QAAI,CAAC,KAAK,OAAO,MAAO,UAAS,IAAI,EAAE,aAAa,MAAM,EAAE,QAAQ,QAAQ,IAAI,KAAK,EAAE,EAAG,eAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE;AACxH,iBAAa,WAAW,KAAK,EAAE,YAAY;AAC3C,KAAC,KAAK,OAAO,UAAU,KAAK,MAAM,WAAW,KAAK,OAAO,OAAO,SAAS,UAAU,aAAa,KAAK,OAAO,aAAa,GAAG,UAAU,GAAG,CAAC,KAAK,MAAM,UAAU,WAAW,KAAK,OAAO,MAAM,KAAK,OAAO,SAAS,SAAS,IAAI,KAAK,OAAO,SAAS,UAAU,CAAC,IAAI,KAAK,OAAO,SAAS,SAAS,CAAC,MAAM,EAAE,KAAK,KAAK,gBAAgB,KAAK,MAAM,WAAW,CAAC,YAAY,yBAAyB,QAAW,KAAK,MAAM,UAAU,KAAK,MAAS,GAAG,KAAK,iBAAiB,CAAC;AACvc,UAAM,YAAY,KAAK,WAAW,cAAgC,6BAA6B;AAC/F,QAAI,UAAW,WAAU,QAAQ;AACjC,kBAAc,KAAK,KAAK,SAAS,mBAAmB,MAAM,GAAG,EAAE,WAAW,IAAI,UAAU,OAAO,KAAK,YAAa,KAAK,UAAU,GAAG,EAAE,WAAW,IAAI,UAAU,IAAK,KAAK,QAAQ,UAAU,IAAI,KAAK,OAAO,KAAK,MAAM;AAAA,EACvN;AAAA,EAEU,QAAc;AACtB,SAAK,UAAU;AACf,SAAK,QAAQ,OAAO,SAAS,KAAK,aAAa,KAAK,KAAK,MAAM;AAAA,EACjE;AAAA,EACU,QAAQ,GAAc;AAC9B,QAAI,EAAE,MAAM,SAAS,aAAa,EAAG,MAAK,OAAO,QAAQ,KAAK,MAAM,IAAK,KAAK,OAAO,OAAO,QAAQ,OAAQ,KAAK,MAAM,MAAM,0DAA0D,EAAE,KAAK,WAAW,CAAC;AAAA,EAC5M;AAAA,EAEU,aAAa,EAAE,MAAM,GAA4D;AACzF,cAAU,QAAQ,KAAK,KAAK,IAAI,KAAK,aAAa,MAAM,UAAU,YAAY,KAAK,MAAM,IAAI,KAAK,OAAO,GAAG,KAAK,MAAM;AAAA,EACzH;AAAA,EACO,eAAqB;AAC1B,KAAC,KAAK,aAAa,IAAI,KAAK,KAAK,IAAI,KAAK,OAAO,OAAO,UAAU,KAAK,OAAO,OAAO,UAAU,QAAQ,KAAK,OAAO,GAAG,KAAK,MAAM;AAAA,EACnI;AAAA,EACU,eAAwB;AAChC,WAAO,KAAK,KAAK,MAAM,UAAW,YAAY,aAAa,KAAK,KAAK,MAAM,qBAAsB,KAAK,OAAO,UAAU,CAAC,KAAK,KAAK,OAAO;AAAA,EAC3I;AAAA,EAEA,MAAgB,UAAiE;AAC/E,UAAM,SAAS,MAAM,UAAU,aAAa,MAAM,EAAE,MAAM,aAAa,CAAC,EAAE,MAAM,MAAM,IAAI,IAAI,SAAS;AACvG,QAAI,UAAU,aAAa,UAAU,SAAU,QAAO;AAEtD,WAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAkB,IAAI,OAAQ,MAAM,MAAM,KAAK,MAAM,KAAK,qCAAqC,EAAE,IAAI,KAAK,KAAK,QAAQ,QAAQ,KAAK,QAAQ,GAAG,KAAK,OAAO,OAAO,QAAQ,WAAW,OAAO,SAAS,EAAE,IAAI,MAAM,UAAU,aAAa,aAAa,EAAE,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,SAAS,EAAE,EAAE,MAAM,OAAO,MAAO,MAAM,UAAU,aAAa,MAAM,EAAE,MAAM,aAAoB,CAAC,EAAE,KAAK,OAAK,GAAG,UAAU,UAAU,MAAM,EAAE,YAAY,mBAAmB,KAAM,EAAE,IAAI,IAAI,IAAI,WAAW,IAAI,KAAK,MAAM,KAAK,sCAAsC,EAAE,IAAI,KAAK,KAAK,QAAQ,WAAW,OAAO,SAAS,EAAE,OAAO,IAAK,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,iBAAiB,KAAK,EAAE,GAAG,SAAS,CAACA,IAAG,SAAS,IAAI,OAAO,cAAc,OAAO,EAAE,CAAC,KAAK,IAAI,OAAO,GAAG,CAAE;AAAA,EACj0B;AAAA,EACA,MAAa,QAAuB;AAClC,QAAI,QAAQ,KAAK,OAAO,QAAQ,YAAY,MAAM,KAAK,QAAQ;AAC/D,QAAI,UAAU,WAAW,CAAC,KAAK,OAAQ;AACvC,cAAU,cAAc,KAAK,OAAO,OAAO,SAAS,UAAU,gBAAgB,KAAK,MAAM,SAAS,KAAK,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,gBAAgB,GAAG,KAAK,iBAAiB,CAAC;AACnL,QAAI,KAAK,MAAM,QAAS,MAAK,KAAK,GAAG,KAAK,MAAM,SAAS,KAAK,KAAK,MAAM,KAAK,KAAK,YAAY;AAC/F,QAAI;AACF,gBAAU,YAAY,CAAC,KAAK,OAAO,SAAS,KAAK,aAAa,MAAM,IAAI,KAAK,QAAQ,EAAE,OAAO,cAAc,CAAC;AAAA,IAC/G,SAAS,GAAG;AAAA,IAAC;AAAA,EACf;AAAA,EACU,OAAa;AACrB,IAAC,KAAK,MAAM,UAAU,KAAK,UAAU,OAAQ,KAAK,aAAa,MAAM;AACrE,eAAW,KAAK,KAAK,KAAM,MAAK,OAAO,QAAQ,KAAK,KAAK,CAA2B,CAAC;AACrF,eAAW,KAAK,CAAC,iBAAiB,iBAAiB,EAAG,MAAK,KAAK,cAAc,YAAY,CAAC;AAAA,EAC7F;AAAA,EAEU,SAAe;AACvB,QAAI,KAAK,MAAM,QAAS;AACxB,SAAK,MAAM,UAAU;AACrB,SAAK,SAAS,GAAG,KAAK,OAAO,KAAK,gBAAgB,GAAG,KAAK,iBAAiB,CAAC,GAAG,KAAK,OAAO;AAAA,EAC7F;AAAA;AAAA,EACU,QAAc;AACtB,QAAI,CAAC,KAAK,MAAM,QAAS;AACzB,SAAK,MAAM,UAAU,KAAK,UAAU;AACpC,SAAK,SAAS,GAAG,KAAK,OAAO,QAAQ,KAAK,KAAK,MAAM,GAAG,CAAC,KAAK,OAAO,OAAO,SAAS,KAAK,OAAO,OAAO,SAAS,UAAU,eAAe,KAAK,OAAO,QAAQ,KAAK,KAAK,MAAM,IAAI,KAAK,OAAO,KAAK,gBAAgB,GAAG,KAAK,iBAAiB,CAAC;AAAA,EAC/O;AAAA;AAAA,EAEU,QAAQ,YAAoB,QAAoB,KAAK,OAAO,QAAQ,MAAM,OAAgB;AAClG,eAAW,OAAO,OAAO,OAAO,KAAK,KAAK,QAAQ,OAAO,GAAG;AAC1D,YAAM,MAAM,KAAK,OAAO,SAAS,IAAI,EAAE;AACvC,UAAI,CAAC,KAAK,UAAW,IAAI,OAAO,eAAe,CAAC,KAAK,OAAO,QAAQ,iBAAkB,KAAK,SAAS,SAAS,IAAI,EAAE,MAAM,IAAI,OAAO,SAAS,KAAK,OAAO,QAAQ,MAAM,WAAW,SAAU,IAAI,OAAO,eAAe,KAAK,MAAM,QAAU;AAC3O,YAAM,IAAI,OAAO,SAAS,KAAK,OAAO,QAAQ,MAAM,WAAW,UAAU,kBAAkB,gBAAgB,KAAK,YAAY,KAAK,OAAO,QAAQ,QAAQ,EAAG,QAAO,KAAK,KAAK,QAAQ,IAAI,EAAE,KAAK,KAAK,MAAM,QAAQ,gBAAgB,IAAI,SAAS,WAAW,WAAW,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,KAAK,KAAK,QAAQ,MAAM,MAAM,WAAW,KAAK,OAAO,OAAO,OAAO,UAAU,CAAC,GAAG;AAAA,IAC9W;AACA,WAAO;AAAA,EACT;AAAA,EACU,QAAQ,YAAoB,UAAU,WAAW,QAAQ,UAAU,EAAE,GAAG,WAAW,OAAO,UAAU,CAAC,KAAK,MAAM,SAAkB;AAC1I,QAAI,KAAK,QAAQ,YAAY,SAAS,KAAK,QAAS,QAAO,CAAC;AAE5D,QAAI,KAAK,QAAQ,YAAY,WAAW,EAAG,QAAO;AAElD,QAAI,CAAC,KAAK,KAAK,UAAU,KAAK,MAAM,KAAK,IAAI,GAAG;AAC9C,YAAM,QAAQ,KAAK,KAAK,cAAc,KAAK,MAAM,GAAG;AAEpD,UAAI,QAAuB,MAAM,UAAU,GAAG,MAAM,MAAM;AAC1D,UAAI;AACF,iBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,gBAAM,OAAO,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,EAAG,YAAY;AAEpD,cAAI,YAAY,MAAM;AAAE,oBAAQ,MAAM,CAAC;AAAG;AAAA,UAAO;AACjD,gBAAM,QAAQ,yBAAyB,MAAM,UAAU;AACvD,cAAI,QAAQ,KAAK,OAAO,QAAQ,YAAY,QAAQ,QAAS,CAAC,UAAU,OAAS,QAAQ,MAAM,CAAC;AAAA,QAClG;AACF,UAAI,OAAO;AACT,YAAI,KAAK,KAAK,UAAU,KAAK,KAAK,KAAK,GAAG,IAAI,EAAG,QAAO,KAAK,QAAQ,YAAY,OAAO,IAAI,GAAG;AAAA,MACjG,WAAW,UAAU;AACnB,cAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,aAAa,GAAG,KAAK,MAAM,GAAG,IAAI,SAAS,UAAU,CAAC,IAC1F,MAAM,KAAK,KAAK,UAAU,IAAI,IAAI,QAAQ,KAAK,KAAK,WAAkB,OAAO,IAAI,CAAC,IAAI;AACxF,YAAI,QAAQ,UAAa,KAAK,KAAK,UAAU,KAAK,KAAK,IAAI,GAAG,MAAM,GAAG,EAAG,QAAO,KAAK,QAAQ,YAAY,MAAM,IAAI,GAAG;AAAA,MACzH;AAAA,IACF,WAAW,KAAK,QAAQ,YAAY,QAAW,KAAK,EAAG,QAAO;AAE9D,WAAO,KAAK,QAAQ,YAAY,YAAY;AAAA,EAC9C;AAAA,EACU,MAAM,YAAoB,OAAO,KAAK,MAAM,KAAK,QAAQ,OAAO,QAAQ,QAAQ,KAAK,KAAK,WAAkB,OAAO,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,IAAI,UAAU,OAAO,OAAY;AACtL,QAAI,SAAS,UAAW,QAAO,SAAS,KAAK,OAAO,QAAQ,cAAc,CAAC,QAAQ,gBAAgB,KAAK,OAAO,SAAS,eAAe,YAAY,KAAK,OAAO,QAAQ,QAAQ,IAAI,OAAO,gBAAgB,KAAK,OAAO,SAAS,gBAAgB,YAAY,KAAK,OAAO,QAAQ,QAAQ,IAAI,QAAQ;AACnS,QAAI,MAAO,QAAO;AAClB,QAAI,SAAS,UAAU;AACrB,YAAM,QAAQ,WAAW,QAAQ,MAAM,EAAE,EAAE,MAAM,eAAe;AAChE,aAAO,QAAQ,OAAO,MAAM,CAAC,CAAC,IAAI;AAAA,IACpC,WAAW,SAAS,YAAY,SAAS,QAAS,QAAO,aAAc,SAAS,WAAW,aAAa,WAAW,MAAM,kBAAkB,EAAE,OAAO,OAAO,IAAK;AAChK,WAAO;AAAA,EACT;AAAA,EACU,QAAQ,YAAoB,OAAO,KAAK,MAAM,KAAK,QAAQ,OAAO,WAAW,OAAO,QAAQ,KAAK,MAAM,YAAY,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,IAAI,UAAU,OAAO,OAAgB;AAChM,QAAI,UAAU,KAAM,QAAO;AAC3B,SAAK,KAAK,OAAO,QAAQ,OAAO,UAAU,QAAS,KAAK,OAAO,QAAQ,OAAO,UAAU,UAAU,SAAS,aAAc,CAAC,UAAU;AAClI,YAAM,QAAQ,KAAK,WAAW,cAAgC,MAAM,YAAY,CAAC;AACjF,UAAI,MAAO,OAAM,QAAQ,SAAS,UAAU,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK;AAC3E,aAAO,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,EAAE,QAAQ,cAAc,OAAO,KAAK,GAAG,GAAG,KAAK,iBAAiB,KAAK,EAAE,CAAC,GAAG;AAAA,IACxH;AACA,WAAO,QAAQ,KAAK,KAAK,WAAkB,MAAa,KAAK,GAAG,KAAK,MAAM,QAAQ,GAAG,KAAK,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,KAAK,KAAK,CAAC,aAAa,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,IAAI,KAAK,KAAK,QAAQ,MAAM,MAAM,WAAW,KAAK,OAAO,OAAO,OAAO,UAAU,CAAC,GAAG,KAAK,OAAO,GAAG;AAAA,EAC1S;AAAA,EACU,OAAO,SAAS,KAAK,WAAW,cAAgC,MAAM,YAAY,CAAC,GAAG,MAAM,KAAK,GAAG,UAAU,OAAa;AACnI,QAAI,OAAQ,MAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,EAAE,QAAQ,GAAG,KAAK,iBAAiB,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,QAAQ,QAAW,OAAO,IAAI,IAAI,KAAK,QAAQ,QAAQ,QAAW,IAAI;AAAA,EAC9L;AAAA,EACU,UAAgB;AACxB,UAAM,YAAY,KAAK,QAAQ,SAAS,IAAI,KAAK,6CAA6C,KAAK,QAAQ,IAAI,CAAC,GAAG,KAAK,GAAG,SAAS,QAAQ,KAAK,eAAe,iBAAiB,SAAS,sBAAsB,eAAe,KAAK,KAAK,OAAO,MAAM,MAAM,SAAS,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,CAAE,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,uDAAuD,IAAI,UACnX,UAAmC,CAAC;AACtC,QAAI,KAAK,MAAM,SAAS,YAAY;AAClC,cAAQ,6BAA6B,oBAAoB,KAAK,SAAS,KAAK,UAAU,eAAe,KAAK,OAAO,SAAS,aAAa,CAAC,eAAY,IAAI,MAAM,KAAK,SAAS,KAAK;AACjL,cAAQ,uBAAuB,oBAAoB,KAAK,SAAS,KAAK,UAAU,kBAAkB,KAAK,OAAO,SAAS,gBAAgB,CAAC,KAAK,KAAK,MAAM,SAAS,oBAAoB,KAAK,UAAU,gBAAW,IAAI,KAAK;AACxN,cAAQ,0BAA0B,oBAAoB,KAAK,SAAS,KAAK,UAAU,cAAc,KAAK,OAAO,SAAS,YAAY,CAAC,IAAI,KAAK,MAAM,SAAS,gBAAgB,KAAK,WAAW,gBAAW,IAAI,KAAK;AAAA,IACjN;AACA,QAAI,KAAK,KAAK,UAAU,KAAK,MAAM,KAAK,IAAI,GAAG;AAC7C,YAAM,QAAQ,QAAQ,KAAK,KAAK,WAAkB,OAAO,KAAK,MAAM,GAAG,CAAC,GACtE,OAAO,MAAM,KAAK,IAAI,UAAU,OAAO,OACvC,YAAY,KAAK,OAAO,QAAQ,OAAO,UAAU,QAAS,KAAK,OAAO,QAAQ,OAAO,UAAU,UAAU,SAAS,WAClH,aAAa,KAAK,MAAM,KAAK,SAAS,eAAe,KAAK,OAAO,QAAQ,OAAO,UAAU,QAAS,KAAK,OAAO,QAAQ,OAAO,UAAU,UAAU,SAAS,QAAS,GACpK,UAAU,SAAS,UAAU,MAAM,KAAK,IAAI,IAAI,SAAS,IACzDC,aAAY,YAAY,2EAA2E,SAAS,WAAW,WAAW,MAAM,qDAAqD,WAAW,eAAe,YAAY,OAAO,MAAM,aAAa,uCAAuC,oBAAoB,KAAK,SAAS,KAAK,UAAU,aAAa,KAAK,OAAO,SAAS,WAAW,CAAC,0DAAqD,EAAE,WAAW,IAErc,QAAQ,SAAS,YAAY,IAAI,MAAM,KAAK,OAAO,SAAS,aAAa,IAAI,KAAK,OAAO,SAAS,cAAc,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO,SAAS,aAAa,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,MAAM,KAAK,OAAO,SAAS,cAAc,IAAI,KAAK,OAAO,SAAS,eAAe,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO,SAAS,cAAc,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAIA,UAAS,KAAK,SAAS,WAAW,kBAAkB,KAAK,OAAO,GAAG,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,cAAcA,UAAS,KAAK,SAAS,UAAU,mCAAmCA,UAAS,KAAK,2BAA2BA,UAAS;AAChmB,aAAO,KAAK,KAAK,OAAO,GAAG,SAAS,wCAAwC,YAAY,sCAAsC,EAAE,OAAO,KAAK,OAAO,QAAS,YAAY,WAAW,YAAY,YAAY,aAAc,QAAQ,IAAI,KAAK,UAAU,KAAK,iBAAiB,OAAO,CAAC;AAAA,IACpR;AACA,UAAM,QAAQ,KAAK,KAAK,cAAc,KAAK,MAAM,GAAG;AACpD,QAAI,CAAC,MAAM,OAAQ;AACnB,UAAM,YAAY;AAClB,SAAK,OAAO,GAAG,SAAS,6EAA6E,KAAK,OAAO,QAAS,YAAY,YAAY,aAAc,QAAQ,6BAA6B,SAAS,WAAM,MAAM,IAAI,CAAC,MAAM,KAAK,OAAO,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,CAAE,CAAC,CAAC,EAAE,KAAK,UAAK,CAAC,UAAU,KAAK,iBAAiB,OAAO,CAAC;AAAA,EACnU;AAAA,EAEU,OAAO,MAAc,QAAQ,KAAK,YAAY,GAAG,SAAS,OAAO,OAAO,UAAU,KAAK,OAAO,QAAQ,KAAK,KAAa;AAChI,WAAO,GAAG,IAAI,mCAAmC,SAAS,cAAc,UAAU,KAAK,KAAK,YAAY,SAAS,UAAU,KAAK,IAAI,KAAK,+FAA+F,SAAS,YAAY,EAAE,0BAA0B,UAAU,KAAK,OAAO,QAAQ,OAAO,KAAK,OAAO,IAAI;AAAA,EAChV;AAAA;AAAA,EACU,SAAS,GAAgB;AACjC,SAAK,MAAM,WAAW,KAAK,KAAK,SAAS,eAAe,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,OAAQ,IAAoB,UAAU,YAAY,KAAK,KAAK,MAAM,WAAW,KAAK,KAAK,MAAM,KAAK,CAAC,KAAK,KAAK,OAAO,GAAG,GAAG;AAAA,EACjN;AAAA,EACU,YAAY,GAAe,IAAI,EAAE,QAA6B;AACtE,QAAI,CAAC,GAAG,UAAU,MAAM,MAAM,CAAC,EAAG;AAClC,MAAE,eAAe,GAAG,EAAE,gBAAgB;AACtC,QAAI,EAAE,QAAQ,KAAM,QAAO,KAAK,KAAK,KAAK,EAAE,QAAQ,IAAI;AACxD,SAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK,GAAG,KAAK,iBAAiB,KAAK,EAAE,CAAC;AAC9F,SAAK,QAAQ,EAAE,QAAQ,OAAO,EAAE;AAAA,EAClC;AAAA,EACU,YAAY,GAAU,IAAI,EAAE,QAA4B,UAAU,EAAE,SAAS,aAAc,EAAoB,QAAQ,SAAS,UAAU,EAAE,SAAS,SAAe;AAC5K,QAAI,CAAC,GAAG,QAAS;AACjB,SAAK,SAAS,CAAC;AACf,QAAK,WAAW,EAAE,QAAQ,MAAM,YAAY,CAAC,KAAO,WAAW,EAAE,QAAQ,MAAM,aAAa,CAAC,EAAI,GAAE,eAAe,GAAG,EAAE,gBAAgB,GAAG,KAAK,OAAO,EAAE,QAAQ,MAAM,YAAY,CAAC,GAAG,cAAgC,MAAM,YAAY,CAAC,GAAG,KAAK;AAAA,aACxO,WAAW,EAAE,QAAQ,MAAM,YAAY,CAAC,EAAG,GAAE,eAAe,GAAG,EAAE,gBAAgB,GAAG,KAAK,OAAO,EAAE,OAAO,IAAI;AAAA,EACxH;AAAA,EACO,SAAe;AACpB,SAAK,KAAK,SAAS,iBAAiB,KAAK,UAAU,KAAK,OAAO,QAAQ,SAAS,OAAO,KAAK,MAAM;AAAA,EACpG;AAAA,EAGU,MAAM,OAAqB;AACnC,QAAI,KAAK,QAAQ,KAAK,UAAU,MAAM,KAAK,MAAM,KAAK;AACpD,YAAM,MAAM,KAAK,QAAQ,QAAQ,KAAK,MAAM,GAAG;AAC/C,cAAQ,MAAM,KAAK,QAAQ,OAAO,KAAK,aAAa,GAAG,KAAK,QAAQ,QAAQ,KAAK,GAAI,KAAK,aAAa,QAAQ,KAAK,MAAM,KAAK,QAAQ,SAAS;AAAA,IAClJ;AACA,SAAK,MAAM,KAAK,SAAS,eAAe,KAAK,GAAG,KAAK,MAAM,KAAK,SAAS,cAAc,KAAK,QAAQ,SAAS,CAAC;AAC9G,SAAK,MAAM,KAAK,SAAS,qBAAqB,KAAK,aAAa,CAAC,GAAG,KAAK,MAAM,KAAK,SAAS,iBAAiB,KAAK,aAAa,KAAK,QAAQ,SAAS,CAAC;AACvJ,SAAK,MAAM,WAAW,KAAK,QAAQ;AAAA,EACrC;AAAA,EACU,KAAK,OAAO,KAAK,MAAM,KAAK,WAAW,SAAS,KAAK,MAAM,KAAa;AAChF,WAAO,MAAM,MAAO,KAAK,MAAM,MAAM,MAAO,QAAQ;AAAA,EACtD;AAAA,EACU,SAAe;AACvB,SAAK,MAAM,SAAS,qBAAqB,KAAK,KAAK,KAAK,QAAQ,EAAE,KAAK,UAAU,CAAC;AAAA,EACpF;AAAA,EACU,YAAkB;AAC1B,SAAK,MAAM,SAAS,iBAAiB,KAAK,KAAK,KAAK,QAAQ,EAAE,KAAK,UAAU,CAAC;AAAA,EAChF;AAAA,EACU,SAAS,SAAS,KAAK,OAAO,QAAQ,QAAc;AAC5D,IAAC,KAAK,UAAU,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI,CAAC,GAAG,GAAI,KAAK,KAAK,SAAS,iBAAiB,KAAK,IAAI;AAAA,EACjH;AAAA,EAEU,iBAAiB,SAAiD;AAC1E,WAAO,EAAE,IAAI,KAAK,KAAK,QAAQ,SAAS,SAAS,CAAC,GAAG,SAAS,SAAS,KAAK,OAAO,OAAO,QAAQ,YAAY,QAAQ,KAAK,QAAQ,GAAG,KAAK,OAAO,OAAO,OAAO;AAAA,EAClK;AAAA,EACU,iBAAiB,OAAO,MAAoB;AACpD,WAAO,OAAO,EAAE,IAAI,KAAK,KAAK,QAAQ,SAAS,KAAK,iBAAiB,GAAG,SAAS,CAAC,GAAG,SAAS,SAAS,KAAK,OAAO,OAAO,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,GAAG,KAAK,OAAO,OAAO,QAAQ,GAAG,KAAK,iBAAiB,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,OAAO,OAAO,MAAM,MAAM,KAAK,OAAO,QAAQ,YAAY,KAAK,OAAO,OAAO,OAAO,KAAK;AAAA,EAChV;AAAA,EACU,iBAAiB,OAAO,MAA+B;AAC/D,WAAO,EAAE,GAAI,QAAQ,KAAK,MAAM,WAAW,EAAE,CAAC,8BAA8B,aAAa,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,OAAO,KAAK,KAAK,KAAK,gBAAgB,GAAG,UAAU,MAAM,KAAK,IAAI,GAAG,MAAM,KAAK,SAAS,GAAG,GAAI,CAAC,gBAAgB,KAAK,OAAO,QAAQ,WAAW,MAAM,YAAY,oBAAoB,KAAK,SAAS,KAAK,UAAU,WAAW,KAAK,OAAO,SAAS,SAAS,CAAC,KAAK,aAAa,IAAI,KAAK,OAAO,QAAQ,gBAAgB,cAAc,IAAI,CAAC,SAAS,GAAG,MAAO,KAAK,OAAO,QAAQ,CAAC,KAAK,OAAO,MAAO;AAAA,EACngB;AAAA,EACU,gBAAgB,YAAY,KAAK,OAAO,QAAQ,gBAAgB,gBAAgB,aAAa,GAAG,KAAK,OAAO,QAAS,YAAY,QAAQ,UAAW,KAAK,IAAI,CAAC,KAAK,MAAM,UAAU,GAAG,MAAM,KAAK,OAAO,SAAS,SAAS,IAAI,KAAK,OAAO,SAAS,UAAU,IAAI,CAAC,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,IAAI,KAAK,OAAO,KAAK,OAAO,SAAS,SAAS,CAAC,mBAAmB,KAAK,OAAO,QAAQ,oBAAoB,oBAAoB,IAAY;AAC1b,WAAO,GAAG,SAAS,IAAI,UAAU;AAAA,EACnC;AAAA,EACA,IAAc,YAAY;AACxB,WAAO,KAAK,KAAK,KAAK,iBAAiB,GAAG;AAAA,EAC5C;AAAA,EACA,IAAc,OAAO;AACnB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEgB,YAAkB;AAChC,SAAK,KAAK,GAAG,MAAM,UAAU;AAAA,EAC/B;AACF;AA1QE,cADW,WACY,YAAW;AAClC,cAFW,WAEY,SAAQ;AA0QjC,IAAM,QAAQ,CAAC,QAAgB,WAAW,WAAW,GAAG,CAAC;AAAzD,IACE,QAAQ,CAAC,QAAgB,oBAAoB,GAAG;","names":["_","inputHtml"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  HTML5Tech
3
- } from "./chunk-6V3JMNRX.js";
3
+ } from "./chunk-3KTAU4LB.js";
4
4
  import {
5
5
  MSE_ENABLED
6
6
  } from "./chunk-RNETXJ63.js";
@@ -177,4 +177,4 @@ __publicField(ShakaTech, "techName", "shaka");
177
177
  export {
178
178
  ShakaTech
179
179
  };
180
- //# sourceMappingURL=chunk-D4OMTN35.js.map
180
+ //# sourceMappingURL=chunk-3C5WA6NQ.js.map
@@ -3,6 +3,9 @@ import {
3
3
  controllers,
4
4
  globalState
5
5
  } from "./chunk-FD6VCHH5.js";
6
+ import {
7
+ BaseTech
8
+ } from "./chunk-EAM7QVWC.js";
6
9
  import {
7
10
  DUMMY_VID,
8
11
  canAudioTracks,
@@ -20,9 +23,6 @@ import {
20
23
  HLS_EXTENSIONS,
21
24
  VIDEO_EXTENSIONS
22
25
  } from "./chunk-2XJFCVED.js";
23
- import {
24
- BaseTech
25
- } from "./chunk-6ITPIHGM.js";
26
26
  import {
27
27
  cloneMedia,
28
28
  getMediaReport,
@@ -979,4 +979,4 @@ export {
979
979
  HTML5Tech,
980
980
  Controller
981
981
  };
982
- //# sourceMappingURL=chunk-6V3JMNRX.js.map
982
+ //# sourceMappingURL=chunk-3KTAU4LB.js.map