@norskvideo/norsk-studio-built-ins 1.12.0-2025-02-12-84fa1941 → 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 (42) hide show
  1. package/client/info.js +306 -189
  2. package/client/style.css +10 -0
  3. package/lib/output.autoCmaf/info.js +3 -1
  4. package/lib/output.autoCmaf/info.js.map +1 -1
  5. package/lib/output.autoCmaf/inline-view.d.ts +6 -0
  6. package/lib/output.autoCmaf/inline-view.js +8 -0
  7. package/lib/output.autoCmaf/inline-view.js.map +1 -0
  8. package/lib/output.rtmp/info.js +9 -1
  9. package/lib/output.rtmp/info.js.map +1 -1
  10. package/lib/output.rtmp/inline-view.js +3 -0
  11. package/lib/output.rtmp/inline-view.js.map +1 -1
  12. package/lib/output.rtmp/runtime.d.ts +30 -5
  13. package/lib/output.rtmp/runtime.js +169 -34
  14. package/lib/output.rtmp/runtime.js.map +1 -1
  15. package/lib/output.rtmp/summary-view.d.ts +4 -0
  16. package/lib/output.rtmp/summary-view.js +24 -0
  17. package/lib/output.rtmp/summary-view.js.map +1 -0
  18. package/lib/output.rtmp/types.d.ts +101 -0
  19. package/lib/output.rtmp/types.js +3 -0
  20. package/lib/output.rtmp/types.js.map +1 -0
  21. package/lib/output.rtmp/types.yaml +30 -0
  22. package/lib/output.srt/info.js +4 -0
  23. package/lib/output.srt/info.js.map +1 -1
  24. package/lib/output.srt/inline-view.d.ts +6 -0
  25. package/lib/output.srt/inline-view.js +8 -0
  26. package/lib/output.srt/inline-view.js.map +1 -0
  27. package/lib/output.srt/runtime.d.ts +12 -6
  28. package/lib/output.srt/runtime.js +75 -36
  29. package/lib/output.srt/runtime.js.map +1 -1
  30. package/lib/output.srt/summary-view.d.ts +4 -0
  31. package/lib/output.srt/summary-view.js +24 -0
  32. package/lib/output.srt/summary-view.js.map +1 -0
  33. package/lib/output.whep/info.js +1 -1
  34. package/lib/output.whep/info.js.map +1 -1
  35. package/lib/output.whep/runtime.d.ts +1 -4
  36. package/lib/output.whep/runtime.js +0 -1
  37. package/lib/output.whep/runtime.js.map +1 -1
  38. package/lib/test/rtmp-output.js +105 -1
  39. package/lib/test/rtmp-output.js.map +1 -1
  40. package/lib/test/srt-output.js +93 -4
  41. package/lib/test/srt-output.js.map +1 -1
  42. 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
