@norskvideo/norsk-studio-built-ins 1.12.0-2025-02-09-5edcddaa → 1.12.0-2025-02-13-2521ce04

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 (55) hide show
  1. package/client/info.js +336 -202
  2. package/client/style.css +10 -0
  3. package/lib/info.js +14 -12
  4. package/lib/info.js.map +1 -1
  5. package/lib/output.autoCmaf/info.js +4 -2
  6. package/lib/output.autoCmaf/info.js.map +1 -1
  7. package/lib/output.autoCmaf/inline-view.d.ts +6 -0
  8. package/lib/output.autoCmaf/inline-view.js +8 -0
  9. package/lib/output.autoCmaf/inline-view.js.map +1 -0
  10. package/lib/output.autoCmaf/runtime.d.ts +11 -6
  11. package/lib/output.autoCmaf/runtime.js +145 -80
  12. package/lib/output.autoCmaf/runtime.js.map +1 -1
  13. package/lib/output.autoHls/info.d.ts +3 -0
  14. package/lib/output.autoHls/info.js +22 -0
  15. package/lib/output.autoHls/info.js.map +1 -0
  16. package/lib/output.autoHls/runtime.d.ts +6 -0
  17. package/lib/output.autoHls/runtime.js +13 -0
  18. package/lib/output.autoHls/runtime.js.map +1 -0
  19. package/lib/output.rtmp/info.js +9 -1
  20. package/lib/output.rtmp/info.js.map +1 -1
  21. package/lib/output.rtmp/inline-view.js +3 -0
  22. package/lib/output.rtmp/inline-view.js.map +1 -1
  23. package/lib/output.rtmp/runtime.d.ts +30 -5
  24. package/lib/output.rtmp/runtime.js +169 -34
  25. package/lib/output.rtmp/runtime.js.map +1 -1
  26. package/lib/output.rtmp/summary-view.d.ts +4 -0
  27. package/lib/output.rtmp/summary-view.js +24 -0
  28. package/lib/output.rtmp/summary-view.js.map +1 -0
  29. package/lib/output.rtmp/types.d.ts +101 -0
  30. package/lib/output.rtmp/types.js +3 -0
  31. package/lib/output.rtmp/types.js.map +1 -0
  32. package/lib/output.rtmp/types.yaml +30 -0
  33. package/lib/output.srt/info.js +4 -0
  34. package/lib/output.srt/info.js.map +1 -1
  35. package/lib/output.srt/inline-view.d.ts +6 -0
  36. package/lib/output.srt/inline-view.js +8 -0
  37. package/lib/output.srt/inline-view.js.map +1 -0
  38. package/lib/output.srt/runtime.d.ts +12 -6
  39. package/lib/output.srt/runtime.js +75 -36
  40. package/lib/output.srt/runtime.js.map +1 -1
  41. package/lib/output.srt/summary-view.d.ts +4 -0
  42. package/lib/output.srt/summary-view.js +24 -0
  43. package/lib/output.srt/summary-view.js.map +1 -0
  44. package/lib/output.whep/info.js +1 -1
  45. package/lib/output.whep/info.js.map +1 -1
  46. package/lib/output.whep/runtime.d.ts +1 -4
  47. package/lib/output.whep/runtime.js +0 -1
  48. package/lib/output.whep/runtime.js.map +1 -1
  49. package/lib/test/auto-cmaf.js +31 -26
  50. package/lib/test/auto-cmaf.js.map +1 -1
  51. package/lib/test/rtmp-output.js +105 -1
  52. package/lib/test/rtmp-output.js.map +1 -1
  53. package/lib/test/srt-output.js +93 -4
  54. package/lib/test/srt-output.js.map +1 -1
  55. package/package.json +3 -3
package/client/info.js CHANGED
@@ -570,6 +570,23 @@ var init_fullscreen = __esm({
570
570
  }
571
571
  });
572
572
 
573
+ // build/output.autoCmaf/inline-view.js
574
+ var inline_view_exports3 = {};
575
+ __export(inline_view_exports3, {
576
+ default: () => inline_view_default3
577
+ });
578
+ function InlineView5({ state }) {
579
+ return (0, import_jsx_runtime8.jsx)("div", { className: "-output", children: state.enabled ? (0, import_jsx_runtime8.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Output enabled" }) : (0, import_jsx_runtime8.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Output disabled" }) });
580
+ }
581
+ var import_jsx_runtime8, inline_view_default3;
582
+ var init_inline_view3 = __esm({
583
+ "build/output.autoCmaf/inline-view.js"() {
584
+ "use strict";
585
+ import_jsx_runtime8 = __toESM(require_jsx_runtime());
586
+ inline_view_default3 = InlineView5;
587
+ }
588
+ });
589
+
573
590
  // build/output.autoCmaf/form-views.js
574
591
  var form_views_exports = {};
575
592
  __export(form_views_exports, {
@@ -577,16 +594,16 @@ __export(form_views_exports, {
577
594
  SegmentConfiguration: () => SegmentConfiguration
578
595
  });
579
596
  function S3Destination(destination) {
580
- return (0, import_jsx_runtime8.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Host" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.host }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Path" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.prefix }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Include Ads" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.includeAdInsertions ? "yes" : "no" })] });
597
+ return (0, import_jsx_runtime9.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, import_jsx_runtime9.jsx)("div", { className: "col-span-1", children: "Host" }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-2", children: destination.host }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-1", children: "Path" }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-2", children: destination.prefix }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-1", children: "Include Ads" }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-2", children: destination.includeAdInsertions ? "yes" : "no" })] });
581
598
  }
582
599
  function SegmentConfiguration(cfg) {
583
- return (0, import_jsx_runtime8.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Segments" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: cfg.defaultSegmentCount == 0 ? "all" : cfg.defaultSegmentCount }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Segment Target" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.targetSegmentDuration, "s"] }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Part Target" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.targetPartDuration, "s"] }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Retention" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.retentionPeriod, "s"] })] });
600
+ return (0, import_jsx_runtime9.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, import_jsx_runtime9.jsx)("div", { className: "col-span-1", children: "Segments" }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-2", children: cfg.defaultSegmentCount == 0 ? "all" : cfg.defaultSegmentCount }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-1", children: "Segment Target" }), (0, import_jsx_runtime9.jsxs)("div", { className: "col-span-2", children: [cfg.targetSegmentDuration, "s"] }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-1", children: "Part Target" }), (0, import_jsx_runtime9.jsxs)("div", { className: "col-span-2", children: [cfg.targetPartDuration, "s"] }), (0, import_jsx_runtime9.jsx)("div", { className: "col-span-1", children: "Retention" }), (0, import_jsx_runtime9.jsxs)("div", { className: "col-span-2", children: [cfg.retentionPeriod, "s"] })] });
584
601
  }
585
- var import_jsx_runtime8;
602
+ var import_jsx_runtime9;
586
603
  var init_form_views = __esm({
587
604
  "build/output.autoCmaf/form-views.js"() {
588
605
  "use strict";
589
- import_jsx_runtime8 = __toESM(require_jsx_runtime());
606
+ import_jsx_runtime9 = __toESM(require_jsx_runtime());
590
607
  }
591
608
  });
592
609
 
@@ -598,11 +615,11 @@ var require_webrtc_client = __commonJS({
598
615
  });
599
616
 
600
617
  // build/output.preview/inline-view.js
601
- var inline_view_exports3 = {};
602
- __export(inline_view_exports3, {
603
- default: () => inline_view_default3
618
+ var inline_view_exports4 = {};
619
+ __export(inline_view_exports4, {
620
+ default: () => inline_view_default4
604
621
  });
605
- function InlineView5({ state, config, raise }) {
622
+ function InlineView6({ state, config, raise }) {
606
623
  const url = state.url;
607
624
  const id = config.id;
608
625
  const [showPreview, setShowPreview] = (0, import_react6.useState)(config.showPreview ?? true);
@@ -644,7 +661,7 @@ function InlineView5({ state, config, raise }) {
644
661
  }, [config.showPreview]);
645
662
  raise && (0, import_react6.useEffect)(raise, []);
646
663
  if (!url)
647
- return (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children: "..." });
664
+ return (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: "..." });
648
665
  function percentage(levels) {
649
666
  if (!levels) {
650
667
  return 0;
@@ -654,37 +671,73 @@ function InlineView5({ state, config, raise }) {
654
671
  const snapped = Math.floor(capped * 10) * 10;
655
672
  return Math.max(0, 100 - snapped);
656
673
  }
657
- return (0, import_jsx_runtime9.jsxs)("div", { className: "preview-outer-container", children: [(0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, import_jsx_runtime9.jsx)("input", { type: "checkbox", id: `video-toggle-${id}`, checked: showPreview, onChange: (e) => setShowPreview(e.target.checked), className: "h-4 w-4" }), (0, import_jsx_runtime9.jsx)("label", { htmlFor: `video-toggle-${id}`, className: "text-sm", children: "Show Preview" })] }), showPreview ? (0, import_jsx_runtime9.jsx)("div", { className: "preview-video", id: `preview-${id}`, children: (0, import_jsx_runtime9.jsx)("style", { children: `
674
+ return (0, import_jsx_runtime10.jsxs)("div", { className: "preview-outer-container", children: [(0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, import_jsx_runtime10.jsx)("input", { type: "checkbox", id: `video-toggle-${id}`, checked: showPreview, onChange: (e) => setShowPreview(e.target.checked), className: "h-4 w-4" }), (0, import_jsx_runtime10.jsx)("label", { htmlFor: `video-toggle-${id}`, className: "text-sm", children: "Show Preview" })] }), showPreview ? (0, import_jsx_runtime10.jsx)("div", { className: "preview-video", id: `preview-${id}`, children: (0, import_jsx_runtime10.jsx)("style", { children: `
658
675
  #preview-${id} video::-webkit-media-controls-play-button { display: none; },
659
- ` }) }) : (0, import_jsx_runtime9.jsx)("div", { className: "preview-video bg-black flex items-center justify-center text-white h-full", children: "Preview turned off" }), (0, import_jsx_runtime9.jsx)("div", { className: "preview-levels", children: (0, import_jsx_runtime9.jsx)("div", { className: `preview-level clip-${percentage(state.levels)}-preview` }) })] });
676
+ ` }) }) : (0, import_jsx_runtime10.jsx)("div", { className: "preview-video bg-black flex items-center justify-center text-white h-full", children: "Preview turned off" }), (0, import_jsx_runtime10.jsx)("div", { className: "preview-levels", children: (0, import_jsx_runtime10.jsx)("div", { className: `preview-level clip-${percentage(state.levels)}-preview` }) })] });
660
677
  }
