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.
- package/dist/{chunk-Q2PVLSNG.js → chunk-25REL4ZN.js} +2 -2
- package/dist/{chunk-CO6YWIOA.js → chunk-2I6QHYQC.js} +92 -92
- package/dist/{chunk-JZZNDOWL.js → chunk-2VPRTOIE.js} +1 -2
- package/dist/{chunk-JZZNDOWL.js.map → chunk-2VPRTOIE.js.map} +1 -1
- package/dist/{chunk-D4OMTN35.js → chunk-3C5WA6NQ.js} +2 -2
- package/dist/{chunk-6V3JMNRX.js → chunk-3KTAU4LB.js} +4 -4
- package/dist/{chunk-VMGCCVRJ.js → chunk-3MNXCJXK.js} +17 -13
- package/dist/{chunk-VMGCCVRJ.js.map → chunk-3MNXCJXK.js.map} +1 -1
- package/dist/{chunk-FI44MLF6.js → chunk-5ZPP3KJI.js} +4 -4
- package/dist/{chunk-3NYQJFCX.js → chunk-7LAB4OEC.js} +2 -3
- package/dist/chunk-7LAB4OEC.js.map +1 -0
- package/dist/{chunk-TQZCDUEH.js → chunk-BAGDFZVR.js} +2 -2
- package/dist/{chunk-YE27TO6L.js → chunk-DGS4Z7ZU.js} +1 -2
- package/dist/chunk-DGS4Z7ZU.js.map +1 -0
- package/dist/{chunk-6ITPIHGM.js → chunk-EAM7QVWC.js} +2 -2
- package/dist/{chunk-6ITPIHGM.js.map → chunk-EAM7QVWC.js.map} +1 -1
- package/dist/{chunk-AX6N6UEH.js → chunk-ERWKYNVK.js} +5 -5
- package/dist/{chunk-XLD6XFKI.js → chunk-G5C4MZHF.js} +2 -3
- package/dist/chunk-G5C4MZHF.js.map +1 -0
- package/dist/{chunk-DIR774ND.js → chunk-GZRN3Q6A.js} +2 -2
- package/dist/{chunk-LDEUMAZQ.js → chunk-H2NWNVAI.js} +2 -2
- package/dist/{chunk-C73M5LUY.js → chunk-IW6MFACP.js} +47 -47
- package/dist/{chunk-4QFXOHHF.js → chunk-LNAOARU6.js} +5 -5
- package/dist/{chunk-F3I7HKUF.js → chunk-OCOHD75Y.js} +9 -9
- package/dist/{chunk-GTK5KLUZ.js → chunk-OHQLLCPA.js} +4 -4
- package/dist/{chunk-WYDJLWLT.js → chunk-PJBGNEGE.js} +5 -5
- package/dist/{chunk-QDGNEBXT.js → chunk-PSGY2S3W.js} +2 -5
- package/dist/chunk-PSGY2S3W.js.map +1 -0
- package/dist/{chunk-HEMADBDM.js → chunk-QB3DP5ZO.js} +38 -38
- package/dist/{chunk-IDOHPT5V.js → chunk-QGERW4TY.js} +2 -2
- package/dist/{chunk-L6GEH3VZ.js → chunk-RG5EFXDF.js} +2 -2
- package/dist/{chunk-PTA6NO4A.js → chunk-TEQGVO75.js} +4 -4
- package/dist/{chunk-X2VCMMOV.js → chunk-TZ2SGV36.js} +7 -7
- package/dist/{chunk-ZJFJ23KS.js → chunk-UAMYO73Y.js} +2 -2
- package/dist/{chunk-MNIV3ULN.js → chunk-VS6YMOWX.js} +55 -55
- package/dist/{chunk-OR3EGSRH.js → chunk-WTKWRIYK.js} +2 -2
- package/dist/{chunk-SW3MKGZV.js → chunk-YSKLRJ46.js} +79 -79
- package/dist/components/controls/airplay.js +1 -1
- package/dist/components/controls/backward10.js +1 -1
- package/dist/components/controls/bigNext.js +1 -1
- package/dist/components/controls/bigPlayPause.js +1 -1
- package/dist/components/controls/bigPrevious.js +1 -1
- package/dist/components/controls/brightness/index.js +1 -1
- package/dist/components/controls/captions.js +1 -1
- package/dist/components/controls/capture.js +1 -1
- package/dist/components/controls/cast.js +1 -1
- package/dist/components/controls/expandMiniplayer.js +1 -1
- package/dist/components/controls/forward10.js +1 -1
- package/dist/components/controls/fullscreen.js +1 -1
- package/dist/components/controls/fullscreenLock.js +1 -1
- package/dist/components/controls/fullscreenOrientation.cjs.map +1 -1
- package/dist/components/controls/fullscreenOrientation.js +3 -3
- package/dist/components/controls/next.js +1 -1
- package/dist/components/controls/objectFit.js +1 -1
- package/dist/components/controls/pictureInPicture.js +1 -1
- package/dist/components/controls/playPause.js +1 -1
- package/dist/components/controls/previous.js +1 -1
- package/dist/components/controls/removeMiniplayer.js +1 -1
- package/dist/components/controls/settings.js +1 -1
- package/dist/components/controls/theater.js +1 -1
- package/dist/components/controls/timeline/index.cjs +1 -1
- package/dist/components/controls/timeline/index.cjs.map +1 -1
- package/dist/components/controls/timeline/index.js +4 -4
- package/dist/components/controls/voice.js +1 -1
- package/dist/components/controls/volume/index.js +1 -1
- package/dist/components/holders/airplayPlaceholder.js +1 -1
- package/dist/components/holders/castPlaceholder.js +1 -1
- package/dist/components/holders/errorPlaceholder.js +1 -1
- package/dist/components/holders/pipPlaceholder.js +1 -1
- package/dist/components/icons/z-register.js +25 -25
- package/dist/components/notifiers/airplay.js +1 -1
- package/dist/components/notifiers/brightness.js +1 -1
- package/dist/components/notifiers/captions.js +1 -1
- package/dist/components/notifiers/capture.js +1 -1
- package/dist/components/notifiers/cast.js +1 -1
- package/dist/components/notifiers/fastPlay.js +1 -1
- package/dist/components/notifiers/fwdBwd.js +1 -1
- package/dist/components/notifiers/objectFit.js +1 -1
- package/dist/components/notifiers/playPause.js +1 -1
- package/dist/components/notifiers/playbackRate.js +1 -1
- package/dist/components/notifiers/prevNext.js +1 -1
- package/dist/components/notifiers/scrub.js +1 -1
- package/dist/components/notifiers/touchBrightness.js +1 -1
- package/dist/components/notifiers/touchVolume.js +1 -1
- package/dist/components/notifiers/volume.js +1 -1
- package/dist/components/notifiers/z-register.js +1 -1
- package/dist/components/screenLock.js +1 -1
- package/dist/components/z-register.cjs +1 -1
- package/dist/components/z-register.cjs.map +1 -1
- package/dist/components/z-register.js +22 -22
- package/dist/core/controller.cjs +1 -1
- package/dist/core/controller.cjs.map +1 -1
- package/dist/core/controller.js +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/init.cjs +1 -1
- package/dist/init.cjs.map +1 -1
- package/dist/init.js +4 -4
- package/dist/plugs/base/index.js +1 -1
- package/dist/plugs/base/slider.js +1 -1
- package/dist/plugs/main/ads/index.cjs +1 -1
- package/dist/plugs/main/ads/index.cjs.map +1 -1
- package/dist/plugs/main/ads/index.js +4 -4
- package/dist/plugs/main/disabled/index.js +1 -1
- package/dist/plugs/main/light/index.js +1 -1
- package/dist/plugs/main/playlist/index.js +3 -3
- package/dist/plugs/main/skeleton/index.js +1 -1
- package/dist/plugs/menus/main/actions.cjs.map +1 -1
- package/dist/plugs/menus/main/actions.js +3 -3
- package/dist/plugs/menus/settings/auto.cjs.map +1 -1
- package/dist/plugs/menus/settings/auto.js +3 -3
- package/dist/plugs/menus/settings/frame.cjs.map +1 -1
- package/dist/plugs/menus/settings/frame.js +3 -3
- package/dist/plugs/menus/settings/keys.js +1 -1
- package/dist/plugs/menus/settings/modes.cjs.map +1 -1
- package/dist/plugs/menus/settings/modes.js +3 -3
- package/dist/plugs/menus/settings/sleepTimer.cjs.map +1 -1
- package/dist/plugs/menus/settings/sleepTimer.js +3 -3
- package/dist/plugs/menus/settings/toasts.cjs.map +1 -1
- package/dist/plugs/menus/settings/toasts.js +3 -3
- package/dist/plugs/menus/settings/voice.cjs.map +1 -1
- package/dist/plugs/menus/settings/voice.js +3 -3
- package/dist/plugs/menus/z-register.cjs.map +1 -1
- package/dist/plugs/menus/z-register.js +3 -3
- package/dist/plugs/settings/ambience/index.js +1 -1
- package/dist/plugs/settings/auto/index.cjs.map +1 -1
- package/dist/plugs/settings/auto/index.js +3 -3
- package/dist/plugs/settings/brightness/index.js +1 -1
- package/dist/plugs/settings/captions/index.cjs +1 -1
- package/dist/plugs/settings/captions/index.cjs.map +1 -1
- package/dist/plugs/settings/captions/index.js +5 -5
- package/dist/plugs/settings/controlPanel/draggable.js +3 -3
- package/dist/plugs/settings/controlPanel/index.js +3 -3
- package/dist/plugs/settings/css/index.js +1 -1
- package/dist/plugs/settings/errors/index.js +1 -1
- package/dist/plugs/settings/fastPlay/index.js +1 -1
- package/dist/plugs/settings/frame/index.js +1 -1
- package/dist/plugs/settings/gesture/base.js +1 -1
- package/dist/plugs/settings/gesture/index.js +1 -1
- package/dist/plugs/settings/gesture/touch.js +1 -1
- package/dist/plugs/settings/gesture/wheel.js +1 -1
- package/dist/plugs/settings/keys/index.js +3 -3
- package/dist/plugs/settings/locked/index.js +1 -1
- package/dist/plugs/settings/metadata/index.js +1 -1
- package/dist/plugs/settings/modes/airplay.cjs +0 -1
- package/dist/plugs/settings/modes/airplay.cjs.map +1 -1
- package/dist/plugs/settings/modes/airplay.js +5 -5
- package/dist/plugs/settings/modes/cast.cjs +0 -1
- package/dist/plugs/settings/modes/cast.cjs.map +1 -1
- package/dist/plugs/settings/modes/cast.js +5 -5
- package/dist/plugs/settings/modes/fullscreen.cjs +0 -1
- package/dist/plugs/settings/modes/fullscreen.cjs.map +1 -1
- package/dist/plugs/settings/modes/fullscreen.js +4 -4
- package/dist/plugs/settings/modes/index.cjs +0 -3
- package/dist/plugs/settings/modes/index.cjs.map +1 -1
- package/dist/plugs/settings/modes/index.js +4 -4
- package/dist/plugs/settings/modes/miniplayer.cjs.map +1 -1
- package/dist/plugs/settings/modes/miniplayer.js +4 -4
- package/dist/plugs/settings/modes/pictureInPicture.cjs +0 -1
- package/dist/plugs/settings/modes/pictureInPicture.cjs.map +1 -1
- package/dist/plugs/settings/modes/pictureInPicture.js +4 -4
- package/dist/plugs/settings/modes/theater.cjs +0 -1
- package/dist/plugs/settings/modes/theater.cjs.map +1 -1
- package/dist/plugs/settings/modes/theater.js +4 -4
- package/dist/plugs/settings/notifiers/index.js +1 -1
- package/dist/plugs/settings/objectFit/index.js +1 -1
- package/dist/plugs/settings/overlay/index.js +1 -1
- package/dist/plugs/settings/panel/index.js +1 -1
- package/dist/plugs/settings/panel/menu/index.js +1 -1
- package/dist/plugs/settings/panel/menu/panel/main.js +1 -1
- package/dist/plugs/settings/panel/menu/panel/sub.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/base.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/button.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/color.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/dragselect.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/group.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/index.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/input.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/limits.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/range.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/select.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/toggle.js +1 -1
- package/dist/plugs/settings/persist/index.js +1 -1
- package/dist/plugs/settings/playbackRate/index.js +1 -1
- package/dist/plugs/settings/poster/index.js +1 -1
- package/dist/plugs/settings/sleepTimer/index.js +1 -1
- package/dist/plugs/settings/time/index.cjs +0 -1
- package/dist/plugs/settings/time/index.cjs.map +1 -1
- package/dist/plugs/settings/time/index.js +2 -2
- package/dist/plugs/settings/timeTravel/index.cjs.map +1 -1
- package/dist/plugs/settings/timeTravel/index.js +4 -4
- package/dist/plugs/settings/toasts/index.js +1 -1
- package/dist/plugs/settings/voice/index.cjs +0 -1
- package/dist/plugs/settings/voice/index.cjs.map +1 -1
- package/dist/plugs/settings/voice/index.js +4 -4
- package/dist/plugs/settings/volume/index.cjs.map +1 -1
- package/dist/plugs/settings/volume/index.js +4 -4
- package/dist/plugs/z-register.cjs +1 -8
- package/dist/plugs/z-register.cjs.map +1 -1
- package/dist/plugs/z-register.js +44 -44
- package/dist/super/components/icons.js +55 -55
- package/dist/super/components/index.cjs +1 -1
- package/dist/super/components/index.cjs.map +1 -1
- package/dist/super/components/index.js +99 -99
- package/dist/super/components/notifiers.js +1 -1
- package/dist/super/consts.js +5 -5
- package/dist/super/plugs/index.cjs +1 -8
- package/dist/super/plugs/index.cjs.map +1 -1
- package/dist/super/plugs/index.js +95 -95
- package/dist/super/plugs/menus.cjs.map +1 -1
- package/dist/super/plugs/menus.js +3 -3
- package/dist/super/techs.cjs +14 -10
- package/dist/super/techs.cjs.map +1 -1
- package/dist/super/techs.js +14 -14
- package/dist/super.cjs +14 -17
- package/dist/super.cjs.map +1 -1
- package/dist/super.global.js +14 -17
- package/dist/super.global.js.map +1 -1
- package/dist/super.js +104 -104
- package/dist/techs/base.cjs +1 -1
- package/dist/techs/base.cjs.map +1 -1
- package/dist/techs/base.js +1 -1
- package/dist/techs/dash.cjs +1 -1
- package/dist/techs/dash.cjs.map +1 -1
- package/dist/techs/dash.js +4 -4
- package/dist/techs/hls.cjs +1 -1
- package/dist/techs/hls.cjs.map +1 -1
- package/dist/techs/hls.js +4 -4
- package/dist/techs/html5.cjs +1 -1
- package/dist/techs/html5.cjs.map +1 -1
- package/dist/techs/html5.js +3 -3
- package/dist/techs/ima.cjs +1 -1
- package/dist/techs/ima.cjs.map +1 -1
- package/dist/techs/ima.js +3 -3
- package/dist/techs/shaka.cjs +1 -1
- package/dist/techs/shaka.cjs.map +1 -1
- package/dist/techs/shaka.js +4 -4
- package/dist/techs/vimeo.cjs +1 -1
- package/dist/techs/vimeo.cjs.map +1 -1
- package/dist/techs/vimeo.js +2 -2
- package/dist/techs/youtube.cjs +14 -10
- package/dist/techs/youtube.cjs.map +1 -1
- package/dist/techs/youtube.js +4 -4
- package/dist/techs/z-register.cjs +14 -10
- package/dist/techs/z-register.cjs.map +1 -1
- package/dist/techs/z-register.js +9 -9
- package/dist/tools/player.cjs +1 -1
- package/dist/tools/player.cjs.map +1 -1
- package/dist/tools/player.js +3 -3
- package/dist/tools/runtime/index.cjs +1 -1
- package/dist/tools/runtime/index.cjs.map +1 -1
- package/dist/tools/runtime/index.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-3NYQJFCX.js.map +0 -1
- package/dist/chunk-QDGNEBXT.js.map +0 -1
- package/dist/chunk-XLD6XFKI.js.map +0 -1
- package/dist/chunk-YE27TO6L.js.map +0 -1
- /package/dist/{chunk-Q2PVLSNG.js.map → chunk-25REL4ZN.js.map} +0 -0
- /package/dist/{chunk-CO6YWIOA.js.map → chunk-2I6QHYQC.js.map} +0 -0
- /package/dist/{chunk-D4OMTN35.js.map → chunk-3C5WA6NQ.js.map} +0 -0
- /package/dist/{chunk-6V3JMNRX.js.map → chunk-3KTAU4LB.js.map} +0 -0
- /package/dist/{chunk-FI44MLF6.js.map → chunk-5ZPP3KJI.js.map} +0 -0
- /package/dist/{chunk-TQZCDUEH.js.map → chunk-BAGDFZVR.js.map} +0 -0
- /package/dist/{chunk-AX6N6UEH.js.map → chunk-ERWKYNVK.js.map} +0 -0
- /package/dist/{chunk-DIR774ND.js.map → chunk-GZRN3Q6A.js.map} +0 -0
- /package/dist/{chunk-LDEUMAZQ.js.map → chunk-H2NWNVAI.js.map} +0 -0
- /package/dist/{chunk-C73M5LUY.js.map → chunk-IW6MFACP.js.map} +0 -0
- /package/dist/{chunk-4QFXOHHF.js.map → chunk-LNAOARU6.js.map} +0 -0
- /package/dist/{chunk-F3I7HKUF.js.map → chunk-OCOHD75Y.js.map} +0 -0
- /package/dist/{chunk-GTK5KLUZ.js.map → chunk-OHQLLCPA.js.map} +0 -0
- /package/dist/{chunk-WYDJLWLT.js.map → chunk-PJBGNEGE.js.map} +0 -0
- /package/dist/{chunk-HEMADBDM.js.map → chunk-QB3DP5ZO.js.map} +0 -0
- /package/dist/{chunk-IDOHPT5V.js.map → chunk-QGERW4TY.js.map} +0 -0
- /package/dist/{chunk-L6GEH3VZ.js.map → chunk-RG5EFXDF.js.map} +0 -0
- /package/dist/{chunk-PTA6NO4A.js.map → chunk-TEQGVO75.js.map} +0 -0
- /package/dist/{chunk-X2VCMMOV.js.map → chunk-TZ2SGV36.js.map} +0 -0
- /package/dist/{chunk-ZJFJ23KS.js.map → chunk-UAMYO73Y.js.map} +0 -0
- /package/dist/{chunk-MNIV3ULN.js.map → chunk-VS6YMOWX.js.map} +0 -0
- /package/dist/{chunk-OR3EGSRH.js.map → chunk-WTKWRIYK.js.map} +0 -0
- /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-
|
|
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-
|
|
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
|
-
|
|
99
|
-
} from "./chunk-
|
|
80
|
+
unlock
|
|
81
|
+
} from "./chunk-TMTWPBFD.js";
|
|
100
82
|
import {
|
|
101
|
-
|
|
102
|
-
} from "./chunk-
|
|
83
|
+
videoTrack
|
|
84
|
+
} from "./chunk-AIJWNUXU.js";
|
|
103
85
|
import {
|
|
104
|
-
|
|
105
|
-
} from "./chunk-
|
|
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
|
-
|
|
123
|
-
} from "./chunk-
|
|
104
|
+
settings
|
|
105
|
+
} from "./chunk-2J3FJY73.js";
|
|
124
106
|
import {
|
|
125
|
-
|
|
126
|
-
} from "./chunk-
|
|
107
|
+
shuffle
|
|
108
|
+
} from "./chunk-OEHNS7YX.js";
|
|
127
109
|
import {
|
|
128
|
-
|
|
129
|
-
} from "./chunk-
|
|
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
|
-
|
|
147
|
-
} from "./chunk-
|
|
128
|
+
play
|
|
129
|
+
} from "./chunk-ELI54OVR.js";
|
|
148
130
|
import {
|
|
149
|
-
|
|
150
|
-
} from "./chunk-
|
|
131
|
+
playbackRate
|
|
132
|
+
} from "./chunk-C3IEUYR3.js";
|
|
151
133
|
import {
|
|
152
|
-
|
|
153
|
-
} from "./chunk-
|
|
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
|
-
|
|
171
|
-
} from "./chunk-
|
|
152
|
+
loop
|
|
153
|
+
} from "./chunk-OSDM6ZVT.js";
|
|
172
154
|
import {
|
|
173
|
-
|
|
174
|
-
} from "./chunk-
|
|
155
|
+
mic
|
|
156
|
+
} from "./chunk-PEKXIISU.js";
|
|
175
157
|
import {
|
|
176
|
-
|
|
177
|
-
} from "./chunk-
|
|
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
|
-
|
|
195
|
-
} from "./chunk-
|
|
176
|
+
exitFullscreen
|
|
177
|
+
} from "./chunk-DR2VKENG.js";
|
|
196
178
|
import {
|
|
197
|
-
|
|
198
|
-
} from "./chunk-
|
|
179
|
+
exitPip
|
|
180
|
+
} from "./chunk-WZ7AVGG7.js";
|
|
199
181
|
import {
|
|
200
|
-
|
|
201
|
-
} from "./chunk-
|
|
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
|
-
|
|
219
|
-
} from "./chunk-
|
|
200
|
+
doubleTriangleLeft
|
|
201
|
+
} from "./chunk-NTVIMR7F.js";
|
|
220
202
|
import {
|
|
221
|
-
|
|
222
|
-
} from "./chunk-
|
|
203
|
+
doubleTriangleRight
|
|
204
|
+
} from "./chunk-N5KPQNEN.js";
|
|
223
205
|
import {
|
|
224
|
-
|
|
225
|
-
} from "./chunk-
|
|
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
|
-
|
|
246
|
-
} from "./chunk-
|
|
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
|
-
|
|
252
|
-
} from "./chunk-
|
|
251
|
+
VolumeControl
|
|
252
|
+
} from "./chunk-D6ULBPSS.js";
|
|
253
253
|
import {
|
|
254
254
|
RangeInput
|
|
255
255
|
} from "./chunk-Q2FTCDJV.js";
|
|
256
256
|
import {
|
|
257
|
-
|
|
258
|
-
} from "./chunk-
|
|
257
|
+
TimeAndDurationButton
|
|
258
|
+
} from "./chunk-4ZMTEOTZ.js";
|
|
259
259
|
import {
|
|
260
|
-
|
|
261
|
-
} from "./chunk-
|
|
260
|
+
VoiceButton
|
|
261
|
+
} from "./chunk-BUMF7O6G.js";
|
|
262
262
|
import {
|
|
263
|
-
|
|
264
|
-
} from "./chunk-
|
|
263
|
+
ObjectFitButton
|
|
264
|
+
} from "./chunk-EZFGCPYW.js";
|
|
265
265
|
import {
|
|
266
|
-
|
|
267
|
-
} from "./chunk-
|
|
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
|
-
|
|
285
|
-
} from "./chunk-
|
|
287
|
+
DurationButton
|
|
288
|
+
} from "./chunk-AXJURPVZ.js";
|
|
286
289
|
import {
|
|
287
|
-
|
|
288
|
-
} from "./chunk-
|
|
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
|
-
|
|
306
|
-
} from "./chunk-
|
|
311
|
+
Backward10Button
|
|
312
|
+
} from "./chunk-7V3V2UFT.js";
|
|
307
313
|
import {
|
|
308
|
-
|
|
309
|
-
} from "./chunk-
|
|
314
|
+
BigNextButton
|
|
315
|
+
} from "./chunk-CMKF52BC.js";
|
|
310
316
|
import {
|
|
311
|
-
|
|
312
|
-
} from "./chunk-
|
|
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
|
-
|
|
330
|
-
} from "./chunk-
|
|
335
|
+
AirPlayPlaceholder
|
|
336
|
+
} from "./chunk-QESJUJVR.js";
|
|
331
337
|
import {
|
|
332
|
-
|
|
333
|
-
} from "./chunk-
|
|
338
|
+
CastPlaceholder
|
|
339
|
+
} from "./chunk-3HFZA4ZX.js";
|
|
334
340
|
import {
|
|
335
|
-
|
|
336
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;AA2D/B,wBAAQ,WAA0B;AA2JlC,wBAAQ,YAAW,MAAO,KAAK,OAAO,OAAO,QAAQ;AAAA,EAlNrD;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,cAAc,QAAW,KAAK,MAAM;AACpD,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;AA3QE,cADW,WACY,YAAW;AAClC,cAFW,WAEY,SAAQ;AA2QjC,IAAM,QAAQ,CAAC,QAAgB,WAAW,WAAW,GAAG,CAAC;AAAzD,IACE,QAAQ,CAAC,QAAgB,oBAAoB,GAAG;","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":"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","names":["_","inputHtml"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
HTML5Tech
|
|
3
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
982
|
+
//# sourceMappingURL=chunk-3KTAU4LB.js.map
|