912
  function info_default12({ defineComponent, All }) {
810
- const InlineView13 = import_react10.default.lazy(async () => Promise.resolve().then(() => (init_inline_view5(), inline_view_exports5)));
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_default12({ 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 };
@@ -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: {
@@ -16673,7 +16778,7 @@ var import_react7 = __toESM(require_react());
16673
16778
  var import_config2 = __toESM(require_config());
16674
16779
  function info_default9(R) {
16675
16780
  const { defineComponent, Av, validation: { JitterBuffer } } = R;
16676
- 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)));
16677
16782
  return defineComponent({
16678
16783
  identifier: "output.preview",
16679
16784
  category: "output",
@@ -16724,7 +16829,7 @@ function info_default9(R) {
16724
16829
  }
16725
16830
  return { ...state };
16726
16831
  },
16727
- inline: InlineView13
16832
+ inline: InlineView15
16728
16833
  },
16729
16834
  configForm: {
16730
16835
  global: {
@@ -16750,7 +16855,8 @@ function assertUnreachable4(_) {
16750
16855
  // build/output.rtmp/info.js
16751
16856
  var import_react8 = __toESM(require_react());
16752
16857
  function info_default10({ defineComponent, Av, validation: { Z, JitterBuffer } }) {
16753
- const InlineView13 = import_react8.default.lazy(async () => Promise.resolve().then(() => (init_inline_view4(), inline_view_exports4)));
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)));
16754
16860
  return defineComponent({
16755
16861
  identifier: "output.rtmp",
16756
16862
  category: "output",
@@ -16773,7 +16879,7 @@ function info_default10({ defineComponent, Av, validation: { Z, JitterBuffer } }
16773
16879
  };
16774
16880
  },
16775
16881
  runtime: {
16776
- initialState: () => ({ connected: false, connectRetries: 0 }),
16882
+ initialState: () => ({ connected: false, connectRetries: 0, enabled: true }),
16777
16883
  handleEvent: (ev, state) => {
16778
16884
  const evType = ev.type;
16779
16885
  switch (evType) {
@@ -16784,12 +16890,19 @@ function info_default10({ defineComponent, Av, validation: { Z, JitterBuffer } }
16784
16890
  state.connected = false;
16785
16891
  state.connectRetries++;
16786
16892
  break;
16893
+ case "output-enabled":
16894
+ state.enabled = true;
16895
+ break;
16896
+ case "output-disabled":
16897
+ state.enabled = false;
16898
+ break;
16787
16899
  default:
16788
16900
  assertUnreachable5(evType);
16789
16901
  }
16790
16902
  return { ...state };
16791
16903
  },
16792
- inline: InlineView13
16904
+ inline: InlineView15,
16905
+ summary: SummaryView12
16793
16906
  },
16794
16907
  configForm: {
16795
16908
  form: {
@@ -16814,6 +16927,8 @@ var import_react9 = __toESM(require_react());
16814
16927
  var import_util = __toESM(require_util());
16815
16928
  function info_default11(registration) {
16816
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)));
16817
16932
  const { Port, Hostname, JitterBuffer, SrtPassphrase, SrtStreamId } = validation;
16818
16933
  const SocketConfiguration2 = import_react9.default.lazy(async () => {
16819
16934
  const views = await Promise.resolve().then(() => (init_srt_form_views(), srt_form_views_exports));
@@ -16857,7 +16972,9 @@ function info_default11(registration) {
16857
16972
  (0, import_util.assertUnreachable)(evType);
16858
16973
  }
16859
16974
  return { ...state };
16860
- }
16975
+ },
16976
+ summary: SummaryView12,
16977
+ inline: InlineView15
16861
16978
  },
16862
16979
  configForm: {
16863
16980
  form: {
@@ -16957,10 +17074,10 @@ function info_default13({ defineComponent, All, validation: { Port, Hostname, Ji
16957
17074
  // build/output.whep/info.js
16958
17075
  var import_config3 = __toESM(require_config());
16959
17076
  var import_react12 = __toESM(require_react());
16960
- var SummaryView7 = import_react12.default.lazy(async () => Promise.resolve().then(() => (init_summary_view4(), summary_view_exports4)));
16961
17077
  function info_default14(R) {
16962
17078
  const { defineComponent, Av, validation: { JitterBuffer } } = R;
16963
- 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)));
16964
17081
  return defineComponent({
16965
17082
  identifier: "output.whep",
16966
17083
  category: "output",
@@ -17000,8 +17117,8 @@ function info_default14(R) {
17000
17117
  }
17001
17118
  return { ...state };
17002
17119
  },
17003
- inline: InlineView13,
17004
- summary: SummaryView7
17120
+ inline: InlineView15,
17121
+ summary: SummaryView12
17005
17122
  },
17006
17123
  configForm: {
17007
17124
  global: {
@@ -17025,8 +17142,8 @@ function assertUnreachable8(_) {
17025
17142
  // build/processor.browserOverlay/info.js
17026
17143
  var import_config4 = __toESM(require_config());
17027
17144
  var import_react14 = __toESM(require_react());
17028
- var SummaryView9 = import_react14.default.lazy(async () => Promise.resolve().then(() => (init_summary_view5(), summary_view_exports5)));
17029
- var InlineView10 = import_react14.default.lazy(async () => Promise.resolve().then(() => (init_inline_view7(), inline_view_exports7)));
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)));
17030
17147
  function info_default15({ defineComponent, Video, validation: { Z } }) {
17031
17148
  return defineComponent({
17032
17149
  identifier: "processor.browserOverlay",
@@ -17053,8 +17170,8 @@ function info_default15({ defineComponent, Video, validation: { Z } }) {
17053
17170
  };
17054
17171
  },
17055
17172
  runtime: {
17056
- summary: SummaryView9,
17057
- inline: InlineView10,
17173
+ summary: SummaryView10,
17174
+ inline: InlineView12,
17058
17175
  initialState: () => ({
17059
17176
  currentUrl: "",
17060
17177
  enabled: true
@@ -17091,7 +17208,7 @@ function assertUnreachable9(_) {
17091
17208
  // build/processor.cascadingSwitch/info.js
17092
17209
  function info_default16({ defineComponent, Av, React: React14, common: { Resolutions, FrameRates } }) {
17093
17210
  const SourceSelection = React14.lazy(async () => Promise.resolve().then(() => (init_source_selection(), source_selection_exports)));
17094
- 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)));
17095
17212
  return defineComponent({
17096
17213
  identifier: "processor.cascadingSwitch",
17097
17214
  category: "processor",
@@ -17173,9 +17290,9 @@ function info_default16({ defineComponent, Av, React: React14, common: { Resolut
17173
17290
  assertUnreachable10(evType);
17174
17291
  }
17175
17292
  },
17176
- inline: InlineView13,
17177
- summary: InlineView13,
17178
- fullscreen: InlineView13
17293
+ inline: InlineView15,
17294
+ summary: InlineView15,
17295
+ fullscreen: InlineView15
17179
17296
  },
17180
17297
  configForm: {
17181
17298
  form: {
@@ -17560,7 +17677,7 @@ var import_config6 = __toESM(require_config());
17560
17677
  var import_react20 = __toESM(require_react());
17561
17678
  function info_default18({ defineComponent, Video }) {
17562
17679
  const GraphicSelection2 = import_react20.default.lazy(async () => Promise.resolve().then(() => (init_image_selection(), image_selection_exports)));
17563
- 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)));
17564
17681
  return defineComponent({
17565
17682
  identifier: "processor.onscreenGraphic",
17566
17683
  category: "processor",
@@ -17586,7 +17703,7 @@ function info_default18({ defineComponent, Video }) {
17586
17703
  };
17587
17704
  },
17588
17705
  runtime: {
17589
- summary: SummaryView11,
17706
+ summary: SummaryView12,
17590
17707
  initialState: () => ({}),
17591
17708
  handleEvent: (ev, state) => {
17592
17709
  const evType = ev.type;
@@ -17788,7 +17905,7 @@ function info_default19({ defineComponent, All, validation: { Z } }) {
17788
17905
  var import_react22 = __toESM(require_react());
17789
17906
  function info_default20(R) {
17790
17907
  const { defineComponent } = R;
17791
- 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)));
17792
17909
  const SourceNodeSelection2 = import_react22.default.lazy(async () => Promise.resolve().then(() => (init_source_node_selection(), source_node_selection_exports)));
17793
17910
  return defineComponent({
17794
17911
  identifier: "util.stats.latency",
@@ -17821,7 +17938,7 @@ function info_default20(R) {
17821
17938
  }
17822
17939
  return { ...state };
17823
17940
  },
17824
- inline: InlineView13
17941
+ inline: InlineView15
17825
17942
  },
17826
17943
  configForm: {
17827
17944
  form: {