661
- var import_jsx_runtime9, import_react6, import_webrtc_client, inline_view_default3;
662
- var init_inline_view3 = __esm({
678
+ var import_jsx_runtime10, import_react6, import_webrtc_client, inline_view_default4;
679
+ var init_inline_view4 = __esm({
663
680
  "build/output.preview/inline-view.js"() {
664
681
  "use strict";
665
- import_jsx_runtime9 = __toESM(require_jsx_runtime());
682
+ import_jsx_runtime10 = __toESM(require_jsx_runtime());
666
683
  import_react6 = __toESM(require_react());
667
684
  import_webrtc_client = __toESM(require_webrtc_client());
668
- inline_view_default3 = InlineView5;
685
+ inline_view_default4 = InlineView6;
686
+ }
687
+ });
688
+
689
+ // build/output.rtmp/summary-view.js
690
+ var summary_view_exports4 = {};
691
+ __export(summary_view_exports4, {
692
+ default: () => summary_view_default4
693
+ });
694
+ function SummaryView6({ state, sendCommand }) {
695
+ const handleEnableOutput = () => {
696
+ void enableOutput();
697
+ };
698
+ const enableOutput = async () => {
699
+ sendCommand({
700
+ type: "enable-output"
701
+ });
702
+ };
703
+ const handleDisableOutput = () => {
704
+ void disableOutput();
705
+ };
706
+ const disableOutput = async () => {
707
+ sendCommand({
708
+ type: "disable-output"
709
+ });
710
+ };
711
+ return (0, import_jsx_runtime11.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [(0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center space-x-2", children: [(0, import_jsx_runtime11.jsx)("span", { className: `inline-block w-2 h-2 rounded-full ${state.enabled ? "bg-blue-500" : "bg-red-500"}` }), (0, import_jsx_runtime11.jsxs)("span", { className: "text-sm", children: ["Status: ", state.enabled ? "Enabled" : "Disabled"] })] }), (0, import_jsx_runtime11.jsx)("div", { children: state.enabled ? (0, import_jsx_runtime11.jsx)("button", { onClick: handleDisableOutput, className: "px-3 py-1 text-sm bg-red-600 hover:bg-red-700 text-white rounded", children: "Disable Output" }) : (0, import_jsx_runtime11.jsx)("button", { onClick: handleEnableOutput, className: "px-3 py-1 text-sm bg-blue-600 hover:bg-blue-700 text-white rounded", children: "Enable Output" }) })] }) });
712
+ }
713
+ var import_jsx_runtime11, summary_view_default4;
714
+ var init_summary_view4 = __esm({
715
+ "build/output.rtmp/summary-view.js"() {
716
+ "use strict";
717
+ import_jsx_runtime11 = __toESM(require_jsx_runtime());
718
+ summary_view_default4 = SummaryView6;
669
719
  }
670
720
  });
671
721
 
672
722
  // build/output.rtmp/inline-view.js
673
- var inline_view_exports4 = {};
674
- __export(inline_view_exports4, {
675
- default: () => inline_view_default4
723
+ var inline_view_exports5 = {};
724
+ __export(inline_view_exports5, {
725
+ default: () => inline_view_default5
676
726
  });
677
- function InlineView6({ state, config }) {
678
- const connected = (0, import_jsx_runtime10.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Connected and publishing" });
679
- const disconnected = (0, import_jsx_runtime10.jsxs)("div", { className: "inactive text-orange-500 dark:text-orange-300", children: ["Disconnected ", state.connectRetries > 0 ? `- retrying(${state.connectRetries})` : ""] });
680
- return (0, import_jsx_runtime10.jsx)("div", { className: "rtmp-output", id: `rtmp-output-${config.id}`, children: state.connected ? connected : disconnected });
727
+ function InlineView7({ state, config }) {
728
+ if (!state.enabled) {
729
+ return (0, import_jsx_runtime12.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Output disabled" });
730
+ }
731
+ const connected = (0, import_jsx_runtime12.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Connected and publishing" });
732
+ const disconnected = (0, import_jsx_runtime12.jsxs)("div", { className: "inactive text-orange-500 dark:text-orange-300", children: ["Disconnected ", state.connectRetries > 0 ? `- retrying(${state.connectRetries})` : ""] });
733
+ return (0, import_jsx_runtime12.jsx)("div", { className: "rtmp-output", id: `rtmp-output-${config.id}`, children: state.connected ? connected : disconnected });
681
734
  }
682
- var import_jsx_runtime10, inline_view_default4;
683
- var init_inline_view4 = __esm({
735
+ var import_jsx_runtime12, inline_view_default5;
736
+ var init_inline_view5 = __esm({
684
737
  "build/output.rtmp/inline-view.js"() {
685
738
  "use strict";
686
- import_jsx_runtime10 = __toESM(require_jsx_runtime());
687
- inline_view_default4 = InlineView6;
739
+ import_jsx_runtime12 = __toESM(require_jsx_runtime());
740
+ inline_view_default5 = InlineView7;
688
741
  }
689
742
  });
690
743
 
@@ -763,30 +816,80 @@ var require_util = __commonJS({
763
816
  }
764
817
  });
765
818
 
819
+ // build/output.srt/summary-view.js
820
+ var summary_view_exports5 = {};
821
+ __export(summary_view_exports5, {
822
+ default: () => summary_view_default5
823
+ });
824
+ function SummaryView7({ state, sendCommand }) {
825
+ const handleEnableOutput = () => {
826
+ void enableOutput();
827
+ };
828
+ const enableOutput = async () => {
829
+ sendCommand({
830
+ type: "enable-output"
831
+ });
832
+ };
833
+ const handleDisableOutput = () => {
834
+ void disableOutput();
835
+ };
836
+ const disableOutput = async () => {
837
+ sendCommand({
838
+ type: "disable-output"
839
+ });
840
+ };
841
+ return (0, import_jsx_runtime13.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [(0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center space-x-2", children: [(0, import_jsx_runtime13.jsx)("span", { className: `inline-block w-2 h-2 rounded-full ${state.enabled ? "bg-green-500" : "bg-red-500"}` }), (0, import_jsx_runtime13.jsxs)("span", { className: "text-sm", children: ["Status: ", state.enabled ? "Enabled" : "Disabled"] })] }), (0, import_jsx_runtime13.jsx)("div", { children: state.enabled ? (0, import_jsx_runtime13.jsx)("button", { onClick: handleDisableOutput, className: "px-3 py-1 text-sm bg-red-600 hover:bg-red-700 text-white rounded", children: "Disable Output" }) : (0, import_jsx_runtime13.jsx)("button", { onClick: handleEnableOutput, className: "px-3 py-1 text-sm bg-blue-600 hover:bg-green-700 text-white rounded", children: "Enable Output" }) })] }) });
842
+ }
843
+ var import_jsx_runtime13, summary_view_default5;
844
+ var init_summary_view5 = __esm({
845
+ "build/output.srt/summary-view.js"() {
846
+ "use strict";
847
+ import_jsx_runtime13 = __toESM(require_jsx_runtime());
848
+ summary_view_default5 = SummaryView7;
849
+ }
850
+ });
851
+
852
+ // build/output.srt/inline-view.js
853
+ var inline_view_exports6 = {};
854
+ __export(inline_view_exports6, {
855
+ default: () => inline_view_default6
856
+ });
857
+ function InlineView8({ state }) {
858
+ return (0, import_jsx_runtime14.jsx)("div", { className: "srt-output", children: state.enabled ? (0, import_jsx_runtime14.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Output enabled" }) : (0, import_jsx_runtime14.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Output disabled" }) });
859
+ }
860
+ var import_jsx_runtime14, inline_view_default6;
861
+ var init_inline_view6 = __esm({
862
+ "build/output.srt/inline-view.js"() {
863
+ "use strict";
864
+ import_jsx_runtime14 = __toESM(require_jsx_runtime());
865
+ inline_view_default6 = InlineView8;
866
+ }
867
+ });
868
+
766
869
  // build/output.statistics/inline-view.js
767
- var inline_view_exports5 = {};
768
- __export(inline_view_exports5, {
769
- default: () => inline_view_default5
870
+ var inline_view_exports7 = {};
871
+ __export(inline_view_exports7, {
872
+ default: () => inline_view_default7
770
873
  });
771
- function InlineView7({ state }) {
874
+ function InlineView9({ state }) {
772
875
  if (!state.previous)
773
- return (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, {});
876
+ return (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, {});
774
877
  const format = (stat) => Math.floor(stat).toLocaleString("en-US", { maximumFractionDigits: 0 });
775
- return (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, { children: state.previous.allStreams.map((s, i) => {
878
+ return (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, { children: state.previous.allStreams.map((s, i) => {
776
879
  const metaCase = s.metadata.case;
777
880
  switch (metaCase) {
778
881
  case "audio":
779
- return (0, import_jsx_runtime11.jsxs)("div", { children: [(0, import_jsx_runtime11.jsxs)("div", { children: ["StreamKey: ", streamKey(s.streamKey)] }), (0, import_jsx_runtime11.jsxs)("div", { children: ["Bitrate: ", format(s.bitrate), "bps"] })] }, i);
882
+ return (0, import_jsx_runtime15.jsxs)("div", { children: [(0, import_jsx_runtime15.jsxs)("div", { children: ["StreamKey: ", streamKey(s.streamKey)] }), (0, import_jsx_runtime15.jsxs)("div", { children: ["Bitrate: ", format(s.bitrate), "bps"] })] }, i);
780
883
  case "video":
781
- return (0, import_jsx_runtime11.jsxs)("div", { children: [(0, import_jsx_runtime11.jsxs)("div", { children: ["StreamKey: ", streamKey(s.streamKey)] }), (0, import_jsx_runtime11.jsxs)("div", { children: ["Bitrate: ", format(s.bitrate), "bps"] })] }, i);
884
+ return (0, import_jsx_runtime15.jsxs)("div", { children: [(0, import_jsx_runtime15.jsxs)("div", { children: ["StreamKey: ", streamKey(s.streamKey)] }), (0, import_jsx_runtime15.jsxs)("div", { children: ["Bitrate: ", format(s.bitrate), "bps"] })] }, i);
782
885
  case "ancillary":
783
- return (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, {});
886
+ return (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, {});
784
887
  case "subtitle":
785
- return (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, {});
888
+ return (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, {});
786
889
  case "playlist":
787
- return (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, {});
890
+ return (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, {});
788
891
  case void 0:
789
- return (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, {});
892
+ return (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, {});
790
893
  default:
791
894
  assertUnreachable7(metaCase);
792
895
  }
@@ -795,19 +898,19 @@ function InlineView7({ state }) {
795
898
  function streamKey(streamKey2) {
796
899
  return streamKey2.streamId.toString();
797
900
  }
798
- var import_jsx_runtime11, inline_view_default5;
799
- var init_inline_view5 = __esm({
901
+ var import_jsx_runtime15, inline_view_default7;
902
+ var init_inline_view7 = __esm({
800
903
  "build/output.statistics/inline-view.js"() {
801
904
  "use strict";
802
- import_jsx_runtime11 = __toESM(require_jsx_runtime());
905
+ import_jsx_runtime15 = __toESM(require_jsx_runtime());
803
906
  init_info();
804
- inline_view_default5 = InlineView7;
907
+ inline_view_default7 = InlineView9;
805
908
  }
806
909
  });
807
910
 
808
911
  // build/output.statistics/info.js
809
- function info_default11({ defineComponent, All }) {
810
- const InlineView13 = import_react10.default.lazy(async () => Promise.resolve().then(() => (init_inline_view5(), inline_view_exports5)));
912
+ function info_default12({ defineComponent, All }) {
913
+ const InlineView15 = import_react10.default.lazy(async () => Promise.resolve().then(() => (init_inline_view7(), inline_view_exports7)));
811
914
  return defineComponent({
812
915
  identifier: "output.statistics",
813
916
  category: "output",
@@ -836,7 +939,7 @@ function info_default11({ defineComponent, All }) {
836
939
  }
837
940
  return { ...state };
838
941
  },
839
- inline: InlineView13
942
+ inline: InlineView15
840
943
  },
841
944
  configForm: {
842
945
  form: {
@@ -856,45 +959,12 @@ var init_info = __esm({
856
959
  }
857
960
  });
858
961
 
859
- // build/output.whep/summary-view.js
860
- var summary_view_exports4 = {};
861
- __export(summary_view_exports4, {
862
- default: () => summary_view_default4
863
- });
864
- function SummaryView6({ state, sendCommand }) {
865
- const handleEnableOutput = () => {
866
- void enableOutput();
867
- };
868
- const enableOutput = async () => {
869
- sendCommand({
870
- type: "enable-output"
871
- });
872
- };
873
- const handleDisableOutput = () => {
874
- void disableOutput();
875
- };
876
- const disableOutput = async () => {
877
- sendCommand({
878
- type: "disable-output"
879
- });
880
- };
881
- return (0, import_jsx_runtime12.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [(0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center space-x-2", children: [(0, import_jsx_runtime12.jsx)("span", { className: `inline-block w-2 h-2 rounded-full ${state.enabled ? "bg-blue-500" : "bg-red-500"}` }), (0, import_jsx_runtime12.jsxs)("span", { className: "text-sm", children: ["Status: ", state.enabled ? "Enabled" : "Disabled"] })] }), (0, import_jsx_runtime12.jsx)("div", { children: state.enabled ? (0, import_jsx_runtime12.jsx)("button", { onClick: handleDisableOutput, className: "px-3 py-1 text-sm bg-red-600 hover:bg-red-700 text-white rounded", children: "Disable Output" }) : (0, import_jsx_runtime12.jsx)("button", { onClick: handleEnableOutput, className: "px-3 py-1 text-sm bg-blue-600 hover:bg-blue-700 text-white rounded", children: "Enable Output" }) })] }) });
882
- }
883
- var import_jsx_runtime12, summary_view_default4;
884
- var init_summary_view4 = __esm({
885
- "build/output.whep/summary-view.js"() {
886
- "use strict";
887
- import_jsx_runtime12 = __toESM(require_jsx_runtime());
888
- summary_view_default4 = SummaryView6;
889
- }
890
- });
891
-
892
962
  // build/output.whep/inline-view.js
893
- var inline_view_exports6 = {};
894
- __export(inline_view_exports6, {
895
- default: () => inline_view_default6
963
+ var inline_view_exports8 = {};
964
+ __export(inline_view_exports8, {
965
+ default: () => inline_view_default8
896
966
  });
897
- function InlineView8({ state, config, raise }) {
967
+ function InlineView10({ state, config, raise }) {
898
968
  const url = state.url;
899
969
  const id = config.id;
900
970
  const [showPreview, setShowPreview] = (0, import_react11.useState)(config.showPreview ?? true);
@@ -936,38 +1006,71 @@ function InlineView8({ state, config, raise }) {
936
1006
  }, [config.showPreview]);
937
1007
  raise && (0, import_react11.useEffect)(raise, []);
938
1008
  if (!url)
939
- return (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, { children: "..." });
1009
+ return (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, { children: "..." });
940
1010
  const videoStyles = `
941
1011
  #whep-${id} video::-webkit-media-controls-play-button {
942
1012
  display: none;
943
1013
  }
944
1014
  `;
945
- return (0, import_jsx_runtime13.jsxs)("div", { className: "whep-container", children: [(0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, import_jsx_runtime13.jsx)("input", { type: "checkbox", id: `video-toggle-${id}`, checked: showPreview, onChange: (e) => setShowPreview(e.target.checked), className: "h-4 w-4" }), (0, import_jsx_runtime13.jsx)("label", { htmlFor: `video-toggle-${id}`, className: "text-sm", children: "Show Preview" })] }), showPreview ? (0, import_jsx_runtime13.jsx)("div", { className: "whep-video", id: `whep-${id}`, children: (0, import_jsx_runtime13.jsx)("style", { children: videoStyles }) }) : (0, import_jsx_runtime13.jsx)("div", { className: "whep-video bg-black flex items-center justify-center text-white h-full", children: "Preview turned off" })] });
1015
+ return (0, import_jsx_runtime16.jsxs)("div", { className: "whep-container", children: [(0, import_jsx_runtime16.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, import_jsx_runtime16.jsx)("input", { type: "checkbox", id: `video-toggle-${id}`, checked: showPreview, onChange: (e) => setShowPreview(e.target.checked), className: "h-4 w-4" }), (0, import_jsx_runtime16.jsx)("label", { htmlFor: `video-toggle-${id}`, className: "text-sm", children: "Show Preview" })] }), showPreview ? (0, import_jsx_runtime16.jsx)("div", { className: "whep-video", id: `whep-${id}`, children: (0, import_jsx_runtime16.jsx)("style", { children: videoStyles }) }) : (0, import_jsx_runtime16.jsx)("div", { className: "whep-video bg-black flex items-center justify-center text-white h-full", children: "Preview turned off" })] });
946
1016
  }
947
- var import_jsx_runtime13, import_react11, import_webrtc_client2, inline_view_default6;
948
- var init_inline_view6 = __esm({
1017
+ var import_jsx_runtime16, import_react11, import_webrtc_client2, inline_view_default8;
1018
+ var init_inline_view8 = __esm({
949
1019
  "build/output.whep/inline-view.js"() {
950
1020
  "use strict";
951
- import_jsx_runtime13 = __toESM(require_jsx_runtime());
1021
+ import_jsx_runtime16 = __toESM(require_jsx_runtime());
952
1022
  import_react11 = __toESM(require_react());
953
1023
  import_webrtc_client2 = __toESM(require_webrtc_client());
954
- inline_view_default6 = InlineView8;
1024
+ inline_view_default8 = InlineView10;
955
1025
  }
956
1026
  });
957
1027
 
958
- // build/processor.browserOverlay/summary-view.js
959
- var summary_view_exports5 = {};
960
- __export(summary_view_exports5, {
961
- default: () => summary_view_default5
1028
+ // build/output.whep/summary-view.js
1029
+ var summary_view_exports6 = {};
1030
+ __export(summary_view_exports6, {
1031
+ default: () => summary_view_default6
962
1032
  });
963
1033
  function SummaryView8({ state, sendCommand }) {
1034
+ const handleEnableOutput = () => {
1035
+ void enableOutput();
1036
+ };
1037
+ const enableOutput = async () => {
1038
+ sendCommand({
1039
+ type: "enable-output"
1040
+ });
1041
+ };
1042
+ const handleDisableOutput = () => {
1043
+ void disableOutput();
1044
+ };
1045
+ const disableOutput = async () => {
1046
+ sendCommand({
1047
+ type: "disable-output"
1048
+ });
1049
+ };
1050
+ return (0, import_jsx_runtime17.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [(0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center space-x-2", children: [(0, import_jsx_runtime17.jsx)("span", { className: `inline-block w-2 h-2 rounded-full ${state.enabled ? "bg-blue-500" : "bg-red-500"}` }), (0, import_jsx_runtime17.jsxs)("span", { className: "text-sm", children: ["Status: ", state.enabled ? "Enabled" : "Disabled"] })] }), (0, import_jsx_runtime17.jsx)("div", { children: state.enabled ? (0, import_jsx_runtime17.jsx)("button", { onClick: handleDisableOutput, className: "px-3 py-1 text-sm bg-red-600 hover:bg-red-700 text-white rounded", children: "Disable Output" }) : (0, import_jsx_runtime17.jsx)("button", { onClick: handleEnableOutput, className: "px-3 py-1 text-sm bg-blue-600 hover:bg-blue-700 text-white rounded", children: "Enable Output" }) })] }) });
1051
+ }
1052
+ var import_jsx_runtime17, summary_view_default6;
1053
+ var init_summary_view6 = __esm({
1054
+ "build/output.whep/summary-view.js"() {
1055
+ "use strict";
1056
+ import_jsx_runtime17 = __toESM(require_jsx_runtime());
1057
+ summary_view_default6 = SummaryView8;
1058
+ }
1059
+ });
1060
+
1061
+ // build/processor.browserOverlay/summary-view.js
1062
+ var summary_view_exports7 = {};
1063
+ __export(summary_view_exports7, {
1064
+ default: () => summary_view_default7
1065
+ });
1066
+ function SummaryView9({ state, sendCommand }) {
964
1067
  const [url, setUrl] = (0, import_react13.useState)(state.currentUrl);
965
1068
  const [enabled, setEnabled] = (0, import_react13.useState)(state.enabled);
966
1069
  const stateChanged = (0, import_react13.useMemo)(() => {
967
1070
  return url !== state.currentUrl || enabled !== state.enabled;
968
1071
  }, [url, enabled]);
969
1072
  const buttonClass = "mt-2 mb-5 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";
970
- return (0, import_jsx_runtime14.jsxs)("div", { className: "space-y-3 mb-5", children: [(0, import_jsx_runtime14.jsx)("h2", { className: "text-xl font-bold text-gray-900 dark:text-white", children: "Controls" }), (0, import_jsx_runtime14.jsxs)("div", { className: "mb-5", children: [(0, import_jsx_runtime14.jsx)("label", { htmlFor: "url", className: "mb-2 mr-2 text-sm font-medium text-gray-900 dark:text-white", children: "URL" }), (0, import_jsx_runtime14.jsx)("input", { type: "email", id: "url", className: "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", value: url, onChange: (e) => setUrl(e.target.value), required: true })] }), (0, import_jsx_runtime14.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime14.jsxs)("label", { className: "inline-flex items-center cursor-pointer", children: [(0, import_jsx_runtime14.jsx)("span", { className: "me-3 text-sm font-medium text-gray-900 dark:text-gray-300", children: "Enabled" }), (0, import_jsx_runtime14.jsx)("input", { type: "checkbox", checked: enabled, onChange: (e) => setEnabled(e.target.checked), className: "sr-only peer" }), (0, import_jsx_runtime14.jsx)("div", { className: "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" })] }) }), (0, import_jsx_runtime14.jsx)("button", { type: "button", className: `${buttonClass} ${!stateChanged ? "opacity-50 cursor-not-allowed" : ""}`, disabled: !stateChanged, onClick: () => {
1073
+ return (0, import_jsx_runtime18.jsxs)("div", { className: "space-y-3 mb-5", children: [(0, import_jsx_runtime18.jsx)("h2", { className: "text-xl font-bold text-gray-900 dark:text-white", children: "Controls" }), (0, import_jsx_runtime18.jsxs)("div", { className: "mb-5", children: [(0, import_jsx_runtime18.jsx)("label", { htmlFor: "url", className: "mb-2 mr-2 text-sm font-medium text-gray-900 dark:text-white", children: "URL" }), (0, import_jsx_runtime18.jsx)("input", { type: "email", id: "url", className: "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", value: url, onChange: (e) => setUrl(e.target.value), required: true })] }), (0, import_jsx_runtime18.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime18.jsxs)("label", { className: "inline-flex items-center cursor-pointer", children: [(0, import_jsx_runtime18.jsx)("span", { className: "me-3 text-sm font-medium text-gray-900 dark:text-gray-300", children: "Enabled" }), (0, import_jsx_runtime18.jsx)("input", { type: "checkbox", checked: enabled, onChange: (e) => setEnabled(e.target.checked), className: "sr-only peer" }), (0, import_jsx_runtime18.jsx)("div", { className: "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" })] }) }), (0, import_jsx_runtime18.jsx)("button", { type: "button", className: `${buttonClass} ${!stateChanged ? "opacity-50 cursor-not-allowed" : ""}`, disabled: !stateChanged, onClick: () => {
971
1074
  if (url !== state.currentUrl) {
972
1075
  sendCommand({ type: "change-url", url });
973
1076
  }
@@ -980,30 +1083,30 @@ function SummaryView8({ state, sendCommand }) {
980
1083
  }
981
1084
  }, children: "Commit" })] });
982
1085
  }
983
- var import_jsx_runtime14, import_react13, summary_view_default5;
984
- var init_summary_view5 = __esm({
1086
+ var import_jsx_runtime18, import_react13, summary_view_default7;
1087
+ var init_summary_view7 = __esm({
985
1088
  "build/processor.browserOverlay/summary-view.js"() {
986
1089
  "use strict";
987
- import_jsx_runtime14 = __toESM(require_jsx_runtime());
1090
+ import_jsx_runtime18 = __toESM(require_jsx_runtime());
988
1091
  import_react13 = __toESM(require_react());
989
- summary_view_default5 = SummaryView8;
1092
+ summary_view_default7 = SummaryView9;
990
1093
  }
991
1094
  });
992
1095
 
993
1096
  // build/processor.browserOverlay/inline-view.js
994
- var inline_view_exports7 = {};
995
- __export(inline_view_exports7, {
996
- default: () => inline_view_default7
1097
+ var inline_view_exports9 = {};
1098
+ __export(inline_view_exports9, {
1099
+ default: () => inline_view_default9
997
1100
  });
998
- function InlineView9({ state, config }) {
999
- return (0, import_jsx_runtime15.jsx)("div", { id: `browser-overlay-${config.id}`, children: (0, import_jsx_runtime15.jsxs)("div", { className: "w-64 grid grid-cols-[min-content,1fr] gap-2", children: [(0, import_jsx_runtime15.jsx)("div", { children: "URL:" }), (0, import_jsx_runtime15.jsx)("div", { className: "truncate", children: state.currentUrl }), (0, import_jsx_runtime15.jsx)("div", { children: "Enabled:" }), (0, import_jsx_runtime15.jsx)("div", { children: (0, import_jsx_runtime15.jsxs)("label", { className: "inline-flex items-center cursor-pointer", children: [(0, import_jsx_runtime15.jsx)("input", { type: "checkbox", checked: state.enabled, disabled: true, className: "sr-only peer" }), (0, import_jsx_runtime15.jsx)("div", { className: "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" })] }) })] }) });
1101
+ function InlineView11({ state, config }) {
1102
+ return (0, import_jsx_runtime19.jsx)("div", { id: `browser-overlay-${config.id}`, children: (0, import_jsx_runtime19.jsxs)("div", { className: "w-64 grid grid-cols-[min-content,1fr] gap-2", children: [(0, import_jsx_runtime19.jsx)("div", { children: "URL:" }), (0, import_jsx_runtime19.jsx)("div", { className: "truncate", children: state.currentUrl }), (0, import_jsx_runtime19.jsx)("div", { children: "Enabled:" }), (0, import_jsx_runtime19.jsx)("div", { children: (0, import_jsx_runtime19.jsxs)("label", { className: "inline-flex items-center cursor-pointer", children: [(0, import_jsx_runtime19.jsx)("input", { type: "checkbox", checked: state.enabled, disabled: true, className: "sr-only peer" }), (0, import_jsx_runtime19.jsx)("div", { className: "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" })] }) })] }) });
1000
1103
  }
1001
- var import_jsx_runtime15, inline_view_default7;
1002
- var init_inline_view7 = __esm({
1104
+ var import_jsx_runtime19, inline_view_default9;
1105
+ var init_inline_view9 = __esm({
1003
1106
  "build/processor.browserOverlay/inline-view.js"() {
1004
1107
  "use strict";
1005
- import_jsx_runtime15 = __toESM(require_jsx_runtime());
1006
- inline_view_default7 = InlineView9;
1108
+ import_jsx_runtime19 = __toESM(require_jsx_runtime());
1109
+ inline_view_default9 = InlineView11;
1007
1110
  }
1008
1111
  });
1009
1112
 
@@ -1018,10 +1121,10 @@ function OrderInput(props) {
1018
1121
  }, [props.defaultValue]);
1019
1122
  const [value, setValue] = (0, import_react15.useState)(props.defaultValue ?? []);
1020
1123
  if (value.length == 0) {
1021
- return (0, import_jsx_runtime16.jsx)("p", { className: "node-editor-helper-text", children: "Sources will appear here when subscriptions have been added to this node" });
1124
+ return (0, import_jsx_runtime20.jsx)("p", { className: "node-editor-helper-text", children: "Sources will appear here when subscriptions have been added to this node" });
1022
1125
  } else {
1023
- return (0, import_jsx_runtime16.jsx)("div", { id: props.id, children: (0, import_jsx_runtime16.jsx)("ul", { children: value.map((v, ix) => {
1024
- return (0, import_jsx_runtime16.jsxs)("li", { className: "flex", children: [(0, import_jsx_runtime16.jsx)("span", { className: "node-editor-label flex-grow", children: v }), ix == 0 ? (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, {}) : (0, import_jsx_runtime16.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_runtime16.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18" }) }), ix == value.length - 1 ? (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, {}) : (0, import_jsx_runtime16.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_runtime16.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3" }) })] }, v);
1126
+ return (0, import_jsx_runtime20.jsx)("div", { id: props.id, children: (0, import_jsx_runtime20.jsx)("ul", { children: value.map((v, ix) => {
1127
+ return (0, import_jsx_runtime20.jsxs)("li", { className: "flex", children: [(0, import_jsx_runtime20.jsx)("span", { className: "node-editor-label flex-grow", children: v }), ix == 0 ? (0, import_jsx_runtime20.jsx)(import_jsx_runtime20.Fragment, {}) : (0, import_jsx_runtime20.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_runtime20.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18" }) }), ix == value.length - 1 ? (0, import_jsx_runtime20.jsx)(import_jsx_runtime20.Fragment, {}) : (0, import_jsx_runtime20.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_runtime20.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3" }) })] }, v);
1025
1128
  }) }) });
1026
1129
  }
1027
1130
  function moveUp(ix) {
@@ -1043,33 +1146,33 @@ function OrderInput(props) {
1043
1146
  };
1044
1147
  }
1045
1148
  }
1046
- var import_jsx_runtime16, import_react15, source_selection_default;
1149
+ var import_jsx_runtime20, import_react15, source_selection_default;
1047
1150
  var init_source_selection = __esm({
1048
1151
  "build/processor.cascadingSwitch/source-selection.js"() {
1049
1152
  "use strict";
1050
- import_jsx_runtime16 = __toESM(require_jsx_runtime());
1153
+ import_jsx_runtime20 = __toESM(require_jsx_runtime());
1051
1154
  import_react15 = __toESM(require_react());
1052
1155
  source_selection_default = OrderInput;
1053
1156
  }
1054
1157
  });
1055
1158
 
1056
1159
  // build/processor.cascadingSwitch/inline-view.js
1057
- var inline_view_exports8 = {};
1058
- __export(inline_view_exports8, {
1059
- default: () => inline_view_default8
1160
+ var inline_view_exports10 = {};
1161
+ __export(inline_view_exports10, {
1162
+ default: () => inline_view_default10
1060
1163
  });
1061
- function InlineView11({ state, config }) {
1062
- return (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [(0, import_jsx_runtime17.jsx)("h5", { children: "Sources" }), (0, import_jsx_runtime17.jsxs)("ul", { children: [config.sources.map((s, i) => state.activeSource == s ? (0, import_jsx_runtime17.jsxs)("li", { className: activeClasses, children: [s, " <--"] }, i) : state.availableSources.includes(s) ? (0, import_jsx_runtime17.jsxs)("li", { className: availableClasses, children: [s, " (available)"] }, i) : (0, import_jsx_runtime17.jsxs)("li", { className: inactiveClasses, children: [s, " (inactive)"] }, i)), (0, import_jsx_runtime17.jsx)("li", { className: state.activeSource == "fallback" ? activeClasses : availableClasses, children: "fallback" }, "fallback")] })] });
1164
+ function InlineView13({ state, config }) {
1165
+ return (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [(0, import_jsx_runtime21.jsx)("h5", { children: "Sources" }), (0, import_jsx_runtime21.jsxs)("ul", { children: [config.sources.map((s, i) => state.activeSource == s ? (0, import_jsx_runtime21.jsxs)("li", { className: activeClasses, children: [s, " <--"] }, i) : state.availableSources.includes(s) ? (0, import_jsx_runtime21.jsxs)("li", { className: availableClasses, children: [s, " (available)"] }, i) : (0, import_jsx_runtime21.jsxs)("li", { className: inactiveClasses, children: [s, " (inactive)"] }, i)), (0, import_jsx_runtime21.jsx)("li", { className: state.activeSource == "fallback" ? activeClasses : availableClasses, children: "fallback" }, "fallback")] })] });
1063
1166
  }
1064
- var import_jsx_runtime17, activeClasses, availableClasses, inactiveClasses, inline_view_default8;
1065
- var init_inline_view8 = __esm({
1167
+ var import_jsx_runtime21, activeClasses, availableClasses, inactiveClasses, inline_view_default10;
1168
+ var init_inline_view10 = __esm({
1066
1169
  "build/processor.cascadingSwitch/inline-view.js"() {
1067
1170
  "use strict";
1068
- import_jsx_runtime17 = __toESM(require_jsx_runtime());
1171
+ import_jsx_runtime21 = __toESM(require_jsx_runtime());
1069
1172
  activeClasses = "active text-green-500 dark:text-green-300";
1070
1173
  availableClasses = "available text-green-500 dark:text-green-300";
1071
1174
  inactiveClasses = "inactive text-orange-500 dark:text-orange-300";
1072
- inline_view_default8 = InlineView11;
1175
+ inline_view_default10 = InlineView13;
1073
1176
  }
1074
1177
  });
1075
1178
 
@@ -1079,13 +1182,13 @@ __export(rung_view_exports, {
1079
1182
  default: () => rung_view_default
1080
1183
  });
1081
1184
  function rung_view_default(rung) {
1082
- return (0, import_jsx_runtime18.jsx)("div", { className: "text-gray-900 dark:text-white", children: rung.name });
1185
+ return (0, import_jsx_runtime22.jsx)("div", { className: "text-gray-900 dark:text-white", children: rung.name });
1083
1186
  }
1084
- var import_jsx_runtime18;
1187
+ var import_jsx_runtime22;
1085
1188
  var init_rung_view = __esm({
1086
1189
  "build/processor.fixedLadder/rung-view.js"() {
1087
1190
  "use strict";
1088
- import_jsx_runtime18 = __toESM(require_jsx_runtime());
1191
+ import_jsx_runtime22 = __toESM(require_jsx_runtime());
1089
1192
  }
1090
1193
  });
1091
1194
 
@@ -1108,7 +1211,7 @@ function CodecEditor(props) {
1108
1211
  target.style.height = target.scrollHeight + "px";
1109
1212
  }
1110
1213
  }, []);
1111
- return (0, import_jsx_runtime19.jsx)("textarea", { ref: textAreaRef, className: "w-full min-h-fit bg-white text-gray-900 dark:text-white dark:bg-black", onChange: (e) => {
1214
+ return (0, import_jsx_runtime23.jsx)("textarea", { ref: textAreaRef, className: "w-full min-h-fit bg-white text-gray-900 dark:text-white dark:bg-black", onChange: (e) => {
1112
1215
  const target = e.currentTarget;
1113
1216
  try {
1114
1217
  const codec = JSON.parse(target.value);
@@ -1118,11 +1221,11 @@ function CodecEditor(props) {
1118
1221
  }
1119
1222
  }, defaultValue: JSON.stringify(value, void 0, 2) });
1120
1223
  }
1121
- var import_jsx_runtime19, import_react16;
1224
+ var import_jsx_runtime23, import_react16;
1122
1225
  var init_codec_editor = __esm({
1123
1226
  "build/processor.fixedLadder/codec-editor.js"() {
1124
1227
  "use strict";
1125
- import_jsx_runtime19 = __toESM(require_jsx_runtime());
1228
+ import_jsx_runtime23 = __toESM(require_jsx_runtime());
1126
1229
  import_react16 = __toESM(require_react());
1127
1230
  }
1128
1231
  });
@@ -1133,13 +1236,13 @@ __export(codec_view_exports, {
1133
1236
  default: () => CodecEditor2
1134
1237
  });
1135
1238
  function CodecEditor2(props) {
1136
- return (0, import_jsx_runtime20.jsxs)("div", { className: "text-gray-900 dark:text-white", children: [props.width, "x", props.height] });
1239
+ return (0, import_jsx_runtime24.jsxs)("div", { className: "text-gray-900 dark:text-white", children: [props.width, "x", props.height] });
1137
1240
  }
1138
- var import_jsx_runtime20;
1241
+ var import_jsx_runtime24;
1139
1242
  var init_codec_view = __esm({
1140
1243
  "build/processor.fixedLadder/codec-view.js"() {
1141
1244
  "use strict";
1142
- import_jsx_runtime20 = __toESM(require_jsx_runtime());
1245
+ import_jsx_runtime24 = __toESM(require_jsx_runtime());
1143
1246
  }
1144
1247
  });
1145
1248
 
@@ -1168,34 +1271,34 @@ function GraphicSelection(props) {
1168
1271
  }, []);
1169
1272
  const [graphcs, setGraphics] = (0, import_react18.useState)([]);
1170
1273
  if (loading) {
1171
- return (0, import_jsx_runtime21.jsx)("div", { children: "Loading.." });
1274
+ return (0, import_jsx_runtime25.jsx)("div", { children: "Loading.." });
1172
1275
  }
1173
1276
  if (graphcs.length == 0) {
1174
- return (0, import_jsx_runtime21.jsx)("div", { children: "No graphics loaded" });
1277
+ return (0, import_jsx_runtime25.jsx)("div", { children: "No graphics loaded" });
1175
1278
  }
1176
- 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"), graphcs.map((o, i) => {
1177
- return (0, import_jsx_runtime21.jsx)("option", { value: o, children: o }, i);
1279
+ 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"), graphcs.map((o, i) => {
1280
+ return (0, import_jsx_runtime25.jsx)("option", { value: o, children: o }, i);
1178
1281
  })] }) });
1179
1282
  function myOnChange(e) {
1180
1283
  props.onChanged(e.target.value);
1181
1284
  }
1182
1285
  }
1183
- var import_jsx_runtime21, import_react18, image_selection_default;
1286
+ var import_jsx_runtime25, import_react18, image_selection_default;
1184
1287
  var init_image_selection = __esm({
1185
1288
  "build/processor.onscreenGraphic/image-selection.js"() {
1186
1289
  "use strict";
1187
- import_jsx_runtime21 = __toESM(require_jsx_runtime());
1290
+ import_jsx_runtime25 = __toESM(require_jsx_runtime());
1188
1291
  import_react18 = __toESM(require_react());
1189
1292
  image_selection_default = GraphicSelection;
1190
1293
  }
1191
1294
  });
1192
1295
 
1193
1296
  // build/processor.onscreenGraphic/summary-view.js
1194
- var summary_view_exports6 = {};
1195
- __export(summary_view_exports6, {
1196
- default: () => summary_view_default6
1297
+ var summary_view_exports8 = {};
1298
+ __export(summary_view_exports8, {
1299
+ default: () => summary_view_default8
1197
1300
  });
1198
- function SummaryView10({ state, sendCommand, urls }) {
1301
+ function SummaryView11({ state, sendCommand, urls }) {
1199
1302
  const [graphic, setGraphic] = (0, import_react19.useState)(state.activeGraphic?.file);
1200
1303
  const [position, setPosition] = (0, import_react19.useState)(state.activeGraphic?.position ?? { type: "named", position: "topleft" });
1201
1304
  const [graphics, setGraphics] = (0, import_react19.useState)([]);
@@ -1330,7 +1433,7 @@ function SummaryView10({ state, sendCommand, urls }) {
1330
1433
  const buttonClass = "mt-2 mb-5 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";
1331
1434
  const deleteButtonClass = "mt-2 text-white w-full justify-center bg-red-600 hover:bg-red-700 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-red-700 dark:hover:bg-red-800 dark:focus:ring-red-900";
1332
1435
  const fileInputClass = "block w-full text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400";
1333
- return (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-3", children: [(0, import_jsx_runtime22.jsx)("h2", { className: "text-xl font-bold text-gray-900 dark:text-white", children: "Controls" }), (0, import_jsx_runtime22.jsxs)("div", { children: [(0, import_jsx_runtime22.jsx)("label", { htmlFor: "select-graphic", className: "block text-gray-900 dark:text-white mb-1", children: "Source" }), (0, import_jsx_runtime22.jsxs)("select", { id: "select-graphic", className: "w-full node-editor-select-input", value: graphic || "", onChange: (e) => setGraphic(e.target.value || void 0), children: [(0, import_jsx_runtime22.jsx)("option", { value: "", children: "---" }), graphics.map((s) => (0, import_jsx_runtime22.jsx)("option", { value: s, children: s }, s))] })] }), graphic && (0, import_jsx_runtime22.jsxs)("div", { children: [(0, import_jsx_runtime22.jsx)("label", { htmlFor: "select-position", className: "block text-gray-900 dark:text-white mb-1", children: "Graphic position" }), (0, import_jsx_runtime22.jsx)(PositionSelector, { initialPosition: position, onChange: setPosition, graphicChanged, ...state })] }), (0, import_jsx_runtime22.jsx)("button", { type: "button", className: `${buttonClass} ${!stateChanged ? "opacity-50 cursor-not-allowed" : ""}`, onClick: () => sendCommand({ type: "change-graphic", file: graphic, position }), disabled: !stateChanged, children: "Commit" }), !showFileInput && !uploadStatus.success && (0, import_jsx_runtime22.jsx)("button", { type: "button", className: buttonClass, onClick: () => setShowFileInput(true), style: { marginBottom: "1rem" }, children: "Upload Graphic" }), showFileInput && (0, import_jsx_runtime22.jsxs)("form", { style: { display: "block", marginBottom: "1rem" }, children: [(0, import_jsx_runtime22.jsx)("input", { type: "file", id: "file", name: "filename", onChange: onFileChange, className: fileInputClass }), showUploadButton && (0, import_jsx_runtime22.jsx)("button", { type: "button", className: buttonClass, onClick: uploadFile, children: "Upload" })] }), (0, import_jsx_runtime22.jsx)("button", { type: "button", className: deleteButtonClass, onClick: () => setShowDeleteDropdown(!showDeleteDropdown), style: { marginBottom: "1rem" }, children: showDeleteDropdown ? "Hide Delete Options" : "Delete Graphics" }), showDeleteDropdown && (0, import_jsx_runtime22.jsxs)("div", { className: "mt-2 p-2 bg-gray-100 dark:bg-gray-800 rounded-lg", children: [(0, import_jsx_runtime22.jsx)("h3", { className: "text-lg font-semibold mb-2 text-gray-900 dark:text-white", children: "Select Graphic to Delete" }), (0, import_jsx_runtime22.jsxs)("select", { className: "w-full mb-2 node-editor-select-input", value: graphicToDelete, onChange: (e) => setGraphicToDelete(e.target.value), children: [(0, import_jsx_runtime22.jsx)("option", { value: "", children: " Select a graphic" }), graphics.map((graphicName) => (0, import_jsx_runtime22.jsx)("option", { value: graphicName, children: graphicName }, graphicName))] }), (0, import_jsx_runtime22.jsx)("button", { onClick: deleteBug, disabled: !graphicToDelete, className: `${deleteButtonClass} ${!graphicToDelete ? "opacity-50 cursor-not-allowed" : ""}`, children: "Delete Selected Graphic" })] }), uploadStatus.message && (0, import_jsx_runtime22.jsx)("div", { className: `mt-2 text-center ${uploadStatus.success ? "text-green-600" : "text-red-600"}`, children: uploadStatus.message })] });
1436
+ return (0, import_jsx_runtime26.jsxs)("div", { className: "space-y-3", children: [(0, import_jsx_runtime26.jsx)("h2", { className: "text-xl font-bold text-gray-900 dark:text-white", children: "Controls" }), (0, import_jsx_runtime26.jsxs)("div", { children: [(0, import_jsx_runtime26.jsx)("label", { htmlFor: "select-graphic", className: "block text-gray-900 dark:text-white mb-1", children: "Source" }), (0, import_jsx_runtime26.jsxs)("select", { id: "select-graphic", className: "w-full node-editor-select-input", value: graphic || "", onChange: (e) => setGraphic(e.target.value || void 0), children: [(0, import_jsx_runtime26.jsx)("option", { value: "", children: "---" }), graphics.map((s) => (0, import_jsx_runtime26.jsx)("option", { value: s, children: s }, s))] })] }), graphic && (0, import_jsx_runtime26.jsxs)("div", { children: [(0, import_jsx_runtime26.jsx)("label", { htmlFor: "select-position", className: "block text-gray-900 dark:text-white mb-1", children: "Graphic position" }), (0, import_jsx_runtime26.jsx)(PositionSelector, { initialPosition: position, onChange: setPosition, graphicChanged, ...state })] }), (0, import_jsx_runtime26.jsx)("button", { type: "button", className: `${buttonClass} ${!stateChanged ? "opacity-50 cursor-not-allowed" : ""}`, onClick: () => sendCommand({ type: "change-graphic", file: graphic, position }), disabled: !stateChanged, children: "Commit" }), !showFileInput && !uploadStatus.success && (0, import_jsx_runtime26.jsx)("button", { type: "button", className: buttonClass, onClick: () => setShowFileInput(true), style: { marginBottom: "1rem" }, children: "Upload Graphic" }), showFileInput && (0, import_jsx_runtime26.jsxs)("form", { style: { display: "block", marginBottom: "1rem" }, children: [(0, import_jsx_runtime26.jsx)("input", { type: "file", id: "file", name: "filename", onChange: onFileChange, className: fileInputClass }), showUploadButton && (0, import_jsx_runtime26.jsx)("button", { type: "button", className: buttonClass, onClick: uploadFile, children: "Upload" })] }), (0, import_jsx_runtime26.jsx)("button", { type: "button", className: deleteButtonClass, onClick: () => setShowDeleteDropdown(!showDeleteDropdown), style: { marginBottom: "1rem" }, children: showDeleteDropdown ? "Hide Delete Options" : "Delete Graphics" }), showDeleteDropdown && (0, import_jsx_runtime26.jsxs)("div", { className: "mt-2 p-2 bg-gray-100 dark:bg-gray-800 rounded-lg", children: [(0, import_jsx_runtime26.jsx)("h3", { className: "text-lg font-semibold mb-2 text-gray-900 dark:text-white", children: "Select Graphic to Delete" }), (0, import_jsx_runtime26.jsxs)("select", { className: "w-full mb-2 node-editor-select-input", value: graphicToDelete, onChange: (e) => setGraphicToDelete(e.target.value), children: [(0, import_jsx_runtime26.jsx)("option", { value: "", children: " Select a graphic" }), graphics.map((graphicName) => (0, import_jsx_runtime26.jsx)("option", { value: graphicName, children: graphicName }, graphicName))] }), (0, import_jsx_runtime26.jsx)("button", { onClick: deleteBug, disabled: !graphicToDelete, className: `${deleteButtonClass} ${!graphicToDelete ? "opacity-50 cursor-not-allowed" : ""}`, children: "Delete Selected Graphic" })] }), uploadStatus.message && (0, import_jsx_runtime26.jsx)("div", { className: `mt-2 text-center ${uploadStatus.success ? "text-green-600" : "text-red-600"}`, children: uploadStatus.message })] });
1334
1437
  }
1335
1438
  function convertPosition(givenPosition, currentVideo, currentGraphic) {
1336
1439
  if (!givenPosition)
@@ -1376,11 +1479,11 @@ function clamp(min, num, max) {
1376
1479
  function assertUnreachable12(_) {
1377
1480
  throw new Error("Didn't expect to get here");
1378
1481
  }
1379
- var import_jsx_runtime22, import_react19, PositionSelector, summary_view_default6;
1380
- var init_summary_view6 = __esm({
1482
+ var import_jsx_runtime26, import_react19, PositionSelector, summary_view_default8;
1483
+ var init_summary_view8 = __esm({
1381
1484
  "build/processor.onscreenGraphic/summary-view.js"() {
1382
1485
  "use strict";
1383
- import_jsx_runtime22 = __toESM(require_jsx_runtime());
1486
+ import_jsx_runtime26 = __toESM(require_jsx_runtime());
1384
1487
  import_react19 = __toESM(require_react());
1385
1488
  PositionSelector = ({ initialPosition: givenPosition = { type: "named", position: "topleft" }, onChange, currentVideo, currentGraphic, graphicChanged }) => {
1386
1489
  const convertPos = (pos) => convertPosition(pos, currentVideo, currentGraphic);
@@ -1448,7 +1551,7 @@ var init_summary_view6 = __esm({
1448
1551
  window.removeEventListener("mouseup", handleMouseUp);
1449
1552
  };
1450
1553
  }, [isDragging]);
1451
- return (0, import_jsx_runtime22.jsxs)("div", { className: "relative w-full max-w-lg mx-auto mt-4 mb-8", children: [(0, import_jsx_runtime22.jsxs)("div", { className: "mb-4 flex items-center gap-2", children: [(0, import_jsx_runtime22.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Position Type:" }), (0, import_jsx_runtime22.jsxs)("select", { value: position.type, onChange: (e) => {
1554
+ return (0, import_jsx_runtime26.jsxs)("div", { className: "relative w-full max-w-lg mx-auto mt-4 mb-8", children: [(0, import_jsx_runtime26.jsxs)("div", { className: "mb-4 flex items-center gap-2", children: [(0, import_jsx_runtime26.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Position Type:" }), (0, import_jsx_runtime26.jsxs)("select", { value: position.type, onChange: (e) => {
1452
1555
  const newType = e.target.value;
1453
1556
  if (newType === "named") {
1454
1557
  setPosition(convertPos({ type: "named", position: "topleft" }));
@@ -1456,12 +1559,12 @@ var init_summary_view6 = __esm({
1456
1559
  setPositionUnit("%");
1457
1560
  setPosition({ ...convertPos(position), type: "percentage" });
1458
1561
  }
1459
- }, className: "node-editor-select-input", children: [(0, import_jsx_runtime22.jsx)("option", { value: "coordinate", children: "Custom Position" }), (0, import_jsx_runtime22.jsx)("option", { value: "named", children: "Preset Position" })] })] }), position.type === "named" ? (0, import_jsx_runtime22.jsx)("div", { className: "mb-4", children: (0, import_jsx_runtime22.jsxs)("select", { value: position.position, onChange: (e) => {
1562
+ }, className: "node-editor-select-input", children: [(0, import_jsx_runtime26.jsx)("option", { value: "coordinate", children: "Custom Position" }), (0, import_jsx_runtime26.jsx)("option", { value: "named", children: "Preset Position" })] })] }), position.type === "named" ? (0, import_jsx_runtime26.jsx)("div", { className: "mb-4", children: (0, import_jsx_runtime26.jsxs)("select", { value: position.position, onChange: (e) => {
1460
1563
  setPosition(convertPos({
1461
1564
  type: "named",
1462
1565
  position: e.target.value
1463
1566
  }));
1464
- }, className: "w-full node-editor-select-input", children: [(0, import_jsx_runtime22.jsx)("option", { value: "topleft", children: "Top Left" }), (0, import_jsx_runtime22.jsx)("option", { value: "topright", children: "Top Right" }), (0, import_jsx_runtime22.jsx)("option", { value: "bottomleft", children: "Bottom Left" }), (0, import_jsx_runtime22.jsx)("option", { value: "bottomright", children: "Bottom Right" }), (0, import_jsx_runtime22.jsx)("option", { value: "center", children: "Centered" })] }) }) : (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [(0, import_jsx_runtime22.jsxs)("div", { className: "mb-4 flex items-center gap-2", children: [(0, import_jsx_runtime22.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Position Unit:" }), (0, import_jsx_runtime22.jsxs)("select", { value: positionUnit, onChange: (e) => {
1567
+ }, className: "w-full node-editor-select-input", children: [(0, import_jsx_runtime26.jsx)("option", { value: "topleft", children: "Top Left" }), (0, import_jsx_runtime26.jsx)("option", { value: "topright", children: "Top Right" }), (0, import_jsx_runtime26.jsx)("option", { value: "bottomleft", children: "Bottom Left" }), (0, import_jsx_runtime26.jsx)("option", { value: "bottomright", children: "Bottom Right" }), (0, import_jsx_runtime26.jsx)("option", { value: "center", children: "Centered" })] }) }) : (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [(0, import_jsx_runtime26.jsxs)("div", { className: "mb-4 flex items-center gap-2", children: [(0, import_jsx_runtime26.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Position Unit:" }), (0, import_jsx_runtime26.jsxs)("select", { value: positionUnit, onChange: (e) => {
1465
1568
  setPositionUnit(e.target.value);
1466
1569
  if (e.target.value === "px" && position.type !== "coordinate" && currentVideo && currentGraphic) {
1467
1570
  const { width: videoWidth, height: videoHeight } = currentVideo;
@@ -1486,18 +1589,18 @@ var init_summary_view6 = __esm({
1486
1589
  yStr: void 0
1487
1590
  });
1488
1591
  }
1489
- }, className: "node-editor-select-input", children: [(0, import_jsx_runtime22.jsx)("option", { value: "px", children: "Pixels" }), (0, import_jsx_runtime22.jsx)("option", { value: "%", children: "Percentage" })] })] }), (0, import_jsx_runtime22.jsxs)("div", { className: "relative bg-gray-200 dark:bg-gray-700 rounded-lg", style: {
1592
+ }, className: "node-editor-select-input", children: [(0, import_jsx_runtime26.jsx)("option", { value: "px", children: "Pixels" }), (0, import_jsx_runtime26.jsx)("option", { value: "%", children: "Percentage" })] })] }), (0, import_jsx_runtime26.jsxs)("div", { className: "relative bg-gray-200 dark:bg-gray-700 rounded-lg", style: {
1490
1593
  width: "100%",
1491
1594
  userSelect: "none",
1492
1595
  aspectRatio: currentVideo ? `${currentVideo.width} / ${currentVideo.height}` : `3 / 2`
1493
- }, ref: previewAreaRef, children: [(0, import_jsx_runtime22.jsxs)("div", { className: "absolute inset-0 flex flex-col items-center justify-center text-gray-500 dark:text-gray-400", children: [(0, import_jsx_runtime22.jsx)("span", { children: currentVideo ? "Video Preview Area" : "Video Dimensions Unknown" }), " ", currentVideo ? (0, import_jsx_runtime22.jsxs)("span", { children: [currentVideo.width, "x", currentVideo.height, "px"] }) : ""] }), (0, import_jsx_runtime22.jsx)("div", { className: `absolute cursor-move ${currentGraphic && !graphicChanged ? "" : "p-2"} rounded-lg bg-primary-500 bg-opacity-50 hover:bg-opacity-75 transition-colors
1596
+ }, ref: previewAreaRef, children: [(0, import_jsx_runtime26.jsxs)("div", { className: "absolute inset-0 flex flex-col items-center justify-center text-gray-500 dark:text-gray-400", children: [(0, import_jsx_runtime26.jsx)("span", { children: currentVideo ? "Video Preview Area" : "Video Dimensions Unknown" }), " ", currentVideo ? (0, import_jsx_runtime26.jsxs)("span", { children: [currentVideo.width, "x", currentVideo.height, "px"] }) : ""] }), (0, import_jsx_runtime26.jsx)("div", { className: `absolute cursor-move ${currentGraphic && !graphicChanged ? "" : "p-2"} rounded-lg bg-primary-500 bg-opacity-50 hover:bg-opacity-75 transition-colors
1494
1597
  ${isDragging ? "bg-opacity-75" : ""}`, style: {
1495
1598
  left: `${position.xPct}%`,
1496
1599
  top: `${position.yPct}%`,
1497
1600
  transform: `translate(-${position.xPct}%, -${position.yPct}%)`,
1498
1601
  aspectRatio: currentGraphic && !graphicChanged ? `${currentGraphic.width} / ${currentGraphic.height}` : `1`,
1499
1602
  width: currentGraphic && currentVideo && !graphicChanged ? currentGraphic.width / currentVideo.width * 100 + "%" : void 0
1500
- }, onMouseDown: handleMouseDown, ref: previewTargetRef, children: (0, import_jsx_runtime22.jsx)("svg", { className: `${currentGraphic && !graphicChanged ? "w-full h-full" : "w-6 h-6"} text-white`, "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: (0, import_jsx_runtime22.jsx)("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 6v12m-6-6h12m-6-6 1.5 1.5M12 6l-1.5 1.5m1.5 10.5L10.5 16.5M12 18l1.5-1.5M6 12l1.5-1.5M7.5 13.5 6 12m12 0-1.5-1.5M16.5 13.5 18 12" }) }) })] }), (0, import_jsx_runtime22.jsxs)("div", { className: "mt-2 text-sm text-gray-600 dark:text-gray-300 text-center", children: ["Position:", " ", position.type === "percentage" ? `${position.xPct.toFixed(1)}%, ${position.yPct.toFixed(1)}%` : `${Math.round(position.x)}px, ${Math.round(position.y)}px`] }), (0, import_jsx_runtime22.jsxs)("div", { className: "mt-2 flex gap-4", children: [(0, import_jsx_runtime22.jsxs)("div", { children: [(0, import_jsx_runtime22.jsxs)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: ["X Position ", positionUnit] }), (0, import_jsx_runtime22.jsx)("input", { type: "number", step: positionUnit === "%" ? "0.1" : "1", value: position.xStr ?? (positionUnit === "%" ? position.xPct.toFixed(1) : Math.round(position.x)), onChange: (e) => {
1603
+ }, onMouseDown: handleMouseDown, ref: previewTargetRef, children: (0, import_jsx_runtime26.jsx)("svg", { className: `${currentGraphic && !graphicChanged ? "w-full h-full" : "w-6 h-6"} text-white`, "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: (0, import_jsx_runtime26.jsx)("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 6v12m-6-6h12m-6-6 1.5 1.5M12 6l-1.5 1.5m1.5 10.5L10.5 16.5M12 18l1.5-1.5M6 12l1.5-1.5M7.5 13.5 6 12m12 0-1.5-1.5M16.5 13.5 18 12" }) }) })] }), (0, import_jsx_runtime26.jsxs)("div", { className: "mt-2 text-sm text-gray-600 dark:text-gray-300 text-center", children: ["Position:", " ", position.type === "percentage" ? `${position.xPct.toFixed(1)}%, ${position.yPct.toFixed(1)}%` : `${Math.round(position.x)}px, ${Math.round(position.y)}px`] }), (0, import_jsx_runtime26.jsxs)("div", { className: "mt-2 flex gap-4", children: [(0, import_jsx_runtime26.jsxs)("div", { children: [(0, import_jsx_runtime26.jsxs)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: ["X Position ", positionUnit] }), (0, import_jsx_runtime26.jsx)("input", { type: "number", step: positionUnit === "%" ? "0.1" : "1", value: position.xStr ?? (positionUnit === "%" ? position.xPct.toFixed(1) : Math.round(position.x)), onChange: (e) => {
1501
1604
  const newX = Number(e.target.value);
1502
1605
  setPosition(convertPos({
1503
1606
  type: positionUnit === "%" ? "percentage" : "coordinate",
@@ -1506,7 +1609,7 @@ var init_summary_view6 = __esm({
1506
1609
  y: position.y,
1507
1610
  yStr: position.yStr
1508
1611
  }));
1509
- }, className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-primary-500 focus:ring-primary-500 sm:text-sm dark:bg-gray-700 dark:border-gray-600" })] }), (0, import_jsx_runtime22.jsxs)("div", { children: [(0, import_jsx_runtime22.jsxs)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: ["Y Position ", positionUnit] }), (0, import_jsx_runtime22.jsx)("input", { type: "number", step: positionUnit === "%" ? "0.1" : "1", value: position.yStr ?? (positionUnit === "%" ? position.yPct.toFixed(1) : Math.round(position.y)), onChange: (e) => {
1612
+ }, className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-primary-500 focus:ring-primary-500 sm:text-sm dark:bg-gray-700 dark:border-gray-600" })] }), (0, import_jsx_runtime26.jsxs)("div", { children: [(0, import_jsx_runtime26.jsxs)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: ["Y Position ", positionUnit] }), (0, import_jsx_runtime26.jsx)("input", { type: "number", step: positionUnit === "%" ? "0.1" : "1", value: position.yStr ?? (positionUnit === "%" ? position.yPct.toFixed(1) : Math.round(position.y)), onChange: (e) => {
1510
1613
  const newY = Number(e.target.value);
1511
1614
  setPosition(convertPos({
1512
1615
  type: positionUnit === "%" ? "percentage" : "coordinate",
@@ -1517,7 +1620,7 @@ var init_summary_view6 = __esm({
1517
1620
  }));
1518
1621
  }, className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-primary-500 focus:ring-primary-500 sm:text-sm dark:bg-gray-700 dark:border-gray-600" })] })] })] })] });
1519
1622
  };
1520
- summary_view_default6 = SummaryView10;
1623
+ summary_view_default8 = SummaryView11;
1521
1624
  }
1522
1625
  });
1523
1626
 
@@ -15840,11 +15943,11 @@ var init_auto = __esm({
15840
15943
  });
15841
15944
 
15842
15945
  // build/util.stats.latency/inline-view.js
15843
- var inline_view_exports9 = {};
15844
- __export(inline_view_exports9, {
15845
- default: () => inline_view_default9
15946
+ var inline_view_exports11 = {};
15947
+ __export(inline_view_exports11, {
15948
+ default: () => inline_view_default11
15846
15949
  });
15847
- function InlineView12({ state, config: _2 }) {
15950
+ function InlineView14({ state, config: _2 }) {
15848
15951
  const chartContainer = (0, import_react21.useRef)(null);
15849
15952
  const [chartControl, setChartControl] = (0, import_react21.useState)(void 0);
15850
15953
  function makeDataSet(key, color2, values) {
@@ -15906,16 +16009,16 @@ function InlineView12({ state, config: _2 }) {
15906
16009
  return;
15907
16010
  chartControl.data = makeData(state);
15908
16011
  }, [state]);
15909
- return (0, import_jsx_runtime23.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime23.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
16012
+ return (0, import_jsx_runtime27.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime27.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
15910
16013
  }
15911
- var import_jsx_runtime23, import_react21, inline_view_default9;
15912
- var init_inline_view9 = __esm({
16014
+ var import_jsx_runtime27, import_react21, inline_view_default11;
16015
+ var init_inline_view11 = __esm({
15913
16016
  "build/util.stats.latency/inline-view.js"() {
15914
16017
  "use strict";
15915
- import_jsx_runtime23 = __toESM(require_jsx_runtime());
16018
+ import_jsx_runtime27 = __toESM(require_jsx_runtime());
15916
16019
  import_react21 = __toESM(require_react());
15917
16020
  init_auto();
15918
- inline_view_default9 = InlineView12;
16021
+ inline_view_default11 = InlineView14;
15919
16022
  }
15920
16023
  });
15921
16024
 
@@ -15925,22 +16028,22 @@ __export(source_node_selection_exports, {
15925
16028
  default: () => source_node_selection_default
15926
16029
  });
15927
16030
  function SourceNodeSelection(props) {
15928
- return (0, import_jsx_runtime24.jsx)("div", { children: (0, import_jsx_runtime24.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime24.jsx)("option", { value: "", children: "---" }, "empty"), Object.values(props.latestDocument.components).map((o, i) => {
16031
+ 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"), Object.values(props.latestDocument.components).map((o, i) => {
15929
16032
  if (o.id == props.id)
15930
- return (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, {});
16033
+ return (0, import_jsx_runtime28.jsx)(import_jsx_runtime28.Fragment, {});
15931
16034
  if (o.info.category === "output")
15932
16035
  return;
15933
- return (0, import_jsx_runtime24.jsx)("option", { value: o.id, children: o.config.displayName }, i);
16036
+ return (0, import_jsx_runtime28.jsx)("option", { value: o.id, children: o.config.displayName }, i);
15934
16037
  })] }) });
15935
16038
  function myOnChange(e) {
15936
16039
  props.onChanged(e.target.value);
15937
16040
  }
15938
16041
  }
15939
- var import_jsx_runtime24, source_node_selection_default;
16042
+ var import_jsx_runtime28, source_node_selection_default;
15940
16043
  var init_source_node_selection = __esm({
15941
16044
  "build/util.stats.latency/source-node-selection.js"() {
15942
16045
  "use strict";
15943
- import_jsx_runtime24 = __toESM(require_jsx_runtime());
16046
+ import_jsx_runtime28 = __toESM(require_jsx_runtime());
15944
16047
  source_node_selection_default = SourceNodeSelection;
15945
16048
  }
15946
16049
  });
@@ -16416,8 +16519,9 @@ var import_config = __toESM(require_config());
16416
16519
  var import_react5 = __toESM(require_react());
16417
16520
  function info_default7(R) {
16418
16521
  const { defineComponent, All, validation: { Z, Hostname } } = R;
16419
- const SummaryView11 = import_react5.default.lazy(async () => Promise.resolve().then(() => (init_summary_view3(), summary_view_exports3)));
16522
+ const SummaryView12 = import_react5.default.lazy(async () => Promise.resolve().then(() => (init_summary_view3(), summary_view_exports3)));
16420
16523
  const FullscreenView2 = import_react5.default.lazy(async () => Promise.resolve().then(() => (init_fullscreen(), fullscreen_exports)));
16524
+ const InlineView15 = import_react5.default.lazy(async () => Promise.resolve().then(() => (init_inline_view3(), inline_view_exports3)));
16421
16525
  const SegmentConfiguration2 = import_react5.default.lazy(async () => {
16422
16526
  const views = await Promise.resolve().then(() => (init_form_views(), form_views_exports));
16423
16527
  return { default: views.SegmentConfiguration };
@@ -16443,7 +16547,7 @@ function info_default7(R) {
16443
16547
  extraValidation: (ctx) => {
16444
16548
  const audioStreams = ctx.subscriptions.filter((s) => s.validatedStreams.select.includes("audio"));
16445
16549
  if (audioStreams.length == 0) {
16446
- ctx.addError("AutoCMAF requires at least one audio stream");
16550
+ ctx.addError("AutoPlaylist requires at least one audio stream");
16447
16551
  }
16448
16552
  const uniqueVideoStreamNodes = ctx.subscriptions.reduce((acc, s) => {
16449
16553
  if (s.validatedStreams.select.includes("video")) {
@@ -16499,8 +16603,9 @@ function info_default7(R) {
16499
16603
  }
16500
16604
  return { ...state };
16501
16605
  },
16502
- summary: SummaryView11,
16503
- fullscreen: FullscreenView2
16606
+ summary: SummaryView12,
16607
+ fullscreen: FullscreenView2,
16608
+ inline: InlineView15
16504
16609
  },
16505
16610
  configForm: {
16506
16611
  global: {
@@ -16652,12 +16757,28 @@ function assertUnreachable3(_) {
16652
16757
  throw new Error("Didn't expect to get here");
16653
16758
  }
16654
16759
 
16760
+ // build/output.autoHls/info.js
16761
+ function info_default8(R) {
16762
+ const autoCmaf = info_default7(R);
16763
+ const { drmProvider: _, ...NoCrypto } = autoCmaf.configForm.form;
16764
+ return {
16765
+ ...autoCmaf,
16766
+ identifier: "output.autoHls",
16767
+ name: "Auto HLS(TS)",
16768
+ description: "This component handles the creation of HLS/TS outputs from multiple video and audio streams.",
16769
+ configForm: {
16770
+ ...autoCmaf.configForm,
16771
+ form: { ...NoCrypto }
16772
+ }
16773
+ };
16774
+ }
16775
+
16655
16776
  // build/output.preview/info.js
16656
16777
  var import_react7 = __toESM(require_react());
16657
16778
  var import_config2 = __toESM(require_config());
16658
- function info_default8(R) {
16779
+ function info_default9(R) {
16659
16780
  const { defineComponent, Av, validation: { JitterBuffer } } = R;
16660
- const InlineView13 = import_react7.default.lazy(async () => Promise.resolve().then(() => (init_inline_view3(), inline_view_exports3)));
16781
+ const InlineView15 = import_react7.default.lazy(async () => Promise.resolve().then(() => (init_inline_view4(), inline_view_exports4)));
16661
16782
  return defineComponent({
16662
16783
  identifier: "output.preview",
16663
16784
  category: "output",
@@ -16708,7 +16829,7 @@ function info_default8(R) {
16708
16829
  }
16709
16830
  return { ...state };
16710
16831
  },
16711
- inline: InlineView13
16832
+ inline: InlineView15
16712
16833
  },
16713
16834
  configForm: {
16714
16835
  global: {
@@ -16733,8 +16854,9 @@ function assertUnreachable4(_) {
16733
16854
 
16734
16855
  // build/output.rtmp/info.js
16735
16856
  var import_react8 = __toESM(require_react());
16736
- function info_default9({ defineComponent, Av, validation: { Z, JitterBuffer } }) {
16737
- const InlineView13 = import_react8.default.lazy(async () => Promise.resolve().then(() => (init_inline_view4(), inline_view_exports4)));
16857
+ function info_default10({ defineComponent, Av, validation: { Z, JitterBuffer } }) {
16858
+ const SummaryView12 = import_react8.default.lazy(async () => Promise.resolve().then(() => (init_summary_view4(), summary_view_exports4)));
16859
+ const InlineView15 = import_react8.default.lazy(async () => Promise.resolve().then(() => (init_inline_view5(), inline_view_exports5)));
16738
16860
  return defineComponent({
16739
16861
  identifier: "output.rtmp",
16740
16862
  category: "output",
@@ -16757,7 +16879,7 @@ function info_default9({ defineComponent, Av, validation: { Z, JitterBuffer } })
16757
16879
  };
16758
16880
  },
16759
16881
  runtime: {
16760
- initialState: () => ({ connected: false, connectRetries: 0 }),
16882
+ initialState: () => ({ connected: false, connectRetries: 0, enabled: true }),
16761
16883
  handleEvent: (ev, state) => {
16762
16884
  const evType = ev.type;
16763
16885
  switch (evType) {
@@ -16768,12 +16890,19 @@ function info_default9({ defineComponent, Av, validation: { Z, JitterBuffer } })
16768
16890
  state.connected = false;
16769
16891
  state.connectRetries++;
16770
16892
  break;
16893
+ case "output-enabled":
16894
+ state.enabled = true;
16895
+ break;
16896
+ case "output-disabled":
16897
+ state.enabled = false;
16898
+ break;
16771
16899
  default:
16772
16900
  assertUnreachable5(evType);
16773
16901
  }
16774
16902
  return { ...state };
16775
16903
  },
16776
- inline: InlineView13
16904
+ inline: InlineView15,
16905
+ summary: SummaryView12
16777
16906
  },
16778
16907
  configForm: {
16779
16908
  form: {
@@ -16796,8 +16925,10 @@ function assertUnreachable5(_) {
16796
16925
  // build/output.srt/info.js
16797
16926
  var import_react9 = __toESM(require_react());
16798
16927
  var import_util = __toESM(require_util());
16799
- function info_default10(registration) {
16928
+ function info_default11(registration) {
16800
16929
  const { defineComponent, All, validation } = registration;
16930
+ const SummaryView12 = import_react9.default.lazy(async () => Promise.resolve().then(() => (init_summary_view5(), summary_view_exports5)));
16931
+ const InlineView15 = import_react9.default.lazy(async () => Promise.resolve().then(() => (init_inline_view6(), inline_view_exports6)));
16801
16932
  const { Port, Hostname, JitterBuffer, SrtPassphrase, SrtStreamId } = validation;
16802
16933
  const SocketConfiguration2 = import_react9.default.lazy(async () => {
16803
16934
  const views = await Promise.resolve().then(() => (init_srt_form_views(), srt_form_views_exports));
@@ -16841,7 +16972,9 @@ function info_default10(registration) {
16841
16972
  (0, import_util.assertUnreachable)(evType);
16842
16973
  }
16843
16974
  return { ...state };
16844
- }
16975
+ },
16976
+ summary: SummaryView12,
16977
+ inline: InlineView15
16845
16978
  },
16846
16979
  configForm: {
16847
16980
  form: {
@@ -16901,7 +17034,7 @@ function info_default10(registration) {
16901
17034
  init_info();
16902
17035
 
16903
17036
  // build/output.udpTs/info.js
16904
- function info_default12({ defineComponent, All, validation: { Port, Hostname, JitterBuffer, Iface, Z } }) {
17037
+ function info_default13({ defineComponent, All, validation: { Port, Hostname, JitterBuffer, Iface, Z } }) {
16905
17038
  return defineComponent({
16906
17039
  identifier: "output.udpTs",
16907
17040
  category: "output",
@@ -16941,10 +17074,10 @@ function info_default12({ defineComponent, All, validation: { Port, Hostname, Ji
16941
17074
  // build/output.whep/info.js
16942
17075
  var import_config3 = __toESM(require_config());
16943
17076
  var import_react12 = __toESM(require_react());
16944
- var SummaryView7 = import_react12.default.lazy(async () => Promise.resolve().then(() => (init_summary_view4(), summary_view_exports4)));
16945
- function info_default13(R) {
17077
+ function info_default14(R) {
16946
17078
  const { defineComponent, Av, validation: { JitterBuffer } } = R;
16947
- const InlineView13 = import_react12.default.lazy(async () => Promise.resolve().then(() => (init_inline_view6(), inline_view_exports6)));
17079
+ const InlineView15 = import_react12.default.lazy(async () => Promise.resolve().then(() => (init_inline_view8(), inline_view_exports8)));
17080
+ const SummaryView12 = import_react12.default.lazy(async () => Promise.resolve().then(() => (init_summary_view6(), summary_view_exports6)));
16948
17081
  return defineComponent({
16949
17082
  identifier: "output.whep",
16950
17083
  category: "output",
@@ -16984,8 +17117,8 @@ function info_default13(R) {
16984
17117
  }
16985
17118
  return { ...state };
16986
17119
  },
16987
- inline: InlineView13,
16988
- summary: SummaryView7
17120
+ inline: InlineView15,
17121
+ summary: SummaryView12
16989
17122
  },
16990
17123
  configForm: {
16991
17124
  global: {
@@ -17009,9 +17142,9 @@ function assertUnreachable8(_) {
17009
17142
  // build/processor.browserOverlay/info.js
17010
17143
  var import_config4 = __toESM(require_config());
17011
17144
  var import_react14 = __toESM(require_react());
17012
- var SummaryView9 = import_react14.default.lazy(async () => Promise.resolve().then(() => (init_summary_view5(), summary_view_exports5)));
17013
- var InlineView10 = import_react14.default.lazy(async () => Promise.resolve().then(() => (init_inline_view7(), inline_view_exports7)));
17014
- function info_default14({ defineComponent, Video, validation: { Z } }) {
17145
+ var SummaryView10 = import_react14.default.lazy(async () => Promise.resolve().then(() => (init_summary_view7(), summary_view_exports7)));
17146
+ var InlineView12 = import_react14.default.lazy(async () => Promise.resolve().then(() => (init_inline_view9(), inline_view_exports9)));
17147
+ function info_default15({ defineComponent, Video, validation: { Z } }) {
17015
17148
  return defineComponent({
17016
17149
  identifier: "processor.browserOverlay",
17017
17150
  category: "processor",
@@ -17037,8 +17170,8 @@ function info_default14({ defineComponent, Video, validation: { Z } }) {
17037
17170
  };
17038
17171
  },
17039
17172
  runtime: {
17040
- summary: SummaryView9,
17041
- inline: InlineView10,
17173
+ summary: SummaryView10,
17174
+ inline: InlineView12,
17042
17175
  initialState: () => ({
17043
17176
  currentUrl: "",
17044
17177
  enabled: true
@@ -17073,9 +17206,9 @@ function assertUnreachable9(_) {
17073
17206
  }
17074
17207
 
17075
17208
  // build/processor.cascadingSwitch/info.js
17076
- function info_default15({ defineComponent, Av, React: React14, common: { Resolutions, FrameRates } }) {
17209
+ function info_default16({ defineComponent, Av, React: React14, common: { Resolutions, FrameRates } }) {
17077
17210
  const SourceSelection = React14.lazy(async () => Promise.resolve().then(() => (init_source_selection(), source_selection_exports)));
17078
- const InlineView13 = React14.lazy(async () => Promise.resolve().then(() => (init_inline_view8(), inline_view_exports8)));
17211
+ const InlineView15 = React14.lazy(async () => Promise.resolve().then(() => (init_inline_view10(), inline_view_exports10)));
17079
17212
  return defineComponent({
17080
17213
  identifier: "processor.cascadingSwitch",
17081
17214
  category: "processor",
@@ -17157,9 +17290,9 @@ function info_default15({ defineComponent, Av, React: React14, common: { Resolut
17157
17290
  assertUnreachable10(evType);
17158
17291
  }
17159
17292
  },
17160
- inline: InlineView13,
17161
- summary: InlineView13,
17162
- fullscreen: InlineView13
17293
+ inline: InlineView15,
17294
+ summary: InlineView15,
17295
+ fullscreen: InlineView15
17163
17296
  },
17164
17297
  configForm: {
17165
17298
  form: {
@@ -17213,7 +17346,7 @@ function assertUnreachable10(_) {
17213
17346
  // build/processor.fixedLadder/info.js
17214
17347
  var import_react17 = __toESM(require_react());
17215
17348
  var import_config5 = __toESM(require_config());
17216
- function info_default16({ defineComponent, Video }) {
17349
+ function info_default17({ defineComponent, Video }) {
17217
17350
  const RungView = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_rung_view(), rung_view_exports)));
17218
17351
  const CodecEditor3 = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_codec_editor(), codec_editor_exports)));
17219
17352
  const CodecView = import_react17.default.lazy(async () => Promise.resolve().then(() => (init_codec_view(), codec_view_exports)));
@@ -17542,9 +17675,9 @@ function assertUnreachable11(_) {
17542
17675
  // build/processor.onscreenGraphic/info.js
17543
17676
  var import_config6 = __toESM(require_config());
17544
17677
  var import_react20 = __toESM(require_react());
17545
- function info_default17({ defineComponent, Video }) {
17678
+ function info_default18({ defineComponent, Video }) {
17546
17679
  const GraphicSelection2 = import_react20.default.lazy(async () => Promise.resolve().then(() => (init_image_selection(), image_selection_exports)));
17547
- const SummaryView11 = import_react20.default.lazy(async () => Promise.resolve().then(() => (init_summary_view6(), summary_view_exports6)));
17680
+ const SummaryView12 = import_react20.default.lazy(async () => Promise.resolve().then(() => (init_summary_view8(), summary_view_exports8)));
17548
17681
  return defineComponent({
17549
17682
  identifier: "processor.onscreenGraphic",
17550
17683
  category: "processor",
@@ -17570,7 +17703,7 @@ function info_default17({ defineComponent, Video }) {
17570
17703
  };
17571
17704
  },
17572
17705
  runtime: {
17573
- summary: SummaryView11,
17706
+ summary: SummaryView12,
17574
17707
  initialState: () => ({}),
17575
17708
  handleEvent: (ev, state) => {
17576
17709
  const evType = ev.type;
@@ -17623,7 +17756,7 @@ function assertUnreachable13(_) {
17623
17756
  }
17624
17757
 
17625
17758
  // build/processor.streamKeyOverride/info.js
17626
- function info_default18({ defineComponent, All, validation: { Z } }) {
17759
+ function info_default19({ defineComponent, All, validation: { Z } }) {
17627
17760
  return defineComponent({
17628
17761
  identifier: "processor.StreamKeyOverride",
17629
17762
  category: "processor",
@@ -17770,9 +17903,9 @@ function info_default18({ defineComponent, All, validation: { Z } }) {
17770
17903
 
17771
17904
  // build/util.stats.latency/info.js
17772
17905
  var import_react22 = __toESM(require_react());
17773
- function info_default19(R) {
17906
+ function info_default20(R) {
17774
17907
  const { defineComponent } = R;
17775
- const InlineView13 = import_react22.default.lazy(async () => Promise.resolve().then(() => (init_inline_view9(), inline_view_exports9)));
17908
+ const InlineView15 = import_react22.default.lazy(async () => Promise.resolve().then(() => (init_inline_view11(), inline_view_exports11)));
17776
17909
  const SourceNodeSelection2 = import_react22.default.lazy(async () => Promise.resolve().then(() => (init_source_node_selection(), source_node_selection_exports)));
17777
17910
  return defineComponent({
17778
17911
  identifier: "util.stats.latency",
@@ -17805,7 +17938,7 @@ function info_default19(R) {
17805
17938
  }
17806
17939
  return { ...state };
17807
17940
  },
17808
- inline: InlineView13
17941
+ inline: InlineView15
17809
17942
  },
17810
17943
  configForm: {
17811
17944
  form: {
@@ -17893,6 +18026,7 @@ AllComponents.push((r) => info_default16(r));
17893
18026
  AllComponents.push((r) => info_default17(r));
17894
18027
  AllComponents.push((r) => info_default18(r));
17895
18028
  AllComponents.push((r) => info_default19(r));
18029
+ AllComponents.push((r) => info_default20(r));
17896
18030
  export {
17897
18031
  getNodeInfo as default
17898
18032
  };