@norskvideo/norsk-studio-built-ins 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/client/info.js +211 -922
  2. package/client/style.css +1411 -0
  3. package/lib/index.js +1 -1
  4. package/lib/info.js +9 -17
  5. package/lib/info.js.map +1 -1
  6. package/lib/output.preview/runtime.js +3 -2
  7. package/lib/output.preview/runtime.js.map +1 -1
  8. package/lib/output.whep/runtime.js +2 -1
  9. package/lib/output.whep/runtime.js.map +1 -1
  10. package/lib/shared/webrtcSettings.d.ts +6 -0
  11. package/lib/shared/webrtcSettings.js +13 -0
  12. package/lib/shared/webrtcSettings.js.map +1 -0
  13. package/package.json +4 -4
  14. package/client/processor.audioLevel/styles.css +0 -164
  15. package/client/processor.audioMixer/styles.css +0 -249
  16. package/lib/processor.actionReplay/info.d.ts +0 -5
  17. package/lib/processor.actionReplay/info.js +0 -100
  18. package/lib/processor.actionReplay/info.js.map +0 -1
  19. package/lib/processor.actionReplay/runtime.d.ts +0 -59
  20. package/lib/processor.actionReplay/runtime.js +0 -224
  21. package/lib/processor.actionReplay/runtime.js.map +0 -1
  22. package/lib/processor.actionReplay/summary.d.ts +0 -7
  23. package/lib/processor.actionReplay/summary.js +0 -76
  24. package/lib/processor.actionReplay/summary.js.map +0 -1
  25. package/lib/processor.audioLevel/info.d.ts +0 -3
  26. package/lib/processor.audioLevel/info.js +0 -83
  27. package/lib/processor.audioLevel/info.js.map +0 -1
  28. package/lib/processor.audioLevel/inline-view.d.ts +0 -6
  29. package/lib/processor.audioLevel/inline-view.js +0 -23
  30. package/lib/processor.audioLevel/inline-view.js.map +0 -1
  31. package/lib/processor.audioLevel/runtime.d.ts +0 -49
  32. package/lib/processor.audioLevel/runtime.js +0 -82
  33. package/lib/processor.audioLevel/runtime.js.map +0 -1
  34. package/lib/processor.audioLevel/summary-view.d.ts +0 -7
  35. package/lib/processor.audioLevel/summary-view.js +0 -36
  36. package/lib/processor.audioLevel/summary-view.js.map +0 -1
  37. package/lib/processor.audioMixer/fullscreen-view.d.ts +0 -8
  38. package/lib/processor.audioMixer/fullscreen-view.js +0 -121
  39. package/lib/processor.audioMixer/fullscreen-view.js.map +0 -1
  40. package/lib/processor.audioMixer/info.d.ts +0 -4
  41. package/lib/processor.audioMixer/info.js +0 -148
  42. package/lib/processor.audioMixer/info.js.map +0 -1
  43. package/lib/processor.audioMixer/inline-view.d.ts +0 -7
  44. package/lib/processor.audioMixer/inline-view.js +0 -43
  45. package/lib/processor.audioMixer/inline-view.js.map +0 -1
  46. package/lib/processor.audioMixer/runtime.d.ts +0 -119
  47. package/lib/processor.audioMixer/runtime.js +0 -142
  48. package/lib/processor.audioMixer/runtime.js.map +0 -1
  49. package/lib/processor.audioMixer/summary-view.d.ts +0 -7
  50. package/lib/processor.audioMixer/summary-view.js +0 -11
  51. package/lib/processor.audioMixer/summary-view.js.map +0 -1
  52. package/lib/processor.fixedLadder/newFile.d.ts +0 -3
  53. package/lib/processor.fixedLadder/newFile.js +0 -145
  54. package/lib/processor.fixedLadder/newFile.js.map +0 -1
  55. package/lib/processor.monetise/info.d.ts +0 -3
  56. package/lib/processor.monetise/info.js +0 -90
  57. package/lib/processor.monetise/info.js.map +0 -1
  58. package/lib/processor.monetise/runtime.d.ts +0 -57
  59. package/lib/processor.monetise/runtime.js +0 -141
  60. package/lib/processor.monetise/runtime.js.map +0 -1
  61. package/lib/processor.monetise/summary.d.ts +0 -7
  62. package/lib/processor.monetise/summary.js +0 -39
  63. package/lib/processor.monetise/summary.js.map +0 -1
  64. package/lib/test/audio-mixer.d.ts +0 -0
  65. package/lib/test/audio-mixer.js +0 -2
  66. package/lib/test/audio-mixer.js.map +0 -1
  67. /package/{shared → client/shared}/style.css +0 -0
  68. /package/{shared → client/shared}/tailwind.css +0 -0
package/client/info.js CHANGED
@@ -713,23 +713,23 @@ var init_fullscreen2 = __esm({
713
713
  }
714
714
  });
715
715
 
716
- // ../../../studio-core/lib/shared/shared-views.js
716
+ // ../../node_modules/@norskvideo/norsk-studio/lib/shared/shared-views.js
717
717
  var require_shared_views = __commonJS({
718
- "../../../studio-core/lib/shared/shared-views.js"(exports) {
718
+ "../../node_modules/@norskvideo/norsk-studio/lib/shared/shared-views.js"(exports) {
719
719
  "use strict";
720
720
  Object.defineProperty(exports, "__esModule", { value: true });
721
721
  exports.GlobalIceServerView = void 0;
722
722
  var jsx_runtime_1 = require_jsx_runtime();
723
723
  function GlobalIceServerView(i) {
724
- return (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "URL" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.url }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Username" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.username ?? "" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Password" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.password ?? "" })] });
724
+ return (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "URL" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.url }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Reported URL" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.reportedUrl ?? "" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Username" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.username ?? "" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Password" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.credential ?? "" })] });
725
725
  }
726
726
  exports.GlobalIceServerView = GlobalIceServerView;
727
727
  }
728
728
  });
729
729
 
