@ohhwells/bridge 0.1.126-next.347 → 0.1.127

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1709,22 +1709,6 @@ function pricingCardEmphasis(featured, ctx, hasBg) {
1709
1709
  function textAttrs(ctx, path) {
1710
1710
  return ctx.keyFor ? { "data-ohw-key": ctx.keyFor(path), "data-ohw-editable": "text" } : {};
1711
1711
  }
1712
- var AI_RESPONSIVE_CSS = [
1713
- "@media (max-width: 960px) {",
1714
- " [data-ai-responsive] [data-ai-grid] { grid-template-columns: repeat(2, 1fr) !important; }",
1715
- ' [data-ai-responsive] [data-ai-grid="1"] { grid-template-columns: 1fr !important; }',
1716
- "}",
1717
- "@media (max-width: 640px) {",
1718
- " [data-ai-responsive] [data-ai-grid] { grid-template-columns: 1fr !important; }",
1719
- " [data-ai-responsive] [data-ai-columns] > * { grid-column: 1 / -1 !important; }",
1720
- // Group containers flatten to a column on phones; span placements come along for free.
1721
- " [data-ai-responsive] [data-ai-group] { display: flex !important; flex-direction: column !important; }",
1722
- " [data-ai-responsive] [data-ai-group] > * { grid-column: auto !important; }",
1723
- " [data-ai-responsive] [data-ai-section-inner] { padding-left: 20px !important; padding-right: 20px !important; }",
1724
- " [data-ai-responsive] { overflow-x: hidden; }",
1725
- " [data-ai-responsive] img { max-width: 100%; }",
1726
- "}"
1727
- ].join("\n");
1728
1712
  var TRANSPARENT_PX = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
1729
1713
  function MediaBox({
1730
1714
  refValue,
@@ -1742,9 +1726,9 @@ function MediaBox({
1742
1726
  const url = refValue ? ctx.resolveMedia(refValue) : null;
1743
1727
  const isIcon = /^(lucide|simple):/.test(refValue);
1744
1728
  const aspectRatio = aspect && /^\d+:\d+$/.test(aspect) ? aspect.replace(":", " / ") : void 0;
1745
- const editAttrs = ctx.keyFor && editPath ? {
1729
+ const editAttrs = ctx.keyFor && editPath && !isIcon ? {
1746
1730
  "data-ohw-key": ctx.keyFor(editPath),
1747
- ...isIcon ? { "data-ohw-editable": "icon" } : genericImageEdit ? { "data-ohw-editable": "image" } : {}
1731
+ ...genericImageEdit ? { "data-ohw-editable": "image" } : {}
1748
1732
  } : {};
1749
1733
  if (isIcon) {
1750
1734
  const Icon = refValue.startsWith("lucide:") ? lucideByName(refValue.slice(7)) : null;
@@ -1752,7 +1736,6 @@ function MediaBox({
1752
1736
  "span",
1753
1737
  {
1754
1738
  "data-ai-icon": refValue,
1755
- ...editAttrs,
1756
1739
  style: {
1757
1740
  display: "inline-flex",
1758
1741
  width: 48,
@@ -2922,7 +2905,7 @@ function CollectionBlock({ node, ctx, path }) {
2922
2905
  return /* @__PURE__ */ jsx(
2923
2906
  "div",
2924
2907
  {
2925
- "data-ai-grid": String(itemsPerRow),
2908
+ "data-ai-grid": "",
2926
2909
  "data-ohw-pricing-collection": isPricing ? "" : void 0,
2927
2910
  style: {
2928
2911
  display: "grid",
@@ -3283,7 +3266,6 @@ function AiTreeRenderer({
3283
3266
  {
3284
3267
  "data-ai-section": tree.tag ?? "",
3285
3268
  ...bgAttrs,
3286
- "data-ai-responsive": "",
3287
3269
  style: {
3288
3270
  position: "relative",
3289
3271
  padding: `${pad}px 0`,
@@ -3294,13 +3276,12 @@ function AiTreeRenderer({
3294
3276
  color: settings.sectionBackground === "accent" ? blockBrand.palette.dark : void 0
3295
3277
  },
3296
3278
  children: [
3297
- /* @__PURE__ */ jsx("style", { children: AI_RESPONSIVE_CSS }),
3298
- /* @__PURE__ */ jsx("style", { children: AI_MOBILE_CSS }),
3299
3279
  isOverlay && backgroundUrl && /* @__PURE__ */ jsx("div", { style: { position: "absolute", inset: 0, background: `rgba(255,255,255,${overlayAlpha})` } }),
3280
+ /* @__PURE__ */ jsx("style", { children: AI_MOBILE_CSS }),
3300
3281
  /* @__PURE__ */ jsx(
3301
3282
  "div",
3302
3283
  {
3303
- "data-ai-section-inner": "",
3284
+ "data-ai-container": "",
3304
3285
  style: {
3305
3286
  position: "relative",
3306
3287
  maxWidth: AI_TREE_TOKENS.sectionMaxWidth,
@@ -3311,7 +3292,7 @@ function AiTreeRenderer({
3311
3292
  children: tree.rows.map((row, r2) => /* @__PURE__ */ jsx(
3312
3293
  "div",
3313
3294
  {
3314
- "data-ai-columns": "",
3295
+ "data-ai-row": "",
3315
3296
  style: {
3316
3297
  display: "grid",
3317
3298
  gridTemplateColumns: "repeat(12, 1fr)",
@@ -3715,10 +3696,9 @@ function applyAiSectionsToDom(state, options) {
3715
3696
  if (existing && existing.serialized === serialized && existing.container.isConnected) {
3716
3697
  continue;
3717
3698
  }
3699
+ const isNewMount = !existing || !existing.container.isConnected;
3718
3700
  let container = existing?.container;
3719
- let isNewMount = false;
3720
3701
  if (!container || !container.isConnected) {
3721
- isNewMount = true;
3722
3702
  existing?.root.unmount();
3723
3703
  container?.remove();
3724
3704
  container = document.createElement("div");
@@ -9613,7 +9593,6 @@ function MediaOverlay({
9613
9593
  (prev) => prev && prev.fullWidth === width && prev.height === height ? prev : { fullWidth: width, height }
9614
9594
  );
9615
9595
  }, [isVideo]);
9616
- const replaceLabel = isVideo ? "Replace video" : hover.elementType === "bg-image" ? "Replace background" : "Replace image";
9617
9596
  const replaceMode = buttonSize ? replaceButtonMode({ width: rect.width, height: rect.height }, buttonSize) : "none";
9618
9597
  const box = {
9619
9598
  position: "fixed",
@@ -9712,10 +9691,11 @@ function MediaOverlay({
9712
9691
  className: "flex items-center justify-center cursor-pointer",
9713
9692
  style: {
9714
9693
  ...box,
9715
- // Visual only. `pointer-events: auto` on this full-bleed rect covered the navbar
9716
- // (hero bg includes the absolute TopNav) and swallowed CTA press-drag. Text overlay
9717
- // and cueOnly also need clicks to fall through — Replace / video controls opt back in.
9718
- pointerEvents: "none",
9694
+ // When text overlays this media, let clicks fall THROUGH to the text underneath. In the
9695
+ // parent this needed a whole `ow:click-at` round-trip to re-hit-test inside the iframe;
9696
+ // in-document, pointer-events does it natively. The button below opts back in, so
9697
+ // Replace still works.
9698
+ pointerEvents: hover.hasTextOverlap || cueOnly ? "none" : "auto",
9719
9699
  // Selected: a firm component ring with no wash, so the image reads as chosen rather
9720
9700
  // than hovered. Hover keeps the existing tinted preview.
9721
9701
  boxShadow: selected ? "inset 0 0 0 2px var(--color-bridge-primary)" : "inset 0 0 0 1.5px var(--color-bridge-primary)",
@@ -9742,17 +9722,17 @@ function MediaOverlay({
9742
9722
  },
9743
9723
  children: [
9744
9724
  isVideo ? /* @__PURE__ */ jsx15(Film, { size: 14 }) : /* @__PURE__ */ jsx15(ImageIcon, { size: 14 }),
9745
- replaceLabel
9725
+ isVideo ? "Replace video" : "Replace image"
9746
9726
  ]
9747
9727
  }
9748
9728
  ),
9749
- showChrome && replaceMode !== "none" && /* @__PURE__ */ jsxs7(
9729
+ replaceMode === "none" || cueOnly ? null : /* @__PURE__ */ jsxs7(
9750
9730
  Button,
9751
9731
  {
9752
9732
  "data-ohw-media-overlay": "",
9753
9733
  variant: "outline",
9754
9734
  size: "sm",
9755
- "aria-label": replaceLabel,
9735
+ "aria-label": isVideo ? "Replace video" : "Replace image",
9756
9736
  className: "gap-1.5 cursor-pointer hover:bg-background",
9757
9737
  style: {
9758
9738
  ...OVERLAY_BUTTON_STYLE,
@@ -9775,7 +9755,7 @@ function MediaOverlay({
9775
9755
  },
9776
9756
  children: [
9777
9757
  isVideo ? /* @__PURE__ */ jsx15(Film, { size: 14 }) : /* @__PURE__ */ jsx15(ImageIcon, { size: 14 }),
9778
- replaceMode === "full" ? replaceLabel : null
9758
+ replaceMode === "full" ? isVideo ? "Replace video" : hover.elementType === "bg-image" ? "Replace background" : "Replace image" : null
9779
9759
  ]
9780
9760
  }
9781
9761
  )
@@ -16589,7 +16569,6 @@ function readLogoSizeState(content, placement) {
16589
16569
  function getLogoElement(el) {
16590
16570
  const marked = el.closest('[data-ohw-role="logo"], [data-ohw-logo]');
16591
16571
  if (marked) return marked;
16592
- if (el.closest('[data-ohw-editable="icon"]')) return null;
16593
16572
  const root = el.closest("nav, [data-ohw-nav-root], footer");
16594
16573
  if (!root) return null;
16595
16574
  const anchor = el.closest("a");
@@ -20789,7 +20768,7 @@ function getNavigationSelectionParent(el) {
20789
20768
  if (!isFooterLinksContainer(el) && (el.hasAttribute("data-ohw-footer-col") || el.hasAttribute("data-ohw-footer-column") || isInferredFooterGroup2(el))) {
20790
20769
  return getFooterLinksContainer();
20791
20770
  }
20792
- if (el.hasAttribute("data-ohw-nav-container") || el.hasAttribute("data-ohw-nav-drawer") || el.hasAttribute("data-ohw-footer-col") || el.hasAttribute("data-ohw-footer-column") || isFooterLinksContainer(el) || isInferredFooterGroup2(el)) {
20771
+ if (el.hasAttribute("data-ohw-nav-container") || el.hasAttribute("data-ohw-nav-drawer") || isFooterLinksContainer(el)) {
20793
20772
  return getNavigationRoot(el);
20794
20773
  }
20795
20774
  return null;
@@ -21011,6 +20990,7 @@ var ICONS = {
21011
20990
  insertUnorderedList: '<line x1="8" y1="6" x2="21" y2="6"/><line x1="8" y1="12" x2="21" y2="12"/><line x1="8" y1="18" x2="21" y2="18"/><line x1="3" y1="6" x2="3.01" y2="6"/><line x1="3" y1="12" x2="3.01" y2="12"/><line x1="3" y1="18" x2="3.01" y2="18"/>',
21012
20991
  insertOrderedList: '<line x1="10" y1="6" x2="21" y2="6"/><line x1="10" y1="12" x2="21" y2="12"/><line x1="10" y1="18" x2="21" y2="18"/><path d="M4 6h1v4"/><path d="M4 10h2"/><path d="M6 18H4c0-1 2-2 2-3s-1-1.5-2-1"/>'
21013
20992
  };
20993
+ var HEIGHT_SETTLE_DELAYS = [150, 400, 800];
21014
20994
  var SELECTION_CHROME_GAP2 = 4;
21015
20995
  var TOOLBAR_STROKE_GAP2 = 4;
21016
20996
  var TOOLBAR_OFFSET_FROM_ELEMENT = SELECTION_CHROME_GAP2 + TOOLBAR_STROKE_GAP2;
@@ -21989,6 +21969,21 @@ function OhhwellsBridge() {
21989
21969
  const [isItemDragging, setIsItemDragging] = useState17(false);
21990
21970
  const [isFooterFrameSelection, setIsFooterFrameSelection] = useState17(false);
21991
21971
  isFooterFrameSelectionRef.current = isFooterFrameSelection;
21972
+ const [floatingPanel, setFloatingPanel] = useState17(null);
21973
+ const floatingPanelOpenRef = useRef13(false);
21974
+ floatingPanelOpenRef.current = floatingPanel !== null;
21975
+ const floatingPanelRef = useRef13(null);
21976
+ floatingPanelRef.current = floatingPanel;
21977
+ const [floatingPanelPos, setFloatingPanelPos] = useState17(null);
21978
+ const buttonCollectionDragRef = useRef13(null);
21979
+ const buttonDropInsertIndexRef = useRef13(null);
21980
+ const [buttonDropSlots, setButtonDropSlots] = useState17([]);
21981
+ const [activeButtonDropIndex, setActiveButtonDropIndex] = useState17(null);
21982
+ const buttonPointerDragRef = useRef13(null);
21983
+ const [buttonStyleTick, setButtonStyleTick] = useState17(0);
21984
+ const [logoSizeDraft, setLogoSizeDraft] = useState17(null);
21985
+ const [editorViewport, setEditorViewport] = useState17("desktop");
21986
+ const [parentScrollSnap, setParentScrollSnap] = useState17(null);
21992
21987
  const [navDropdownPreviewOpen, setNavDropdownPreviewOpen] = useState17(null);
21993
21988
  const [footerHeadingVisible, setFooterHeadingVisible] = useState17(null);
21994
21989
  const footerDragRef = useRef13(null);
@@ -22012,21 +22007,6 @@ function OhhwellsBridge() {
22012
22007
  const stylesRef = useRef13("");
22013
22008
  const appliedDrawerRef = useRef13(null);
22014
22009
  const pendingDeleteUndoRef = useRef13(null);
22015
- const [floatingPanel, setFloatingPanel] = useState17(null);
22016
- const floatingPanelOpenRef = useRef13(false);
22017
- const floatingPanelRef = useRef13(null);
22018
- floatingPanelRef.current = floatingPanel;
22019
- const setFloatingPanelRef = useRef13(setFloatingPanel);
22020
- const [floatingPanelPos, setFloatingPanelPos] = useState17(null);
22021
- const buttonCollectionDragRef = useRef13(null);
22022
- const buttonDropInsertIndexRef = useRef13(null);
22023
- const [buttonDropSlots, setButtonDropSlots] = useState17([]);
22024
- const [activeButtonDropIndex, setActiveButtonDropIndex] = useState17(null);
22025
- const buttonPointerDragRef = useRef13(null);
22026
- const [buttonStyleTick, setButtonStyleTick] = useState17(0);
22027
- const [logoSizeDraft, setLogoSizeDraft] = useState17(null);
22028
- const [editorViewport, setEditorViewport] = useState17("desktop");
22029
- const [parentScrollSnap, setParentScrollSnap] = useState17(null);
22030
22010
  const [sitePages, setSitePages] = useState17([]);
22031
22011
  const [sectionsByPath, setSectionsByPath] = useState17({});
22032
22012
  const sectionsPrefetchGenRef = useRef13(0);
@@ -22035,18 +22015,7 @@ function OhhwellsBridge() {
22035
22015
  const linkPopoverOpenRef = useRef13(false);
22036
22016
  const linkPopoverGraceUntilRef = useRef13(0);
22037
22017
  setLinkPopoverRef.current = setLinkPopover;
22038
- setFloatingPanelRef.current = setFloatingPanel;
22039
22018
  linkPopoverSessionRef.current = linkPopover;
22040
- floatingPanelOpenRef.current = Boolean(floatingPanel);
22041
- useEffect16(() => {
22042
- const syncViewport = () => {
22043
- const next = window.innerWidth <= 480 ? "mobile" : "desktop";
22044
- setEditorViewport((prev) => prev === next ? prev : next);
22045
- };
22046
- syncViewport();
22047
- window.addEventListener("resize", syncViewport);
22048
- return () => window.removeEventListener("resize", syncViewport);
22049
- }, []);
22050
22019
  useEffect16(() => {
22051
22020
  setSectionOrderPersistHandler((entries) => {
22052
22021
  const currentPath = window.location.pathname;
@@ -23564,7 +23533,6 @@ function OhhwellsBridge() {
23564
23533
  }
23565
23534
  if (typeof content[STYLE_STORE_KEY] === "string") {
23566
23535
  stylesRef.current = content[STYLE_STORE_KEY];
23567
- document.querySelectorAll('[data-ohw-editable="form"]').forEach((f) => markFormFields(f));
23568
23536
  applyStylesToDom(parseStyleStore(content[STYLE_STORE_KEY]));
23569
23537
  }
23570
23538
  applyBrandChrome(content);
@@ -23573,12 +23541,12 @@ function OhhwellsBridge() {
23573
23541
  for (const [key, val] of Object.entries(content)) {
23574
23542
  if (key === "__ohw_sections") continue;
23575
23543
  if (key === AI_SECTIONS_KEY) continue;
23576
- if (key === LOGO_PLACEHOLDER_KEY) continue;
23577
- if (LOGO_IMAGE_KEYS.includes(key)) continue;
23578
23544
  if (key === BRAND_KIT_KEY) continue;
23579
23545
  if (key === STYLE_STORE_KEY) continue;
23580
23546
  if (BRAND_CHROME_KEYS.has(key)) continue;
23547
+ if (key === LOGO_PLACEHOLDER_KEY) continue;
23581
23548
  if (key === CUSTOM_CODE_AFTER_HEAD_KEY || key === CUSTOM_CODE_BEFORE_HEAD_KEY) continue;
23549
+ if (LOGO_IMAGE_KEYS.includes(key)) continue;
23582
23550
  if (applyVideoSettingNode(key, val)) continue;
23583
23551
  if (applyCarouselNode(key, val)) continue;
23584
23552
  document.querySelectorAll(`[data-ohw-key="${key}"]`).forEach((el) => {
@@ -23788,17 +23756,16 @@ function OhhwellsBridge() {
23788
23756
  applyAiSectionsToDom(parseAiSectionsState(content[AI_SECTIONS_KEY]));
23789
23757
  }
23790
23758
  if (typeof content[STYLE_STORE_KEY] === "string") {
23791
- document.querySelectorAll('[data-ohw-editable="form"]').forEach((f) => markFormFields(f));
23792
23759
  applyStylesToDom(parseStyleStore(content[STYLE_STORE_KEY]));
23793
23760
  }
23794
23761
  for (const [key, val] of Object.entries(content)) {
23795
23762
  if (key === "__ohw_sections") continue;
23796
23763
  if (key === AI_SECTIONS_KEY) continue;
23797
- if (key === LOGO_PLACEHOLDER_KEY) continue;
23798
- if (LOGO_IMAGE_KEYS.includes(key)) continue;
23799
23764
  if (key === BRAND_KIT_KEY) continue;
23800
23765
  if (key === STYLE_STORE_KEY) continue;
23801
23766
  if (BRAND_CHROME_KEYS.has(key)) continue;
23767
+ if (key === LOGO_PLACEHOLDER_KEY) continue;
23768
+ if (LOGO_IMAGE_KEYS.includes(key)) continue;
23802
23769
  if (applyVideoSettingNode(key, val)) continue;
23803
23770
  if (applyCarouselNode(key, val)) continue;
23804
23771
  document.querySelectorAll(`[data-ohw-key="${key}"]`).forEach((el) => {
@@ -24049,11 +24016,26 @@ function OhhwellsBridge() {
24049
24016
  const t2 = setTimeout(measure, 500);
24050
24017
  const ro = new ResizeObserver(schedule);
24051
24018
  ro.observe(document.body);
24019
+ let lastWidth = window.innerWidth;
24020
+ let resizeTimers = [];
24021
+ const clearResizeTimers = () => {
24022
+ resizeTimers.forEach(clearTimeout);
24023
+ resizeTimers = [];
24024
+ };
24025
+ const handleResize = () => {
24026
+ if (window.innerWidth === lastWidth) return;
24027
+ lastWidth = window.innerWidth;
24028
+ clearResizeTimers();
24029
+ resizeTimers = HEIGHT_SETTLE_DELAYS.map((delay) => setTimeout(measure, delay));
24030
+ };
24031
+ window.addEventListener("resize", handleResize);
24052
24032
  return () => {
24053
24033
  clearTimeout(t1);
24054
24034
  clearTimeout(t2);
24055
24035
  if (raf != null) cancelAnimationFrame(raf);
24056
24036
  ro.disconnect();
24037
+ clearResizeTimers();
24038
+ window.removeEventListener("resize", handleResize);
24057
24039
  };
24058
24040
  }, [pathname, isEditMode, postToParent2]);
24059
24041
  useEffect16(() => {
@@ -24348,13 +24330,6 @@ function OhhwellsBridge() {
24348
24330
  if (target.closest("[data-ohw-state-toggle]")) return;
24349
24331
  if (target.closest("[data-ohw-max-badge]")) return;
24350
24332
  if (isInsideLinkEditor(target)) return;
24351
- if (isInsideFloatingPanel(target)) return;
24352
- if (target.closest("[data-ohw-form-toolbar]")) return;
24353
- if (target.closest(
24354
- '[data-ohw-field-toolbar], [data-ohw-field-type-picker], [data-radix-popper-content-wrapper], [role="menu"], [data-slot="dropdown-menu-content"]'
24355
- )) {
24356
- return;
24357
- }
24358
24333
  if (selectedMediaElRef.current && !selectedMediaElRef.current.contains(target) && !target.closest("[data-ohw-media-overlay], [data-ohw-edit-chrome], [data-ohw-item-interaction]")) {
24359
24334
  clearMediaSelectionRef.current();
24360
24335
  }
@@ -24375,6 +24350,13 @@ function OhhwellsBridge() {
24375
24350
  return;
24376
24351
  }
24377
24352
  }
24353
+ if (isInsideFloatingPanel(target)) return;
24354
+ if (target.closest("[data-ohw-form-toolbar]")) return;
24355
+ if (target.closest(
24356
+ '[data-ohw-field-toolbar], [data-ohw-field-type-picker], [data-radix-popper-content-wrapper], [role="menu"], [data-slot="dropdown-menu-content"]'
24357
+ )) {
24358
+ return;
24359
+ }
24378
24360
  {
24379
24361
  const formEl = getFormElement(target);
24380
24362
  const onSuccessText = target.closest(`[${SUCCESS_TEXT_ATTR}]`);
@@ -24754,9 +24736,6 @@ function OhhwellsBridge() {
24754
24736
  setHoveredItemRect(null);
24755
24737
  hoveredNavContainerRef.current = null;
24756
24738
  setHoveredNavContainerRect(null);
24757
- siblingHintElRef.current = null;
24758
- setSiblingHintRect(null);
24759
- setSiblingHintRects([]);
24760
24739
  return;
24761
24740
  }
24762
24741
  {
@@ -24877,6 +24856,7 @@ function OhhwellsBridge() {
24877
24856
  hoveredNavContainerRef.current = null;
24878
24857
  setHoveredNavContainerRect(null);
24879
24858
  hoveredItemElRef.current = editable;
24859
+ setHoveredItemRect(isSelectedForHoverRef.current(editable) ? null : editable.getBoundingClientRect());
24880
24860
  }
24881
24861
  }
24882
24862
  }
@@ -25586,11 +25566,7 @@ function OhhwellsBridge() {
25586
25566
  };
25587
25567
  const handleMouseMove = (e) => {
25588
25568
  const { clientX, clientY } = e;
25589
- if (pointOwnedByFloatingPanel(clientX, clientY)) {
25590
- dismissImageHover();
25591
- clearImageHover();
25592
- return;
25593
- }
25569
+ if (pointOwnedByFloatingPanel(clientX, clientY)) return;
25594
25570
  if (isNavDrawerOpen() && isPointOutsideOpenDrawer(clientX, clientY)) {
25595
25571
  document.querySelectorAll("[data-ohw-hovered]").forEach((el) => el.removeAttribute("data-ohw-hovered"));
25596
25572
  formHoverElRef.current = null;
@@ -25619,12 +25595,7 @@ function OhhwellsBridge() {
25619
25595
  setHoveredItemRect(null);
25620
25596
  hoveredNavContainerRef.current = null;
25621
25597
  setHoveredNavContainerRect(null);
25622
- siblingHintElRef.current = null;
25623
- setSiblingHintRect(null);
25624
- setSiblingHintRects([]);
25625
25598
  dismissImageHover();
25626
- clearImageHover();
25627
- setSectionGap(null);
25628
25599
  return;
25629
25600
  }
25630
25601
  if (probeSocialsRowAt(clientX, clientY)) return;
@@ -25636,11 +25607,7 @@ function OhhwellsBridge() {
25636
25607
  if (e.data?.type !== "ow:pointer-sync") return;
25637
25608
  const { clientX, clientY } = e.data;
25638
25609
  if (typeof clientX !== "number" || typeof clientY !== "number") return;
25639
- if (pointOwnedByFloatingPanel(clientX, clientY)) {
25640
- dismissImageHover();
25641
- clearImageHover();
25642
- return;
25643
- }
25610
+ if (pointOwnedByFloatingPanel(clientX, clientY)) return;
25644
25611
  if (isNavDrawerOpen() && isPointOutsideOpenDrawer(clientX, clientY)) return;
25645
25612
  if (probeSocialsRowAt(clientX, clientY)) return;
25646
25613
  probeSectionGapAt(clientX, clientY);
@@ -25986,7 +25953,6 @@ function OhhwellsBridge() {
25986
25953
  }
25987
25954
  if (typeof content[STYLE_STORE_KEY] === "string") {
25988
25955
  stylesRef.current = content[STYLE_STORE_KEY];
25989
- document.querySelectorAll('[data-ohw-editable="form"]').forEach((f) => markFormFields(f));
25990
25956
  applyStylesToDom(parseStyleStore(content[STYLE_STORE_KEY]));
25991
25957
  }
25992
25958
  applyBrandChrome(content);
@@ -25999,12 +25965,12 @@ function OhhwellsBridge() {
25999
25965
  continue;
26000
25966
  }
26001
25967
  if (key === AI_SECTIONS_KEY) continue;
26002
- if (key === LOGO_PLACEHOLDER_KEY) continue;
26003
- if (LOGO_IMAGE_KEYS.includes(key) && !String(val ?? "").trim()) continue;
26004
25968
  if (key === BRAND_KIT_KEY) continue;
26005
25969
  if (key === STYLE_STORE_KEY) continue;
26006
25970
  if (BRAND_CHROME_KEYS.has(key)) continue;
25971
+ if (key === LOGO_PLACEHOLDER_KEY) continue;
26007
25972
  if (key === CUSTOM_CODE_AFTER_HEAD_KEY || key === CUSTOM_CODE_BEFORE_HEAD_KEY) continue;
25973
+ if (LOGO_IMAGE_KEYS.includes(key) && !String(val ?? "").trim()) continue;
26008
25974
  if (applyVideoSettingNode(key, val)) continue;
26009
25975
  if (applyCarouselNode(key, val)) continue;
26010
25976
  document.querySelectorAll(`[data-ohw-key="${key}"]`).forEach((el) => {
@@ -26450,12 +26416,6 @@ function OhhwellsBridge() {
26450
26416
  closeLinkPopoverRef.current();
26451
26417
  return;
26452
26418
  }
26453
- if (floatingPanelOpenRef.current) {
26454
- setFloatingPanelRef.current(null);
26455
- deselectRef.current();
26456
- deactivateRef.current();
26457
- return;
26458
- }
26459
26419
  deselectRef.current();
26460
26420
  deactivateRef.current();
26461
26421
  clearMediaSelectionRef.current();
@@ -27203,10 +27163,10 @@ function OhhwellsBridge() {
27203
27163
  window.removeEventListener("message", handleDeleteSection);
27204
27164
  window.removeEventListener("message", handleDuplicateSection);
27205
27165
  window.removeEventListener("message", handleDeactivate);
27166
+ document.documentElement.removeAttribute("data-ohw-panel-dragging");
27206
27167
  window.removeEventListener("message", handleToastAction);
27207
27168
  window.removeEventListener("message", handleFormCount);
27208
27169
  window.removeEventListener("message", handleUiEscape);
27209
- document.documentElement.removeAttribute("data-ohw-panel-dragging");
27210
27170
  autoSaveTimers.current.forEach(clearTimeout);
27211
27171
  autoSaveTimers.current.clear();
27212
27172
  if (imageUnhoverTimerRef.current) clearTimeout(imageUnhoverTimerRef.current);