hotwire-native-dev-tools 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- const E = () => `
1
+ const T = () => `
2
2
  :host {
3
3
  all: initial;
4
4
  font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important;
@@ -729,7 +729,7 @@ const E = () => `
729
729
  width: 80%;
730
730
  }
731
731
  `;
732
- class T {
732
+ class B {
733
733
  constructor() {
734
734
  this.printedWarnings = [];
735
735
  }
@@ -759,34 +759,34 @@ class T {
759
759
  return Array.from(document.querySelectorAll("turbo-frame")).map((t) => t.id);
760
760
  }
761
761
  }
762
- const a = (i) => JSON.parse(localStorage.getItem("hotwire-native-dev-tools") || "{}")[i], l = (i, t) => {
762
+ const c = (i) => JSON.parse(localStorage.getItem("hotwire-native-dev-tools") || "{}")[i], l = (i, t) => {
763
763
  let e = JSON.parse(localStorage.getItem("hotwire-native-dev-tools") || "{}");
764
764
  e[i] = t, localStorage.setItem("hotwire-native-dev-tools", JSON.stringify(e));
765
- }, B = () => {
765
+ }, $ = () => {
766
766
  localStorage.removeItem("hotwire-native-dev-tools");
767
- }, u = () => a("consoleFilterLevels") || {
767
+ }, u = () => c("consoleFilterLevels") || {
768
768
  warn: !0,
769
769
  error: !0,
770
770
  debug: !0,
771
771
  info: !0,
772
772
  log: !0
773
- }, $ = (i, t) => {
773
+ }, I = (i, t) => {
774
774
  const e = u();
775
775
  return e[i] = t, l("consoleFilterLevels", e), e;
776
- }, m = () => a("consoleLogBlacklist") || [], I = (i) => {
776
+ }, m = () => c("consoleLogBlacklist") || [], F = (i) => {
777
777
  i = i.trim();
778
- const t = a("consoleLogBlacklist") || [];
778
+ const t = c("consoleLogBlacklist") || [];
779
779
  return t.includes(i) || (t.push(i), l("consoleLogBlacklist", t)), t;
780
- }, F = (i) => {
781
- let t = a("consoleLogBlacklist") || [];
780
+ }, q = (i) => {
781
+ let t = c("consoleLogBlacklist") || [];
782
782
  return t = t.filter((e) => e !== i), l("consoleLogBlacklist", t), t;
783
- }, h = (i, t) => {
783
+ }, g = (i, t) => {
784
784
  let e = null;
785
785
  return (...o) => {
786
786
  const s = () => i.apply(void 0, o);
787
787
  clearTimeout(e), e = setTimeout(s, t);
788
788
  };
789
- }, { userAgent: S } = window.navigator, k = /iOS/.test(S), q = /Android/.test(S), f = () => k ? "ios" : q ? "android" : "unknown", A = () => {
789
+ }, { userAgent: k } = window.navigator, L = /iOS/.test(k), M = /Android/.test(k), f = () => L ? "ios" : M ? "android" : "unknown", A = () => {
790
790
  switch (f()) {
791
791
  case "android":
792
792
  return "Android";
@@ -795,10 +795,13 @@ const a = (i) => JSON.parse(localStorage.getItem("hotwire-native-dev-tools") ||
795
795
  default:
796
796
  return "<unknown>";
797
797
  }
798
- }, M = (i) => document.querySelector(`meta[name="${i}"]`), v = (i) => {
799
- const t = M(i);
798
+ }, H = (i) => document.querySelector(`meta[name="${i}"]`), v = (i) => {
799
+ const t = H(i);
800
800
  return t && t.content;
801
- }, H = `
801
+ }, y = (i) => {
802
+ const t = Array.from(i.attributes).map((e) => `${e.name}="${e.value}"`).join(" ");
803
+ return `&lt;${i.tagName.toLowerCase()}${t ? " " + t : ""}&gt;&lt;/${i.tagName.toLowerCase()}&gt;`;
804
+ }, z = `
802
805
  <svg width="100%" height="100%" viewBox="0 0 294 320">
803
806
  <g transform="matrix(1,0,0,1,-28.38,-15.268)">
804
807
  <g transform="matrix(1,0,0,1,-462.157,-144.417)">
@@ -806,12 +809,12 @@ const a = (i) => JSON.parse(localStorage.getItem("hotwire-native-dev-tools") ||
806
809
  </g>
807
810
  </g>
808
811
  </svg>
809
- `, z = `
812
+ `, N = `
810
813
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
811
814
  <!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
812
815
  <path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM385 215c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-71-71L280 392c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-214.1-71 71c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 103c9.4-9.4 24.6-9.4 33.9 0L385 215z"/>
813
816
  </svg>
814
- `, N = `
817
+ `, P = `
815
818
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
816
819
  <!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
817
820
  <path d="M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM127 297c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l71 71L232 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 214.1 71-71c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 409c-9.4 9.4-24.6 9.4-33.9 0L127 297z"/>
@@ -826,47 +829,47 @@ const a = (i) => JSON.parse(localStorage.getItem("hotwire-native-dev-tools") ||
826
829
  <!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
827
830
  <path d="M135.2 17.7L128 32 32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0-7.2-14.3C307.4 6.8 296.3 0 284.2 0L163.8 0c-12.1 0-23.2 6.8-28.6 17.7zM416 128L32 128 53.2 467c1.6 25.3 22.6 45 47.9 45l245.8 0c25.3 0 46.3-19.7 47.9-45L416 128z"/>
828
831
  </svg>
829
- `, P = `
832
+ `, D = `
830
833
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
831
834
  <!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
832
835
  <path d="M142.9 142.9c-17.5 17.5-30.1 38-37.8 59.8c-5.9 16.7-24.2 25.4-40.8 19.5s-25.4-24.2-19.5-40.8C55.6 150.7 73.2 122 97.6 97.6c87.2-87.2 228.3-87.5 315.8-1L455 55c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 128c0 13.3-10.7 24-24 24l-8.4 0c0 0 0 0 0 0L344 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l41.1-41.1c-62.6-61.5-163.1-61.2-225.3 1zM16 312c0-13.3 10.7-24 24-24l7.6 0 .7 0L168 288c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-41.1 41.1c62.6 61.5 163.1 61.2 225.3-1c17.5-17.5 30.1-38 37.8-59.8c5.9-16.7 24.2-25.4 40.8-19.5s25.4 24.2 19.5 40.8c-10.8 30.6-28.4 59.3-52.9 83.8c-87.2 87.2-228.3 87.5-315.8 1L57 457c-6.9 6.9-17.2 8.9-26.2 5.2S16 449.7 16 440l0-119.6 0-.7 0-7.6z"/>
833
836
  </svg>
834
- `, D = `
837
+ `, O = `
835
838
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
836
839
  <!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
837
840
  <path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/>
838
841
  </svg>
839
- `, O = `
842
+ `, j = `
840
843
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
841
844
  <!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
842
845
  <path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/>
843
846
  </svg>
844
- `, j = `
847
+ `, R = `
845
848
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
846
849
  <!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
847
850
  <path d="M3.9 54.9C10.5 40.9 24.5 32 40 32l432 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9 320 448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z"/>
848
851
  </svg>
849
- `, y = `
852
+ `, S = `
850
853
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 512">
851
854
  <!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
852
855
  <path d="M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z"/>
853
856
  </svg>
854
- `, R = `
857
+ `, V = `
855
858
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
856
859
  <!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
857
860
  <path d="M431.2 476.5L163.5 208.8C141.1 240.2 128 278.6 128 320C128 426 214 512 320 512C361.5 512 399.9 498.9 431.2 476.5zM476.5 431.2C498.9 399.8 512 361.4 512 320C512 214 426 128 320 128C278.5 128 240.1 141.1 208.8 163.5L476.5 431.2zM64 320C64 178.6 178.6 64 320 64C461.4 64 576 178.6 576 320C576 461.4 461.4 576 320 576C178.6 576 64 461.4 64 320z"/>
858
861
  </svg>
859
862
  `;
860
- class V {
863
+ class Y {
861
864
  constructor(t) {
862
865
  this.devTools = t, this.bubbleSize = 4.75 * 16 + 0.3 * 16, this.minVisible = this.bubbleSize * 0.5, this.currentlyDragging = !1;
863
866
  }
864
- render = h(() => {
867
+ render = g(() => {
865
868
  this.setPosition(), this.createDragItem(), this.setTranslate(this.initialX, this.initialY, this.dragItem), this.addEventListeners();
866
869
  }, 50);
867
870
  setPosition() {
868
871
  this.settingKey = window.innerWidth < window.innerHeight ? "bubblePosPortrait" : "bubblePosLandscape";
869
- const t = { x: window.innerWidth - 100, y: window.innerHeight - 100 }, { x: e, y: o } = a(this.settingKey) || t;
872
+ const t = { x: window.innerWidth - 100, y: window.innerHeight - 100 }, { x: e, y: o } = c(this.settingKey) || t;
870
873
  this.currentX = this.initialX = this.xOffset = e, this.currentY = this.initialY = this.yOffset = o;
871
874
  }
872
875
  createDragItem() {
@@ -875,7 +878,7 @@ class V {
875
878
  this.dragItem = t;
876
879
  return;
877
880
  }
878
- this.dragItem = document.createElement("div"), this.dragItem.id = "floating-bubble", this.dragItem.innerHTML = H, this.devTools.shadowRoot.appendChild(this.dragItem);
881
+ this.dragItem = document.createElement("div"), this.dragItem.id = "floating-bubble", this.dragItem.innerHTML = z, this.devTools.shadowRoot.appendChild(this.dragItem);
879
882
  }
880
883
  addEventListeners() {
881
884
  this.dragItem.hasEventListeners || (this.dragItem.addEventListener("click", this.click.bind(this), { passive: !0 }), this.dragItem.addEventListener("touchstart", this.dragStart.bind(this), { passive: !0 }), this.dragItem.addEventListener("touchend", this.dragEnd.bind(this), { passive: !0 }), this.dragItem.addEventListener("touchmove", this.drag.bind(this), { passive: !0 }), this.dragItem.hasEventListeners = !0);
@@ -883,8 +886,8 @@ class V {
883
886
  click(t) {
884
887
  this.clickCallback && this.clickCallback(t);
885
888
  }
886
- animateErrorBorder = h(() => {
887
- if (!this.dragItem || a("errorAnimationEnabled") === !1) return;
889
+ animateErrorBorder = g(() => {
890
+ if (!this.dragItem || c("errorAnimationEnabled") === !1) return;
888
891
  let t = this.dragItem.querySelector(".error-border"), e = this.dragItem.querySelector(".error-border circle");
889
892
  t && t.remove();
890
893
  const o = document.createElement("div");
@@ -926,9 +929,9 @@ class V {
926
929
  o.style.transform = `translate3d(${t}px, ${e}px, 0)`;
927
930
  }
928
931
  }
929
- class Y {
932
+ class U {
930
933
  constructor(t) {
931
- this.devTools = t, this.state = t.state.state, this.sheetHeight = parseInt(a("bottomSheetHeight")) || 55;
934
+ this.devTools = t, this.state = t.state.state, this.sheetHeight = parseInt(c("bottomSheetHeight")) || 55;
932
935
  }
933
936
  render() {
934
937
  this.createBottomSheet(), this.sheetContent = this.bottomSheet.querySelector(".content"), this.sheetOverlay = this.bottomSheet.querySelector(".sheet-overlay"), this.addEventListeners();
@@ -936,7 +939,7 @@ class Y {
936
939
  // Called when the in-memory state changes,
937
940
  // such as when a new console or bridge log is captured.
938
941
  update(t) {
939
- this.state = t, this.checkNativeFeatures(), this.renderConsoleLogs(), this.renderBridgeComponents(), this.renderBridgeLogs(), this.renderEvents(), this.renderNativeStack(), this.scrollToLatestLog(this.state.activeTab), this.state.shouldScrollToLatestLog = !0;
942
+ this.state = t, this.checkNativeFeatures(), this.renderConsoleLogs(), this.renderBridgeComponents(), this.renderBridgeLogs(), this.renderEvents(), this.renderNativeStack(), this.renderInfos(), this.scrollToLatestLog(this.state.activeTab), this.state.shouldScrollToLatestLog = !0;
940
943
  }
941
944
  // Called when another native tab of the mobile app
942
945
  // updates devtools-related local storage.
@@ -948,7 +951,7 @@ class Y {
948
951
  { key: "errorAnimationEnabled", setter: (o) => this.updateErrorAnimation(o) },
949
952
  { key: "autoOpen", setter: (o) => this.updateAutoOpen(o) }
950
953
  ].forEach(({ key: o, setter: s }) => {
951
- const n = a(o);
954
+ const n = c(o);
952
955
  n !== void 0 && s(n);
953
956
  });
954
957
  const e = u();
@@ -962,7 +965,7 @@ class Y {
962
965
  }
963
966
  const e = this.state.activeTab, o = u(), s = this.state.consoleSearch;
964
967
  this.bottomSheet = document.createElement("div"), this.bottomSheet.classList.add("bottom-sheet"), this.bottomSheet.innerHTML = `
965
- <div class="sheet-overlay ${a("bottomSheetPinned") === !0 ? "" : "active"}"></div>
968
+ <div class="sheet-overlay ${c("bottomSheetPinned") === !0 ? "" : "active"}"></div>
966
969
  <div class="content">
967
970
  <div class="top-part">
968
971
  <div class="tablist">
@@ -971,7 +974,7 @@ class Y {
971
974
  <button class="tablink ${e === "tab-event-logs" ? "active" : ""}" data-tab-id="tab-event-logs">Events</button>
972
975
  <button class="tablink ${e === "tab-native-stack" ? "active" : ""} d-none" data-tab-id="tab-native-stack">Stack</button>
973
976
  <div class="tablink-settings dropdown d-flex">
974
- <button class="dropdown-trigger tablink-dropdown">${y}</button>
977
+ <button class="dropdown-trigger tablink-dropdown">${S}</button>
975
978
  <div class="dropdown-content settings-dropdown">
976
979
  <button class="dropdown-btn-full-width btn-switch-to-single-tab-sheet" data-tab-id="single-tab-settings">Settings</button>
977
980
  <button class="dropdown-btn-full-width btn-switch-to-single-tab-sheet" data-tab-id="single-tab-info">Info</button>
@@ -987,9 +990,9 @@ class Y {
987
990
  </div>
988
991
  <div class="tab-action-bar d-flex flex-column tab-console-logs ${e === "tab-console-logs" ? "active" : ""}">
989
992
  <div class="d-flex">
990
- <button class="btn-icon btn-search-console">${O}</button>
993
+ <button class="btn-icon btn-search-console">${j}</button>
991
994
  <div class="dropdown">
992
- <button class="dropdown-trigger btn-icon">${j}</button>
995
+ <button class="dropdown-trigger btn-icon">${R}</button>
993
996
  <div class="dropdown-content console-filter-levels">
994
997
  <label><input type="checkbox" ${o.warn ? "checked" : ""} data-console-filter="warn" /> Warnings</label>
995
998
  <label><input type="checkbox" ${o.error ? "checked" : ""} data-console-filter="error" /> Errors</label>
@@ -999,7 +1002,7 @@ class Y {
999
1002
  </div>
1000
1003
  </div>
1001
1004
  <div class="dropdown dropdown--scrollable">
1002
- <button class="dropdown-trigger btn-icon">${R}</button>
1005
+ <button class="dropdown-trigger btn-icon">${V}</button>
1003
1006
  <div class="dropdown-content console-log-blacklist">
1004
1007
  </div>
1005
1008
  </div>
@@ -1014,7 +1017,7 @@ class Y {
1014
1017
  <button class="btn-icon btn-clear-tab btn-clear-events">${p}</button>
1015
1018
  </div>
1016
1019
  <div class="tab-action-bar tab-native-stack ${e === "tab-native-stack" ? "active" : ""}">
1017
- <button class="btn-icon btn-reload-tab btn-reload-stack">${P}</button>
1020
+ <button class="btn-icon btn-reload-tab btn-reload-stack">${D}</button>
1018
1021
  </div>
1019
1022
  </div>
1020
1023
  </div>
@@ -1028,7 +1031,7 @@ class Y {
1028
1031
  <div id="bridge-components-collapse" class="collapse-target">
1029
1032
  <div class="d-flex justify-content-between border-bottom">
1030
1033
  <div class="tab-content-bridge-components flex-grow-1"></div>
1031
- <button class="btn-icon btn-help btn-switch-to-single-tab-sheet mt-1" data-tab-id="single-tab-bridge-component-help">${D}</button>
1034
+ <button class="btn-icon btn-help btn-switch-to-single-tab-sheet mt-1" data-tab-id="single-tab-bridge-component-help">${O}</button>
1032
1035
  </div>
1033
1036
  </div>
1034
1037
 
@@ -1082,28 +1085,28 @@ class Y {
1082
1085
  </div>
1083
1086
  <div class="mb-4">
1084
1087
  <label for="font-size-setting"> Font Size</label>
1085
- <input type="range" id="font-size-setting" class="w-100" min="8" max="24" value="${a("fontSize") || 16}" step="1" list="font-size-setting-markers" />
1088
+ <input type="range" id="font-size-setting" class="w-100" min="8" max="24" value="${c("fontSize") || 16}" step="1" list="font-size-setting-markers" />
1086
1089
  <datalist id="font-size-setting-markers">
1087
1090
  <option value="16"></option>
1088
1091
  </datalist>
1089
1092
  </div>
1090
1093
  <div class="mb-3">
1091
1094
  <label class="toggle">
1092
- <input class="toggle-checkbox" type="checkbox" id="console-error-animation-setting" ${a("errorAnimationEnabled") !== !1 ? "checked" : ""} />
1095
+ <input class="toggle-checkbox" type="checkbox" id="console-error-animation-setting" ${c("errorAnimationEnabled") !== !1 ? "checked" : ""} />
1093
1096
  <div class="toggle-switch"></div>
1094
1097
  <span class="toggle-label">Console Error Animation</span>
1095
1098
  </label>
1096
1099
  </div>
1097
1100
  <div class="mb-3">
1098
1101
  <label class="toggle">
1099
- <input class="toggle-checkbox" type="checkbox" id="auto-open-setting" ${a("autoOpen") === !0 ? "checked" : ""} />
1102
+ <input class="toggle-checkbox" type="checkbox" id="auto-open-setting" ${c("autoOpen") === !0 ? "checked" : ""} />
1100
1103
  <div class="toggle-switch"></div>
1101
1104
  <span class="toggle-label">Auto Open</span>
1102
1105
  </label>
1103
1106
  </div>
1104
1107
  <div class="mb-3">
1105
1108
  <label class="toggle">
1106
- <input class="toggle-checkbox" type="checkbox" id="scroll-to-latest-log-setting" ${a("scrollToLatestLog") === !0 ? "checked" : ""} />
1109
+ <input class="toggle-checkbox" type="checkbox" id="scroll-to-latest-log-setting" ${c("scrollToLatestLog") === !0 ? "checked" : ""} />
1107
1110
  <div class="toggle-switch"></div>
1108
1111
  <span class="toggle-label">Automatically Scroll to New Logs</span>
1109
1112
  </label>
@@ -1127,36 +1130,6 @@ class Y {
1127
1130
  </div>
1128
1131
 
1129
1132
  <div id="single-tab-info" class="single-tab-content outer-tab-content">
1130
- <div class="inner-tab-content">
1131
- <div class="d-flex align-items-center mb-3">
1132
- <button class="btn-icon btn-close-single-mode">${b}</button>
1133
- <h3 class="ms-1">Info</h3>
1134
- </div>
1135
- <div class="info-card">
1136
- <div class="info-card-title">Current URL</div>
1137
- <div class="current-url">${this.currentUrl}</div>
1138
- </div>
1139
- <div class="info-card">
1140
- <div class="info-card-title">User Agent</div>
1141
- <div class="user-agent">${navigator.userAgent}</div>
1142
- </div>
1143
- <div class="info-card">
1144
- <div class="info-card-title"><pre class="m-0">turbo-cache-control:</pre> <span>${v("turbo-cache-control") || "-"}</span></div>
1145
- <div class="info-card-hint"><strong>no-cache:</strong> always fetched from the network, even on restore</div>
1146
- <div class="info-card-hint"><strong>no-preview:</strong> skipped in preview, used only on restore</div>
1147
- <div class="info-card-hint"><strong>unset:</strong> shows cached preview if the cache is valid</div>
1148
- </div>
1149
- <div class="info-card">
1150
- <div class="info-card-title"><pre class="m-0">turbo-refresh-method:</pre> <span>${v("turbo-refresh-method") || "-"}</span></div>
1151
- <div class="info-card-hint"><strong>replace (default):</strong> replaces the entire &lt;body&gt; on revisit</div>
1152
- <div class="info-card-hint"><strong>morph:</strong> updates only changed DOM elements, preserving state</div>
1153
- </div>
1154
- <div class="info-card">
1155
- <div class="info-card-title"><pre class="m-0">turbo-visit-control:</pre> <span>${v("turbo-visit-control") || "-"}</span></div>
1156
- <div class="info-card-hint"><strong>reload:</strong> forces a full page reload</div>
1157
- <div class="info-card-hint"><strong>unset:</strong> allows Turbo to handle the visit normally</div>
1158
- </div>
1159
- </div>
1160
1133
  </div>
1161
1134
  </div>
1162
1135
  </div>
@@ -1195,26 +1168,61 @@ class Y {
1195
1168
  const t = this.bottomSheet.querySelector(".tab-content-native-stack");
1196
1169
  t.innerHTML = '<div class="native-stack-wrapper">' + (this.state.nativeStack.length ? this.state.nativeStack.map((e) => this.nativeViewStackHTML(e)).join("") : '<div class="tab-empty-content"><span>No native stack captured yet</span></div>') + "</div>";
1197
1170
  }
1198
- renderPathConfigurationCheck = h((t) => {
1199
- const e = k ? t : `${window.location.origin}${t}`;
1171
+ renderInfos() {
1172
+ const t = `
1173
+ <div class="inner-tab-content">
1174
+ <div class="d-flex align-items-center mb-3">
1175
+ <button class="btn-icon btn-close-single-mode">${b}</button>
1176
+ <h3 class="ms-1">Info</h3>
1177
+ </div>
1178
+ <div class="info-card">
1179
+ <div class="info-card-title">Current URL</div>
1180
+ <div class="current-url">${this.currentUrl}</div>
1181
+ </div>
1182
+ <div class="info-card">
1183
+ <div class="info-card-title">User Agent</div>
1184
+ <div class="user-agent">${navigator.userAgent}</div>
1185
+ </div>
1186
+ <div class="info-card">
1187
+ <div class="info-card-title"><pre class="m-0">turbo-cache-control:</pre> <span>${v("turbo-cache-control") || "-"}</span></div>
1188
+ <div class="info-card-hint"><strong>no-cache:</strong> always fetched from the network, even on restore</div>
1189
+ <div class="info-card-hint"><strong>no-preview:</strong> skipped in preview, used only on restore</div>
1190
+ <div class="info-card-hint"><strong>unset:</strong> shows cached preview if the cache is valid</div>
1191
+ </div>
1192
+ <div class="info-card">
1193
+ <div class="info-card-title"><pre class="m-0">turbo-refresh-method:</pre> <span>${v("turbo-refresh-method") || "-"}</span></div>
1194
+ <div class="info-card-hint"><strong>replace (default):</strong> replaces the entire &lt;body&gt; on revisit</div>
1195
+ <div class="info-card-hint"><strong>morph:</strong> updates only changed DOM elements, preserving state</div>
1196
+ </div>
1197
+ <div class="info-card">
1198
+ <div class="info-card-title"><pre class="m-0">turbo-visit-control:</pre> <span>${v("turbo-visit-control") || "-"}</span></div>
1199
+ <div class="info-card-hint"><strong>reload:</strong> forces a full page reload</div>
1200
+ <div class="info-card-hint"><strong>unset:</strong> allows Turbo to handle the visit normally</div>
1201
+ </div>
1202
+ </div>
1203
+ `;
1204
+ this.bottomSheet.querySelector("#single-tab-info").innerHTML = t;
1205
+ }
1206
+ renderPathConfigurationCheck = g((t) => {
1207
+ const e = L ? t : `${window.location.origin}${t}`;
1200
1208
  this.devTools.nativeBridge.send("propertiesForUrl", { url: e }, (o) => {
1201
1209
  this.bottomSheet.querySelector("#path-configuration-check-properties-output").style.opacity = 1;
1202
1210
  const s = (() => {
1203
1211
  try {
1204
- const c = o.data.properties;
1205
- return JSON.stringify(typeof c == "string" ? JSON.parse(c) : c, null, 2);
1212
+ const r = o.data.properties;
1213
+ return JSON.stringify(typeof r == "string" ? JSON.parse(r) : r, null, 2);
1206
1214
  } catch {
1207
1215
  return o.data.properties;
1208
1216
  }
1209
- })(), n = s ? `<pre class="view-path-configuration">${s}</pre>` : "", r = this.bottomSheet.querySelector("#path-configuration-check-properties-output");
1210
- r.innerHTML = n;
1217
+ })(), n = s ? `<pre class="view-path-configuration">${s}</pre>` : "", a = this.bottomSheet.querySelector("#path-configuration-check-properties-output");
1218
+ a.innerHTML = n;
1211
1219
  });
1212
1220
  }, 500);
1213
1221
  bridgeLogHTML(t, e, o, s, n) {
1214
1222
  return `
1215
1223
  <div class="log-entry d-flex gap-3 pt-2 pb-2">
1216
1224
  <div class="log-entry-icon d-flex justify-content-center align-items-center">
1217
- ${t === "send" ? N : z}
1225
+ ${t === "send" ? P : N}
1218
1226
  </div>
1219
1227
  <div class="w-100 overflow-auto">
1220
1228
  <div class="d-flex justify-content-between">
@@ -1222,9 +1230,9 @@ class Y {
1222
1230
  <small>${n}</small>
1223
1231
  </div>
1224
1232
  <div class="overflow-auto">
1225
- ${Object.entries(s).map(([r, c]) => {
1226
- const g = typeof c == "object" && c !== null ? JSON.stringify(c) : c;
1227
- return `<div class="white-space-collapse">${r}: ${g}</div>`;
1233
+ ${Object.entries(s).map(([a, r]) => {
1234
+ const h = typeof r == "object" && r !== null ? JSON.stringify(r) : r;
1235
+ return `<div class="white-space-collapse">${a}: ${h}</div>`;
1228
1236
  }).join("")}
1229
1237
  </div>
1230
1238
  </div>
@@ -1243,7 +1251,7 @@ class Y {
1243
1251
  ${e}
1244
1252
  </div>
1245
1253
  <div class="dropdown dropdown--right">
1246
- <button class="dropdown-trigger btn-icon">${y}</button>
1254
+ <button class="dropdown-trigger btn-icon">${S}</button>
1247
1255
  <div class="dropdown-content">
1248
1256
  <button class="dropdown-btn-full-width dropdown-content-action console-log-action-hide-console-log">Ignore this log</button>
1249
1257
  <button class="dropdown-btn-full-width dropdown-content-action console-log-action-copy-console-log">Copy log message</button>
@@ -1269,7 +1277,7 @@ class Y {
1269
1277
  `;
1270
1278
  }
1271
1279
  nativeViewStackHTML(t) {
1272
- const e = (d) => d?.replace(/\/+$/, ""), o = ["UINavigationController", "NavigatorHost"].includes(t.type), s = t.type === "UITabBarController", n = ["VisitableViewController", "HotwireWebFragment", "BackStackEntry"].includes(t.type), c = `viewstack-card ${e(t.url) === e(this.currentUrl) ? "current-view" : ""} ${o ? "main-view" : n ? "hotwire-view" : s ? "tab-container" : "non-identified-view"}`, g = "viewstack-" + Math.random().toString(16).slice(2), L = t.url ? `<div class="view-url">
1280
+ const e = (d) => d?.replace(/\/+$/, ""), o = ["UINavigationController", "NavigatorHost"].includes(t.type), s = t.type === "UITabBarController", n = ["VisitableViewController", "HotwireWebFragment", "BackStackEntry"].includes(t.type), r = `viewstack-card ${e(t.url) === e(this.currentUrl) ? "current-view" : ""} ${o ? "main-view" : n ? "hotwire-view" : s ? "tab-container" : "non-identified-view"}`, h = "viewstack-" + Math.random().toString(16).slice(2), x = t.url ? `<div class="view-url">
1273
1281
  ${(() => {
1274
1282
  try {
1275
1283
  return new URL(t.url).pathname;
@@ -1284,24 +1292,24 @@ class Y {
1284
1292
  } catch {
1285
1293
  return t.pathConfigurationProperties;
1286
1294
  }
1287
- })(), x = w ? `<pre class="view-path-configuration">${w}</pre>` : "", C = t.children?.length ? `<div class="child-container">
1295
+ })(), C = w ? `<pre class="view-path-configuration">${w}</pre>` : "", E = t.children?.length ? `<div class="child-container">
1288
1296
  ${t.children.map((d) => this.nativeViewStackHTML(d)).join("")}
1289
1297
  </div>` : "";
1290
1298
  return `
1291
1299
  <div>
1292
- <div class="${c} collapse no-chevron" data-collapse-target="path-configuration-properties-${g}">
1300
+ <div class="${r} collapse no-chevron" data-collapse-target="path-configuration-properties-${h}">
1293
1301
  <div>
1294
1302
  <div class="view-title">
1295
1303
  ${t.title == "null" ? "" : t.title}
1296
1304
  <div class="view-title-details">${t.type}</div>
1297
1305
  </div>
1298
- ${L}
1299
- </div>
1300
- <div id="path-configuration-properties-${g}" class="collapse-target">
1301
1306
  ${x}
1302
1307
  </div>
1308
+ <div id="path-configuration-properties-${h}" class="collapse-target">
1309
+ ${C}
1310
+ </div>
1303
1311
  </div>
1304
- ${C}
1312
+ ${E}
1305
1313
  </div>
1306
1314
  `;
1307
1315
  }
@@ -1361,17 +1369,13 @@ class Y {
1361
1369
  }), this.bottomSheet.querySelectorAll(".btn-switch-to-single-tab-sheet").forEach((t) => {
1362
1370
  t.addEventListener("click", (e) => {
1363
1371
  const o = e.target.closest("[data-tab-id]").dataset.tabId;
1364
- o && (o === "single-tab-path-configuration-check" && this.bottomSheet.querySelector("#path-configuration-check-url").value === "/" && this.renderPathConfigurationCheck("/"), this.switchToSingleTabSheet(o));
1365
- });
1366
- }), this.bottomSheet.querySelectorAll(".btn-close-single-mode").forEach((t) => {
1367
- t.addEventListener("click", () => {
1368
- this.switchToMultiTabSheet();
1372
+ o && (o === "single-tab-path-configuration-check" && this.bottomSheet.querySelector("#path-configuration-check-url").value === "/" && this.renderPathConfigurationCheck("/"), o === "single-tab-info" && this.renderInfos(), this.switchToSingleTabSheet(o));
1369
1373
  });
1370
1374
  }), this.bottomSheet.querySelector(".top-part").addEventListener("touchstart", this.dragStart.bind(this), { passive: !0 }), this.bottomSheet.addEventListener("touchmove", this.dragging.bind(this), { passive: !0 }), this.bottomSheet.addEventListener("touchend", this.dragStop.bind(this), { passive: !0 }), this.bottomSheet.querySelector(".console-filter-levels").addEventListener("click", ({ target: t }) => {
1371
1375
  const e = t.closest("input[type='checkbox']");
1372
1376
  if (!e) return;
1373
1377
  const o = e.dataset.consoleFilter, s = e.checked;
1374
- $(o, s), this.renderConsoleLogs();
1378
+ I(o, s), this.renderConsoleLogs();
1375
1379
  }), this.bottomSheet.querySelector(".btn-search-console").addEventListener("click", () => {
1376
1380
  const t = this.bottomSheet.querySelector(".console-search");
1377
1381
  t.classList.toggle("d-none"), t.querySelector("input").focus();
@@ -1390,17 +1394,17 @@ class Y {
1390
1394
  }), this.bottomSheet.querySelector("#scroll-to-latest-log-setting").addEventListener("change", (t) => {
1391
1395
  l("scrollToLatestLog", t.target.checked);
1392
1396
  }), this.bottomSheet.querySelector(".pin-bottom-sheet").addEventListener("click", () => {
1393
- const t = a("bottomSheetPinned") === !0;
1397
+ const t = c("bottomSheetPinned") === !0;
1394
1398
  l("bottomSheetPinned", !t), this.sheetOverlay.classList.toggle("active"), this.bottomSheet.querySelector(".settings-dropdown").classList.remove("dropdown-open");
1395
1399
  }), this.bottomSheet.querySelector("#path-configuration-check-url").addEventListener("input", (t) => {
1396
1400
  this.bottomSheet.querySelector("#path-configuration-check-properties-output").style.opacity = 0.5, this.renderPathConfigurationCheck(t.target.value);
1397
1401
  }), this.bottomSheet.addEventListener("click", (t) => {
1398
1402
  const e = t.target.closest(".collapse");
1399
1403
  if (e && this.bottomSheet.contains(e)) {
1400
- const n = e.getAttribute("data-collapse-target"), r = this.bottomSheet.querySelector(`#${n}`);
1404
+ const a = e.getAttribute("data-collapse-target"), r = this.bottomSheet.querySelector(`#${a}`);
1401
1405
  if (r) {
1402
- const c = e.classList.toggle("active");
1403
- r.classList.toggle("active", c);
1406
+ const h = e.classList.toggle("active");
1407
+ r.classList.toggle("active", h);
1404
1408
  }
1405
1409
  return;
1406
1410
  }
@@ -1413,6 +1417,10 @@ class Y {
1413
1417
  this.handleDropdownActionClick(t);
1414
1418
  return;
1415
1419
  }
1420
+ if (t.target.closest(".btn-close-single-mode")) {
1421
+ this.switchToMultiTabSheet();
1422
+ return;
1423
+ }
1416
1424
  this.closeAllDropdowns(t);
1417
1425
  }), this.bottomSheet.hasEventListeners = !0);
1418
1426
  }
@@ -1443,19 +1451,19 @@ class Y {
1443
1451
  const e = t.target.closest(".dropdown-content-action");
1444
1452
  if (e)
1445
1453
  if (e.classList.contains("console-log-action-hide-console-log"))
1446
- I(e.closest(".log-entry").querySelector(".log-entry-message").textContent), this.renderConsoleLogs();
1454
+ F(e.closest(".log-entry").querySelector(".log-entry-message").textContent), this.renderConsoleLogs();
1447
1455
  else if (e.classList.contains("console-log-action-copy-console-log")) {
1448
1456
  const s = e.closest(".log-entry").querySelector(".log-entry-message").textContent;
1449
1457
  navigator.clipboard.writeText(s).then(() => {
1450
1458
  this.closeAllDropdowns(t);
1451
1459
  });
1452
- } else e.classList.contains("btn-remove-console-log-blacklist-entry") && (F(e.dataset.entry.trim()), this.renderConsoleLogs());
1460
+ } else e.classList.contains("btn-remove-console-log-blacklist-entry") && (q(e.dataset.entry.trim()), this.renderConsoleLogs());
1453
1461
  };
1454
1462
  updateTabView(t) {
1455
1463
  this.devTools.shadowRoot.querySelectorAll(".tablink, .outer-tab-content").forEach((e) => e.classList.remove("active")), this.devTools.shadowRoot.querySelectorAll(".tab-action-bar").forEach((e) => e.classList.remove("active")), this.devTools.shadowRoot.querySelector(`[data-tab-id="${t}"]`).classList.add("active"), this.devTools.shadowRoot.getElementById(t).classList.add("active"), this.devTools.shadowRoot.querySelector(`.tab-action-bar.${t}`).classList.add("active"), this.state.shouldScrollToLatestLog && (this.scrollToLatestLog(t), this.state.shouldScrollToLatestLog = !1);
1456
1464
  }
1457
1465
  scrollToLatestLog(t) {
1458
- a("scrollToLatestLog") == !0 && requestAnimationFrame(() => {
1466
+ c("scrollToLatestLog") == !0 && requestAnimationFrame(() => {
1459
1467
  this.devTools.shadowRoot.getElementById(t)?.querySelector(".log-entry:last-child")?.scrollIntoView({ behavior: "instant", block: "center" });
1460
1468
  });
1461
1469
  }
@@ -1503,7 +1511,7 @@ class Y {
1503
1511
  return window.location.href;
1504
1512
  }
1505
1513
  }
1506
- class U {
1514
+ class W {
1507
1515
  constructor() {
1508
1516
  this.state = {
1509
1517
  consoleLogs: [],
@@ -1569,10 +1577,10 @@ class U {
1569
1577
  return (/* @__PURE__ */ new Date()).toLocaleTimeString();
1570
1578
  }
1571
1579
  get storedActiveTab() {
1572
- return a("activeTab") || "tab-bridge-components";
1580
+ return c("activeTab") || "tab-bridge-components";
1573
1581
  }
1574
1582
  }
1575
- class W {
1583
+ class X {
1576
1584
  bridgeIsConnected() {
1577
1585
  return !!(window.HotwireNative?.web || window.Strada?.web);
1578
1586
  }
@@ -1603,13 +1611,13 @@ class W {
1603
1611
  return window.HotwireNative?.web || window.Strada?.web;
1604
1612
  }
1605
1613
  }
1606
- class X {
1614
+ class J {
1607
1615
  constructor(t = {}) {
1608
1616
  this.options = {
1609
1617
  enabled: !0,
1610
1618
  reset: !1,
1611
1619
  ...t
1612
- }, this.options.enabled && (this.options.reset && B(), this.state = new U(), this.bubble = new V(this), this.bottomSheet = new Y(this), this.nativeBridge = new W(this), this.diagnosticsChecker = new T(), this.state.subscribe(this.update.bind(this)), this.listenForTurboEvents());
1620
+ }, this.options.enabled && (this.options.reset && $(), this.state = new W(), this.bubble = new Y(this), this.bottomSheet = new U(this), this.nativeBridge = new X(this), this.diagnosticsChecker = new B(), this.state.subscribe(this.update.bind(this)), this.listenForTurboEvents());
1613
1621
  }
1614
1622
  // Setup gets called initially and on every turbo:load event, eg. when navigating to a new page
1615
1623
  setup() {
@@ -1617,7 +1625,7 @@ class X {
1617
1625
  this.nativeBridgeGotConnected();
1618
1626
  }), this.addEventListeners(), this.diagnosticsChecker.checkForWarnings(), this.bubble.onClick(() => {
1619
1627
  this.bottomSheet.showBottomSheet(), this.nativeBridge.send("vibrate");
1620
- }), a("autoOpen") === !0 && this.bottomSheet.showBottomSheet());
1628
+ }), c("autoOpen") === !0 && this.bottomSheet.showBottomSheet());
1621
1629
  }
1622
1630
  nativeBridgeGotConnected() {
1623
1631
  this.originalBridge || (this.originalBridge = window.HotwireNative?.web || window.Strada?.web, this.addBridgeProxy(), this.state.setBridgeIsConnected(!0), this.callNativeBridgeComponent(), this.updateSupportedBridgeComponents(), this.startBridgeComponentObserver());
@@ -1627,7 +1635,7 @@ class X {
1627
1635
  this.fetchNativeStack();
1628
1636
  });
1629
1637
  }
1630
- update = h((t) => {
1638
+ update = g((t) => {
1631
1639
  this.bottomSheet.update(t);
1632
1640
  }, 200);
1633
1641
  setupShadowRoot() {
@@ -1635,13 +1643,13 @@ class X {
1635
1643
  this.shadowRoot = this.shadowContainer.shadowRoot, this.injectCSSToShadowRoot();
1636
1644
  return;
1637
1645
  }
1638
- this.shadowRoot = this.shadowContainer.attachShadow({ mode: "open" }), this.setCSSProperty("--font-size", `${a("fontSize") || 16}px`), this.injectCSSToShadowRoot();
1646
+ this.shadowRoot = this.shadowContainer.attachShadow({ mode: "open" }), this.setCSSProperty("--font-size", `${c("fontSize") || 16}px`), this.injectCSSToShadowRoot();
1639
1647
  }
1640
1648
  addBridgeProxy() {
1641
1649
  const t = () => ({
1642
1650
  get: (e, o, s) => {
1643
1651
  const n = Reflect.get(e, o, s);
1644
- return typeof n == "function" && (o === "send" || o === "receive") ? (...r) => (this.interceptedBridgeMessage(o, r), n.apply(e, r)) : typeof n == "function" ? (...r) => n.apply(e, r) : n;
1652
+ return typeof n == "function" && (o === "send" || o === "receive") ? (...a) => (this.interceptedBridgeMessage(o, a), n.apply(e, a)) : typeof n == "function" ? (...a) => n.apply(e, a) : n;
1645
1653
  }
1646
1654
  });
1647
1655
  window.Strada && (window.Strada.web = new Proxy(this.originalBridge, t())), window.HotwireNative && (window.HotwireNative.web = new Proxy(this.originalBridge, t()));
@@ -1656,21 +1664,29 @@ class X {
1656
1664
  }
1657
1665
  interceptedBridgeMessage(t, e) {
1658
1666
  e.forEach((o) => {
1659
- const s = o.component, n = o.event, { metadata: r, ...c } = o.data;
1660
- s !== "dev-tools" && this.state.addBridgeLog(t, s, n, c);
1667
+ const s = o.component, n = o.event, { metadata: a, ...r } = o.data;
1668
+ s !== "dev-tools" && this.state.addBridgeLog(t, s, n, r);
1661
1669
  });
1662
1670
  }
1663
1671
  interceptedConsoleMessage(t, e) {
1664
1672
  const o = e.map((s) => {
1665
- if (s instanceof Element) {
1666
- const r = Array.from(s.attributes).map((c) => `${c.name}="${c.value}"`).join(" ");
1667
- return `&lt;${s.tagName.toLowerCase()}${r ? " " + r : ""}&gt;&lt;/${s.tagName.toLowerCase()}&gt;`;
1673
+ if (s instanceof Element)
1674
+ return y(s);
1675
+ if (s instanceof Error) {
1676
+ let a = `${s.name}: ${s.message}
1677
+ `;
1678
+ return s.stack && (a += `
1679
+ ${s.stack}`), `<pre>${a}</pre>`;
1668
1680
  }
1669
- if (typeof s == "object")
1681
+ if (typeof s == "object" && s !== null)
1670
1682
  try {
1671
- return `<pre>${JSON.stringify(s, null, 2)}</pre>`;
1683
+ return `<pre>${JSON.stringify(
1684
+ s,
1685
+ (a, r) => r === window ? "[Window Object]" : r instanceof HTMLElement ? y(r) : r,
1686
+ 2
1687
+ )}</pre>`;
1672
1688
  } catch {
1673
- return `<pre>${s}</pre>`;
1689
+ return `<pre>${s.toString()}</pre>`;
1674
1690
  }
1675
1691
  return s.toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
1676
1692
  }).join(" ");
@@ -1680,7 +1696,7 @@ class X {
1680
1696
  // The debounce on this function is intentionally high,
1681
1697
  // to ensure the native side has enough time to set the ViewController / Fragment titles.
1682
1698
  // With a lower debounce, the view controller / fragment title would often be empty.
1683
- fetchNativeStack = h(() => {
1699
+ fetchNativeStack = g(() => {
1684
1700
  this.nativeBridge.send("currentStackInfo", {}, (t) => {
1685
1701
  this.state.setSupportsNativeStack(!0), this.state.setNativeStack(t.data.stack);
1686
1702
  });
@@ -1693,12 +1709,12 @@ class X {
1693
1709
  injectCSSToShadowRoot = async () => {
1694
1710
  if (this.shadowRoot.querySelector("style")) return;
1695
1711
  const t = document.createElement("style");
1696
- t.textContent = E(), this.shadowRoot.appendChild(t);
1712
+ t.textContent = T(), this.shadowRoot.appendChild(t);
1697
1713
  };
1698
1714
  addEventListeners() {
1699
1715
  this.hasEventListeners || (window.addEventListener("error", (t) => {
1700
- const { message: e, filename: o, lineno: s, colno: n } = t, r = `${e} at ${o}:${s}:${n}`;
1701
- this.interceptedConsoleMessage("error", [r]);
1716
+ const { message: e, filename: o, lineno: s, colno: n } = t, a = `${e} at ${o}:${s}:${n}`;
1717
+ this.interceptedConsoleMessage("error", [a]);
1702
1718
  }), window.addEventListener("unhandledrejection", (t) => {
1703
1719
  this.interceptedConsoleMessage("error", [t.reason?.message]);
1704
1720
  }), window.addEventListener(
@@ -1775,8 +1791,8 @@ class X {
1775
1791
  return (/* @__PURE__ */ new Date()).toLocaleTimeString();
1776
1792
  }
1777
1793
  }
1778
- const J = (i = {}) => {
1779
- const t = new X(i);
1794
+ const G = (i = {}) => {
1795
+ const t = new J(i);
1780
1796
  t.options.enabled && (t.setup(), document.addEventListener(
1781
1797
  "turbo:load",
1782
1798
  () => {
@@ -1786,6 +1802,6 @@ const J = (i = {}) => {
1786
1802
  ));
1787
1803
  };
1788
1804
  export {
1789
- J as setupDevTools
1805
+ G as setupDevTools
1790
1806
  };
1791
1807
  //# sourceMappingURL=hotwire-native-dev-tools.es.js.map