730
- // ../../../studio-core/lib/shared/config.js
730
+ // ../../node_modules/@norskvideo/norsk-studio/lib/shared/config.js
731
731
  var require_config = __commonJS({
732
- "../../../studio-core/lib/shared/config.js"(exports) {
732
+ "../../node_modules/@norskvideo/norsk-studio/lib/shared/config.js"(exports) {
733
733
  "use strict";
734
734
  var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
735
735
  if (k2 === void 0)
@@ -769,7 +769,7 @@ var require_config = __commonJS({
769
769
  Object.defineProperty(exports, "__esModule", { value: true });
770
770
  exports.RootDataDir = exports.HardwareSelection = exports.contractHardwareAcceleration = exports.GlobalIceServers = void 0;
771
771
  var react_1 = __importDefault(require_react());
772
- function GlobalIceServers4(f) {
772
+ function GlobalIceServers3(f) {
773
773
  const GlobalIceServerView = react_1.default.lazy(async () => {
774
774
  const views = await Promise.resolve().then(() => __importStar(require_shared_views()));
775
775
  return { default: views.GlobalIceServerView };
@@ -784,7 +784,14 @@ var require_config = __commonJS({
784
784
  type: "form-list",
785
785
  form: {
786
786
  url: {
787
- help: "URL of the STUN/TURN server (with turn:/stun: prefix)",
787
+ help: "URL of the STUN/TURN server (with turn:/stun: prefix) as accessed by Norsk Studio",
788
+ hint: {
789
+ type: "text",
790
+ validation: f.validation.IceServer
791
+ }
792
+ },
793
+ reportedUrl: {
794
+ help: "Optional URL of the STUN/TURN server as accessed by the client (if different to the above)",
788
795
  hint: {
789
796
  type: "text",
790
797
  validation: f.validation.IceServer
@@ -797,7 +804,7 @@ var require_config = __commonJS({
797
804
  validation: Z.string()
798
805
  }
799
806
  },
800
- password: {
807
+ credential: {
801
808
  help: "Optional password",
802
809
  hint: {
803
810
  type: "text",
@@ -813,7 +820,7 @@ var require_config = __commonJS({
813
820
  }
814
821
  };
815
822
  }
816
- exports.GlobalIceServers = GlobalIceServers4;
823
+ exports.GlobalIceServers = GlobalIceServers3;
817
824
  function contractHardwareAcceleration(value, accepted) {
818
825
  if (!value)
819
826
  return void 0;
@@ -824,7 +831,7 @@ var require_config = __commonJS({
824
831
  return void 0;
825
832
  }
826
833
  exports.contractHardwareAcceleration = contractHardwareAcceleration;
827
- function HardwareSelection7() {
834
+ function HardwareSelection5() {
828
835
  return {
829
836
  id: "hardware-acceleration",
830
837
  form: {
@@ -842,7 +849,7 @@ var require_config = __commonJS({
842
849
  }
843
850
  };
844
851
  }
845
- exports.HardwareSelection = HardwareSelection7;
852
+ exports.HardwareSelection = HardwareSelection5;
846
853
  function RootDataDir() {
847
854
  return {
848
855
  id: "root-data-dir",
@@ -966,7 +973,7 @@ var init_inline_view5 = __esm({
966
973
 
967
974
  // build/output.statistics/info.js
968
975
  function info_default13({ defineComponent, All }) {
969
- const InlineView18 = import_react22.default.lazy(async () => Promise.resolve().then(() => (init_inline_view5(), inline_view_exports5)));
976
+ const InlineView14 = import_react22.default.lazy(async () => Promise.resolve().then(() => (init_inline_view5(), inline_view_exports5)));
970
977
  return defineComponent({
971
978
  identifier: "output.statistics",
972
979
  category: "output",
@@ -994,7 +1001,7 @@ function info_default13({ defineComponent, All }) {
994
1001
  }
995
1002
  return { ...state };
996
1003
  },
997
- inline: InlineView18
1004
+ inline: InlineView14
998
1005
  },
999
1006
  configForm: {
1000
1007
  form: {}
@@ -1012,363 +1019,14 @@ var init_info = __esm({
1012
1019
  }
1013
1020
  });
1014
1021
 
1015
- // build/processor.actionReplay/summary.js
1016
- var summary_exports2 = {};
1017
- __export(summary_exports2, {
1018
- default: () => summary_default2
1019
- });
1020
- function InlineView10({ state, config, sendCommand }) {
1021
- const url = state.contentPlayerUrl;
1022
- const id = config.id;
1023
- const previewVideo = (0, import_react23.useRef)(null);
1024
- const [lastSeek, setLastSeek] = (0, import_react23.useState)(void 0);
1025
- const [playbackDuration, setPlaybackDuration] = (0, import_react23.useState)(10);
1026
- (0, import_react23.useEffect)(() => {
1027
- if (!url)
1028
- return;
1029
- if (!previewVideo.current)
1030
- return;
1031
- if (import_hls5.default.isSupported()) {
1032
- const hls = new import_hls5.default();
1033
- hls.loadSource(url);
1034
- hls.attachMedia(previewVideo.current);
1035
- } else if (previewVideo.current.canPlayType("application/vnd.apple.mpegurl")) {
1036
- previewVideo.current.src = url;
1037
- }
1038
- }, [state.contentPlayerUrl]);
1039
- if (!url)
1040
- return (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, { children: "..." });
1041
- return (0, import_jsx_runtime21.jsxs)("div", { className: "mb-5", children: [(0, import_jsx_runtime21.jsx)("h5", { children: "Preview" }), (0, import_jsx_runtime21.jsx)("video", { ref: previewVideo, controls: true, onSeeked, autoPlay: true, muted: true, className: state.replaying ? "hidden" : "", id: `${id}-video` }), state.replaying ? (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, { children: "Current Performing Replay" }) : (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [lastSeek ? (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [(0, import_jsx_runtime21.jsxs)("p", { children: ["Replay from ", lastSeek.time.toFixed(1), "(s) "] }), (0, import_jsx_runtime21.jsxs)("p", { className: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", children: ["Duration: ", playbackDuration, "s"] }), (0, import_jsx_runtime21.jsx)("input", { id: "duration-range", type: "range", min: currentMinDuration(), max: currentMaxDuration(), defaultValue: playbackDuration, className: "w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700", onChange: onDurationChange, onInput: onDurationChange })] }) : (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, {}), (0, import_jsx_runtime21.jsx)("button", { onClick: sendReplayCommand, type: "button", className: "mt-2 mb-2 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800", children: "Replay" })] })] });
1042
- function sendReplayCommand() {
1043
- if (!previewVideo.current)
1044
- return;
1045
- if (!lastSeek)
1046
- return;
1047
- const fromHead = previewVideo.current.duration - lastSeek.time;
1048
- sendCommand({
1049
- type: "do-replay",
1050
- from: fromHead,
1051
- duration: playbackDuration
1052
- });
1053
- }
1054
- function onDurationChange(e) {
1055
- const v = parseInt(e.currentTarget.value, 10);
1056
- setPlaybackDuration(v);
1057
- }
1058
- function currentMinDuration() {
1059
- if (!previewVideo.current || !lastSeek)
1060
- return 10;
1061
- return Math.min(10, previewVideo.current.duration - lastSeek.time);
1062
- }
1063
- function currentMaxDuration() {
1064
- if (!previewVideo.current || !lastSeek)
1065
- return 30;
1066
- return Math.min(30, previewVideo.current.duration - lastSeek.time);
1067
- }
1068
- function onSeeked() {
1069
- if (changingDuration) {
1070
- changingDuration = false;
1071
- return;
1072
- }
1073
- const v = previewVideo.current;
1074
- if (v?.currentTime && v.duration)
1075
- setLastSeek({ time: v?.currentTime, end: v?.duration });
1076
- else
1077
- setLastSeek(void 0);
1078
- }
1079
- }
1080
- var import_jsx_runtime21, import_react23, import_hls5, changingDuration, summary_default2;
1081
- var init_summary2 = __esm({
1082
- "build/processor.actionReplay/summary.js"() {
1083
- "use strict";
1084
- import_jsx_runtime21 = __toESM(require_jsx_runtime());
1085
- import_react23 = __toESM(require_react());
1086
- import_hls5 = __toESM(require_hls());
1087
- changingDuration = false;
1088
- summary_default2 = InlineView10;
1089
- }
1090
- });
1091
-
1092
- // build/processor.audioLevel/inline-view.js
1093
- var inline_view_exports6 = {};
1094
- __export(inline_view_exports6, {
1095
- default: () => inline_view_default6
1096
- });
1097
- function InlineView11({ state }) {
1098
- function percentage(levels) {
1099
- if (!levels) {
1100
- return 0;
1101
- }
1102
- if (levels.peak == 0 && levels.rms == 0) {
1103
- return 0;
1104
- }
1105
- const rebase = levels.rms - 12;
1106
- const capped = 0 - rebase / 112;
1107
- const snapped = Math.floor(capped * 10) * 10;
1108
- return Math.max(0, 100 - snapped);
1109
- }
1110
- if (!state.levels) {
1111
- return (0, import_jsx_runtime22.jsx)(import_jsx_runtime22.Fragment, {});
1112
- }
1113
- return (0, import_jsx_runtime22.jsx)("div", { className: "audio-level-container-inline", children: (0, import_jsx_runtime22.jsx)("div", { className: "preview-levels-inline", children: (0, import_jsx_runtime22.jsx)("div", { className: `preview-level clip-${percentage(state.levels)}` }) }) });
1114
- }
1115
- var import_jsx_runtime22, inline_view_default6;
1116
- var init_inline_view6 = __esm({
1117
- "build/processor.audioLevel/inline-view.js"() {
1118
- "use strict";
1119
- import_jsx_runtime22 = __toESM(require_jsx_runtime());
1120
- inline_view_default6 = InlineView11;
1121
- }
1122
- });
1123
-
1124
- // build/processor.audioLevel/summary-view.js
1125
- var summary_view_exports3 = {};
1126
- __export(summary_view_exports3, {
1127
- default: () => summary_view_default3
1128
- });
1129
- function SummaryView5({ state, sendCommand }) {
1130
- const [sliderValue, setSliderValue] = (0, import_react25.useState)(state.sliderGain || "0");
1131
- const [canSetVolume, setCanSetVolume] = (0, import_react25.useState)(true);
1132
- const throttleDelay = 100;
1133
- function percentage(levels) {
1134
- if (!levels) {
1135
- return 0;
1136
- }
1137
- if (levels.peak == 0 && levels.rms == 0) {
1138
- return 0;
1139
- }
1140
- const rebase = levels.rms - 12;
1141
- const capped = 0 - rebase / 112;
1142
- const snapped = Math.floor(capped * 10) * 10;
1143
- return Math.max(0, 100 - snapped);
1144
- }
1145
- const gainClasses = state.levels ? "col-start-2 self-end" : "col-start-1 col-end-3 self-end justify-self-start";
1146
- return (0, import_jsx_runtime23.jsxs)("div", { className: "audio-level-container grid mb-6 relative justify-items-center", children: [(0, import_jsx_runtime23.jsxs)("div", { className: `preview-levels-summary ${state.levels ? "" : "opacity-30"}`, children: [(0, import_jsx_runtime23.jsx)("div", { className: "relative w-full h-full", children: (0, import_jsx_runtime23.jsx)("div", { className: `preview-level absolute h-full w-4/6 clip-${percentage(state.levels)}` }) }), (0, import_jsx_runtime23.jsxs)("div", { className: "relative", children: [(0, import_jsx_runtime23.jsx)("div", { className: "text-sm absolute -top-1", children: "0dB" }), (0, import_jsx_runtime23.jsx)("div", { className: "text-sm absolute top-14", children: "-50dB" }), (0, import_jsx_runtime23.jsx)("div", { className: "text-sm absolute -bottom-2", children: "-100dB" })] })] }), (0, import_jsx_runtime23.jsx)("div", { className: "h-full flex items-center", children: (0, import_jsx_runtime23.jsx)("input", { id: "audio-slider", className: `-rotate-90 h-2.5 ${state.levels ? "" : "opacity-20"}`, type: "range", name: "gain", min: "-40", max: "40", step: "1", defaultValue: state.sliderGain || "0", disabled: !state.levels, onChange: (e) => {
1147
- setSliderValue(e.target.value);
1148
- if (canSetVolume) {
1149
- setCanSetVolume(false);
1150
- sendCommand({ type: "set-gain", value: Number(e.target.value) });
1151
- setTimeout(() => {
1152
- setCanSetVolume(true);
1153
- }, throttleDelay);
1154
- }
1155
- }, onMouseUp: (_e) => {
1156
- sendCommand({ type: "set-gain", value: Number(sliderValue) });
1157
- } }) }), (0, import_jsx_runtime23.jsx)("div", { className: gainClasses, children: state.levels ? "Gain:" : "No incoming audio" }), (0, import_jsx_runtime23.jsx)("div", { className: "col-start-2", children: state.levels ? `${Number(sliderValue) > 0 ? "+" : ""} ${sliderValue} dB` : "" })] });
1158
- }
1159
- var import_jsx_runtime23, import_react25, summary_view_default3;
1160
- var init_summary_view3 = __esm({
1161
- "build/processor.audioLevel/summary-view.js"() {
1162
- "use strict";
1163
- import_jsx_runtime23 = __toESM(require_jsx_runtime());
1164
- import_react25 = __toESM(require_react());
1165
- summary_view_default3 = SummaryView5;
1166
- }
1167
- });
1168
-
1169
- // build/processor.audioMixer/inline-view.js
1170
- var inline_view_exports7 = {};
1171
- __export(inline_view_exports7, {
1172
- default: () => inline_view_default7,
1173
- mkSourceKey: () => mkSourceKey
1174
- });
1175
- function mkSourceKey(sourceId, key) {
1176
- return key ? sourceId + "-" + key : sourceId;
1177
- }
1178
- function InlineView12({ state }) {
1179
- function percentage(levels) {
1180
- if (!levels) {
1181
- return 0;
1182
- }
1183
- if (levels.peak == 0 && levels.rms == 0) {
1184
- return 0;
1185
- }
1186
- const rebase = levels.rms - 12;
1187
- const capped = 0 - rebase / 112;
1188
- const snapped = Math.floor(capped * 10) * 10;
1189
- return Math.max(0, 100 - snapped);
1190
- }
1191
- const sourcesOrdered = state.knownSources.filter(({ id }) => id !== "mixer-output");
1192
- const mixerOutput = state.knownSources.find(({ id }) => id === "mixer-output");
1193
- if (mixerOutput) {
1194
- sourcesOrdered.push(mixerOutput);
1195
- }
1196
- function mkGridColumns() {
1197
- const gridRows = Array(Math.ceil((sourcesOrdered.length - 1) / 3)).fill("108px");
1198
- return {
1199
- /* eslint-disable @typescript-eslint/no-explicit-any */
1200
- ["gridTemplateRows"]: gridRows.join(" ")
1201
- };
1202
- }
1203
- return !state.displayInlineChannels ? (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, {}) : (0, import_jsx_runtime24.jsx)("div", { id: "mixer-level-container-inline", className: "grid mt-4", style: mkGridColumns(), children: sourcesOrdered.map((s, i) => {
1204
- const source = state.sources[mkSourceKey(s.id, s.key)];
1205
- const isMasterOutput = i == sourcesOrdered.length - 1;
1206
- if (source) {
1207
- return (0, import_jsx_runtime24.jsx)("div", { className: `grid justify-start w-full ${isMasterOutput ? "inline-master-channel" : ""}`, children: (0, import_jsx_runtime24.jsxs)("div", { title: s.key ?? s.id, className: `preview-levels dark:text-slate-100 text-black relative ${isMasterOutput ? "inline-master-border" : ""}`, children: [(0, import_jsx_runtime24.jsx)("div", { className: "inline-channel-name absolute", children: isMasterOutput ? "Master" : s.key ?? s.id }), (0, import_jsx_runtime24.jsx)("div", { className: `preview-level clip-${percentage(source.levels)}` })] }) }, mkSourceKey(s.id, s.key));
1208
- }
1209
- return (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, {});
1210
- }) });
1211
- }
1212
- var import_jsx_runtime24, inline_view_default7;
1213
- var init_inline_view7 = __esm({
1214
- "build/processor.audioMixer/inline-view.js"() {
1215
- "use strict";
1216
- import_jsx_runtime24 = __toESM(require_jsx_runtime());
1217
- inline_view_default7 = InlineView12;
1218
- }
1219
- });
1220
-
1221
- // build/processor.audioMixer/fullscreen-view.js
1222
- var fullscreen_view_exports = {};
1223
- __export(fullscreen_view_exports, {
1224
- default: () => fullscreen_view_default,
1225
- mkSourceKey: () => mkSourceKey2
1226
- });
1227
- function mkSourceKey2(sourceId, key) {
1228
- return key ? sourceId + "-" + key : sourceId;
1229
- }
1230
- function FullScreen({ state, sendCommand }) {
1231
- const initialSliders = {};
1232
- const initialPreMuteSliders = {};
1233
- Object.keys(state.sources).forEach((k) => {
1234
- if (state.sources[k]) {
1235
- initialSliders[k] = state.sources[k].sliderGain || 0;
1236
- initialPreMuteSliders[k] = state.sources[k].preMuteSliderGain || 0;
1237
- }
1238
- });
1239
- const initialCanSetVolume = {};
1240
- state.knownSources.forEach(({ id, key }) => initialCanSetVolume[mkSourceKey2(id, key)] = true);
1241
- const [canSetVolume, setCanSetVolume] = (0, import_react27.useState)(initialCanSetVolume);
1242
- const [sliderValues, setSliderValue] = (0, import_react27.useState)(initialSliders);
1243
- const [preMuteValues, setPreMuteValues] = (0, import_react27.useState)(initialPreMuteSliders);
1244
- const throttleDelay = 100;
1245
- function percentage(levels) {
1246
- if (!levels) {
1247
- return 0;
1248
- }
1249
- if (levels.peak == 0 && levels.rms == 0) {
1250
- return 0;
1251
- }
1252
- const rebase = levels.rms - 12;
1253
- const capped = 0 - rebase / 112;
1254
- const snapped = Math.floor(capped * 10) * 10;
1255
- return Math.max(0, 100 - snapped);
1256
- }
1257
- function mkFader(sourceId, key) {
1258
- const source = mkSourceKey2(sourceId, key);
1259
- const levels = state.sources[source];
1260
- return (0, import_jsx_runtime25.jsxs)("div", { id: `audio-slider-${sourceId}${key ? "-" + key : ""}`, className: `${!levels?.levels ? "opacity-20" : ""} audio-mixer-fader-container grid content-center justify-center w-full relative`, children: [(0, import_jsx_runtime25.jsx)("input", { className: "-rotate-90 audio-mixer-fader", type: "range", name: "gain", min: state.gainRange.minGain - 0.1, max: state.gainRange.maxGain, step: "0.1", value: levels?.sliderGain || 0, disabled: !levels?.levels, onChange: (e) => {
1261
- sliderValues[source] = Number(e.target.value);
1262
- if (Number(e.target.value) < state.gainRange.minGain) {
1263
- preMuteValues[source] = state.gainRange.minGain;
1264
- } else {
1265
- preMuteValues[source] = Number(e.target.value);
1266
- }
1267
- setSliderValue(sliderValues);
1268
- setPreMuteValues(sliderValues);
1269
- if (state.sources[source].isMuted) {
1270
- sendCommand({ type: "switch-mute-cmd", sourceId, key, preMuteSliderValue: preMuteValues[source] || 0, muted: false });
1271
- }
1272
- if (Number(e.target.value) < state.gainRange.minGain) {
1273
- sendCommand({ type: "switch-mute-cmd", sourceId, key, preMuteSliderValue: state.gainRange.minGain, muted: true });
1274
- }
1275
- if (canSetVolume[source] === true) {
1276
- canSetVolume[source] = false;
1277
- setCanSetVolume(canSetVolume);
1278
- sendCommand({ type: "set-gain-cmd", sourceId, key, value: Number(e.target.value) });
1279
- setTimeout(() => {
1280
- canSetVolume[source] = true;
1281
- setCanSetVolume(canSetVolume);
1282
- }, throttleDelay);
1283
- }
1284
- }, onMouseUp: (_e) => {
1285
- sendCommand({ type: "set-gain-cmd", sourceId, key, value: sliderValues[source] || 0 });
1286
- } }), (0, import_jsx_runtime25.jsxs)("div", { className: "grid mixer-gain-db ml-2.5 absolute self-center", children: [(0, import_jsx_runtime25.jsxs)("div", { className: "text-xs absolute border-t w-12", children: [state.gainRange.maxGain, "dB"] }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-4 h-4" }), (0, import_jsx_runtime25.jsxs)("div", { className: "text-xs self-end border-b w-12", children: [state.gainRange.maxGain * 0.75, "dB"] }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-4 h-4" }), (0, import_jsx_runtime25.jsxs)("div", { className: "text-xs self-end border-b w-12", children: [state.gainRange.maxGain * 0.5, "dB"] }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-4 h-4" }), (0, import_jsx_runtime25.jsxs)("div", { className: "text-xs self-end border-b w-12", children: [state.gainRange.maxGain * 0.25, "dB"] }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-4 h-4" }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-12", children: "0dB" }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-4 h-4" }), (0, import_jsx_runtime25.jsxs)("div", { className: "text-xs self-end border-b w-12", children: [state.gainRange.minGain * 0.25, "dB"] }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-4 h-4" }), (0, import_jsx_runtime25.jsxs)("div", { className: "text-xs self-end border-b w-12", children: [state.gainRange.minGain * 0.5, "dB"] }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-4 h-4" }), (0, import_jsx_runtime25.jsxs)("div", { className: "text-xs self-end border-b w-12", children: [state.gainRange.minGain * 0.75, "dB"] }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-4 h-4" }), (0, import_jsx_runtime25.jsxs)("div", { className: "text-xs self-end border-b w-12", children: [state.gainRange.minGain, "dB"] })] })] });
1287
- }
1288
- function mkLevels(sourceId, key) {
1289
- const sourceKey = mkSourceKey2(sourceId, key);
1290
- const levels = state.sources[sourceKey];
1291
- const mutedClass = sliderValues[sourceKey] < state.gainRange.minGain || state.sources[sourceKey]?.isMuted ? "level-muted" : "";
1292
- return (0, import_jsx_runtime25.jsxs)("div", { id: `level-${sourceId}${key ? "-" + key : ""}`, className: `preview-levels-mixer ${!state.sources[sourceKey]?.levels ? "opacity-30" : ""}`, children: [(0, import_jsx_runtime25.jsx)("div", { className: "relative w-full h-full", children: (0, import_jsx_runtime25.jsx)("div", { className: `preview-level-mixer absolute h-full w-4/6 clip-${percentage(levels?.levels)} ${mutedClass}` }) }), (0, import_jsx_runtime25.jsxs)("div", { className: "grid mixer-level-db ml-2.5 relative", children: [(0, import_jsx_runtime25.jsx)("div", { className: "text-xs absolute border-t w-12 -right-3.5", children: "0dB" }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-12", children: "-25dB" }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-12", children: "-50dB" }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-12", children: "-75dB" }), (0, import_jsx_runtime25.jsx)("div", { className: "text-xs self-end border-b w-12", children: "-100dB" })] })] });
1293
- }
1294
- function mkGainValue(sourceId, key) {
1295
- const sourceKey = mkSourceKey2(sourceId, key);
1296
- const sliderValue = sliderValues[sourceKey];
1297
- const sliderValueText = sliderValue === void 0 ? "- dB" : sliderValue < state.gainRange.minGain || state.sources[sourceKey]?.isMuted ? "muted" : sliderValue + "dB";
1298
- return (0, import_jsx_runtime25.jsx)("div", { id: `gain-value-${sourceId}${key ? "-" + key : ""}`, className: `${!state.sources[sourceKey]?.levels ? "opacity-20" : ""} text-m`, children: sliderValueText });
1299
- }
1300
- function muteIcon(sourceId, key) {
1301
- const sourceKey = mkSourceKey2(sourceId, key);
1302
- const mute = (0, import_jsx_runtime25.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: "1.5", stroke: "currentColor", className: "w-6 h-6", children: (0, import_jsx_runtime25.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17.25 9.75 19.5 12m0 0 2.25 2.25M19.5 12l2.25-2.25M19.5 12l-2.25 2.25m-10.5-6 4.72-4.72a.75.75 0 0 1 1.28.53v15.88a.75.75 0 0 1-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.009 9.009 0 0 1 2.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75Z" }) });
1303
- const unMute = (0, import_jsx_runtime25.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: "1.5", stroke: "currentColor", className: "w-6 h-6", children: (0, import_jsx_runtime25.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.114 5.636a9 9 0 0 1 0 12.728M16.463 8.288a5.25 5.25 0 0 1 0 7.424M6.75 8.25l4.72-4.72a.75.75 0 0 1 1.28.53v15.88a.75.75 0 0 1-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.009 9.009 0 0 1 2.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75Z" }) });
1304
- return (0, import_jsx_runtime25.jsx)("div", { className: `${!state.sources[sourceKey]?.levels ? "opacity-20" : ""} mute-icon self-center`, onClick: (_e) => {
1305
- if (state.sources[sourceKey]) {
1306
- if (state.sources[sourceKey].isMuted) {
1307
- sendCommand({ type: "switch-mute-cmd", sourceId, key, preMuteSliderValue: preMuteValues[sourceKey] || 0, muted: false });
1308
- } else {
1309
- sendCommand({ type: "switch-mute-cmd", sourceId, key, preMuteSliderValue: preMuteValues[sourceKey] || 0, muted: true });
1310
- }
1311
- } else {
1312
- console.warn("Could not find source with source key: " + sourceKey);
1313
- }
1314
- }, children: state.sources[sourceKey]?.isMuted ? mute : unMute });
1315
- }
1316
- const sourcesOrdered = state.knownSources.filter(({ id }) => id !== "mixer-output");
1317
- const mixerOutput = state.knownSources.find(({ id }) => id === "mixer-output");
1318
- if (mixerOutput) {
1319
- sourcesOrdered.push(mixerOutput);
1320
- }
1321
- function mkGridColumns() {
1322
- const gridColumns = Array(state.knownSources.length).fill("140px");
1323
- return {
1324
- /* eslint-disable @typescript-eslint/no-explicit-any */
1325
- ["gridTemplateColumns"]: gridColumns.join(" ")
1326
- };
1327
- }
1328
- return (0, import_jsx_runtime25.jsx)("div", { className: "audio-mixer grid gap-x-8 justify-items-center", style: mkGridColumns(), children: sourcesOrdered.map((s, i) => {
1329
- const isMasterOutput = i == sourcesOrdered.length - 1;
1330
- const divKey = `${s.id}${s.key ? "-" + s.key : ""}`;
1331
- return (0, import_jsx_runtime25.jsxs)("div", { className: `channel-container grid justify-items-center ${isMasterOutput ? "bg-gray-700 ml-12" : ""} `, children: [(0, import_jsx_runtime25.jsx)("div", { id: `channel-title-${divKey}`, children: isMasterOutput ? "Master" : s.key ?? s.id }), mkLevels(s.id, s.key), muteIcon(s.id, s.key), mkFader(s.id, s.key), mkGainValue(s.id, s.key)] }, divKey);
1332
- }) });
1333
- }
1334
- var import_jsx_runtime25, import_react27, fullscreen_view_default;
1335
- var init_fullscreen_view = __esm({
1336
- "build/processor.audioMixer/fullscreen-view.js"() {
1337
- "use strict";
1338
- import_jsx_runtime25 = __toESM(require_jsx_runtime());
1339
- import_react27 = __toESM(require_react());
1340
- fullscreen_view_default = FullScreen;
1341
- }
1342
- });
1343
-
1344
- // build/processor.audioMixer/summary-view.js
1345
- var summary_view_exports4 = {};
1346
- __export(summary_view_exports4, {
1347
- default: () => summary_view_default4
1348
- });
1349
- function SummaryView6({ state, sendCommand }) {
1350
- return (0, import_jsx_runtime26.jsxs)("div", { className: "mb-8", children: [(0, import_jsx_runtime26.jsx)("label", { className: "mr-2.5", htmlFor: "disable-inline", children: "Display inline channels" }), (0, import_jsx_runtime26.jsx)("input", { checked: state.displayInlineChannels, type: "checkbox", id: "disable-inline", onChange: (e) => {
1351
- const display = e.target.checked;
1352
- sendCommand({ type: "display-inline-channels-cmd", display });
1353
- } })] });
1354
- }
1355
- var import_jsx_runtime26, summary_view_default4;
1356
- var init_summary_view4 = __esm({
1357
- "build/processor.audioMixer/summary-view.js"() {
1358
- "use strict";
1359
- import_jsx_runtime26 = __toESM(require_jsx_runtime());
1360
- summary_view_default4 = SummaryView6;
1361
- }
1362
- });
1363
-
1364
1022
  // build/processor.aws-transcribe/transcribe-language-selection.js
1365
1023
  var transcribe_language_selection_exports = {};
1366
1024
  __export(transcribe_language_selection_exports, {
1367
1025
  default: () => transcribe_language_selection_default
1368
1026
  });
1369
1027
  function TranscribeLanguageSelection(props) {
1370
- const [loading, setLoading] = (0, import_react29.useState)(true);
1371
- (0, import_react29.useEffect)(() => {
1028
+ const [loading, setLoading] = (0, import_react23.useState)(true);
1029
+ (0, import_react23.useEffect)(() => {
1372
1030
  const fn = async () => {
1373
1031
  const result2 = await fetch("components/processor.aws-transcribe/languages");
1374
1032
  if (result2.ok && result2.body) {
@@ -1384,27 +1042,27 @@ function TranscribeLanguageSelection(props) {
1384
1042
  };
1385
1043
  fn().catch(console.error);
1386
1044
  }, []);
1387
- const [languages, setLanguages] = (0, import_react29.useState)([]);
1045
+ const [languages, setLanguages] = (0, import_react23.useState)([]);
1388
1046
  if (loading) {
1389
- return (0, import_jsx_runtime27.jsx)("div", { children: "Loading.." });
1047
+ return (0, import_jsx_runtime21.jsx)("div", { children: "Loading.." });
1390
1048
  }
1391
1049
  if (languages.length == 0) {
1392
- return (0, import_jsx_runtime27.jsx)("div", { children: "No flows loaded" });
1050
+ return (0, import_jsx_runtime21.jsx)("div", { children: "No flows loaded" });
1393
1051
  }
1394
- return (0, import_jsx_runtime27.jsx)("div", { children: (0, import_jsx_runtime27.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime27.jsx)("option", { value: "", children: "---" }, "empty"), languages.map((o, i) => {
1052
+ return (0, import_jsx_runtime21.jsx)("div", { children: (0, import_jsx_runtime21.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime21.jsx)("option", { value: "", children: "---" }, "empty"), languages.map((o, i) => {
1395
1053
  const val = o.code;
1396
- return (0, import_jsx_runtime27.jsxs)("option", { value: val, children: [o.name, " (", o.code, ")"] }, i);
1054
+ return (0, import_jsx_runtime21.jsxs)("option", { value: val, children: [o.name, " (", o.code, ")"] }, i);
1397
1055
  })] }) });
1398
1056
  function myOnChange(e) {
1399
1057
  props.onChanged(e.target.value);
1400
1058
  }
1401
1059
  }
1402
- var import_jsx_runtime27, import_react29, transcribe_language_selection_default;
1060
+ var import_jsx_runtime21, import_react23, transcribe_language_selection_default;
1403
1061
  var init_transcribe_language_selection = __esm({
1404
1062
  "build/processor.aws-transcribe/transcribe-language-selection.js"() {
1405
1063
  "use strict";
1406
- import_jsx_runtime27 = __toESM(require_jsx_runtime());
1407
- import_react29 = __toESM(require_react());
1064
+ import_jsx_runtime21 = __toESM(require_jsx_runtime());
1065
+ import_react23 = __toESM(require_react());
1408
1066
  transcribe_language_selection_default = TranscribeLanguageSelection;
1409
1067
  }
1410
1068
  });
@@ -1415,8 +1073,8 @@ __export(translate_language_selection_exports, {
1415
1073
  default: () => translate_language_selection_default
1416
1074
  });
1417
1075
  function TranslateLanguageSelection(props) {
1418
- const [loading, setLoading] = (0, import_react30.useState)(true);
1419
- (0, import_react30.useEffect)(() => {
1076
+ const [loading, setLoading] = (0, import_react24.useState)(true);
1077
+ (0, import_react24.useEffect)(() => {
1420
1078
  const fn = async () => {
1421
1079
  const result2 = await fetch("components/processor.aws-transcribe/languages");
1422
1080
  if (result2.ok && result2.body) {
@@ -1432,27 +1090,27 @@ function TranslateLanguageSelection(props) {
1432
1090
  };
1433
1091
  fn().catch(console.error);
1434
1092
  }, []);
1435
- const [languages, setLanguages] = (0, import_react30.useState)([]);
1093
+ const [languages, setLanguages] = (0, import_react24.useState)([]);
1436
1094
  if (loading) {
1437
- return (0, import_jsx_runtime28.jsx)("div", { children: "Loading.." });
1095
+ return (0, import_jsx_runtime22.jsx)("div", { children: "Loading.." });
1438
1096
  }
1439
1097
  if (languages.length == 0) {
1440
- return (0, import_jsx_runtime28.jsx)("div", { children: "No flows loaded" });
1098
+ return (0, import_jsx_runtime22.jsx)("div", { children: "No flows loaded" });
1441
1099
  }
1442
- return (0, import_jsx_runtime28.jsx)("div", { children: (0, import_jsx_runtime28.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime28.jsx)("option", { value: "", children: "---" }, "empty"), languages.map((o, i) => {
1100
+ return (0, import_jsx_runtime22.jsx)("div", { children: (0, import_jsx_runtime22.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime22.jsx)("option", { value: "", children: "---" }, "empty"), languages.map((o, i) => {
1443
1101
  const val = o.code;
1444
- return (0, import_jsx_runtime28.jsxs)("option", { value: val, children: [o.name, " (", o.code, ")"] }, i);
1102
+ return (0, import_jsx_runtime22.jsxs)("option", { value: val, children: [o.name, " (", o.code, ")"] }, i);
1445
1103
  })] }) });
1446
1104
  function myOnChange(e) {
1447
1105
  props.onChanged(e.target.value);
1448
1106
  }
1449
1107
  }
1450
- var import_jsx_runtime28, import_react30, translate_language_selection_default;
1108
+ var import_jsx_runtime22, import_react24, translate_language_selection_default;
1451
1109
  var init_translate_language_selection = __esm({
1452
1110
  "build/processor.aws-transcribe/translate-language-selection.js"() {
1453
1111
  "use strict";
1454
- import_jsx_runtime28 = __toESM(require_jsx_runtime());
1455
- import_react30 = __toESM(require_react());
1112
+ import_jsx_runtime22 = __toESM(require_jsx_runtime());
1113
+ import_react24 = __toESM(require_react());
1456
1114
  translate_language_selection_default = TranslateLanguageSelection;
1457
1115
  }
1458
1116
  });
@@ -1463,15 +1121,15 @@ __export(source_selection_exports, {
1463
1121
  default: () => source_selection_default
1464
1122
  });
1465
1123
  function OrderInput(props) {
1466
- (0, import_react32.useEffect)(() => {
1124
+ (0, import_react26.useEffect)(() => {
1467
1125
  props.onChanged(props.defaultValue ?? []);
1468
1126
  }, [props.defaultValue]);
1469
- const [value, setValue] = (0, import_react32.useState)(props.defaultValue ?? []);
1127
+ const [value, setValue] = (0, import_react26.useState)(props.defaultValue ?? []);
1470
1128
  if (value.length == 0) {
1471
- return (0, import_jsx_runtime29.jsx)("p", { className: "node-editor-helper-text", children: "Sources will appear here when subscriptions have been added to this node" });
1129
+ return (0, import_jsx_runtime23.jsx)("p", { className: "node-editor-helper-text", children: "Sources will appear here when subscriptions have been added to this node" });
1472
1130
  } else {
1473
- return (0, import_jsx_runtime29.jsx)("div", { id: props.id, children: (0, import_jsx_runtime29.jsx)("ul", { children: value.map((v, ix) => {
1474
- return (0, import_jsx_runtime29.jsxs)("li", { className: "flex", children: [(0, import_jsx_runtime29.jsx)("span", { className: "node-editor-label flex-grow", children: v }), ix == 0 ? (0, import_jsx_runtime29.jsx)(import_jsx_runtime29.Fragment, {}) : (0, import_jsx_runtime29.jsx)("svg", { onClick: moveUp(ix), xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, className: "w-4 h-6 shrink cursor-pointer stroke-gray-700 dark:stroke-gray-50", children: (0, import_jsx_runtime29.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18" }) }), ix == value.length - 1 ? (0, import_jsx_runtime29.jsx)(import_jsx_runtime29.Fragment, {}) : (0, import_jsx_runtime29.jsx)("svg", { onClick: moveDown(ix), xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, className: "w-4 h-6 shrink cursor-pointer stroke-gray-700 dark:stroke-gray-50", children: (0, import_jsx_runtime29.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3" }) })] }, v);
1131
+ return (0, import_jsx_runtime23.jsx)("div", { id: props.id, children: (0, import_jsx_runtime23.jsx)("ul", { children: value.map((v, ix) => {
1132
+ return (0, import_jsx_runtime23.jsxs)("li", { className: "flex", children: [(0, import_jsx_runtime23.jsx)("span", { className: "node-editor-label flex-grow", children: v }), ix == 0 ? (0, import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment, {}) : (0, import_jsx_runtime23.jsx)("svg", { onClick: moveUp(ix), xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, className: "w-4 h-6 shrink cursor-pointer stroke-gray-700 dark:stroke-gray-50", children: (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18" }) }), ix == value.length - 1 ? (0, import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment, {}) : (0, import_jsx_runtime23.jsx)("svg", { onClick: moveDown(ix), xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, className: "w-4 h-6 shrink cursor-pointer stroke-gray-700 dark:stroke-gray-50", children: (0, import_jsx_runtime23.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3" }) })] }, v);
1475
1133
  }) }) });
1476
1134
  }
1477
1135
  function moveUp(ix) {
@@ -1493,33 +1151,33 @@ function OrderInput(props) {
1493
1151
  };
1494
1152
  }
1495
1153
  }
1496
- var import_jsx_runtime29, import_react32, source_selection_default;
1154
+ var import_jsx_runtime23, import_react26, source_selection_default;
1497
1155
  var init_source_selection = __esm({
1498
1156
  "build/processor.cascadingSwitch/source-selection.js"() {
1499
1157
  "use strict";
1500
- import_jsx_runtime29 = __toESM(require_jsx_runtime());
1501
- import_react32 = __toESM(require_react());
1158
+ import_jsx_runtime23 = __toESM(require_jsx_runtime());
1159
+ import_react26 = __toESM(require_react());
1502
1160
  source_selection_default = OrderInput;
1503
1161
  }
1504
1162
  });
1505
1163
 
1506
1164
  // build/processor.cascadingSwitch/inline-view.js
1507
- var inline_view_exports8 = {};
1508
- __export(inline_view_exports8, {
1509
- default: () => inline_view_default8
1165
+ var inline_view_exports6 = {};
1166
+ __export(inline_view_exports6, {
1167
+ default: () => inline_view_default6
1510
1168
  });
1511
- function InlineView13({ state, config }) {
1512
- return (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [(0, import_jsx_runtime30.jsx)("h5", { children: "Sources" }), (0, import_jsx_runtime30.jsxs)("ul", { children: [config.sources.map((s, i) => state.activeSource == s ? (0, import_jsx_runtime30.jsxs)("li", { className: activeClasses, children: [s, " <--"] }, i) : state.availableSources.includes(s) ? (0, import_jsx_runtime30.jsxs)("li", { className: availableClasses, children: [s, " (available)"] }, i) : (0, import_jsx_runtime30.jsxs)("li", { className: inactiveClasses, children: [s, " (inactive)"] }, i)), (0, import_jsx_runtime30.jsx)("li", { className: state.activeSource == "fallback" ? activeClasses : availableClasses, children: "fallback" }, "fallback")] })] });
1169
+ function InlineView10({ state, config }) {
1170
+ return (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [(0, import_jsx_runtime24.jsx)("h5", { children: "Sources" }), (0, import_jsx_runtime24.jsxs)("ul", { children: [config.sources.map((s, i) => state.activeSource == s ? (0, import_jsx_runtime24.jsxs)("li", { className: activeClasses, children: [s, " <--"] }, i) : state.availableSources.includes(s) ? (0, import_jsx_runtime24.jsxs)("li", { className: availableClasses, children: [s, " (available)"] }, i) : (0, import_jsx_runtime24.jsxs)("li", { className: inactiveClasses, children: [s, " (inactive)"] }, i)), (0, import_jsx_runtime24.jsx)("li", { className: state.activeSource == "fallback" ? activeClasses : availableClasses, children: "fallback" }, "fallback")] })] });
1513
1171
  }
1514
- var import_jsx_runtime30, activeClasses, availableClasses, inactiveClasses, inline_view_default8;
1515
- var init_inline_view8 = __esm({
1172
+ var import_jsx_runtime24, activeClasses, availableClasses, inactiveClasses, inline_view_default6;
1173
+ var init_inline_view6 = __esm({
1516
1174
  "build/processor.cascadingSwitch/inline-view.js"() {
1517
1175
  "use strict";
1518
- import_jsx_runtime30 = __toESM(require_jsx_runtime());
1176
+ import_jsx_runtime24 = __toESM(require_jsx_runtime());
1519
1177
  activeClasses = "active text-green-300 dark:text-green-300";
1520
1178
  availableClasses = "available text-green-300 dark:text-green-300";
1521
1179
  inactiveClasses = "inactive text-orange-300 dark:text-orange-300";
1522
- inline_view_default8 = InlineView13;
1180
+ inline_view_default6 = InlineView10;
1523
1181
  }
1524
1182
  });
1525
1183
 
@@ -1529,8 +1187,8 @@ __export(bug_selection_exports, {
1529
1187
  default: () => bug_selection_default
1530
1188
  });
1531
1189
  function BugSelection(props) {
1532
- const [loading, setLoading] = (0, import_react33.useState)(true);
1533
- (0, import_react33.useEffect)(() => {
1190
+ const [loading, setLoading] = (0, import_react27.useState)(true);
1191
+ (0, import_react27.useEffect)(() => {
1534
1192
  const fn = async () => {
1535
1193
  const result2 = await fetch("components/processor.dynamicBug/bugs");
1536
1194
  if (result2.ok && result2.body) {
@@ -1546,40 +1204,40 @@ function BugSelection(props) {
1546
1204
  };
1547
1205
  fn().catch(console.error);
1548
1206
  }, []);
1549
- const [bugs, setBugs] = (0, import_react33.useState)([]);
1207
+ const [bugs, setBugs] = (0, import_react27.useState)([]);
1550
1208
  if (loading) {
1551
- return (0, import_jsx_runtime31.jsx)("div", { children: "Loading.." });
1209
+ return (0, import_jsx_runtime25.jsx)("div", { children: "Loading.." });
1552
1210
  }
1553
1211
  if (bugs.length == 0) {
1554
- return (0, import_jsx_runtime31.jsx)("div", { children: "No bugs loaded" });
1212
+ return (0, import_jsx_runtime25.jsx)("div", { children: "No bugs loaded" });
1555
1213
  }
1556
- return (0, import_jsx_runtime31.jsx)("div", { children: (0, import_jsx_runtime31.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime31.jsx)("option", { value: "", children: "---" }, "empty"), bugs.map((o, i) => {
1557
- return (0, import_jsx_runtime31.jsx)("option", { value: o, children: o }, i);
1214
+ return (0, import_jsx_runtime25.jsx)("div", { children: (0, import_jsx_runtime25.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime25.jsx)("option", { value: "", children: "---" }, "empty"), bugs.map((o, i) => {
1215
+ return (0, import_jsx_runtime25.jsx)("option", { value: o, children: o }, i);
1558
1216
  })] }) });
1559
1217
  function myOnChange(e) {
1560
1218
  props.onChanged(e.target.value);
1561
1219
  }
1562
1220
  }
1563
- var import_jsx_runtime31, import_react33, bug_selection_default;
1221
+ var import_jsx_runtime25, import_react27, bug_selection_default;
1564
1222
  var init_bug_selection = __esm({
1565
1223
  "build/processor.dynamicBug/bug-selection.js"() {
1566
1224
  "use strict";
1567
- import_jsx_runtime31 = __toESM(require_jsx_runtime());
1568
- import_react33 = __toESM(require_react());
1225
+ import_jsx_runtime25 = __toESM(require_jsx_runtime());
1226
+ import_react27 = __toESM(require_react());
1569
1227
  bug_selection_default = BugSelection;
1570
1228
  }
1571
1229
  });
1572
1230
 
1573
1231
  // build/processor.dynamicBug/summary-view.js
1574
- var summary_view_exports5 = {};
1575
- __export(summary_view_exports5, {
1576
- default: () => summary_view_default5
1232
+ var summary_view_exports3 = {};
1233
+ __export(summary_view_exports3, {
1234
+ default: () => summary_view_default3
1577
1235
  });
1578
- function SummaryView7({ state, sendCommand, httpApi }) {
1579
- const [bug, setBug] = (0, import_react34.useState)(state.activeBug?.file);
1580
- const [position, setPosition] = (0, import_react34.useState)(state.activeBug?.position);
1581
- const [bugs, setBugs] = (0, import_react34.useState)([]);
1582
- const [fileToUpload, setFileToUpload] = (0, import_react34.useState)(void 0);
1236
+ function SummaryView5({ state, sendCommand, httpApi }) {
1237
+ const [bug, setBug] = (0, import_react28.useState)(state.activeBug?.file);
1238
+ const [position, setPosition] = (0, import_react28.useState)(state.activeBug?.position);
1239
+ const [bugs, setBugs] = (0, import_react28.useState)([]);
1240
+ const [fileToUpload, setFileToUpload] = (0, import_react28.useState)(void 0);
1583
1241
  async function updateBugs() {
1584
1242
  const result2 = await fetch("components/processor.dynamicBug/bugs");
1585
1243
  if (result2.ok && result2.body) {
@@ -1590,7 +1248,7 @@ function SummaryView7({ state, sendCommand, httpApi }) {
1590
1248
  throw new Error(text);
1591
1249
  }
1592
1250
  }
1593
- (0, import_react34.useEffect)(() => {
1251
+ (0, import_react28.useEffect)(() => {
1594
1252
  const fn = async () => {
1595
1253
  await updateBugs();
1596
1254
  };
@@ -1600,11 +1258,11 @@ function SummaryView7({ state, sendCommand, httpApi }) {
1600
1258
  if (e.target.files?.[0])
1601
1259
  setFileToUpload(e.target.files[0]);
1602
1260
  }
1603
- return (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [(0, import_jsx_runtime32.jsx)("h2", { children: "Controls" }), (0, import_jsx_runtime32.jsx)("label", { htmlFor: "select-preview", className: "mt-2", children: "Source" }), (0, import_jsx_runtime32.jsxs)("select", { id: "select-bug", className: "mt-2 node-editor-select-input", onChange: (e) => {
1261
+ return (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [(0, import_jsx_runtime26.jsx)("h2", { children: "Controls" }), (0, import_jsx_runtime26.jsx)("label", { htmlFor: "select-preview", className: "mt-2", children: "Source" }), (0, import_jsx_runtime26.jsxs)("select", { id: "select-bug", className: "mt-2 node-editor-select-input", onChange: (e) => {
1604
1262
  setBug(e.currentTarget.value === "" ? void 0 : e.currentTarget.value);
1605
- }, children: [(0, import_jsx_runtime32.jsx)("option", { value: "", selected: bug === void 0, children: "---" }), (0, import_jsx_runtime32.jsx)("option", { value: "new", selected: bug === "new", children: "New" }), bugs.map((s, i) => (0, import_jsx_runtime32.jsx)("option", { selected: bug == s, value: s, children: s }, i))] }), (0, import_jsx_runtime32.jsx)("form", { style: { display: bug === "new" ? "block" : "none" }, onSubmit: (e) => e.preventDefault(), children: (0, import_jsx_runtime32.jsx)("input", { type: "file", id: "file", name: "filename", onChange: onFileChange }) }), (0, import_jsx_runtime32.jsxs)("select", { style: { display: bug ? "block" : "none" }, id: "select-position", className: "mt-2 node-editor-select-input", onChange: (e) => {
1263
+ }, children: [(0, import_jsx_runtime26.jsx)("option", { value: "", selected: bug === void 0, children: "---" }), (0, import_jsx_runtime26.jsx)("option", { value: "new", selected: bug === "new", children: "New" }), bugs.map((s, i) => (0, import_jsx_runtime26.jsx)("option", { selected: bug == s, value: s, children: s }, i))] }), (0, import_jsx_runtime26.jsx)("form", { style: { display: bug === "new" ? "block" : "none" }, onSubmit: (e) => e.preventDefault(), children: (0, import_jsx_runtime26.jsx)("input", { type: "file", id: "file", name: "filename", onChange: onFileChange }) }), (0, import_jsx_runtime26.jsxs)("select", { style: { display: bug ? "block" : "none" }, id: "select-position", className: "mt-2 node-editor-select-input", onChange: (e) => {
1606
1264
  setPosition(e.currentTarget.value);
1607
- }, children: [(0, import_jsx_runtime32.jsx)("option", { value: "topleft", selected: position === "topleft", children: "Top Left" }), (0, import_jsx_runtime32.jsx)("option", { value: "topright", selected: position === "topright", children: "Top Right" }), (0, import_jsx_runtime32.jsx)("option", { value: "bottomleft", selected: position === "bottomleft", children: "Bottom Left" }), (0, import_jsx_runtime32.jsx)("option", { value: "bottomright", selected: position === "bottomright", children: "Bottom Right" })] }), bug != state.activeBug?.file || position != state.activeBug?.position || fileToUpload ? (0, import_jsx_runtime32.jsx)("button", { type: "button", className: "mt-2 mb-2 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800", onClick: async (e) => {
1265
+ }, children: [(0, import_jsx_runtime26.jsx)("option", { value: "topleft", selected: position === "topleft", children: "Top Left" }), (0, import_jsx_runtime26.jsx)("option", { value: "topright", selected: position === "topright", children: "Top Right" }), (0, import_jsx_runtime26.jsx)("option", { value: "bottomleft", selected: position === "bottomleft", children: "Bottom Left" }), (0, import_jsx_runtime26.jsx)("option", { value: "bottomright", selected: position === "bottomright", children: "Bottom Right" })] }), bug != state.activeBug?.file || position != state.activeBug?.position || fileToUpload ? (0, import_jsx_runtime26.jsx)("button", { type: "button", className: "mt-2 mb-2 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800", onClick: async (e) => {
1608
1266
  e.preventDefault();
1609
1267
  if (fileToUpload && bug === "new") {
1610
1268
  const form = new FormData();
@@ -1624,15 +1282,15 @@ function SummaryView7({ state, sendCommand, httpApi }) {
1624
1282
  } else {
1625
1283
  sendCommand({ type: "change-bug", file: bug, position });
1626
1284
  }
1627
- }, children: "Commit" }) : (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, {})] });
1285
+ }, children: "Commit" }) : (0, import_jsx_runtime26.jsx)(import_jsx_runtime26.Fragment, {})] });
1628
1286
  }
1629
- var import_jsx_runtime32, import_react34, summary_view_default5;
1630
- var init_summary_view5 = __esm({
1287
+ var import_jsx_runtime26, import_react28, summary_view_default3;
1288
+ var init_summary_view3 = __esm({
1631
1289
  "build/processor.dynamicBug/summary-view.js"() {
1632
1290
  "use strict";
1633
- import_jsx_runtime32 = __toESM(require_jsx_runtime());
1634
- import_react34 = __toESM(require_react());
1635
- summary_view_default5 = SummaryView7;
1291
+ import_jsx_runtime26 = __toESM(require_jsx_runtime());
1292
+ import_react28 = __toESM(require_react());
1293
+ summary_view_default3 = SummaryView5;
1636
1294
  }
1637
1295
  });
1638
1296
 
@@ -1642,13 +1300,13 @@ __export(rung_view_exports, {
1642
1300
  default: () => rung_view_default
1643
1301
  });
1644
1302
  function rung_view_default(rung) {
1645
- return (0, import_jsx_runtime33.jsx)("div", { className: "", children: rung.name });
1303
+ return (0, import_jsx_runtime27.jsx)("div", { className: "", children: rung.name });
1646
1304
  }
1647
- var import_jsx_runtime33;
1305
+ var import_jsx_runtime27;
1648
1306
  var init_rung_view = __esm({
1649
1307
  "build/processor.fixedLadder/rung-view.js"() {
1650
1308
  "use strict";
1651
- import_jsx_runtime33 = __toESM(require_jsx_runtime());
1309
+ import_jsx_runtime27 = __toESM(require_jsx_runtime());
1652
1310
  }
1653
1311
  });
1654
1312
 
@@ -1658,20 +1316,20 @@ __export(codec_editor_exports, {
1658
1316
  default: () => CodecEditor
1659
1317
  });
1660
1318
  function CodecEditor(props) {
1661
- (0, import_react36.useEffect)(() => {
1319
+ (0, import_react30.useEffect)(() => {
1662
1320
  if (props.defaultValue)
1663
1321
  props.onChanged(props.defaultValue);
1664
1322
  }, [props.defaultValue]);
1665
- const textAreaRef = (0, import_react36.useRef)(null);
1666
- const [value, setValue] = (0, import_react36.useState)(props.defaultValue);
1667
- (0, import_react36.useEffect)(() => {
1323
+ const textAreaRef = (0, import_react30.useRef)(null);
1324
+ const [value, setValue] = (0, import_react30.useState)(props.defaultValue);
1325
+ (0, import_react30.useEffect)(() => {
1668
1326
  if (textAreaRef.current) {
1669
1327
  const target = textAreaRef.current;
1670
1328
  target.style.height = "";
1671
1329
  target.style.height = target.scrollHeight + "px";
1672
1330
  }
1673
1331
  }, []);
1674
- return (0, import_jsx_runtime34.jsx)("textarea", { ref: textAreaRef, className: "w-full min-h-fit dark:text-white dark:bg-black", onChange: (e) => {
1332
+ return (0, import_jsx_runtime28.jsx)("textarea", { ref: textAreaRef, className: "w-full min-h-fit dark:text-white dark:bg-black", onChange: (e) => {
1675
1333
  const target = e.currentTarget;
1676
1334
  try {
1677
1335
  const codec = JSON.parse(target.value);
@@ -1681,12 +1339,12 @@ function CodecEditor(props) {
1681
1339
  }
1682
1340
  }, defaultValue: JSON.stringify(value, void 0, 2) });
1683
1341
  }
1684
- var import_jsx_runtime34, import_react36;
1342
+ var import_jsx_runtime28, import_react30;
1685
1343
  var init_codec_editor = __esm({
1686
1344
  "build/processor.fixedLadder/codec-editor.js"() {
1687
1345
  "use strict";
1688
- import_jsx_runtime34 = __toESM(require_jsx_runtime());
1689
- import_react36 = __toESM(require_react());
1346
+ import_jsx_runtime28 = __toESM(require_jsx_runtime());
1347
+ import_react30 = __toESM(require_react());
1690
1348
  }
1691
1349
  });
1692
1350
 
@@ -1696,60 +1354,13 @@ __export(codec_view_exports, {
1696
1354
  default: () => CodecEditor2
1697
1355
  });
1698
1356
  function CodecEditor2(props) {
1699
- return (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [props.width, "x", props.height] });
1357
+ return (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [props.width, "x", props.height] });
1700
1358
  }
1701
- var import_jsx_runtime35;
1359
+ var import_jsx_runtime29;
1702
1360
  var init_codec_view = __esm({
1703
1361
  "build/processor.fixedLadder/codec-view.js"() {
1704
1362
  "use strict";
1705
- import_jsx_runtime35 = __toESM(require_jsx_runtime());
1706
- }
1707
- });
1708
-
1709
- // build/processor.monetise/summary.js
1710
- var summary_exports3 = {};
1711
- __export(summary_exports3, {
1712
- default: () => summary_default3
1713
- });
1714
- function InlineView14({ state, config, sendCommand }) {
1715
- const url = state.url;
1716
- const id = config.id;
1717
- const previewVideo = (0, import_react38.useRef)(null);
1718
- const durationSlider = (0, import_react38.useRef)(null);
1719
- (0, import_react38.useEffect)(() => {
1720
- if (!url)
1721
- return;
1722
- setTimeout(() => {
1723
- if (!url)
1724
- return;
1725
- if (!previewVideo.current)
1726
- return;
1727
- const client = new import_webrtc_client2.WhepClient({ url, container: previewVideo.current });
1728
- void client.start();
1729
- }, 1e3);
1730
- }, [state.url]);
1731
- if (!url)
1732
- return (0, import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment, { children: "Starting up..." });
1733
- return (0, import_jsx_runtime36.jsxs)("div", { className: "mb-5", children: [(0, import_jsx_runtime36.jsx)("div", { ref: previewVideo, className: "", id: `preview-${id}` }), state.currentAdvert ? (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: ["Advert currently playing: ", Math.floor(state.currentAdvert.timeLeftMs / 1e3), "s"] }) : (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [(0, import_jsx_runtime36.jsxs)("label", { htmlFor: "default-range", className: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", children: ["Advert Duration (", durationSlider.current?.value ?? 16, "s)"] }), (0, import_jsx_runtime36.jsx)("input", { ref: durationSlider, id: "default-range", type: "range", defaultValue: "16", min: "16", max: "120", className: "w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" }), (0, import_jsx_runtime36.jsx)("button", { onClick: sendAdvertCommand, type: "button", className: "mt-2 mb-2 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800", children: "Inject Advert" })] })] });
1734
- function sendAdvertCommand() {
1735
- if (!previewVideo.current)
1736
- return;
1737
- if (!durationSlider.current)
1738
- return;
1739
- sendCommand({
1740
- type: "inject-advert",
1741
- durationMs: parseInt(durationSlider.current.value, 10) * 1e3
1742
- });
1743
- }
1744
- }
1745
- var import_jsx_runtime36, import_react38, import_webrtc_client2, summary_default3;
1746
- var init_summary3 = __esm({
1747
- "build/processor.monetise/summary.js"() {
1748
- "use strict";
1749
- import_jsx_runtime36 = __toESM(require_jsx_runtime());
1750
- import_react38 = __toESM(require_react());
1751
- import_webrtc_client2 = __toESM(require_webrtc_client());
1752
- summary_default3 = InlineView14;
1363
+ import_jsx_runtime29 = __toESM(require_jsx_runtime());
1753
1364
  }
1754
1365
  });
1755
1366
 
@@ -16072,13 +15683,13 @@ var init_auto = __esm({
16072
15683
  });
16073
15684
 
16074
15685
  // build/util.latency/inline-view.js
16075
- var inline_view_exports9 = {};
16076
- __export(inline_view_exports9, {
16077
- default: () => inline_view_default9
15686
+ var inline_view_exports7 = {};
15687
+ __export(inline_view_exports7, {
15688
+ default: () => inline_view_default7
16078
15689
  });
16079
- function InlineView15({ state, config: _2 }) {
16080
- const chartContainer = (0, import_react40.useRef)(null);
16081
- const [chartControl, setChartControl] = (0, import_react40.useState)(void 0);
15690
+ function InlineView11({ state, config: _2 }) {
15691
+ const chartContainer = (0, import_react32.useRef)(null);
15692
+ const [chartControl, setChartControl] = (0, import_react32.useState)(void 0);
16082
15693
  function makeDataSet(key, color2, values) {
16083
15694
  return {
16084
15695
  label: key,
@@ -16095,7 +15706,7 @@ function InlineView15({ state, config: _2 }) {
16095
15706
  datasets: [makeDataSet("latency", "rgba(255, 0, 0, 255)", state2.values)]
16096
15707
  };
16097
15708
  }
16098
- (0, import_react40.useEffect)(() => {
15709
+ (0, import_react32.useEffect)(() => {
16099
15710
  if (!chartContainer.current)
16100
15711
  return;
16101
15712
  auto_default.defaults.color = "#FFF";
@@ -16133,21 +15744,21 @@ function InlineView15({ state, config: _2 }) {
16133
15744
  chart.update();
16134
15745
  }, 100);
16135
15746
  }, [chartContainer]);
16136
- (0, import_react40.useEffect)(() => {
15747
+ (0, import_react32.useEffect)(() => {
16137
15748
  if (!chartControl)
16138
15749
  return;
16139
15750
  chartControl.data = makeData(state);
16140
15751
  }, [state]);
16141
- return (0, import_jsx_runtime37.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime37.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
15752
+ return (0, import_jsx_runtime30.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime30.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
16142
15753
  }
16143
- var import_jsx_runtime37, import_react40, inline_view_default9;
16144
- var init_inline_view9 = __esm({
15754
+ var import_jsx_runtime30, import_react32, inline_view_default7;
15755
+ var init_inline_view7 = __esm({
16145
15756
  "build/util.latency/inline-view.js"() {
16146
15757
  "use strict";
16147
- import_jsx_runtime37 = __toESM(require_jsx_runtime());
16148
- import_react40 = __toESM(require_react());
15758
+ import_jsx_runtime30 = __toESM(require_jsx_runtime());
15759
+ import_react32 = __toESM(require_react());
16149
15760
  init_auto();
16150
- inline_view_default9 = InlineView15;
15761
+ inline_view_default7 = InlineView11;
16151
15762
  }
16152
15763
  });
16153
15764
 
@@ -16157,34 +15768,34 @@ __export(source_node_selection_exports, {
16157
15768
  default: () => source_node_selection_default
16158
15769
  });
16159
15770
  function SourceNodeSelection(props) {
16160
- return (0, import_jsx_runtime38.jsx)("div", { children: (0, import_jsx_runtime38.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime38.jsx)("option", { value: "", children: "---" }, "empty"), Object.values(props.latestDocument.components).map((o, i) => {
15771
+ return (0, import_jsx_runtime31.jsx)("div", { children: (0, import_jsx_runtime31.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime31.jsx)("option", { value: "", children: "---" }, "empty"), Object.values(props.latestDocument.components).map((o, i) => {
16161
15772
  if (o.id == props.id)
16162
- return (0, import_jsx_runtime38.jsx)(import_jsx_runtime38.Fragment, {});
15773
+ return (0, import_jsx_runtime31.jsx)(import_jsx_runtime31.Fragment, {});
16163
15774
  if (o.info.category === "output")
16164
15775
  return;
16165
- return (0, import_jsx_runtime38.jsx)("option", { value: o.id, children: o.config.displayName }, i);
15776
+ return (0, import_jsx_runtime31.jsx)("option", { value: o.id, children: o.config.displayName }, i);
16166
15777
  })] }) });
16167
15778
  function myOnChange(e) {
16168
15779
  props.onChanged(e.target.value);
16169
15780
  }
16170
15781
  }
16171
- var import_jsx_runtime38, source_node_selection_default;
15782
+ var import_jsx_runtime31, source_node_selection_default;
16172
15783
  var init_source_node_selection = __esm({
16173
15784
  "build/util.latency/source-node-selection.js"() {
16174
15785
  "use strict";
16175
- import_jsx_runtime38 = __toESM(require_jsx_runtime());
15786
+ import_jsx_runtime31 = __toESM(require_jsx_runtime());
16176
15787
  source_node_selection_default = SourceNodeSelection;
16177
15788
  }
16178
15789
  });
16179
15790
 
16180
15791
  // build/util.ma35d/inline-view.js
16181
- var inline_view_exports10 = {};
16182
- __export(inline_view_exports10, {
16183
- default: () => inline_view_default10
15792
+ var inline_view_exports8 = {};
15793
+ __export(inline_view_exports8, {
15794
+ default: () => inline_view_default8
16184
15795
  });
16185
- function InlineView16({ state, config: _2 }) {
16186
- const chartContainer = (0, import_react42.useRef)(null);
16187
- const [chartControl, setChartControl] = (0, import_react42.useState)(void 0);
15796
+ function InlineView12({ state, config: _2 }) {
15797
+ const chartContainer = (0, import_react34.useRef)(null);
15798
+ const [chartControl, setChartControl] = (0, import_react34.useState)(void 0);
16188
15799
  function makeDataSet(key, color2, values) {
16189
15800
  return {
16190
15801
  label: key,
@@ -16205,7 +15816,7 @@ function InlineView16({ state, config: _2 }) {
16205
15816
  ]
16206
15817
  };
16207
15818
  }
16208
- (0, import_react42.useEffect)(() => {
15819
+ (0, import_react34.useEffect)(() => {
16209
15820
  if (!chartContainer.current)
16210
15821
  return;
16211
15822
  auto_default.defaults.color = "#FFF";
@@ -16243,33 +15854,33 @@ function InlineView16({ state, config: _2 }) {
16243
15854
  chart.update();
16244
15855
  }, 100);
16245
15856
  }, [chartContainer]);
16246
- (0, import_react42.useEffect)(() => {
15857
+ (0, import_react34.useEffect)(() => {
16247
15858
  if (!chartControl)
16248
15859
  return;
16249
15860
  chartControl.data = makeData(state);
16250
15861
  }, [state]);
16251
- return (0, import_jsx_runtime39.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime39.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
15862
+ return (0, import_jsx_runtime32.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime32.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
16252
15863
  }
16253
- var import_jsx_runtime39, import_react42, inline_view_default10;
16254
- var init_inline_view10 = __esm({
15864
+ var import_jsx_runtime32, import_react34, inline_view_default8;
15865
+ var init_inline_view8 = __esm({
16255
15866
  "build/util.ma35d/inline-view.js"() {
16256
15867
  "use strict";
16257
- import_jsx_runtime39 = __toESM(require_jsx_runtime());
16258
- import_react42 = __toESM(require_react());
15868
+ import_jsx_runtime32 = __toESM(require_jsx_runtime());
15869
+ import_react34 = __toESM(require_react());
16259
15870
  init_auto();
16260
- inline_view_default10 = InlineView16;
15871
+ inline_view_default8 = InlineView12;
16261
15872
  }
16262
15873
  });
16263
15874
 
16264
15875
  // build/util.timestamps/inline-view.js
16265
- var inline_view_exports11 = {};
16266
- __export(inline_view_exports11, {
16267
- default: () => inline_view_default11
15876
+ var inline_view_exports9 = {};
15877
+ __export(inline_view_exports9, {
15878
+ default: () => inline_view_default9
16268
15879
  });
16269
- function InlineView17({ state, config: _2 }) {
16270
- const chartContainer = (0, import_react44.useRef)(null);
16271
- const [chartControl, setChartControl] = (0, import_react44.useState)(void 0);
16272
- (0, import_react44.useEffect)(() => {
15880
+ function InlineView13({ state, config: _2 }) {
15881
+ const chartContainer = (0, import_react36.useRef)(null);
15882
+ const [chartControl, setChartControl] = (0, import_react36.useState)(void 0);
15883
+ (0, import_react36.useEffect)(() => {
16273
15884
  if (!chartContainer.current)
16274
15885
  return;
16275
15886
  if (state.timestamps.length < 2)
@@ -16331,7 +15942,7 @@ function InlineView17({ state, config: _2 }) {
16331
15942
  chart.update();
16332
15943
  }, 100);
16333
15944
  }, [chartContainer]);
16334
- (0, import_react44.useEffect)(() => {
15945
+ (0, import_react36.useEffect)(() => {
16335
15946
  if (!chartControl)
16336
15947
  return;
16337
15948
  chartControl.data = {
@@ -16354,16 +15965,16 @@ function InlineView17({ state, config: _2 }) {
16354
15965
  })
16355
15966
  };
16356
15967
  }, [state]);
16357
- return (0, import_jsx_runtime40.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime40.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
15968
+ return (0, import_jsx_runtime33.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime33.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
16358
15969
  }
16359
- var import_jsx_runtime40, import_react44, inline_view_default11;
16360
- var init_inline_view11 = __esm({
15970
+ var import_jsx_runtime33, import_react36, inline_view_default9;
15971
+ var init_inline_view9 = __esm({
16361
15972
  "build/util.timestamps/inline-view.js"() {
16362
15973
  "use strict";
16363
- import_jsx_runtime40 = __toESM(require_jsx_runtime());
16364
- import_react44 = __toESM(require_react());
15974
+ import_jsx_runtime33 = __toESM(require_jsx_runtime());
15975
+ import_react36 = __toESM(require_react());
16365
15976
  init_auto();
16366
- inline_view_default11 = InlineView17;
15977
+ inline_view_default9 = InlineView13;
16367
15978
  }
16368
15979
  });
16369
15980
 
@@ -16813,7 +16424,7 @@ function info_default7({ defineComponent, Video, validation: { SourceName }, com
16813
16424
  // build/output.autoCmaf/info.js
16814
16425
  var import_react10 = __toESM(require_react());
16815
16426
  function info_default8({ defineComponent, All, validation: { Z, Hostname } }) {
16816
- const SummaryView8 = import_react10.default.lazy(async () => Promise.resolve().then(() => (init_summary(), summary_exports)));
16427
+ const SummaryView6 = import_react10.default.lazy(async () => Promise.resolve().then(() => (init_summary(), summary_exports)));
16817
16428
  const FullscreenView3 = import_react10.default.lazy(async () => Promise.resolve().then(() => (init_fullscreen(), fullscreen_exports)));
16818
16429
  const SegmentConfiguration2 = import_react10.default.lazy(async () => {
16819
16430
  const views = await Promise.resolve().then(() => (init_form_views(), form_views_exports));
@@ -16860,7 +16471,7 @@ function info_default8({ defineComponent, All, validation: { Z, Hostname } }) {
16860
16471
  }
16861
16472
  return { ...state };
16862
16473
  },
16863
- summary: SummaryView8,
16474
+ summary: SummaryView6,
16864
16475
  fullscreen: FullscreenView3
16865
16476
  },
16866
16477
  configForm: {
@@ -16991,7 +16602,7 @@ function info_default9({ defineComponent, validation: { Z }, All }) {
16991
16602
  const InputSelection = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_input_selection(), input_selection_exports)));
16992
16603
  const UrlSelection2 = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_url_selection(), url_selection_exports)));
16993
16604
  const NodeView3 = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_node_view2(), node_view_exports2)));
16994
- const InlineView18 = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_inline(), inline_exports)));
16605
+ const InlineView14 = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_inline(), inline_exports)));
16995
16606
  const FullscreenView3 = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_fullscreen2(), fullscreen_exports2)));
16996
16607
  return defineComponent({
16997
16608
  identifier: "output.medialive",
@@ -17037,7 +16648,7 @@ function info_default9({ defineComponent, validation: { Z }, All }) {
17037
16648
  assertUnreachable4(evType);
17038
16649
  }
17039
16650
  },
17040
- inline: InlineView18,
16651
+ inline: InlineView14,
17041
16652
  fullscreen: FullscreenView3
17042
16653
  },
17043
16654
  configForm: {
@@ -17080,7 +16691,7 @@ var import_react19 = __toESM(require_react());
17080
16691
  var import_config = __toESM(require_config());
17081
16692
  function info_default10(R) {
17082
16693
  const { defineComponent, Av, validation: { JitterBuffer } } = R;
17083
- const InlineView18 = import_react19.default.lazy(async () => Promise.resolve().then(() => (init_inline_view3(), inline_view_exports3)));
16694
+ const InlineView14 = import_react19.default.lazy(async () => Promise.resolve().then(() => (init_inline_view3(), inline_view_exports3)));
17084
16695
  return defineComponent({
17085
16696
  identifier: "output.preview",
17086
16697
  category: "output",
@@ -17130,7 +16741,7 @@ function info_default10(R) {
17130
16741
  }
17131
16742
  return { ...state };
17132
16743
  },
17133
- inline: InlineView18
16744
+ inline: InlineView14
17134
16745
  },
17135
16746
  configForm: {
17136
16747
  global: {
@@ -17150,7 +16761,7 @@ function assertUnreachable5(_) {
17150
16761
  // build/output.rtmp/info.js
17151
16762
  var import_react20 = __toESM(require_react());
17152
16763
  function info_default11({ defineComponent, Av, validation: { Z, JitterBuffer } }) {
17153
- const InlineView18 = import_react20.default.lazy(async () => Promise.resolve().then(() => (init_inline_view4(), inline_view_exports4)));
16764
+ const InlineView14 = import_react20.default.lazy(async () => Promise.resolve().then(() => (init_inline_view4(), inline_view_exports4)));
17154
16765
  return defineComponent({
17155
16766
  identifier: "output.rtmp",
17156
16767
  category: "output",
@@ -17188,7 +16799,7 @@ function info_default11({ defineComponent, Av, validation: { Z, JitterBuffer } }
17188
16799
  }
17189
16800
  return { ...state };
17190
16801
  },
17191
- inline: InlineView18
16802
+ inline: InlineView14
17192
16803
  },
17193
16804
  configForm: {
17194
16805
  form: {
@@ -17352,265 +16963,11 @@ function info_default15(R) {
17352
16963
  });
17353
16964
  }
17354
16965
 
17355
- // build/processor.actionReplay/info.js
17356
- var import_react24 = __toESM(require_react());
17357
- var import_config3 = __toESM(require_config());
17358
- function info_default16({ defineComponent, assertUnreachable: assertUnreachable17, Av }) {
17359
- const SummaryView8 = import_react24.default.lazy(async () => Promise.resolve().then(() => (init_summary2(), summary_exports2)));
17360
- return defineComponent({
17361
- identifier: "processor.transform.actionReplay",
17362
- category: "processor",
17363
- name: "Action Replay",
17364
- subscription: {
17365
- accepts: {
17366
- type: "single-stream",
17367
- media: Av
17368
- },
17369
- produces: {
17370
- type: "single-stream",
17371
- media: Av
17372
- }
17373
- },
17374
- extraValidation: (ctx) => {
17375
- if (ctx.subscriptions.length == 0) {
17376
- return;
17377
- }
17378
- if (ctx.subscriptions.length > 1) {
17379
- ctx.addError("Action replay can only subscribe to a single source");
17380
- return;
17381
- }
17382
- if (!ctx.subscriptions[0].streams.select.includes("audio")) {
17383
- ctx.addError("Action replay requires audio in the subscription");
17384
- }
17385
- if (!ctx.subscriptions[0].streams.select.includes("video")) {
17386
- ctx.addError("Action replay requires video in the subscription");
17387
- }
17388
- },
17389
- runtime: {
17390
- summary: SummaryView8,
17391
- initialState: () => ({
17392
- replaying: false,
17393
- contentPlayerUrl: void 0
17394
- }),
17395
- handleEvent: (ev, state) => {
17396
- const evType = ev.type;
17397
- switch (evType) {
17398
- case "content-player-created":
17399
- return { ...state, contentPlayerUrl: ev.url };
17400
- case "replay-started":
17401
- return { ...state, replaying: true };
17402
- case "replay-finished":
17403
- return { ...state, replaying: false };
17404
- default:
17405
- return assertUnreachable17(evType);
17406
- }
17407
- }
17408
- },
17409
- display: (desc) => {
17410
- const { __global: _, ...rem } = desc.config;
17411
- return rem;
17412
- },
17413
- configForm: {
17414
- global: {
17415
- hardware: (0, import_config3.HardwareSelection)()
17416
- },
17417
- form: {}
17418
- }
17419
- });
17420
- }
17421
-
17422
- // build/processor.audioLevel/info.js
17423
- var import_react26 = __toESM(require_react());
17424
- function info_default17({ defineComponent, Audio, validation: { Z } }) {
17425
- const InlineView18 = import_react26.default.lazy(async () => Promise.resolve().then(() => (init_inline_view6(), inline_view_exports6)));
17426
- const SummaryView8 = import_react26.default.lazy(async () => Promise.resolve().then(() => (init_summary_view3(), summary_view_exports3)));
17427
- return defineComponent({
17428
- identifier: "processor.audioLevel",
17429
- category: "processor",
17430
- name: "Audio Levels",
17431
- subscription: {
17432
- // Only accept a single audio stream
17433
- accepts: {
17434
- type: "single-stream",
17435
- media: Audio
17436
- },
17437
- produces: {
17438
- type: "single-stream",
17439
- media: Audio
17440
- }
17441
- },
17442
- extraValidation: function(ctx) {
17443
- ctx.requireAudio(1);
17444
- },
17445
- display: (_desc) => {
17446
- return {};
17447
- },
17448
- css: ["styles.css"],
17449
- runtime: {
17450
- initialState: () => ({}),
17451
- handleEvent(ev, state) {
17452
- const evType = ev.type;
17453
- switch (evType) {
17454
- case "audio-levels":
17455
- state.levels = ev.levels;
17456
- break;
17457
- case "set-gain":
17458
- state.sliderGain = ev.sliderGain;
17459
- state.nodeGain = ev.nodeGain;
17460
- break;
17461
- default:
17462
- assertUnreachable8(evType);
17463
- }
17464
- return { ...state };
17465
- },
17466
- inline: InlineView18,
17467
- summary: SummaryView8
17468
- },
17469
- configForm: {
17470
- form: {
17471
- defaultGain: { help: "The default gain for audio dB", hint: { type: "numeric", validation: Z.number().gte(-40).lte(40), defaultValue: 0 } }
17472
- }
17473
- }
17474
- });
17475
- }
17476
- function assertUnreachable8(_) {
17477
- throw new Error("Didn't expect to get here");
17478
- }
17479
-
17480
- // build/processor.audioMixer/info.js
17481
- var import_react28 = __toESM(require_react());
17482
- function mkSourceKey3(sourceId, key) {
17483
- return key ? sourceId + "-" + key : sourceId;
17484
- }
17485
- function info_default18({ defineComponent, Audio, validation: { Z } }) {
17486
- const InlineView18 = import_react28.default.lazy(async () => Promise.resolve().then(() => (init_inline_view7(), inline_view_exports7)));
17487
- const FullscreenView3 = import_react28.default.lazy(async () => Promise.resolve().then(() => (init_fullscreen_view(), fullscreen_view_exports)));
17488
- const SummaryView8 = import_react28.default.lazy(async () => Promise.resolve().then(() => (init_summary_view4(), summary_view_exports4)));
17489
- return defineComponent({
17490
- identifier: "processor.audioMixer",
17491
- category: "processor",
17492
- name: "Audio Mixer",
17493
- subscription: {
17494
- accepts: {
17495
- type: "multi-stream",
17496
- media: Audio
17497
- },
17498
- produces: {
17499
- type: "single-stream",
17500
- media: Audio
17501
- }
17502
- },
17503
- extraValidation: function(ctx) {
17504
- ctx.requireAudio(1);
17505
- },
17506
- display: (_desc) => {
17507
- return {};
17508
- },
17509
- css: ["styles.css"],
17510
- runtime: {
17511
- initialState: () => ({
17512
- sources: {},
17513
- knownSources: [],
17514
- gainRange: { minGain: -40, maxGain: 40 },
17515
- displayInlineChannels: true
17516
- }),
17517
- handleEvent(ev, state) {
17518
- const evType = ev.type;
17519
- switch (evType) {
17520
- case "audio-levels": {
17521
- const source = state.sources[mkSourceKey3(ev.sourceId, ev.key)] || { isMuted: false, sliderGain: 0 };
17522
- state.sources[mkSourceKey3(ev.sourceId, ev.key)] = { ...source, levels: ev.levels };
17523
- break;
17524
- }
17525
- case "set-gain": {
17526
- const source = state.sources[mkSourceKey3(ev.sourceId, ev.key)] || { isMuted: false, sliderGain: 0 };
17527
- let isMuted = ev.nodeGain === null ? true : source.isMuted;
17528
- if (source.isMuted && typeof ev.nodeGain === "number") {
17529
- isMuted = false;
17530
- }
17531
- state.sources[mkSourceKey3(ev.sourceId, ev.key)] = { ...source, sliderGain: ev.sliderGain, nodeGain: ev.nodeGain, isMuted };
17532
- break;
17533
- }
17534
- case "sources-discovered": {
17535
- state.knownSources = ev.sources;
17536
- break;
17537
- }
17538
- case "switch-mute": {
17539
- const source = state.sources[mkSourceKey3(ev.sourceId, ev.key)] || { isMuted: false, sliderGain: 0 };
17540
- source.preMuteSliderGain = ev.preMuteSliderValue;
17541
- if (source) {
17542
- if (ev.muted) {
17543
- source.sliderGain = -99;
17544
- } else {
17545
- source.sliderGain = ev.preMuteSliderValue;
17546
- }
17547
- }
17548
- state.sources[mkSourceKey3(ev.sourceId, ev.key)] = { ...source, isMuted: ev.muted };
17549
- break;
17550
- }
17551
- case "source-dropped": {
17552
- const keyToDelete = mkSourceKey3(ev.sourceId, ev.key);
17553
- const newSources = {};
17554
- Object.keys(state.sources).forEach((s) => {
17555
- if (s !== keyToDelete) {
17556
- newSources[s] = state.sources[s];
17557
- }
17558
- });
17559
- state.sources = newSources;
17560
- break;
17561
- }
17562
- case "display-inline-channels": {
17563
- state.displayInlineChannels = ev.display;
17564
- break;
17565
- }
17566
- default:
17567
- assertUnreachable9(evType);
17568
- }
17569
- return { ...state };
17570
- },
17571
- inline: InlineView18,
17572
- fullscreen: FullscreenView3,
17573
- summary: SummaryView8
17574
- },
17575
- configForm: {
17576
- form: {
17577
- defaultGain: { help: "The default gain for audio dB", hint: { type: "numeric", validation: Z.number().gte(-40).lte(40), defaultValue: 0 } },
17578
- channelLayout: {
17579
- help: "Channel layout for audio output",
17580
- hint: {
17581
- type: "select",
17582
- options: channelLayouts().map((ch) => {
17583
- return { value: ch, display: ch };
17584
- })
17585
- }
17586
- }
17587
- }
17588
- }
17589
- });
17590
- }
17591
- var channelLayouts = () => {
17592
- const ch = [
17593
- "mono",
17594
- "stereo",
17595
- "surround",
17596
- "4.0",
17597
- "5.0",
17598
- "5.1",
17599
- "7.1",
17600
- "5.1.4",
17601
- "7.1.4"
17602
- ];
17603
- return ch;
17604
- };
17605
- function assertUnreachable9(_) {
17606
- throw new Error("Didn't expect to get here");
17607
- }
17608
-
17609
16966
  // build/processor.aws-transcribe/info.js
17610
- var import_react31 = __toESM(require_react());
17611
- function info_default19({ defineComponent, Av, Subtitle, validation: { LanguageTagWithCountry, LanguageTagOptionalCountry, Z } }) {
17612
- const TranscribeLanguageSelection2 = import_react31.default.lazy(async () => Promise.resolve().then(() => (init_transcribe_language_selection(), transcribe_language_selection_exports)));
17613
- const TranslateLanguageSelection2 = import_react31.default.lazy(async () => Promise.resolve().then(() => (init_translate_language_selection(), translate_language_selection_exports)));
16967
+ var import_react25 = __toESM(require_react());
16968
+ function info_default16({ defineComponent, Av, Subtitle, validation: { LanguageTagWithCountry, LanguageTagOptionalCountry, Z } }) {
16969
+ const TranscribeLanguageSelection2 = import_react25.default.lazy(async () => Promise.resolve().then(() => (init_transcribe_language_selection(), transcribe_language_selection_exports)));
16970
+ const TranslateLanguageSelection2 = import_react25.default.lazy(async () => Promise.resolve().then(() => (init_translate_language_selection(), translate_language_selection_exports)));
17614
16971
  return defineComponent({
17615
16972
  identifier: "processor.aws-transcribe",
17616
16973
  category: "processor",
@@ -17664,8 +17021,8 @@ function info_default19({ defineComponent, Av, Subtitle, validation: { LanguageT
17664
17021
  }
17665
17022
 
17666
17023
  // build/processor.browserOverlay/info.js
17667
- var import_config4 = __toESM(require_config());
17668
- function info_default20({ defineComponent, Video, validation: { Z } }) {
17024
+ var import_config3 = __toESM(require_config());
17025
+ function info_default17({ defineComponent, Video, validation: { Z } }) {
17669
17026
  return defineComponent({
17670
17027
  identifier: "processor.transform.browserOverlay",
17671
17028
  category: "processor",
@@ -17691,7 +17048,7 @@ function info_default20({ defineComponent, Video, validation: { Z } }) {
17691
17048
  },
17692
17049
  configForm: {
17693
17050
  global: {
17694
- hardware: (0, import_config4.HardwareSelection)()
17051
+ hardware: (0, import_config3.HardwareSelection)()
17695
17052
  },
17696
17053
  form: {
17697
17054
  url: { help: "URL to render on top of the video", hint: { type: "text", validation: Z.string().url(), defaultValue: "" } }
@@ -17701,9 +17058,9 @@ function info_default20({ defineComponent, Video, validation: { Z } }) {
17701
17058
  }
17702
17059
 
17703
17060
  // build/processor.cascadingSwitch/info.js
17704
- function info_default21({ defineComponent, Av, React: React21, common: { Resolutions, FrameRates } }) {
17705
- const SourceSelection = React21.lazy(async () => Promise.resolve().then(() => (init_source_selection(), source_selection_exports)));
17706
- const InlineView18 = React21.lazy(async () => Promise.resolve().then(() => (init_inline_view8(), inline_view_exports8)));
17061
+ function info_default18({ defineComponent, Av, React: React17, common: { Resolutions, FrameRates } }) {
17062
+ const SourceSelection = React17.lazy(async () => Promise.resolve().then(() => (init_source_selection(), source_selection_exports)));
17063
+ const InlineView14 = React17.lazy(async () => Promise.resolve().then(() => (init_inline_view6(), inline_view_exports6)));
17707
17064
  return defineComponent({
17708
17065
  identifier: "processor.control.cascadingSwitch",
17709
17066
  category: "processor",
@@ -17781,12 +17138,12 @@ function info_default21({ defineComponent, Av, React: React21, common: { Resolut
17781
17138
  state.availableSources.splice(state.availableSources.indexOf(ev.source), 1);
17782
17139
  return { ...state };
17783
17140
  default:
17784
- assertUnreachable10(evType);
17141
+ assertUnreachable8(evType);
17785
17142
  }
17786
17143
  },
17787
- inline: InlineView18,
17788
- summary: InlineView18,
17789
- fullscreen: InlineView18
17144
+ inline: InlineView14,
17145
+ summary: InlineView14,
17146
+ fullscreen: InlineView14
17790
17147
  },
17791
17148
  configForm: {
17792
17149
  form: {
@@ -17832,16 +17189,16 @@ function info_default21({ defineComponent, Av, React: React21, common: { Resolut
17832
17189
  }
17833
17190
  });
17834
17191
  }
17835
- function assertUnreachable10(_) {
17192
+ function assertUnreachable8(_) {
17836
17193
  throw new Error("Didn't expect to get here");
17837
17194
  }
17838
17195
 
17839
17196
  // build/processor.dynamicBug/info.js
17840
- var import_config5 = __toESM(require_config());
17841
- var import_react35 = __toESM(require_react());
17842
- function info_default22({ defineComponent, Video }) {
17843
- const BugSelection2 = import_react35.default.lazy(async () => Promise.resolve().then(() => (init_bug_selection(), bug_selection_exports)));
17844
- const SummaryView8 = import_react35.default.lazy(async () => Promise.resolve().then(() => (init_summary_view5(), summary_view_exports5)));
17197
+ var import_config4 = __toESM(require_config());
17198
+ var import_react29 = __toESM(require_react());
17199
+ function info_default19({ defineComponent, Video }) {
17200
+ const BugSelection2 = import_react29.default.lazy(async () => Promise.resolve().then(() => (init_bug_selection(), bug_selection_exports)));
17201
+ const SummaryView6 = import_react29.default.lazy(async () => Promise.resolve().then(() => (init_summary_view3(), summary_view_exports3)));
17845
17202
  return defineComponent({
17846
17203
  identifier: "processor.dynamicBug",
17847
17204
  category: "processor",
@@ -17866,7 +17223,7 @@ function info_default22({ defineComponent, Video }) {
17866
17223
  };
17867
17224
  },
17868
17225
  runtime: {
17869
- summary: SummaryView8,
17226
+ summary: SummaryView6,
17870
17227
  initialState: () => ({}),
17871
17228
  handleEvent: (ev, state) => {
17872
17229
  const evType = ev.type;
@@ -17874,13 +17231,13 @@ function info_default22({ defineComponent, Video }) {
17874
17231
  case "bug-changed":
17875
17232
  return { ...state, activeBug: { file: ev.file, position: ev.position } };
17876
17233
  default:
17877
- assertUnreachable11(evType);
17234
+ assertUnreachable9(evType);
17878
17235
  }
17879
17236
  }
17880
17237
  },
17881
17238
  configForm: {
17882
17239
  global: {
17883
- hardware: (0, import_config5.HardwareSelection)()
17240
+ hardware: (0, import_config4.HardwareSelection)()
17884
17241
  },
17885
17242
  form: {
17886
17243
  defaultBug: {
@@ -17907,17 +17264,17 @@ function info_default22({ defineComponent, Video }) {
17907
17264
  }
17908
17265
  });
17909
17266
  }
17910
- function assertUnreachable11(_) {
17267
+ function assertUnreachable9(_) {
17911
17268
  throw new Error("Didn't expect to get here");
17912
17269
  }
17913
17270
 
17914
17271
  // build/processor.fixedLadder/info.js
17915
- var import_react37 = __toESM(require_react());
17916
- var import_config6 = __toESM(require_config());
17917
- function info_default23({ defineComponent, Video }) {
17918
- const RungView = import_react37.default.lazy(async () => Promise.resolve().then(() => (init_rung_view(), rung_view_exports)));
17919
- const CodecEditor3 = import_react37.default.lazy(async () => Promise.resolve().then(() => (init_codec_editor(), codec_editor_exports)));
17920
- const CodecView = import_react37.default.lazy(async () => Promise.resolve().then(() => (init_codec_view(), codec_view_exports)));
17272
+ var import_react31 = __toESM(require_react());
17273
+ var import_config5 = __toESM(require_config());
17274
+ function info_default20({ defineComponent, Video }) {
17275
+ const RungView = import_react31.default.lazy(async () => Promise.resolve().then(() => (init_rung_view(), rung_view_exports)));
17276
+ const CodecEditor3 = import_react31.default.lazy(async () => Promise.resolve().then(() => (init_codec_editor(), codec_editor_exports)));
17277
+ const CodecView = import_react31.default.lazy(async () => Promise.resolve().then(() => (init_codec_view(), codec_view_exports)));
17921
17278
  return defineComponent({
17922
17279
  identifier: "processor.transform.fixedLadder",
17923
17280
  category: "processor",
@@ -17957,7 +17314,7 @@ function info_default23({ defineComponent, Video }) {
17957
17314
  },
17958
17315
  configForm: {
17959
17316
  global: {
17960
- hardware: (0, import_config6.HardwareSelection)()
17317
+ hardware: (0, import_config5.HardwareSelection)()
17961
17318
  },
17962
17319
  form: {
17963
17320
  rungs: {
@@ -18079,7 +17436,7 @@ function createSoftwareRung(rung) {
18079
17436
  case "h264_320x180":
18080
17437
  return createRungImpl({ name: rung, threads: 1, bitrate: 800 });
18081
17438
  default:
18082
- return assertUnreachable12(rung);
17439
+ return assertUnreachable10(rung);
18083
17440
  }
18084
17441
  }
18085
17442
  function createMa35dRung(rung) {
@@ -18093,7 +17450,7 @@ function createMa35dRung(rung) {
18093
17450
  case "h264_320x180":
18094
17451
  return createMa35DH264RungImpl({ name: rung, bitrate: 1e3 });
18095
17452
  default:
18096
- return assertUnreachable12(rung);
17453
+ return assertUnreachable10(rung);
18097
17454
  }
18098
17455
  }
18099
17456
  function createNvidiaRung(rung) {
@@ -18107,7 +17464,7 @@ function createNvidiaRung(rung) {
18107
17464
  case "h264_320x180":
18108
17465
  return createNvidiaRungImpl({ name: rung, bitrate: 8e5 });
18109
17466
  default:
18110
- return assertUnreachable12(rung);
17467
+ return assertUnreachable10(rung);
18111
17468
  }
18112
17469
  }
18113
17470
  function createQuadraRung(rung) {
@@ -18121,7 +17478,7 @@ function createQuadraRung(rung) {
18121
17478
  case "h264_320x180":
18122
17479
  return createQuadraRungImpl({ name: rung, bitrate: 8e5 });
18123
17480
  default:
18124
- return assertUnreachable12(rung);
17481
+ return assertUnreachable10(rung);
18125
17482
  }
18126
17483
  }
18127
17484
  function createLoganRung(rung) {
@@ -18135,7 +17492,7 @@ function createLoganRung(rung) {
18135
17492
  case "h264_320x180":
18136
17493
  return createLoganRungImpl({ name: rung, bitrate: 8e5 });
18137
17494
  default:
18138
- return assertUnreachable12(rung);
17495
+ return assertUnreachable10(rung);
18139
17496
  }
18140
17497
  }
18141
17498
  function createRungImpl({ name, threads, bitrate }) {
@@ -18233,76 +17590,12 @@ function rungWidth(rungName) {
18233
17590
  function rungHeight(rungName) {
18234
17591
  return parseInt(rungName.split("_")[1].split(`x`)[1]);
18235
17592
  }
18236
- function assertUnreachable12(_) {
18237
- throw new Error("Didn't expect to get here");
18238
- }
18239
-
18240
- // build/processor.monetise/info.js
18241
- var import_react39 = __toESM(require_react());
18242
- var import_config7 = __toESM(require_config());
18243
- function info_default24(R) {
18244
- const { defineComponent, Av } = R;
18245
- const SummaryView8 = import_react39.default.lazy(async () => Promise.resolve().then(() => (init_summary3(), summary_exports3)));
18246
- return defineComponent({
18247
- identifier: "processor.monetise",
18248
- category: "output",
18249
- name: "Monetise",
18250
- subscription: {
18251
- accepts: {
18252
- type: "single-stream",
18253
- media: Av
18254
- },
18255
- produces: {
18256
- type: "single-stream",
18257
- media: ["audio", "video", "ancillary"]
18258
- }
18259
- },
18260
- extraValidation: (ctx) => {
18261
- ctx.requireVideo(1);
18262
- ctx.requireAudio(1);
18263
- },
18264
- display: (_desc) => {
18265
- return {};
18266
- },
18267
- runtime: {
18268
- initialState: () => ({}),
18269
- handleEvent(ev, state) {
18270
- const evType = ev.type;
18271
- switch (evType) {
18272
- case "url-published":
18273
- state.url = ev.url;
18274
- break;
18275
- case "advert-started":
18276
- state.currentAdvert = { timeLeftMs: ev.durationMs };
18277
- break;
18278
- case "advert-tick":
18279
- state.currentAdvert = { timeLeftMs: ev.timeLeftMs };
18280
- break;
18281
- case "advert-finished":
18282
- state.currentAdvert = void 0;
18283
- break;
18284
- default:
18285
- assertUnreachable13(evType);
18286
- }
18287
- return { ...state };
18288
- },
18289
- summary: SummaryView8
18290
- },
18291
- configForm: {
18292
- global: {
18293
- iceServers: (0, import_config7.GlobalIceServers)(R),
18294
- hardware: (0, import_config7.HardwareSelection)()
18295
- },
18296
- form: {}
18297
- }
18298
- });
18299
- }
18300
- function assertUnreachable13(_) {
17593
+ function assertUnreachable10(_) {
18301
17594
  throw new Error("Didn't expect to get here");
18302
17595
  }
18303
17596
 
18304
17597
  // build/processor.whisper-transcribe/info.js
18305
- function info_default25({ defineComponent, Av, Subtitle, validation: { Z } }) {
17598
+ function info_default21({ defineComponent, Av, Subtitle, validation: { Z } }) {
18306
17599
  return defineComponent({
18307
17600
  identifier: "processor.whisper-transcribe",
18308
17601
  category: "processor",
@@ -18344,11 +17637,11 @@ function info_default25({ defineComponent, Av, Subtitle, validation: { Z } }) {
18344
17637
  }
18345
17638
 
18346
17639
  // build/util.latency/info.js
18347
- var import_react41 = __toESM(require_react());
18348
- function info_default26(R) {
17640
+ var import_react33 = __toESM(require_react());
17641
+ function info_default22(R) {
18349
17642
  const { defineComponent } = R;
18350
- const InlineView18 = import_react41.default.lazy(async () => Promise.resolve().then(() => (init_inline_view9(), inline_view_exports9)));
18351
- const SourceNodeSelection2 = import_react41.default.lazy(async () => Promise.resolve().then(() => (init_source_node_selection(), source_node_selection_exports)));
17643
+ const InlineView14 = import_react33.default.lazy(async () => Promise.resolve().then(() => (init_inline_view7(), inline_view_exports7)));
17644
+ const SourceNodeSelection2 = import_react33.default.lazy(async () => Promise.resolve().then(() => (init_source_node_selection(), source_node_selection_exports)));
18352
17645
  return defineComponent({
18353
17646
  identifier: "util.latency-stats",
18354
17647
  category: "output",
@@ -18375,11 +17668,11 @@ function info_default26(R) {
18375
17668
  break;
18376
17669
  }
18377
17670
  default:
18378
- assertUnreachable14(evType);
17671
+ assertUnreachable11(evType);
18379
17672
  }
18380
17673
  return { ...state };
18381
17674
  },
18382
- inline: InlineView18
17675
+ inline: InlineView14
18383
17676
  },
18384
17677
  configForm: {
18385
17678
  form: {
@@ -18429,15 +17722,15 @@ function info_default26(R) {
18429
17722
  }
18430
17723
  });
18431
17724
  }
18432
- function assertUnreachable14(_) {
17725
+ function assertUnreachable11(_) {
18433
17726
  throw new Error("Didn't expect to get here");
18434
17727
  }
18435
17728
 
18436
17729
  // build/util.ma35d/info.js
18437
- var import_react43 = __toESM(require_react());
18438
- function info_default27(R) {
17730
+ var import_react35 = __toESM(require_react());
17731
+ function info_default23(R) {
18439
17732
  const { defineComponent } = R;
18440
- const InlineView18 = import_react43.default.lazy(async () => Promise.resolve().then(() => (init_inline_view10(), inline_view_exports10)));
17733
+ const InlineView14 = import_react35.default.lazy(async () => Promise.resolve().then(() => (init_inline_view8(), inline_view_exports8)));
18441
17734
  return defineComponent({
18442
17735
  identifier: "util.ma35d-stats",
18443
17736
  category: "output",
@@ -18470,26 +17763,26 @@ function info_default27(R) {
18470
17763
  break;
18471
17764
  }
18472
17765
  default:
18473
- assertUnreachable15(evType);
17766
+ assertUnreachable12(evType);
18474
17767
  }
18475
17768
  return { ...state };
18476
17769
  },
18477
- inline: InlineView18
17770
+ inline: InlineView14
18478
17771
  },
18479
17772
  configForm: {
18480
17773
  form: {}
18481
17774
  }
18482
17775
  });
18483
17776
  }
18484
- function assertUnreachable15(_) {
17777
+ function assertUnreachable12(_) {
18485
17778
  throw new Error("Didn't expect to get here");
18486
17779
  }
18487
17780
 
18488
17781
  // build/util.timestamps/info.js
18489
- var import_react45 = __toESM(require_react());
18490
- function info_default28(R) {
17782
+ var import_react37 = __toESM(require_react());
17783
+ function info_default24(R) {
18491
17784
  const { defineComponent, All } = R;
18492
- const InlineView18 = import_react45.default.lazy(async () => Promise.resolve().then(() => (init_inline_view11(), inline_view_exports11)));
17785
+ const InlineView14 = import_react37.default.lazy(async () => Promise.resolve().then(() => (init_inline_view9(), inline_view_exports9)));
18493
17786
  return defineComponent({
18494
17787
  identifier: "util.timestamps",
18495
17788
  category: "output",
@@ -18524,18 +17817,18 @@ function info_default28(R) {
18524
17817
  break;
18525
17818
  }
18526
17819
  default:
18527
- assertUnreachable16(evType);
17820
+ assertUnreachable13(evType);
18528
17821
  }
18529
17822
  return { ...state };
18530
17823
  },
18531
- inline: InlineView18
17824
+ inline: InlineView14
18532
17825
  },
18533
17826
  configForm: {
18534
17827
  form: {}
18535
17828
  }
18536
17829
  });
18537
17830
  }
18538
- function assertUnreachable16(_) {
17831
+ function assertUnreachable13(_) {
18539
17832
  throw new Error("Didn't expect to get here");
18540
17833
  }
18541
17834
 
@@ -18577,10 +17870,6 @@ AllComponents.push((r) => info_default21(r));
18577
17870
  AllComponents.push((r) => info_default22(r));
18578
17871
  AllComponents.push((r) => info_default23(r));
18579
17872
  AllComponents.push((r) => info_default24(r));
18580
- AllComponents.push((r) => info_default25(r));
18581
- AllComponents.push((r) => info_default26(r));
18582
- AllComponents.push((r) => info_default27(r));
18583
- AllComponents.push((r) => info_default28(r));
18584
17873
  export {
18585
17874
  getNodeInfo as default
18586
17875
  };